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

Verilog Mod-Nカウンタ:パラメータ化モジュールとテストベンチ

Mod-Nカウンタとは

Mod-Nカウンタ(モジュロNカウンタ)は、0からN-1までカウントし、N-1の次に0へ戻るカウンタです。任意のカウント長Nをパラメータで指定できるため、任意の分周比やステートマシンの周期制御に最適です。

設計

2つのパラメータN(カウント最大値+1)とWIDTH(ビット幅)を持ち、out == N-1で次回0にクリアします。

module modN_ctr #(
  parameter N = 10,        // モジュロ値(カウント数)
  parameter WIDTH = 4      // 出力ビット幅(N-1を表現できる最小幅)
)(
  input  clk,
  input  rstn,
  output reg [WIDTH-1:0] out
);
  always @(posedge clk) begin
    if (!rstn)
      out <= 0;
    else begin
      if (out == N-1)
        out <= 0;          // N-1の次は0へロールオーバー
      else
        out <= out + 1;    // インクリメント
    end
  end
endmodule

パラメータ設定の指針

テストベンチ

N=10(0〜9カウント)、WIDTH=4で検証します。

module tb;
  parameter N = 10;
  parameter WIDTH = 4;
  reg clk;
  reg rstn;
  wire [WIDTH-1:0] out;

  modN_ctr u0 (
    .clk(clk),
    .rstn(rstn),
    .out(out)
  );

  always #10 clk = ~clk;  // 20ns周期

  initial begin
    {clk, rstn} <= 0;
    $monitor("T=%0t rstn=%0b out=0x%0h", $time, rstn, out);
    repeat(2) @(posedge clk);
    rstn <= 1;
    repeat(20) @(posedge clk);  // 2周期分観測
    $finish;
  end
endmodule

シミュレーション結果

ncsim> run
T=0   rstn=0 out=0xx
T=10  rstn=0 out=0x0
T=30  rstn=1 out=0x0
T=50  rstn=1 out=0x1
T=70  rstn=1 out=0x2
T=90  rstn=1 out=0x3
T=110 rstn=1 out=0x4
T=130 rstn=1 out=0x5
T=150 rstn=1 out=0x6
T=170 rstn=1 out=0x7
T=190 rstn=1 out=0x8
T=210 rstn=1 out=0x9  // N-1 = 9 に到達
T=230 rstn=1 out=0x0  // 次クロックで0へロールオーバー
T=250 rstn=1 out=0x1  // 2周期目開始
...
Simulation complete via $finish(1) at time 430 NS + 0

波形の見所

拡張アイデア

実用例

クロック分周(例:50MHz → 5MHzならN=10)、ボーレートジェネレータ、PWM周期制御、ステートマシンの周期カウンタ、タイマー割り込み周期設定など、任意周期が必要な場面で広く使われます。

Verilog

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