Verilog 模块参考错误

Verilog 模块参考错误,verilog,Verilog,我正在尝试将内存初始化为零,以便以后可以使用文件初始化内存。我的内存由sram块组成,每一块都是32行,每行32位。sram32x32在名为reg[31:0]mem[31:0]的模块中有一个成员。每个银行都包含一些32x32区块的区块RBANK数量。目前有sramBanks=8家银行 连续的内存地址在每个存储组中交错。经过每家银行后,它进入下一行。穿过所有线路后,它进入下一个街区。在这之后,它将回滚(这可以在initial块中的嵌套for循环顺序中看到)。下面是我如何实例化和初始化我的内存。我认

我正在尝试将内存初始化为零,以便以后可以使用文件初始化内存。我的内存由sram块组成,每一块都是32行,每行32位。sram32x32在名为
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