Verilogにおけるforの用法

verilog_for verilog

Verilogのforの書き方について.

Verilogにおけるforの意味

Verilog内でもforを使用することはできるが,一般的なプログラミングとは意味が異なる.
Verilogではforは同じ論理や回路構造を何個も並べたい場合などに使用される.

ポイント

  • Python,C言語など : 繰り返し操作
  • Verilog : 同じ回路構造の羅列

Verilogにおけるforの用法

Verilogではforはgenerateとセットで用いられる.
下記でいくつか例を挙げる.

例1:同じモジュールを複数個並べる

単純な例としてあるモジュールを複数個並べるコードを示す.
module1は1入力1出力でクロック同期で動作するものとする.
genvarでインクリメントする変数を宣言する

generate
    genvar i;
    for(i=0; i<input_width_p; i=i+1) begin
        module1 U0(.CLK_I(CLK_I), .I_I(I_I[i]), .Z_O(Z_O[i])) 
    end
endgenerate

例2:多ビットのランダムな立ち上がり信号

テストベンチ論理検証時に多ビット入力に異なるタイミングで立ち上がり信号を入れる例.

generate
    genvar i;
    for(i=0; i<input_width_p; i=i+1) begin
        initial begin 
            I_r[i] <= 0;
            #(clk_period_p * $urandom_range(5, 500)) I_r[i] <= 1;
        end
    end
endgenerate

※注意
initial_begin … end ごとgenerate内に入れる.
入れない場合は次のコードと等価になり,I_rが立ち上がってしばらく待ち,次にI_r[1]が立ち上がってしばらく待つ…のような動作になる.

initial begin 
    I_r[0] <= 0;
    #(clk_period_p * $urandom_range(5, 500)) I_r[0] <= 1;
    I_r[1] <= 0;
    #(clk_period_p * $urandom_range(5, 500)) I_r[1] <= 1;
    :
    :
end

コメント

タイトルとURLをコピーしました