フリップフロップはどのように動くのか

デジタル論理回路を学ぶとき、最初の難関となるのが「フリップフロップ回路」であろうと思う。
デジタル回路の基本素子である AND回路、OR回路、NOT回路 については、さほど難しくは感じないであろう。
ところが、たった2個の NAND回路(NOT+AND回路)を組み合わせた、(SR型)フリップフロップ回路を作ってみると、とたんに頭がこんがらかる難解な回路が出来上がってしまうのだ。

* [Q-pedia | 技術用語事典]
http://itdict.ddo.jp/?%A5%D5%A5%EA%A5%C3%A5%D7%A5%D5%A5%ED%A5%C3%A5%D7

このフリップフロップ回路、それほど構成要素が多いわけでもないのに、実際にどうやって動くのか、なかなか直感的に把握することができない。
私の場合、どうしても動作を理解することができず、回路動作をまねるプログラム(つまりエミュレーター)を書いてみて、何とか動きを覚えたという程度だった。
いったいどういう意図でこんな回路が作られたのか、私にとってはしばし謎であった。
ところが、あるとき雑誌の記事を読んで、この謎がいっぺんに解けた。
残念ながら読んだのがずいぶん昔なので、元の雑誌が何だったのか、正確な出典を忘れてしまった。(たぶんトランジスタ技術か何かだったと思う)
インターネットを検索して、これに類する話が見つからなかったので、ここに書いておくことにする。

フリップフロップ回路の目的は、ずばり「メモリー」である。
電気回路を使って、なんとか「一定の状態を保持することができないか」という意図から、フリップフロップは考え出されたのである。
電気回路によってメモリーを作成せよ、と言われたら、あなたならどんな回路を思い浮かべるだろうか。
もし電線に全く抵抗がなかったなら、最も簡単なメモリーは「円形につないだ電線」であろう。
例えばマイスナー効果を利用して超伝導素子にひとたび電流を流せば、円形電流は半永久的に流れ続けることになる。
円形電流を「流す」、「流さない」という2つの状態は、そのままコンピューターのメモリーとして利用できるだろう。
ただし、円形電流をそのまま利用するには幾つかの問題がある。

1.円形電流をONにすること、すなわち電流をスタートさせることが簡単にできない。
2.円形電流をOFFにすること、すなわち電流をストップさせることが簡単にできない。
3.超伝導にでもしない限り、ずっと電流を流し続けることができない。

1.まず円形電流をスタートさせる方法を考えてみよう。
そのために、円形の電線の中に、1つの OR回路を入れる。
OR回路とは、入力のどちらか片方が"ON"であれば、出力が"ON"となる回路のことであった。
円形の電線に OR回路を入れた状態で、宙ぶらりんになっている OR回路の片方の入力を "ON" にすれば、出力である円形の電線は "ON"になる。
この方法で、円形電流をスタートさせることができるわけだ。

2.しかし、OR回路を1個入れただけだと、今度は"OFF"にすることができない。
何とかして円形電流をストップさせることはできないだろうか。
そこで、今度は円形の電線の中に、1つの AND回路を入れてみる。
AND回路とは、入力のどちらか片方が"OFF"であれば、出力が"OFF"となる回路のことであった。
円形の電線に AND回路を入れた状態で、宙ぶらりんになっている AND回路の片方の入力を "OFF" にすれば、出力である円形の電線は "OFF"になる。

円形につないだ電線に、OR回路と AND回路を同時に入れておけば、OR回路がアクセルの、AND回路がブレーキの役割を果たす。
しかも回路素子が入ったおかげで、超伝導にしなくても電流を流し続けることができる。
かくして、OR回路と AND回路の組み合わせによって、円形の電流を保持するメモリー回路ができあがる。


実は、今考えた「OR+ANDの円形電流」は、フリップフロップと等価な回路なのだ。
ド・モルガンの法則に従って、OR回路を NOT + AND + NOT 回路に置き換える。
そして、NOTの付いている位置を一部 AND回路の方に移せば、SR型フリップフロップ回路のできあがり。


フリップフロップとは、電流によって状態を保持する回路のことだったのだ。
そう思えば、デジタル回路の至るところにフリップフロップが入っている理由がよくわかるだろう。
半導体モリーであるSRAMは、フリップフロップをたくさん並べたものだ。
クロックに合わせて入力状態を保持するラッチ回路も、フリップフロップの応用である。
ひとたび分かってしまうと、デジタル回路とはとことん単純なのだなあと、改めて気付かされる。
そして、この単純さこそがデジタル回路の強みなのだ。