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

上の記述をFPGA向けに論理合成すると、一般にどう扱われるか。

reg [7:0] mem [0:255];
always @(posedge clk) begin
    if (we) mem[addr] <= din;
    dout <= mem[addr];
end
  1. A合成できないので、エラーになる
  2. B256個の独立した加算器になる
  3. C8ビット×256語のメモリとして推論され、FPGAに内蔵のブロックRAMに割り当てられる
答えと解説を見る

正解:C. 8ビット×256語のメモリとして推論され、FPGAに内蔵のブロックRAMに割り当てられる

regの配列を、クロックに同期して書き込み・読み出しする決まった形で書くと、論理合成ツールはこれをメモリだと認識(推論)し、FPGAのブロックRAMやASICのメモリの部品に割り当てます。読み出しまでクロックに同期させるのがブロックRAMに合わせるこつで、非同期に読み出す書き方をすると、多数のフリップフロップや別の種類のメモリで作られることがあります。

  • A. 配列のregは、メモリとして合成できます。
  • B. 足し算はしていません。
  • C. 正しい。決まった形で書くとメモリとして認識されます。
この分野を解く 分野ページへ

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

  1. 組み合わせ回路で、if・else ifを長くつないだ記述と、条件が互いに重ならないcase文の記述を比べたときの説明として正しいものはどれか。
  2. Verilogの等号の演算子「==」と「===」の違いとして正しいものはどれか。
  3. VerilogなどのHDLで書いた記述と、C言語などのソフトウェアのプログラムとの大きな違いとして正しいものはどれか。
  4. Verilogでmoduleを使う目的として正しいものはどれか。
  5. Verilogのwire型とreg型の違いとして正しいものはどれか。