Verilog 模块参考错误
我正在尝试将内存初始化为零,以便以后可以使用文件初始化内存。我的内存由sram块组成,每一块都是32行,每行32位。sram32x32在名为Verilog 模块参考错误,verilog,Verilog,我正在尝试将内存初始化为零,以便以后可以使用文件初始化内存。我的内存由sram块组成,每一块都是32行,每行32位。sram32x32在名为reg[31:0]mem[31:0]的模块中有一个成员。每个银行都包含一些32x32区块的区块RBANK数量。目前有sramBanks=8家银行 连续的内存地址在每个存储组中交错。经过每家银行后,它进入下一行。穿过所有线路后,它进入下一个街区。在这之后,它将回滚(这可以在initial块中的嵌套for循环顺序中看到)。下面是我如何实例化和初始化我的内存。我认
reg[31:0]mem[31:0]
的模块中有一个成员。每个银行都包含一些32x32区块的区块RBANK
数量。目前有sramBanks=8家银行
连续的内存地址在每个存储组中交错。经过每家银行后,它进入下一行。穿过所有线路后,它进入下一个街区。在这之后,它将回滚(这可以在initial
块中的嵌套for循环顺序中看到)。下面是我如何实例化和初始化我的内存。我认为这应该是足够的信息,但如果需要更多,请告诉我
generate
for(i=0; i<sramBanks; i=i+1) begin : bank
sram32x32$ block [blocksPerBank-1:0]
(obtag[tagLineMSB:tagLineLSB],
cdb[i*32 +: 32], 1'b0,
FSM_memWR, FSM_ceEnAdj
);
end
integer b, l, k;
initial begin
for(b=0; b<blocksPerBank; b=b+1) begin : bpb
for(l=0; l<32; l=l+1) begin : ln
for(k=0; k<sramBanks; k=k+1) begin : sbnk
bank[k].block[b].mem[l] = 32'b0;
end
end
end
end
endgenerate
在我的初始
语句中,如何引用generate循环中的模块?阵列模块实例的索引需要保持不变。因此,b
和k
需要是genvar
genvar b, k;
generate
for(b=0; b<blocksPerBank; b=b+1) begin : bpb
for(k=0; k<sramBanks; k=k+1) begin : sbnk
integer l;
initial begin
for(l=0; l<32; l=l+1) begin : ln
bank[k].block[b].mem[l] = 32'b0;
end
end
end
end
endgenerate
genvarb,k;
生成
对于(b=0;呸,我不知道常数问题,但它现在让其他事情变得困难了。这个解决方案围绕我的for循环交换,然后以某种非连续的方式在我的内存空间上迭代。我必须先迭代每个库,然后再迭代每行,然后再迭代每个块。我需要重新组织如何实例化m吗基本上,内存地址是这样形成的:{garbage,block,line,bank,2'b00}
。2 LBS来自32位对齐。您可以创建某种类型的转换层;例如,将内存文件拆分为块的脚本、关系引用模型,或者使内存模型足够智能以正确解析内存文件。SystemVerilog、Perl、Ruby/、Python、GNU Makefile等都会有所帮助。
genvar b, k;
generate
for(b=0; b<blocksPerBank; b=b+1) begin : bpb
for(k=0; k<sramBanks; k=k+1) begin : sbnk
integer l;
initial begin
for(l=0; l<32; l=l+1) begin : ln
bank[k].block[b].mem[l] = 32'b0;
end
end
end
end
endgenerate