Verilog非同期リップルカウンタ:設計と実装ガイド
リップルカウンタとは
リップルカウンタ(非同期カウンタ)は、最初のフリップフロップのみが共通クロックで駆動され、それ以降のフリップフロップは前段の出力でクロッキングされる構造です。クロックが段々に伝播(リップル)するためこの名があります。
特徴
- メリット:回路がシンプル、クロック配線が容易、低消費電力
- デメリット:伝播遅延が累積し、高速動作不向き、グリッチ発生しやすい、タイミング解析が複雑
設計
Tフリップフロップ(d = ~q)を4段カスケード接続し、各段のクロックを前段のq出力とします。出力はqn(反転出力)を並べてout = {qn3, qn2, qn1, qn0}とします。
module dff (
input d,
input clk,
input rstn,
output reg q,
output qn
);
always @(posedge clk or negedge rstn)
if (!rstn) q <= 0;
else q <= d;
assign qn = ~q;
endmodule
module ripple (
input clk,
input rstn,
output [3:0] out
);
wire q0, qn0, q1, qn1, q2, qn2, q3, qn3;
dff dff0 (.d(qn0), .clk(clk), .rstn(rstn), .q(q0), .qn(qn0));
dff dff1 (.d(qn1), .clk(q0), .rstn(rstn), .q(q1), .qn(qn1));
dff dff2 (.d(qn2), .clk(q1), .rstn(rstn), .q(q2), .qn(qn2));
dff dff3 (.d(qn3), .clk(q2), .rstn(rstn), .q(q3), .qn(qn3));
assign out = {qn3, qn2, qn1, qn0};
endmodule
ハードウェア回路図
テストベンチ
module tb_ripple;
reg clk;
reg rstn;
wire [3:0] out;
ripple r0 (
.clk(clk),
.rstn(rstn),
.out(out)
);
always #5 clk = ~clk; // 10ns周期
initial begin
rstn <= 0; clk <= 0;
repeat (4) @(posedge clk); // リセット保持
rstn <= 1; // リセット解除
repeat (25) @(posedge clk); // 25サイクル観測
$finish;
end
endmodule
動作原理の詳細
各D-FFのd入力には自分のqn(反転出力)が接続されているため、クロックエッジごとに状態が反転します(T-FF相当)。
- 第0段(dff0):システムクロック
clkで動作 → 最速でトグル - 第1段(dff1):
q0でクロッキング →clkの半分の周波数でトグル - 第2段(dff2):
q1でクロッキング → さらに半分 - 第3段(dff3):
q2でクロッキング → さらに半分
出力out = {qn3, qn2, qn1, qn0}は、実質的に4ビットのバイナリカウント値(反転付き)になります。
同期カウンタとの比較
| 項目 | リップルカウンタ | 同期カウンタ |
|---|---|---|
| クロック配線 | 第1段のみ | 全段に共通 |
| 最大動作周波数 | 低い(遅延累積) | 高い |
| 消費電力 | 低い | 高い |
| グリッチ | 発生しやすい | 発生しにくい |
| 設計複雑度 | 低い | 高い |
用途
低速クロック分周、シンプルなイベントカウント、消費電力重視の用途、クロックドメイン跨ぎの簡易カウンタなどで採用されます。高速・高信頼性が必要な場合は同期カウンタ(always @(posedge clk) out <= out + 1等)を使用してください。
Verilog
- Verilogマスター:デジタル回路設計のための完全チュートリアル
- Verilog連結マスター:実践ガイド
- Verilog代入文の理解:種類、構文、ベストプラクティス
- Verilogブロッキング代入とノンブロッキング代入:違いを徹底解説
- Verilog関数のマスター:効率的なRTL設計のために
- Verilogタスクの理解:関数との違い、構文、使用法
- Verilogクロックジェネレータ:設計と実装ガイド
- Verilog数学関数のマスター:効率的なハードウェア設計のために
- Verilog $timeformatのマスター:精度と表示制御
- Verilog Mod-Nカウンタ:パラメータ化モジュールとテストベンチ
- Verilogグレイカウンタ:4ビットグレイコード生成モジュール