ラッチとフリップフロップの違い:動作と使い分けを比較

どちらも1ビットを記憶しますが、動き出すきっかけが違います。ラッチはレベル感応で、イネーブルが有効な間は透明になって入力をそのまま出力へ通し、イネーブルが無効になると、その値を保持します。フリップフロップはエッジトリガで、クロックのエッジの瞬間だけ入力を取り込み、それ以外の変化は無視します。フリップフロップは、逆の位相で動く2つのラッチでできています。

項目ラッチフリップフロップ
トリガーレベル感応。イネーブルが有効な間、動作するエッジトリガ。クロックの立ち上がりまたは立ち下がりの瞬間だけ動作する
出力の動き透明な間は入力に追従し、そのあと保持するクロックのエッジでだけ変わり、それ以外は安定している
構成記憶の段が1つ逆の位相で動く2つのラッチを直列につなぐ(マスタースレーブ)
大きさと消費電力小さく、消費電力も小さい大きい。トランジスタ数はおよそ2倍
タイミング解析複雑。透明な期間をまたぐタイムボローイングがある簡単。クロックのエッジの前後のセットアップ時間とホールド時間
グリッチへの影響透明な間は、グリッチやレースが通り抜けるクロックのエッジの間の入力の変化には影響されない
主な用途タイムボローイングを使う専用の高速設計、クロックゲーティングのセル同期設計のレジスタ、カウンタ、ステートマシン

数値は代表的な目安で、世代や製品によって異なります。

どんなときに使うか

ラッチ
面積、電力、速度の利点が、難しくなるタイミング解析に見合うとき。多くは専用設計や高性能な回路です。
フリップフロップ
同期設計の標準的な部品です。タイミングが簡単で、頑健だからです。
HDLのヒント
VerilogやVHDLでは、組み合わせ回路のifやcaseが不完全だと、意図しないラッチができます。すべての分岐で値を代入すれば避けられます。

よくある質問

ラッチとフリップフロップの違いを一言で言うと?

ラッチはレベル感応で、イネーブルが有効な間は透明です。フリップフロップはエッジトリガで、クロックのエッジでだけ入力を取り込みます。

フリップフロップはラッチでできていますか?

はい。マスタースレーブ方式のフリップフロップは、逆の位相で動く2つのラッチを直列につないだものです。

なぜ設計者はフリップフロップを好むのですか?

タイミング解析が、1つのクロックのエッジの前後のセットアップ時間とホールド時間で済み、エッジの間のグリッチも問題にならないからです。

HDLのコードで意図しないラッチができるのはなぜですか?

組み合わせ回路のalwaysブロックやプロセスで、すべての分岐で出力に代入しないと(ifやcaseが不完全だと)、論理合成が古い値を保持するものとして、ラッチを推論するからです。

理解度チェック

Dラッチの動作の説明として正しいものはどれか。

  1. Aクロックの立ち上がりエッジの瞬間だけ入力を取り込む
  2. B入力を常に反転して出力する
  3. Cイネーブル信号が有効な間は入力がそのまま出力に伝わり、無効になるとその値を保持する
答えと解説を見る

正解:C. イネーブル信号が有効な間は入力がそのまま出力に伝わり、無効になるとその値を保持する

Dラッチはレベルで動作する記憶素子で、イネーブルが有効な間は入力がそのまま出力に現れ(透過)、無効になった瞬間の値を保持します。フリップフロップより素子数が少なく、ラッチを使ったタイミング設計(タイムボロウイング)で高速化に使われることもありますが、透過中に信号が素通りするためタイミング解析が難しくなります。エッジの瞬間だけ取り込むD型フリップフロップは、2つのラッチを逆相でつないで作ります。

D型フリップフロップの動作として正しいものはどれか。

  1. A入力の変化を常にそのまま出力に伝える
  2. B2つの入力の排他的論理和を出力する
  3. CクロックのエッジでD入力の値を取り込み、次のエッジまで保持する
答えと解説を見る

正解:C. クロックのエッジでD入力の値を取り込み、次のエッジまで保持する

D型フリップフロップは、クロックの立ち上がり(または立ち下がり)のエッジでD入力の値を取り込み、次のエッジまで保持します。エッジの瞬間だけを見るため、その間に入力が変化しても出力は変わりません。CPUのレジスタやパイプラインの段の区切り、カウンタなど順序回路の基本で、内部は2つのラッチを主従(マスター・スレーブ)につないだ構造です。正しく取り込むにはセットアップ時間とホールド時間を守る必要があります。

フリップフロップのセットアップ時間の説明として正しいものはどれか。

  1. Aクロックのエッジのあとに、データを保持し続けなければならない最小時間
  2. Bクロックのエッジより前に、データ入力が安定していなければならない最小時間
  3. C電源を入れてから動作するまでの時間
答えと解説を見る

正解:B. クロックのエッジより前に、データ入力が安定していなければならない最小時間

フリップフロップが正しく取り込むには、クロックのエッジより一定時間前からデータが安定している必要があり、これがセットアップ時間です。データ経路の遅延がクロック周期からセットアップ時間を引いた値を超えると違反になり、クロックを遅くすれば解消できます。エッジ後にデータを保持する必要がある時間はホールド時間で、どちらかを満たさないと誤った値の取り込みやメタステーブルの原因になります。

  1. 非同期の信号をフリップフロップで受けたときに、セットアップ時間やホールド時間を満たせず、出力が一時的に0とも1とも定まらなくなる状態を何と呼ぶか。
  2. すべてのフリップフロップが共通のクロックで動作する同期式回路の利点として正しいものはどれか。
  3. 上の記述でラッチができてしまう理由と、対策の組み合わせとして正しいものはどれか。

論理回路の練習問題へ

関連する用語の解説

フリップフロップ
1ビットの情報を保持する順序回路の基本素子。D型はクロックのエッジで入力を取り込む。
意図しないラッチ
組み合わせ回路のつもりの記述で、ある条件のときに出力への代入がないために、値を保つラッチが論理合成で作られてしまうこと。

関連する比較