前回、順序回路である RSフリップフロップが動かせることが分かりました。 曳光弾が通ったので、これで一安心です。 あとはリファクタリングなり最適化なりを、ゆるゆると、好きなだけやっていけばよいでしょう……。
といいつつ、ここまで来たのでもうちょっと先まで進めてみます。
何をするかというと、Dフリップフロップを作ります。 そのために、RSフリップフロップを改良します。
※ ここらへんは主に 相楽製作所さんの解説( 記憶回路(フリップフロップ) | コンピュータの仕組み | 研究開発 | 相楽製作所 ) を参考にしています。 参考というかほとんど受け売りですね。
RSフリップフロップでは入力が両方とも H になる状態は禁止という決まりになっていますが、 前回の素朴な RSフリップフロップではこのルールを強制することができません。
そこで、「両方とも H にならないように気をつける」 ではなく、そもそも禁止された状態にならないような回路にしてしまいましょう、というのが今回の主旨です。
まずは入力の組み合わせが必ず「H/L」または「L/H」のいずれかになるようにする部分。
これは簡単ですね。入力をそのまま出力する経路と、反転して出力する経路を作ればOK。
名前がないと説明しにくいので、以下ではこの部分のことを「切り替え器」と呼ぶことにします。
両方とも H になる状態は切り替え器で防ぐことができますが、 これでは「両方とも L」にはできません。
そこで、強制的に両方とも L にするための門番のようなしくみを追加したい。
その「門番のようなしくみ」をどのように実現するかというと、 AND を使います。
左下のスイッチが ON のときは、さっきの回路(切り替え器だけのもの)と同じ出力になります。
左下のスイッチが OFF のときは、出力が必ず両方とも L になります。 切り替え器部分が切り替わっても、無視されて、あるいは堰き止められて出力側に伝わらないようになっています。
あとはこれを前回作った RSフリップフロップの入力につなげてあげると、 英語版 Wikipedia にある "A gated D latch based on an SR NOR latch" の形になります(ちなみにこの回路図はパブリック・ドメインです)。
File:D-type Transparent Latch (NOR).svg - Wikipedia
動かして観察してみます。
- 左下のスイッチが OFF になっているときは
- 切り替え器で切り替えても右側で保持されている状態は変わらない(門番で堰き止められている)
- 左下のスイッチが ON になっているときは
- 切り替え器に連動して右側の状態が変わる
- 入力がすぐ出力に伝わる
これだけだとあんまりおもしろくないですね。
おもしろいのは左下のスイッチを OFF から ON に切り替えたときです。
入力(切り替え器)の情報が出力側に伝わるタイミングを、門番部分につながっている左下のスイッチで制御できるわけですね。
または、入力を切り替える操作と、切り替えの結果を RSフリップフロップに伝達する操作が分離された形になった、という見方もできそうです。
この後左下のスイッチを OFF に戻すと、また「切り替え器をいじっても右側の出力に伝わらないモード」に戻ります。
ふーむ、なるほどなるほど……と、こんな感じでいじっているとだんだん性質が分かってきます。
以下のリンク先で実際に動かせます。
https://sonota88.github.io/kairo-gokko/pages/32/index.html
※ 音量小さめにしていますが音が出ます。
※ スマホでは全体が表示できないかもしれません。PCブラウザなどで見てください。