S-Rフリップフロップ

ほかの技術知識

電子回路入門の1つのヤマ場じゃないかと思うフリップフロップについてメモ。図を自分で用意するのは大変なので『ゼロから学ぶディジタル論理回路』から借りた。

順序回路

現在の入力値だけでなく、過去に入力された値によって出力値を決定する論理回路。 入力値の一時記憶にフリップフロップ回路が使われている。 シフトレジスターやカウンターなどが代表例。

コトバンク

目指すもの:(ON/OFFなどの)状態を変化させることができ、かつ、恣意的に変化を与えない限りは状態が安定する(過去の入力を反映した状態を保つ)論理回路

インバータペア:状態を「記憶」して安定する仕組み

まずはこの基本回路から。

2個のインバータをつないで環にした回路を考える。
この中のaとbに注目すると、ブール変数なので当然「0」か「1」のいずれかになる。 a とbの間にそれぞれインバータがあるから常に a =¬bであり、 a (b)で入力した値は、回路を一周する間に2個のインバータを通過するから、「否定の否定は肯定」より、 a (b)がそのまま出力となって戻ってくる。なお、 a , bの値の組のことを状態(state)という。

つまり、電源を入れるタイミングなど、なんらかのきっかけによって a とbの値の組(状態)が決まると、その状態はずーっと変わらず安定になる。もうちょっと具体的にイメージすると、初めに電源をON(OFF)にしたら、ずーっとON(OFF)で安定する回路である。

ただ、ずーっと値が変わらないのでは使い勝手が悪いので、インバータペアの外部から状態を変える仕組みを考える。

S-Rフリップフロップ

「状態を変化させる」機能をインバータペアに加えたもの。NANDゲートを2つ使う。上図がその図になるが、インバータペアからS-Rフリップフロップまでの道程をもうちょっと詳しく考えてみる。

Step1 NANDゲートの性質を思い出す

NANDゲートの真理値表をよく見ると、 a とbどちらか一方の値を変えることによって、出力xがインバータになるか、出力「1」で一定になるかが定まることがわかる。

a =1:x=¬b、つまりインバータになる
a =0:bに関係なく、x=1で一定になる

この性質を利用して、入力( a ,b)によって、出力(x,y)の値が0と1の間をシーソーのようにflip-flop(ぎっこんばったん)する回路を作る。

Step2 S-Rフリップフロップの形にNANDゲートを並べる

 本記事冒頭のインバータペアの図と見比べると、接続が途中でクロスしているだけで、上下いずれかのNANDゲートをx軸方向に反転させれば、インバータペアのかたちになっていることがわかる。

Step3  動作をシミュレーションしてみる

  1. (a,b)=(1,1)で開始する
    インバータペアとまったく同じ回路になり、出力(x,y)は、(1,0)もしくは(0,1)で安定する。
  2. (a,b)=(0,1)にする
    上側のNANDゲートの出力xは、x=1で確定する。そのx=1が、下のNANDゲートの入力に入るので、下のNANDゲートの入力は(b,x)=(1,1)となり、出力y=0で一定となる。
  3. 元に戻して(a,b)=(1,1)にしてみる
    インバータぺアになって、その状態は2)->3)に移った時点で安定するから、出力(x,y)=(1,0)で安定する。
  4. (a,b) =(1,0)にする
    今度は、下側のNANDゲートの出力yが、y=1で確定する。そのy=1が、上のNANDゲートの入力に入るので、上のNANDゲートの入力は(a,y)=(1,1)となり、出力x=0で一定となる 。
  5. 最後にもう一度(a,b)=(1,1)にしてみる
    インバータぺアになって、その状態は4)->3)に移った時点で安定するから、出力(x,y)=(0,1)で安定する。

Step4  名前を付け替えて完成!

 入力 ( a ,b) の名前を付けなおして、 a を¬S(セットバー),bを¬R(リセットバー)とする。そして、上側のNANDゲートの出力を「1」にすることを「セットする」、下側のNANDゲートの出力を「1」にすることを「リセットする」とよぶ。また、これまで(x,y)としていた出力を、それぞれ(Q,¬Q)と名札を変えておく。上下の出力(x,y)が(1,1)や(0,0)になることはないので、1つの変数の正負で表してよい。なお、¬Sと¬Rについている否定記号の意味は「この入力が「0」のときに意味をなす」という意味である。

考察

タイミングチャートを作ってみる

S-Rフリップフロップのタイミングチャート

真理値表も書いてみる

S-Rフリップフロップとは、いうなればONボタンとOFFボタンが付いた装置のようなものではないだろうか。ただし、押し込んだあと自動的に元の位置に戻らないので、もう一回押してやる必要があるボタンである。動作を考えると、こんな感じ。

  1. ONボタンを1回押し込んでセットする(セット状態)
  2. ONボタンをもう1回押して元の位置に戻す (現状維持)
  3. OFFボタンを1回押してリセットする(リセット状態)
  4. OFFボタンをもう1回押して元の位置に戻す。(現状維持)

機能としては最低限整っているけれど、ONとOFFでボタンが分かれているのが煩わしい。

-> 次回、同期式フリップフロップ回路へ続く!(たぶん)