generate文

# このページは,学生実験用資料として筑波大学リコンフィギュラブルコンピューティングシステム研究室のwebページで公開されていたものを,許可を得て転載したものです.


generate文を使うと、下位モジュールの生成をパラメタイズすることができます。

 
generate
モジュールの生成式
endgenerate
  

以下に例を示します。

 
parameter WIDTH = 8;

generate
// ビット幅が8ビットの時、8ビット用のモジュールを接続
if(WIDTH == 8)
  Multiplier8 multi(.out(out), .in0(in0), .in1(in1), .reset(reset), .clock(clock));
// ビット幅が8ビットでない時、汎用のモジュールを接続
else
  Multiplier multi(.out(out), .in0(in0), .in1(in1), .reset(reset), .clock(clock));
endgenerate
  

ループ

generate文内でループを使い、複数の同モジュールを接続することができます。ループを使うためには、genvarを用いて変数を宣言する必要があります。


genvar 変数名;

generate
for(条件式) begin: ブロック名
  モジュールの生成式
end
endmodule
  

以下に例を示します。


parameter MODULE_NUMBER = 8;
genvar i;

generate
// MODULE_NUMBERの数だけ、Memoryのインスタンスを生成
for(i = 0; i < MODULE_NUMBER; i = i + 1) begin: GenerateMemory
  Memory memory(.out(out[i]), .in(in[i]), .reset(reset[i]), .clock(clock));
end
endgenerate
  

戻る