説明
Vivado 合成で、非同期リセット出力レジスタに対してブロック RAM は推論されますか。
ソリューション
非同期リセットが出力レジスタに使用されている場合、Vivado 合成ではブロック RAM は推論されません。次に例を示します。
module test # (
parameter data_w = 32,
addr_w = 9
)
(
input rst_n,
input wrclk,
input rdclk,
input [addr_w-1:0] wraddr,
input [addr_w-1:0] rdaddr,
input [data_w-1:0] data,
input wren,
output reg [data_w-1:0] dout
);
reg [data_w-1:0] mem [(1<<addr_w)-1:0];
reg [data_w-1:0] wrdata_r;
reg [addr_w-1:0] wraddr_r,rdaddr_r;
reg wren_r;
always @ (posedge wrclk)
begin
if(wren)
mem[wraddr] <= data;
end
always @ (posedge rdclk or negedge rst_n)
begin
if(~rst_n)
begin
begin
rdaddr_r <= 0;
dout <= 0;
end
end
else
begin
rdaddr_r <= rdaddr;
dout <= mem[rdaddr_r];
end
end
endmodule
出力レジスタに非同期リセットがある場合、Vivado 合成では現在のところ LUTRAM が推論され、ブロック RAM は推論されません。