RSフリップフロップの動作
今まで横目でやり過ごしていたフリップフロップ回路について整理してみた。以下のようなRSフリップフロップを考える。
S |
R |
Ǫ |
Ǭ |
0 |
0 |
保持 |
保持 |
0 |
1 |
0 |
1 |
1 |
0 |
1 |
0 |
1 |
1 |
禁止 |
|
一般には(S, R)の入力が(1, 0)や(0, 1)のように与えられたとき、以下のように説明されているものが多い。
- たとえばS = 1のとき、Ǭ側のNORゲートの出力は0 で確定
- その結果r = 0となり、R = 0の入力と合わせて、Ǫ側のNORゲートの出力は1となる
ただ、以下のような点が気になった。
- そもそも入力が1の方が必ず先に動くのか
- 電源投入時などにǪやǬの値が不定になったときにどうなるのか
何せ素人なので半導体素子の中でどういうタイミングで何が起こっているのかよくわからないが、自分なりに追ってみることにした。
あまりうまくない例
まず、(S, R)が(禁止されている(1, 1)の組み合わせの場合も含めて)与えられたとき、(Ǫ, Ǭ)の値が予めいろいろなパターンをとっていたとして、その後の推移を確かめてみた。
以下の表は、そのような時の状態変化を追ってみたもの。(Ǫ, Ǭ)の出力が確定しているので、与えられた(S, R)との組み合わせで(r, s)にフィードバックされる値が変化していくと考えた。
この表からは、以下の様なことが読み取れる。
- (R, S)が(0, 1)や(1, 0)のときは、2サイクル目以降想定される出力で安定
- (R, S)が(0, 0)のときは
- (Ǫ, Ǭ)が(0, 1)や(1, 0)のときは1サイクル目から元の値が保持される
- (Ǫ, Ǭ)が(0, 0)や(1, 1)のときには振動する
- (R, S)が(1, 1)のときには(Ǫ, Ǭ)が(0, 0)になる
ここでも以下のようなことが気になる。
- (Ǫ, Ǭ)が(0, 1)や(1, 0)のときに(R, S)に同じパターンを入れると、1サイクルだけ(R, S) = (0, 0)の状態になるが、これはナノ秒のレベルで実際に起こることなのか
- (Ǫ, Ǭ)が(0, 0)のときに(S, R)に(0, 0)や(1, 1)を入力すると、その後(Ǫ, Ǭ)がごく短周期で振動するが、実際にそうなのか
そこで、回路のゲート単位で実行順序が変わった場合にどういう結果になるか確認してみた。
回路レベルで追った例
入力と出力が同じパターンの場合
一つ目は、(S, R)に(Ǫ, Ǭ)と同じパターンを入力した場合。以下の例では(Ǫ, Ǭ) = (0, 1)のときに(S, R) = (0, 1)を入力したケース。
まず上の方のゲートが先に動作した場合、以下の様に変化する。
- 入力Rが変化したとき、上のゲートが動作するが下のゲートの入力sへの帰還入力は変化しない
- ここで入力Sが変化していたとして下のゲートが動作しても、出力は変わらない
- 以後、安定状態に達する
また下のゲートが先に動いた場合も同じ流れで、結果は同じになる。
パターンが逆の場合も、回路は対称なので同じ流れになる。
入力と出力のパターンが逆の場合
二つ目は、(S, R)に(Ǫ, Ǭ)と逆のパターンを入力した場合。以下の例では(Ǫ, Ǭ) = (0, 1)のときに(S, R) = (1, 0)を入力したケース。これは少しややこしい、
- 入力Rが変化したとき上のゲートが動作するが、その出力と下のゲートの入力sは変化しない
- 入力Sが変化したとき下のゲートが動作し、その出力と上のゲートへの帰還入力は1→0に変化する
- それにつれて上のゲートが動作し、出力と帰還入力sは1に変化する
- それにつれて下のゲートが動作するが、その出力と上のゲートへの帰還入力0は変化しない
- 以後、安定状態に達する
一方、下のゲートが先に動作した場合は、すぐそのあとに下のゲートが動作して安定する。
出力保持の場合
入力(S, R)が(0, 0)の場合は出力は保持されるが、これを確認する。
以下の例では上のゲート、下のゲートの何れが動作するときも状態は変化せず、出力は変わらずに安定する。出力が逆のパターンでも、対称性から同じように保持される。
禁止状態の場合
最後に、禁止されている(S, R) = (1, 1)を入力した場合を確認する。以下の例では元の出力が(0, 1)の場合を例にしているが、入力の何れも1なので、有限のサイクルで必ず(Ǫ, Ǭ) = (0, 0)となる。
問題はその後に(S, R) = (0, 0)の保持信号を入力したときで、同じ状態から始めても最初に動作するゲートによって結果が異なってしまう。
まず、以下は上のゲートが最初に動作した場合。結果は(Ǫ, Ǭ) = (1, 0)となる。
一方下のゲートが最初に動作した場合は、結果が逆の(Ǫ, Ǭ) = (0, 1)になる。
したがって、(S, R) = (1, 1)が禁止されている背景を整理すると以下の様になる。
- (S, R) = (1, 1)を入力すると、結果は必ず(Ǫ, Ǭ) = (0, 0)になる。
- このパターンは(Ǫ, Ǭ)が符号通りの否定関係にならない
- その後、そのパターンに対して(S, R) = (0, 0)の保護信号を入力した場合、結果が一つに特定できない
以上のことから、ゲートの動作順序レベル(入力信号の到達時刻レベル)の違いに対して、RSフリップフロップの論理値表の意義が一定理解できた。
RSフリップフロップの回路構成
RSフリップフロップは、NORゲートで表現される場合とNANDゲートで表現される場合がある。それらについての覚え書き。
冒頭のNORゲートによるRSフリップフロップ回路は以下の通り。
NORゲートは入力が否定ゲートのANDゲートと等価なので、以下の様になる。
ANDゲートをNANDゲートに変え、出力を変えない様にすると以下の様になる。
最終段のNOTゲートを除き、Ǫと Ǭを反転させて以下を得る。入力と出力の配置がNORゲートと逆になるが、S (Set)とがǬが同じ側に来るので直感的にわかりやすい。
RSフリップフロップは、以下のような記号で表される。