ハードウェア記述言語と検証
上の記述をFPGA向けに論理合成すると、一般にどう扱われるか。
reg [7:0] mem [0:255];
always @(posedge clk) begin
if (we) mem[addr] <= din;
dout <= mem[addr];
end
- A合成できないので、エラーになる
- B256個の独立した加算器になる
- C8ビット×256語のメモリとして推論され、FPGAに内蔵のブロックRAMに割り当てられる
答えと解説を見る
正解:C. 8ビット×256語のメモリとして推論され、FPGAに内蔵のブロックRAMに割り当てられる
regの配列を、クロックに同期して書き込み・読み出しする決まった形で書くと、論理合成ツールはこれをメモリだと認識(推論)し、FPGAのブロックRAMやASICのメモリの部品に割り当てます。読み出しまでクロックに同期させるのがブロックRAMに合わせるこつで、非同期に読み出す書き方をすると、多数のフリップフロップや別の種類のメモリで作られることがあります。
- A. 配列のregは、メモリとして合成できます。
- B. 足し算はしていません。
- C. 正しい。決まった形で書くとメモリとして認識されます。