ハードウェア記述言語と検証
上のgenerate文の働きとして正しいものはどれか。
genvar i;
generate
for (i = 0; i < 4; i = i + 1) begin : g
fifo u_fifo (.clk(clk), .din(din[i]), .dout(dout[i]));
end
endgenerate
- A1つのfifoを、4クロックかけて4回使い回す
- Bシミュレーションのときだけfifoを4回表示する
- Cfifoのmoduleを4つ作り、それぞれdinとdoutの違う要素につなぐ
答えと解説を見る
正解:C. fifoのmoduleを4つ作り、それぞれdinとdoutの違う要素につなぐ
generate文の中のforは、genvarの値ごとに中身を展開して、回路の記述を繰り返し作ります。この例では、fifoのインスタンスがg[0].u_fifoからg[3].u_fifoまで4つ作られ、それぞれdin[i]とdout[i]につながります。チャネルの数やビットの数をparameterで変えると、それに合わせて作る数も変えられるので、規則的な構造の回路を短く書けます。
- A. 使い回すのではなく、4つの回路が並びます。
- B. 表示ではなく、回路を作る記述です。
- C. 正しい。合成のときに4つの回路に展開されます。