前回は、プライマリ・レプリカ型 RS フリップフロップを作ってみました。
ここまで、RS フリップフロップについておさらいしてきましたが、今回は D フリップフロップについてみていこうと思います。
D フリップフロップ
D フリップフロップとは、入力 D を読み込み、その値を保持する回路です。ん? RS フリップフロップと何が違うん?
RS フリップフロップは、S の押しボタンを押すと Q の LED が点灯し、R を押すと LED が消灯する。つまり、S がオンの押しボタンで、R がオフの押しボタン。
D フリップフロップは、押しボタンを 1 個にして、押しているあいだ LED がオン、離すとオフする回路。それだけじゃ芸がないので、クロックに同期させます。
D フリップフロップの基本回路
中心となるのは、やっぱり RS フリップフロップ。この場合は「RS ラッチ」と呼ぶのがお作法らしいです。
RS ラッチの S と R に、たがいに反転した入力を与えることで D フリップフロップになります (図 1)。
RS ラッチの入力は D=S=R なので、D=0 のとき Q=0、D=1 のとき Q=1 となります。クロックで入力ゲートを制御していますので、クロックが “1” のときに出力が変化するバイステーブル・ラッチです。
ところで、ネットでみかける D フリップフロップは図 2 のような回路です。これは入力 R として、入力ゲート U4 の出力を利用したものです。
ここで、入力を D、クロックを CLK、入力ゲート U4 の出力を Si、U1 の出力を Ri とします。
図 1 の回路では、
同様に図 2 では、
となって、両者は同じであることがわかります。
実験回路図
今回実験してみた D フリップフロップの回路図です (図 3)。
CLK | D | Q | Q |
0 | X | Qn | Qn |
1 | 0 | 0 | 1 |
1 | 1 | 1 | 0 |
入力の押しボタンは 1 個だけになります。出力の LED は、Q と Q の 2 つ、もうひとつの LED はクロックを表示します。いずれも正理論です。
クロックは、インバータを使った矩形波発振回路です。周期 1000ms のクロックを出力します。
この回路は、真理値表に示すように、クロックが “1” のとき、入力 D に応じて出力 Q が変化します。クロックが “0” のときは、D が変化しても、出力は変化しません。
このようなバイステーブル・ラッチは、74HC75 が相当します。また、一般には「D ラッチ」と呼ぶようです。
プライマリ・レプリカ型 D フリップフロップ
クロックのエッジに同期させるために、プライマリ・レプリカ型に構成してみましょう。
CLK | D | Q | Q |
0 | X | Qn | Qn |
1 | X | Qn | Qn |
↓ | X | Qn | Qn |
↑ | 0 | 0 | 1 |
↑ | 1 | 1 | 0 |
前回作ったプライマリ・レプリカ型 RS フリップフロップと同じように、D ラッチをプライマリとレプリカとして連結し、それぞれに反転したクロックを与えます。
クロックが “0” のときにプライマリが入力 D を読み取り、出力を保持。クロックが “1” になると、プライマリの出力をレプリカが読み取り、出力が決まります。
これで、クロックのエッジに同期する D フリップフロップができました。内部のタイプは異なるのですが、74HC シリーズでは 74HC74 が相当します。
エッジトリガ型 D フリップフロップ
D フリップフロップには、「エッジトリガ型」というタイプもあります (図 7)。
NAND ゲート 6 個で構成されているのですが、ゲート G3 は 3 入力なので、G3-a、G3-b、G3-c の3つの2入力NANDゲートを組み合わせています。こういうのは、厳密には、遅延が起きたりするのでやめたほうがいい。でもまぁ、押しボタンをポチポチする実験ですから m(_ _;)m
動作的には、プライマリ・レプリカ型と同じように、クロックのエッジに同期します。真理値表は図 6 と同じです。
エッジトリガ型 D フリップフロップの動作
ちょっと動作が難しい。頭痛くなります。 (;´Д`)
クロック CLK=0 のとき、G2、G3 の出力は 1 です。G2、G3 の出力は後段の RS ラッチの入力ですから、ともに 1 ということは、入力 D がなんであれ、出力は変化しないということ。
D=0 のとき、G4 の出力は 1。このとき CLK=1 になると、G3 出力が 0 になって、Q=0 になる。CLK=0 に戻っても、G2 出力が 1 なので、RS ラッチは保持されている。
D=1 のとき、G4 出力が 0、G1 出力が 1 になる。G1 出力は G2 の入力、ここも 1。このとき CLK=1 になると、G2 出力が 0 になるので、Q=1 になる。CLK=0 に戻っても、G3 出力が 1 なので、RS ラッチは保持される。
CLK=1 のとき、D が変化しても、G4 出力は変化するが、G1、G3 に阻止されて RS ラッチは変化しない。
って感じです。
後記
図 8 は D フリップフロップの回路記号です。上の NAND で作ったような D フリップフロップがブラックボックスになっている。
で、図 8 がなにやってるかというと、出力 Q を、自分自身の入力 D に戻している。D=0 のとき クロックが入ると Q=1 になる。それが D に入力されるので、次のクロックで Q=0 になる。結果、クロックが入るたびに Q はオンオフを繰り返すことになります。
そのときの波形が、図 9 です。黄色がクロック、青色が出力 Q。
クロックの周期が 1 秒なのに対して、Q の周期が 2 秒になってる。つまり、周期が倍になった (周波数が半分になった) ということ。
これを「分周回路」と呼びます。
フリップフロップを使っていろいろな動きをする回路が作れる。こうした回路については、またあらためて試してみたいと思います。
ところで、入力の押しボタンとか、出力の LED とか、クロックの発振回路とかは「デジタル回路」の範疇じゃないんだとか? いろいろな論理回路をみて、どんな動きするのか考えるのは、それはそれで楽しい。だけど、なんの信号入れて、出てきた信号をどこへ持っていくのか、そんなことももっと知りたいですね。