bitGateLab Digital · 学ぶ
日本語
シミュレータを開く

学ぶ › トピック 9

ラッチとフリップフロップ:SR、D、JK、T を順に理解する

読了時間:約 7 分 · bitGateLab チーム

これまでの回路では、出力はそのときの入力だけで決まっていました。数を数えたり、データを保存したり、処理がどの段階まで進んだかを覚えておいたりするには、記憶が必要です。そして最小の記憶セルがラッチです。この記事では、二つのゲートでラッチを作り、それをエッジトリガ型のフリップフロップに発展させ、カウンタやステートマシンの設計に必要になる表の使い方を学びます。

SR ラッチ

二つの NOR ゲートの出力を、互いに相手の入力へ交差させてつなぐと、SR ラッチになります。このフィードバックこそが記憶を生み出します。出力はいったんある値になると、自分自身でその値を保ち続けます。

≥1 ≥1 R S Q Q̄
NOR ゲートによる SR ラッチ:Q = NOR(R, Q)、Q = NOR(S, Q)。点のない交差は接続ではありません。
SR次の Q動作
00Q保持
010リセット
101セット
11—禁止

S = R = 1 のときは両方の NOR が 0 を出力するので、Q と Q は互いに反転した関係ではなくなります。さらに悪いことに、そのあと二つの入力が同時に 0 に下がると、最終的な状態は、どちらのゲートが速いかで決まってしまいます。そのため、この組み合わせは禁止されています。S·R = 0 という条件のもとで成り立つ特性方程式は、Q+ = S + R·Q です。

NAND ゲートを使うと SR ラッチになり、入力は負論理になります。11 で保持、01 で Q = 1、10 で Q = 0 となり、00 が禁止の組み合わせです(両方の出力が 1 になります)。

D ラッチ:イネーブルの間は透過

禁止の組み合わせをなくすために、イネーブル入力 EN を追加し、S = D·EN と R = D·EN を作ります。S と R が同時に 1 になることはないので、問題は解消します。動作は単純です。

この透過性がラッチの弱点です。ラッチの出力を、論理回路を通して自分自身の入力につなぐと、EN = 1 の間に信号が何周もしてしまい、結果は予測できません。同期式の順序回路には、データをある一瞬だけで取り込むものが必要です。

エッジトリガ型フリップフロップ

立ち上がりエッジトリガ型の D フリップフロップは、クロックが 0 から 1 に変わる瞬間にだけ、D を Q に写します。それ以外の時間は D を無視します。これは、イネーブルが互いに逆の二つの D ラッチ(マスタとスレーブ)を縦続接続して作ります。クロックが 0 の間はマスタが D に追従し、スレーブは閉じています。クロックが立ち上がるとマスタが閉じ、スレーブが、取り込まれた値を出力に通します。式は最も単純で、Q+ = D です。

この基本のフリップフロップをもとに、設計でよく使われる二つのタイプが定義されています。

JKQ+動作
00Q保持
010リセット
101セット
11Qトグル

例:JK フリップフロップが Q = 0 から始まり、(J, K) = (1,0)、(0,0)、(1,1)、(0,1)、(1,1) の順に五つのエッジを受け取ります。それぞれに Q+ = J·Q + K·Q を適用します。

  1. (1,0)、Q = 0:1·1 + 1·0 = 1。
  2. (0,0)、Q = 1:0·0 + 1·1 = 1(保持)。
  3. (1,1)、Q = 1:1·0 + 0·1 = 0(トグル)。
  4. (0,1)、Q = 0:0·1 + 0·0 = 0。
  5. (1,1)、Q = 0:1·1 + 0·0 = 1(トグル)。

各エッジの後の Q の並び:1、1、0、0、1。

励起表

特性表は「入力が与えられたとき、Q はどうなるか」に答えます。設計に必要なのは、その逆の問いです。「Q をこの値からこの値に変えたい。どんな入力を与えればよいか」。それに答えるのが励起表で、カウンタやステートマシンを設計するたびに使うことになります。

Q → Q+DTJ KS R
0 → 0000 X0 X
0 → 1111 X1 0
1 → 001X 10 1
1 → 110X 0X 0

JK の欄にある X こそ、このフリップフロップでは式が短くなりやすい理由です。0 から 1 に変えるとき、K は 0(セット)でも 1(トグル)でもかまいません。この自由度をカルノー図で活用するのです。

セットアップ時間、ホールド時間、最高周波数

実際のフリップフロップでは、D がエッジの前に一定時間安定している必要があります。これがセットアップ時間(tsu)です。さらに、エッジの後も一定時間安定していなければなりません。これがホールド時間(th)です。この時間窓の中で D が変化すると、出力はどちらかに落ち着くまで、しばらく中間のレベルにとどまることがあります。これがメタステーブル状態(準安定状態)です。また、出力がエッジの後に変化するまでには、遅延 tCQ がかかります。

同期回路では、信号はあるフリップフロップから出て、組み合わせ回路を通り、次のフリップフロップに届きます。クロックの最小周期は次のとおりです。

Tmin = tCQ + t論理 + tsu

例:tCQ = 15 ns、最も長い組み合わせ回路の経路が 20 ns、tsu = 5 ns とします。

Tmin = 15 + 20 + 5 = 40 ns なので、fmax = 1 / 40 ns = 25 MHz です。

ホールドの確認には最短の経路を使います。tCQ の最小値が 5 ns で、二つのフリップフロップの間に論理回路がなければ、新しいデータはエッジの 5 ns 後に届きます。th = 3 ns なら、5 ns ≥ 3 ns なので条件を満たします。

セットアップは周波数を制限するもので、クロックを遅くすれば解決します。ホールドは周波数に依存しません。満たされていなければ、非常に低い速度でも回路は誤動作します。

よくある間違い

シミュレータで試してみよう

ラッチとフリップフロップの違いは、タイミング図を見ればすぐにわかります。両方を組んで、同じ信号を与えてみましょう。

  1. NOR ゲートを二つ置き、それぞれの出力をもう一方の入力につなぎます。入力 S と R、それに表示用の LED を二つ追加します。
  2. S と R を切り替えて、禁止の行も含めた表の四つの行を確かめ、禁止の行では Q と Q が同時に 0 になることを観察します。
  3. D ラッチと D フリップフロップを置き、両方に同じデータ入力と、同じクロック信号(またはイネーブル信号)をつなぎます。
  4. タイミング図を開き、クロックが 1 の間に D を何度か変えます。ラッチは変化に追従し、フリップフロップは立ち上がりエッジの値だけを取り込みます。
  5. J = K = 1 にした JK フリップフロップでも試し、出力の周波数がクロックの半分になることを観察します。

練習問題

  1. T フリップフロップが Q = 1 から始まり、四つのエッジで T = 1、1、0、1 を受け取ります。Q はどんな値を取りますか。
    解答

    Q+ = T ⊕ Q より、1⊕1 = 0、1⊕0 = 1、0⊕1 = 1、1⊕1 = 0。並びは 0、1、1、0 です。

  2. フリップフロップを Q = 1 から Q = 0 に変えるには、J と K をどんな値にすればよいですか。
    解答

    J = X、K = 1 です。K = 1 かつ J = 0 ならリセット、J = K = 1 ならトグルになります。どちらの場合も Q は 0 になります。

  3. いま tCQ = 12 ns、tsu = 4 ns で、目標の周波数が 40 MHz だとします。フリップフロップ間の論理回路には、最大でどれだけの遅延が許されますか。
    解答

    T = 1 / 40 MHz = 25 ns。t論理 ≤ 25 − 12 − 4 = 9 ns。

  4. D フリップフロップを JK として動作させるための D の式を書いてください。
    解答

    D = J·Q + K·Q です。これは JK の特性方程式そのものです。

これらの部品がそろえば、カウンタとレジスタに進み、そのあとステートマシンに進むことができます。