前回は、ゲート型 RS フリップフロップを作ってみました。
ゲート型 RS フリップフロップでは、入力ゲートにクロックを入れることで、入力の制御ができました。でも、クロックが “1” の間は、入力が変化すると出力も変化してしまいます。このようなタイプは「バイステーブル・ラッチ」と呼びます。
そこで今回は、クロックの立ち上がりエッジに同期して出力が変化するプライマリ・レプリカ型の RS フリップフロップを作ってみましょう。
プライマリ・レプリカ型 RS フリップフロップ
実験回路図
プライマリ・レプリカ型とは、RS フリップフロップをプライマリとレプリカの 2 段で構成します。
Clock | S | R | Q | Q |
X | X | X | Qn | Qn |
↓ | X | X | Qn | Qn |
↑ | 0 | 0 | Qn | Qn |
↑ | 0 | 1 | 0 | 1 |
↑ | 1 | 0 | 1 | 0 |
X | 1 | 1 | 禁 | 止 |
図 1 の右上部分、ゲート型 RS フリップフロップが 2 つ、連なっています。
1 段目の RS フリップフロップ (IC2) がプライマリ、2 段目 (IC3) がレプリカです。それぞれに入れるクロックは反転していますので、プライマリとレプリカのラッチ動作が時間的にずれることになります。
まず、クロックが “0” のときにプライマリが入力をラッチ。次に、クロックが “1” でレプリカがラッチする。このときにはプライマリの出力は保持され変化しませんから、結果的にクロックの立ち上がりでラッチされることになります。
回路の動作
プライマリの出力をみてみましょう (図 3)。黄色がクロック、青色がプライマリの出力です。
プライマリへのクロックは反転して入力していますので、”0″ のときにゲートが開きます。
出力は、ゲートが開いている “0” のときに変化していますが、”1″ のときには変化しません。
このプライマリの出力が、レプリカの入力となります。
レプリカの出力です (図 4)。
なお、図 3 とは別に記録した波形ですので、プライマリの出力とはサンプリングのタイミングが異なっています。
レプリカは、クロックが “1” のときにゲートが開き、その直前のプライマリ出力が入力されます。プライマリの出力は保持されていますので、”1″ の間に入力が変化することはありません。
クロックが “0” になると、プライマリ出力は変化するかもしれませんが、レプリカの入力は閉じるので、次のクロックまでは影響されません。
結果、クロックの立ち上がりで、出力が変化する、ことになります。
「禁止」なときの動作
この実験回路では、押しボタン SW1 と SW2 とを同時に押すと、出力は不定でした。離したときも、不定です。回路の個性、クロックのタイミング、どっちの押しボタンが先に押されたか、先に離されたか、いろいろに絡み合っている感じです。
クロックが変化するときの過渡的な話
原理的に、レプリカの入力ゲートが開くとき、プライマリの出力が保持されていなければなりません。つまり、プライマリの入力ゲートを閉じてからレプリカの入力ゲートを開く必要がある、ということ。そして、レプリカを閉じてからプライマリを開くこと。
このタイミングが合わずに両方の入力ゲートが開く瞬間があると、動作は狂ってしまいます。
実験した回路では、そのことは考慮されていません。
ボタンをポチポチ押してみている限りでは、誤動作はしていないようです。が、もっともっと速い動作をさせようとすると、誤動作するかもしれません。留意しておきましょう。
ちなみに、対策として、どちらかのクロックをレベルシフトする方法があるようです。今回は試していませんので、説明も省略します。
後記
1 段目が入力を受け取り出力を定め、2 段目は 1 段目の出力にしたがって動くので、1段目が「プライマリ」、2段目が「レプリカ」になるんだそうです。
プライマリ・レプリカ型は、RS フリップフロップだけでなく、D や JK でも同じ構成で利用されます。今回実験した回路は、たぶん、すべての基本になるんじゃないかなぁ、と思ってます。
フリップフロップの IC は、ほとんどはクロックのエッジに同期するようになっています。内部回路は異なるでしょうが、出力の動きは、今回実験したフリップフロップと同じような感じです。
ちなみに、バイステーブル・ラッチの部類に入るフリップフロップは、「ラッチ」と呼ばれているようです。
それから、同期型のフリップフロップで「エッジトリガ」というタイプもあるようです。サンプルとなるような回路はいくつかみましたが、バイステーブル・ラッチだったり、どうもよくわかりません。
プライマリ・レプリカ型は遅れがある、という話もありますが、ポジティブエッジトリガとかなら同じじゃないのん? ポジティブエッジとネガティブエッジの両方に同期するタイプはないの?
なんかね、いろいろやっていると沼落ちしそう (;´Д`) そろそろ、次いきます。