JKフリップフロップ:設計、実装、テストベンチ完全ガイド
JKフリップフロップの設計
JKフリップフロップは、JとKの2入力を持つ汎用的なフリップフロップです。クロック立ち上がりエッジで動作し、入力組み合わせに応じて保持・クリア・セット・トグルの4動作を行います。
module jk_ff (
input j,
input k,
input clk,
output q
);
reg q;
always @(posedge clk) begin
case ({j, k})
2'b00: q <= q; // 保持
2'b01: q <= 0; // リセット(クリア)
2'b10: q <= 1; // セット
2'b11: q <= ~q; // トグル(反転)
endcase
end
endmodule
ハードウェア回路図
JKフリップフロップの内部構造は、NANDゲートやNORゲートで構成されるラッチベースの回路として実装されます。ここでは論理合成ツールが最適化したゲートレベルネットリストが生成されます。
テストベンチ
全入力組み合わせ(00, 01, 10, 11)を順に与え、出力qの遷移を確認します。
module tb_jk;
reg j;
reg k;
reg clk;
wire q;
// クロック生成:10ns周期(5nsごとに反転)
always #5 clk = ~clk;
// 設計インスタンス化
jk_ff jk0 (
.j(j),
.k(k),
.clk(clk),
.q(q)
);
initial begin
// 初期値設定
j <= 0; k <= 0;
#5 j <= 0; k <= 1; // リセット
#20 j <= 1; k <= 0; // セット
#20 j <= 1; k <= 1; // トグル
#20 $finish;
end
// 値変化を監視表示
initial $monitor("j=%0d k=%0d q=%0d", j, k, q);
endmodule
動作確認のポイント
- J=0, K=0:出力qは前状態を保持
- J=0, K=1:出力qは0になる(リセット)
- J=1, K=0:出力qは1になる(セット)
- J=1, K=1:出力qは反転する(トグル動作)
$monitorを使うことで、信号変化のたびにタイムスタンプ付きで出力されるため、波形ビューアなしでも動作確認が可能です。
Verilog
- 周波数インバータが産業運用のエネルギー効率を高める仕組み
- Verilog基礎:最初のANDゲートを設計する
- Verilogマスター:デジタル回路設計のための完全チュートリアル
- 包括的なASIC設計フロー:要件定義から量産まで
- 設計抽象化レイヤー:チップアーキテクチャを理解するための明確なガイド
- Verilog構文マスター:重要ルールとベストプラクティス
- Verilogデータ型:ビット、ワイヤ、ロジック値を完全理解
- Verilogスカラとベクトル:ビット、レジスタ、ネットタイプの理解
- Verilog Tフリップフロップ:RTL実装とテストベンチ完全解説
- Verilog Mod-Nカウンタ:パラメータ化モジュールとテストベンチ
- Verilogグレイカウンタ:4ビットグレイコード生成モジュール