Verilog中的Fifo缓冲区。始终生成
我正在尝试编写通用fifo缓冲区。 为了使它具有通用性,我使用了这样的代码Verilog中的Fifo缓冲区。始终生成,verilog,fifo,Verilog,Fifo,我正在尝试编写通用fifo缓冲区。 为了使它具有通用性,我使用了这样的代码 genvar i; generate for(i=0;i<BusWidthIn;i=i+1) begin: i_buffin always @ (negedge clkin) begin if (!full) Buffer[wr_ptr+i] <= datain[i*BitPerWord+BitPerWord-1:i*BitPerWord]; end end endgenerate
genvar i;
generate
for(i=0;i<BusWidthIn;i=i+1) begin: i_buffin
always @ (negedge clkin) begin
if (!full)
Buffer[wr_ptr+i] <= datain[i*BitPerWord+BitPerWord-1:i*BitPerWord];
end
end
endgenerate
genvari;
生成
对于(i=0;i我认为问题在于合成不知道wr_ptr总是3的倍数,因此从合成的角度来看,3个不同的always块可以分配给每个缓冲区条目。我认为您可以重新编码逻辑,为每个always块分配一个缓冲区条目
genvar i, j;
generate
for(i=0;i < (1<<(BufferLen)); i=i+1) begin: i_buffin
for(j = (i%BusWidthIn);j == (i%BusWidthIn); j++) begin // a long way to write 'j = (i%BusWidthIn);'
always @ (negedge clkin) begin
if (!full) begin
if (wr_ptr*BusWidthIn + j == i) begin
Buffer[i] <= datain[j*BitPerWord+BitPerWord-1:j*BitPerWord];
end
end
end
end
end
endgenerate
genvari,j;
生成
对于(i=0;i<(1我认为问题在于合成不知道wr_ptr总是3的倍数,因此从合成的角度来看,3个不同的always块可以分配给每个缓冲区条目。我认为您可以重新编码逻辑,为每个always块分配一个缓冲区条目
genvar i, j;
generate
for(i=0;i < (1<<(BufferLen)); i=i+1) begin: i_buffin
for(j = (i%BusWidthIn);j == (i%BusWidthIn); j++) begin // a long way to write 'j = (i%BusWidthIn);'
always @ (negedge clkin) begin
if (!full) begin
if (wr_ptr*BusWidthIn + j == i) begin
Buffer[i] <= datain[j*BitPerWord+BitPerWord-1:j*BitPerWord];
end
end
end
end
end
endgenerate
genvari,j;
生成
对于(i=0;i<(1其他),则代码中的*\ptr
应分配非阻塞分配(其他,则代码中的*\ptr
应分配非阻塞分配(code look fine on。code look fine on。我更喜欢看到resetsinitial
块是初始化FPGA值的有效方式。谢谢@Morgan,我不知道。我编辑了它。我更喜欢看到resetsinitial
块是初始化FPGA值的有效方式。谢谢@Morgan,我不知道我把它删掉了。
integer i;
always @(negedge clkin) begin
if (!full) begin
for (i=0;i<BusWidthIn;i=i+1) begin: i_buffin
Buffer[wr_ptr+i] <= datain[i*BitPerWord +: BitPerWord];
end
wr_ptr <= wr_ptr + BusWidthIn;
end
end