工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Industrial programming >> Verilog

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相当)。

出力out = {qn3, qn2, qn1, qn0}は、実質的に4ビットのバイナリカウント値(反転付き)になります。

同期カウンタとの比較

項目リップルカウンタ同期カウンタ
クロック配線第1段のみ全段に共通
最大動作周波数低い(遅延累積)高い
消費電力低い高い
グリッチ発生しやすい発生しにくい
設計複雑度低い高い

用途

低速クロック分周、シンプルなイベントカウント、消費電力重視の用途、クロックドメイン跨ぎの簡易カウンタなどで採用されます。高速・高信頼性が必要な場合は同期カウンタ(always @(posedge clk) out <= out + 1等)を使用してください。

Verilog

  1. Verilogマスター:デジタル回路設計のための完全チュートリアル
  2. Verilog連結マスター:実践ガイド
  3. Verilog代入文の理解:種類、構文、ベストプラクティス
  4. Verilogブロッキング代入とノンブロッキング代入:違いを徹底解説
  5. Verilog関数のマスター:効率的なRTL設計のために
  6. Verilogタスクの理解:関数との違い、構文、使用法
  7. Verilogクロックジェネレータ:設計と実装ガイド
  8. Verilog数学関数のマスター:効率的なハードウェア設計のために
  9. Verilog $timeformatのマスター:精度と表示制御
  10. Verilog Mod-Nカウンタ:パラメータ化モジュールとテストベンチ
  11. Verilogグレイカウンタ:4ビットグレイコード生成モジュール