JKフリップフロップ

JKフリップフロップのシンボル

JKフリップフロップのシンボル

JKフリップフロップは、入力端子がJとKの2つ、出力端子がQと\( \overline{Q} \)の2つです。\( \overline{Q} \)はQの値を反転したものが出力されます。入力値と出力値の組み合わせは、次の真理値表のとおりです。

真理値表その1
J K Q \( \overline{Q} \)
0 0 \( Qprev \) \( \overline{Q}prev \)
0 1 0 1
1 0 1 0
1 1 \( \overline{Q}prev \) \( Qprev \)

Qprevの値は、JやKが入力される前の状態を表します。動作はRSフリップフロップと似ています。RSフリップフロップではS=1かつR=1の組み合わせは禁止ですが、JKフリップフロップではJ=1かつK=1の組み合わせでQの値が反転します。
これは、「JとKに同じ信号を加えたときにはTフリップフロップと同じ動作をする」ということを意味します。

出力Qと等価な論理式

JKフリップフロップを論理式の形で表します。まず、真理値表の入力をJ,K,Qprevの3変数、出力をQとして書き直します。入力が3変数なので組み合わせは\( 2^3 = 8 \)通りになります。

真理値表その2
J K Qprev Q
0 0 0 0
0 0 1 1
0 1 0 0
0 1 1 0
1 0 0 1
1 0 1 1
1 1 0 1
1 1 1 0

「真理値表その2」からカルノー図を書くと次のようになります。

JK-FF Qのカルノー図

JK-FF Qのカルノー図

カルノー図で論理の簡略化を行います。図から、赤い囲みと青い囲みを簡略化できることがわかります。

赤い囲みの論理式
$$ Qred = JK \overline{Q}prev + J \overline{K} \ \overline{Q}prev = J \overline{Q}prev (K + \overline{K} )  = J \overline{Q}prev $$
青い囲みの論理式
$$ Qblue = J \overline{K} Qprev + \overline{J} \overline{K} Qprev = \overline{K} Qprev(J + \overline{J} ) = \overline{K} Qprev $$
よって
$$ Q = Qred + Qblue = J \overline{Q}prev + \overline{K} Qprev $$

Verilogシミュレーションで動作を確認

論理式を記述したJKフリップフロップのモジュールを作成し、JとKの値を10ナノ秒単位で切り替えてQの値を確認します。シミュレーションではQの初期値を0としています。

結果確認

シミュレーションで出力される波形でJKフリップフロップの信号を確認すると、確かにJ=1かつQ=0でQ=1、J=0かつK=1でQ=0となっていることがわかります。また、J=0かつK=0でQの状態を保持していることがわかります。 さらに、J=1かつK=1とすると、Qの値が反転しています。

JK-FFの波形

JK-FFの波形

シミュレーションで使用したモジュールについて

module jk_ffはシミュレーション用であり、実際の論理設計でこのような記述を行うことはまずありません。例えば、FPGA用に論理合成を目的とした設計を行う場合、このようなJKフリップフロップを記述することは通常ありません。

スポンサーリンク
スポンサーリンク
スポンサーリンク

シェアする

  • このエントリーをはてなブックマークに追加

フォローする

スポンサーリンク
スポンサーリンク