科学・計算関連

Dフリップフロップの真理値表とは?クロック入力と状態遷移の仕組みを解説!(D-FF・Dラッチ)

Dフリップフロップの真理値表
当サイトでは記事内に広告を含みます
技術ブログ特化メルマガはこちら

Dフリップフロップの真理値表とは?クロック入力と状態遷移の仕組みを解説!(D-FF・Dラッチ)

Dフリップフロップは、デジタル回路で1ビットの情報を記憶する代表的な順序回路です。

論理回路を学び始めると、入力値と出力値だけで動作が決まる組み合わせ回路とは異なり、過去の状態を保持する回路として登場します。

真理値表、クロック、立ち上がりエッジ、Q出力、Dラッチなどの用語は一見複雑に見えますが、情報を取り込む瞬間を理解すれば整理しやすくなります。

この記事ではD-FFの基本動作から状態遷移、Dラッチとの違い、回路設計での活用例までを順番に解説します。

Dフリップフロップの真理値表

Dフリップフロップの真理値表

それではまずDフリップフロップの真理値表について解説していきます。

D入力をQ出力へ記憶する基本動作

Dフリップフロップは、D端子に入った論理値をクロックの指定されたタイミングで取り込み、Q端子に保持する回路です。

DはDataの頭文字であり、記憶したいデータそのものを入力する端子を表します。

最も重要な考え方は、クロックの有効エッジが到来した瞬間にDの値がQへ転送されるという点です。

クロックが変化していない期間は、たとえD入力が0から1、または1から0へ変化しても、Q出力は原則として以前の状態を維持します。

この性質によって、Dフリップフロップはデータを一定の時刻にそろえて保存できます。

真理値表では、現在のQをQn、次の状態をQn+1と書くことがあります。

クロックの有効エッジが入力された場合、次状態Qn+1はD入力と同じ値になります。

クロックの状態 D入力 現在のQ 次のQ
有効エッジなし 0 0 0を保持
有効エッジなし 1 0 0を保持
立ち上がりエッジ 0 1 0
立ち上がりエッジ 1 0 1
立ち上がりエッジ 1 1 1

表を見ると、D入力が次のQを一意に決めるため、SRフリップフロップのような禁止状態を意識する必要がありません。

この単純さが、レジスタ、カウンタ、シフトレジスタ、状態機械などに広く採用される理由です。

真理値表における保持状態

真理値表を読む際は、クロックが有効にならない条件での保持状態も確認しましょう。

Dフリップフロップは常に入力へ追従する回路ではなく、クロックエッジを境にして出力を更新する記憶素子です。

たとえばQが1の状態でDを0に変えても、次の有効エッジが来るまではQは1のままです。

これは、CPU内部で演算途中の信号が少しずつ変化していても、決められた時刻だけ結果を取り込めることを意味します。

保持状態を考慮しないと、D入力が変われば即座にQも変化するように見えてしまいます。

その理解はDラッチには近いものの、エッジトリガ型のD-FFとは異なります。

立ち上がりエッジトリガ型D-FFの状態方程式は、Qn+1=Dです。

クロックの有効エッジが発生した時点でDが0なら次状態は0となり、Dが1なら次状態は1になります。

なお、実際のICではQの反転出力としてQバーが用意されている場合があります。

Qが1ならQバーは0、Qが0ならQバーは1となるため、反転信号が必要な回路でインバータを追加せずに利用できるでしょう。

非同期セットとリセットを含む読み方

Dフリップフロップには、通常のD端子とクロック端子に加えて、セット端子やリセット端子が搭載される製品があります。

セットはQを1へ強制し、リセットはQを0へ強制するための制御入力です。

これらが非同期入力である場合、クロックを待たずに出力状態を変更できます。

電源投入直後に回路の初期値をそろえたいときには、非同期リセットが特に役立ちます。

ただし、セットとリセットを同時に有効にする動作はICごとに扱いが異なります。

データシートでアクティブハイかアクティブローか、同時入力時の条件はどうなるかを必ず確認してください。

真理値表では、非同期セットや非同期リセットが有効なら、D入力とクロックよりも優先されるケースが一般的です。

通常動作の表と非同期制御を含む表を分けて読むと、誤配線や誤動作を防ぎやすくなります。

クロック入力とエッジトリガ

続いてはクロック入力とエッジトリガを確認していきます。

立ち上がりエッジと立ち下がりエッジ

クロックとは、0と1を周期的に繰り返す同期用の信号です。

Dフリップフロップはクロックの変化点を検出し、その一瞬だけD入力を読み取ります。

0から1へ変化する瞬間を立ち上がりエッジ、1から0へ変化する瞬間を立ち下がりエッジと呼びます。

回路記号のクロック端子に三角形が描かれていればエッジトリガ型を表し、さらに小さな丸印が付いていれば立ち下がりエッジで動作する仕様です。

丸印がない場合は、一般に立ち上がりエッジトリガと判断できます。

種類 有効になる変化 回路記号の目安 主な用途
立ち上がりエッジトリガ 0から1 三角形のみ 同期回路、レジスタ
立ち下がりエッジトリガ 1から0 三角形と丸印 位相をずらす回路
レベルトリガ 指定レベルの期間 制御端子の表記を確認 Dラッチ

立ち上がりと立ち下がりのどちらを使うかは、周辺回路とのタイミング設計によって決まります。

異なるエッジで動く素子を混在させると、半周期ずれたタイミングでデータを受け渡せる場合もあります。

一方で、設計意図を明確にしなければ解析が難しくなるため、クロック方式は回路図上で統一的に管理することが大切です。

セットアップ時間とホールド時間

D入力は、有効エッジの瞬間だけ正しい値ならよいわけではありません。

エッジの直前から一定時間はDの値を安定させる必要があり、この時間をセットアップ時間と呼びます。

また、エッジ直後も一定時間はDを変化させない必要があり、こちらはホールド時間です。

セットアップ時間とホールド時間を満たさないと、D-FFは期待どおりの値を記憶できない可能性があります。

高速なデジタル回路では、この制約が動作周波数の上限や配線長、部品選定に直接影響します。

セットアップ時間は、クロック有効エッジより前にDを安定させる最低時間です。

ホールド時間は、クロック有効エッジの後にもDを保持する最低時間です。

どちらもナノ秒単位で示されることが多く、使用するICのデータシートで確認します。

信号の到着が遅い場合は、次のクロックまでにデータが間に合わないことがあります。

反対に、信号が早すぎる場合でもホールド違反が起きるため、単純に回路を高速化すれば解決するとは限りません。

タイミング解析では、クロック周期、論理回路の伝搬遅延、配線遅延、D-FF内部の要求時間をまとめて検討します。

メタステーブル状態の理解

セットアップ時間またはホールド時間を破ると、出力が短時間だけ0とも1とも定まらないメタステーブル状態に入ることがあります。

これは内部のトランジスタが安定状態へ落ち着くまでに時間を要する現象です。

最終的には0または1のいずれかになりますが、いつ確定するかを予測しにくいため、後段回路で誤動作を招くおそれがあります。

特に、別のクロック領域から来る非同期信号をそのままD-FFへ入力する場面は注意が必要です。

一般的にはDフリップフロップを2段以上直列に接続する同期化回路を用い、メタステーブル状態が後段へ伝わる確率を下げます。

メタステーブル状態を完全にゼロにすることは難しいものの、同期化回路と適切なタイミング設計によって実用上のリスクを十分小さくできます。

外部スイッチ、センサー出力、異なる周波数の回路からの信号は、非同期入力として扱う意識が重要です。

状態遷移とタイミングチャート

続いては状態遷移とタイミングチャートを確認していきます。

現在状態と次状態の関係

順序回路では、現在の出力状態を現在状態、次のクロック後の出力を次状態と呼びます。

Dフリップフロップでは、次状態は現在のQではなく、クロックエッジ時点のDによって決まります。

そのため、状態遷移表は比較的簡潔に書けます。

Dが0なら現在状態が0でも1でも次状態は0となり、Dが1なら現在状態に関係なく次状態は1です。

これは、D-FFが入力データを1クロック単位で保存する素子であることをよく示しています。

現在状態Qn D入力 次状態Qn+1 状態遷移
0 0 0 0を維持
0 1 1 0から1
1 0 0 1から0
1 1 1 1を維持

カウンタや制御回路では、組み合わせ論理回路で次の状態を計算し、その結果をD入力へ入れます。

次のクロックエッジで計算結果がQへ保存されるため、状態を段階的かつ安定して遷移させられます。

タイミングチャートの読み取り方

タイミングチャートは、クロック、D入力、Q出力などの変化を時間軸に沿って描いた図です。

Dフリップフロップの波形を見るときは、まず有効なクロックエッジの位置を見つけます。

次に、その直前で安定しているDの値を確認し、少し後のQ出力がその値へ変わることを追います。

Qの変化はクロックエッジと完全に同時ではなく、クロックからQへの伝搬遅延の後に現れます。

この遅延はクロックツーQ遅延と呼ばれ、回路の最高動作周波数を検討するうえで欠かせません。

ある立ち上がりエッジの直前にDが1で安定していれば、エッジ後のQは1になります。

次の立ち上がりエッジ直前にDが0へ変わっていれば、その次のQは0です。

クロック周期の途中でDが何度変化しても、有効エッジで採用されなければQには反映されません。

タイミングチャートではDの変化そのものではなく、どのエッジでどの値がサンプリングされたかを見ることが重要です。

この視点を持つと、波形シミュレーションやロジックアナライザの測定結果を読み解きやすくなるでしょう。

状態遷移回路への応用

Dフリップフロップを複数個使うと、複数ビットの状態を記憶できます。

たとえば2個のD-FFなら00、01、10、11の4状態を表現できます。

現在のQ出力と外部入力を組み合わせ論理回路へ渡し、次状態の値を各D端子へ戻せば有限状態機械を構成できます。

信号機の点灯順序、通信プロトコルの制御、家電製品の動作モードなどは、この考え方で設計される代表例です。

状態遷移図では丸で状態を描き、矢印で次に移る条件を表します。

実装時には各状態へ2進数などの符号を割り当て、D入力の論理式へ変換します。

このときD-FFは、次状態論理が計算した値をクロックごとに確定させる役割を担います。

DラッチとDフリップフロップの違い

続いてはDラッチとDフリップフロップの違いを確認していきます。

レベルトリガとエッジトリガ

DラッチとDフリップフロップは、どちらもD入力を記憶する素子ですが、入力を取り込む条件が異なります。

Dラッチはイネーブル信号が有効なレベルにある期間、D入力の変化をQ出力へ反映します。

たとえばイネーブルが1の間にDが変われば、Qも追従して変化します。

一方のDフリップフロップは、クロックの立ち上がりまたは立ち下がりという瞬間だけDを取り込みます。

そのため、Dラッチはレベルトリガ、D-FFはエッジトリガの記憶素子として区別されます。

比較項目 Dラッチ Dフリップフロップ
取り込み条件 イネーブルが有効な期間 クロックの有効エッジ
入力への追従 有効期間中は追従 エッジ時だけ更新
主な利点 構成が比較的単純 同期設計を行いやすい
注意点 透過状態の管理が必要 セットアップ時間とホールド時間

どちらが優れているかではなく、回路全体のタイミング方式に合う素子を選ぶことが重要です。

初心者向けの論理回路では混同されやすいため、イネーブル期間中に追従するか、エッジで固定するかを軸に覚えるとよいでしょう。

透過状態と保持状態

Dラッチでイネーブルが有効な状態は、透過状態と呼ばれます。

この間はDからQへの経路が開いているように動作するため、入力の小さな変化も出力へ伝わります。

イネーブルが無効になると、その時点のQを保持します。

対してDフリップフロップは、通常のクロック周期中にはDからQへ透過しません。

D-FFはタイミングを一点に区切れるため、複数の回路ブロックを同期させる設計に向いています。

複雑な回路でラッチを使うこともありますが、意図しない透過によって信号が同一周期内を通り抜ける問題に注意が必要です。

Dラッチはイネーブルが開いている間に値を通し、Dフリップフロップはクロックエッジで値を取り込みます。

この違いは、回路図を読む場合もHDLで記述する場合も基本となる判断基準です。

マスタースレーブ構成の考え方

古典的なフリップフロップの構成には、2個のラッチを直列に接続したマスタースレーブ方式があります。

一方のラッチが入力を受け取る間、もう一方は出力を保持するように制御し、クロックの位相によって役割を交代します。

これにより、入力が長時間出力へ透過し続けることを避け、エッジトリガに近い動作を実現できます。

現在は専用のD-FFとして集積回路やFPGA内部に実装されていることが多いものの、内部原理を理解する手がかりになります。

ラッチとフリップフロップの関係を知ると、なぜクロック同期回路でD-FFが重視されるのかも見えてきます。

特にHDL記述では、クロックエッジを条件にした記述はフリップフロップ、条件分岐だけで値を保持する記述はラッチとして合成される場合があります。

D-FFを用いたデジタル回路

続いてはD-FFを用いたデジタル回路を確認していきます。

レジスタとデータ保存

複数のDフリップフロップを並列に配置すると、複数ビットのデータを同時に保存するレジスタになります。

8個のD-FFを使えば8ビット、32個なら32ビットの値を1クロックで取り込めます。

各D端子へデータバスを接続し、共通のクロックを与えることで、全ビットを同じタイミングで更新できます。

これがマイクロプロセッサのレジスタ、入出力ポート、パイプラインレジスタの基礎です。

ロードイネーブルを設ける場合は、データを保存するか現在のQを戻して保持するかを、前段のセレクタで選択します。

この構成により、必要なクロックでだけデータを更新できます。

レジスタは複数のD-FFを束ね、同じクロックで多ビット情報を保持する回路と考えると理解しやすいでしょう。

各ビットが独立している一方で、更新時刻がそろう点に大きな価値があります。

シフトレジスタと直列データ

DフリップフロップのQ出力を次段のD入力へ接続すると、クロックごとにデータを移動させるシフトレジスタを構成できます。

4段のD-FFを直列にした場合、先頭へ入力した1ビットはクロックのたびに次段へ移り、4クロック後に最後の段へ到達します。

シリアル通信の送受信、LEDの順次点灯、遅延回路、データ形式の変換などで利用されます。

4段シフトレジスタで入力した値をAとすると、1回目のクロックで第1段へAが保存されます。

2回目ではAが第2段へ移り、新しい入力が第1段へ入ります。

このように、D-FFはデータを時間方向へずらして扱う回路にも応用できます。

並列入力並列出力、直列入力直列出力、直列入力並列出力など、入出力方式には複数の種類があります。

必要なデータ幅と通信方式に応じて選ぶことが設計のポイントです。

周波数分周とエッジ検出

D-FFのD入力へQバーを帰還させると、クロックが入るたびにQが反転する回路を作れます。

この構成ではQ出力の周波数がクロックの半分になるため、2分周回路として使えます。

複数段を組み合わせれば、さらに低い周波数を作ることも可能です。

ただし、各段の伝搬遅延が積み重なる非同期カウンタでは、高速動作時に一時的な不整合が起きる場合があります。

正確な同期動作が求められる用途では、全段へ共通クロックを入力する同期カウンタを検討します。

また、前の状態をD-FFに保存し、現在の入力と比較すれば立ち上がり検出や立ち下がり検出も実現できます。

たとえば現在値が1で、1クロック前の保存値が0なら、その間に立ち上がりがあったと判断できます。

まとめ

Dフリップフロップは、クロックの有効エッジでD入力を取り込み、Q出力として保持する1ビット記憶回路です。

真理値表では、有効エッジ時の次状態QがD入力と等しいことを押さえると、基本動作を理解できます。

クロックがない期間はQを保持するため、デジタル回路はデータを決められた時刻ごとに安全に受け渡せます。

セットアップ時間、ホールド時間、伝搬遅延を考慮することは、実用的な回路設計で欠かせません。

Dラッチは有効レベルの間に入力へ追従するのに対し、D-FFはエッジで取り込む点が大きな違いです。

レジスタ、シフトレジスタ、状態機械、分周回路など、D-FFは多くの順序回路の基本部品として活用されています。

真理値表とタイミングチャートを併せて確認し、どのエッジでどの値が保存されるかを追う習慣を付けると、より複雑なデジタル回路も理解しやすくなるでしょう。