如何在两个verilog模块之间传递数组结构

Nil*_*wal 5 verilog module parameter-passing

我试图在两个模块之间传递一个数组结构作为reg [0:31] instructionmem [0:31].

我把它编码如下:

第1单元:

       module module1(instructionmem);
            output reg [0:31]instructionmem[0:31];
            ------------------
            ----lines of code---

            ---------------
       endmodule 
Run Code Online (Sandbox Code Playgroud)

第2单元:

         module module2(instructionmem);
           input [0:31]instructionmem[0:31];
           --------------------------------
           -----line of code---------------
           -------------------------------
           endmodule
Run Code Online (Sandbox Code Playgroud)

试验台:

     module test_bench();
     wire [0:31]instructionmem[0:31];

     module1 m1(instructionmem);
     module2 m2(instructionmem);
     endmodule
Run Code Online (Sandbox Code Playgroud)

我收到了这个实现的错误.那么我们如何发送这样的数组结构呢?

Cli*_*nna 8

这在Verilog中是不可能的.(参见第12.3.3节,Verilog 2005标准文档的语法12-4,IEEE Std.1364-2005.)

相反,你应该"展平"数组并将其作为一个简单的向量传递,例如:

module module1(instructionmem);
  output [32*32-1:0] instructionmem;
  reg [31:0] instructionmem_array [31:0];

  genvar i;
  generate for (i = 0; i < 32; i = i+1) begin:instmem
    assign instructionmem[32*i +: 32] = instructionmem_array[i]; 
  end endgenerate
endmodule

module module2(instructionmem);
  input [32*32-1:0] instructionmem;
  reg [31:0] instructionmem_array [31:0];

  integer i;
  always @*
    for (i = 0; i < 32; i = i+1)
      instructionmem_array[i] = instructionmem[32*i +: 32];
endmodule

module test_bench(instructionmem);
  output [32*32-1:0] instructionmem;
  module1 m1(instructionmem);
  module2 m2(instructionmem);
endmodule
Run Code Online (Sandbox Code Playgroud)