概要
Dラッチは、入力Gが1になっている間入力D(データ)の値を出力Qに出し続ける。一方入力Gにクロックパルスが与えられる場合、入力データの値をクロックパルスの立ち上がりで一度だけ記憶・出力して、次のクロックの立ち上がりまでその出力を保持したいときには、Dラッチではうまくいかない。
Dフリップフロップはこのような場合に使う。Dフリップフロップ回路は、以下の様にDラッチを2つ連ねた形をしている。
この回路は、CLKの入力が0→1に立ち上がった時のDの値を保持し、次に再びCLKが0→1に立ち上がるまでその値を保持し続ける。
基本的なDフリップフロップは以下のようなシンボルで表される。
仕組み
前段・後段それぞれのラッチのGに与える信号を反転させているのがミソで、以下のような流れになる。
- クロックレベルが0のときは前段のラッチが入力状態、後段のラッチが保持状態となる
- 前段のラッチは入力の値を出力し続ける
- 後段のラッチは前段の値に関わらず保持内容を出力し続ける
- クロックレベルが1になると、前段のラッチが保持状態、後段のラッチが出力状態になる
- 前段のラッチはそれまでの入力内容を保持する
- 後段のラッチは前段の保持内容を出力し始める
- 再びクロックレベルが0になっても、後段のラッチは前のステップで入力された値を保持し続ける
イメージで図にすると以下の様になるだろうか。
回路図での確認
Dフリップフロップの動作を回路図で確認すると以下の流れになる。
初期状態として、すべての端子の信号レベルが0の状態とする。このとき前段のG1への入力のみ反転して1となり、前段のラッチは出力状態、後段のラッチは保持状態となっている。
その状態で入力が1となった場合。前段が出力状態となり1を出力するが、後段は保持状態のため、最後の出力は変化しない。
ここでクロックが1となると、前段が保持状態、後段が出力状態となり、最後の出力が1に変わる。クロックが1の間に入力値が変化しても、立ち上がり時の値が前段で保持されているので、出力は変わらない。
その後クロックが0となると、後段が保持状態となり、最後の出力が維持される。
その後入力信号が0となっても、後段で保持されている値が出力され続ける。
タイミングチャート
Dフリップフロップの動作をタイミングチャートで見てみた。下図の緑/オレンジの色がついている部分が前段/後段がSetの状態、色がついていない部分がそれぞれのHoldの状態。
各ステップでの状態は以下の様に推移する。
Step | CLK | 入力 | 前段の状態 | 前段の出力 | 後段の状態 | 後段の出力 |
a | 0 | 0 | Set | 0 | Hold | 0 |
b | 0 | 1 | Set | 1 | Hold | 0 |
c | 1 | 1 | Hold | 1 | Set | 1 |
d | 0 | 1 | Set | 1 | Hold | 1 |
e | 0 | 0 | Set | 0 | Hold | 1 |
f | 1 | 0 | Hold | 0 | Set | 0 |
g | 1 | 1 | Hold | 0 | Set | 0 |
h | 0 | 1 | Set | 1 | Hold | 0 |