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
|