添加行
number_of_lines <= ram[0]
后,Vivado 将不会合成 BRAM 组件。相反,我得到了一个 LUT 方案。
module bram3 (clka,clkb,ena,enb,wea,web,addra,dia,dib,doa,dob,rst);
input clka,clkb,ena,enb,wea,web,rst;
input [11:0] addra;
input [63:0] dia,dib;
output [63:0] dob, doa;
reg [32:0] ram [254:0];
reg [32:0] dob, doa;
reg [11:0] new_addr=0;
reg [11:0] number_of_lines=0;
always @(posedge clka)
begin
if (ena)
begin
if (wea) ram[addra] <= dia;
doa <= ram[addra];
end
end
always @(posedge clkb or negedge rst)
begin
if (!rst)
begin
new_addr<=0;
end
else if (enb)
begin
if (new_addr==0)
number_of_lines <= ram[0];
new_addr<=new_addr+1;
dob <= ram[new_addr];
if (new_addr==number_of_lines)
new_addr<=0;
end
end
endmodule
我知道我不能进行超过 2 次读取(在我的代码中我进行了 3 次读取),但我需要逻辑才能在代码中实现。
如何重写逻辑来制作类似可合成的 BRAM?