BRAMを推論させてみる
Vivado Design Suite ユーザー ガイド( UG901 )のコード例を元に、ブロックRAMが推論されるようなRAMモジュールを作成できるか実験。以下のコードでBRAMを推論することができた。
ユーザーガイドのコードはSystemVerilogじゃなかったのでSystemVerilogで推論してくれるか不安だったんだけど、ちゃんと推論してくれて良かった。
BRAMとして認識されたRAMのコード
シングルポートRAM
code:verilog
module my_block_ram (
input clk, we,
input logic 31:0 addr, din, );
always_ff @(posedge clk)
begin
if (we)
end
endmodule
デュアルポートRAM
code:verilog
module my_dual_port_ram (
input clk, we,
input 31:0 addr1, addr2, din, output logic 31:0 dout1, dout2 );
always_ff @(posedge clk)
begin
if (we)
end
always_ff @(posedge clk)
begin
end
endmodule
BRAMとして認識されなかったRAMのコード
駄目だった理由(の予想)
assing dout = mem[addr] が非同期メモリ読み込みだから
ブロックRAMはクロック同期のメモリ読み込みにする必要がある
code:dame.sv
module ram(
input clk,
input logic 31:0 addr, din, input logic we,
);
always_ff @(posedge clk) begin
if (we)
end
endmodule
参考
Vivado Design Suite ユーザー ガイド( UG901 )
RAMのHDLコード記述ガイドライン
P112
シングルポートブロックRAMの例