ハードウェア記述言語と検証

上の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
  1. A1つのfifoを、4クロックかけて4回使い回す
  2. Bシミュレーションのときだけfifoを4回表示する
  3. 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つの回路に展開されます。
この分野を解く 分野ページへ

ハードウェア記述言語と検証のほかの問題

  1. HDLの検証で使われるLintツールの役割として正しいものはどれか。
  2. 論理合成や配置配線の後の回路(ゲートレベルのネットリスト)で、遅延の情報を入れてシミュレーションを行う主な目的はどれか。
  3. 上の記述のように、フリップフロップを通らずに組み合わせ回路の出力が自分の入力に戻ってくる形を何と呼び、なぜ避けるべきか。
  4. 上の記述をFPGA向けに論理合成すると、一般にどう扱われるか。
  5. 組み合わせ回路で、if・else ifを長くつないだ記述と、条件が互いに重ならないcase文の記述を比べたときの説明として正しいものはどれか。