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