6

2 つのモジュール間で配列構造を reg [0:31]instructionmem[0:31] として渡そうとしています。

次のようにコーディングしました:

モジュール番号 1:

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

            ---------------
       endmodule 

モジュール番号 2:

         module module2(instructionmem);
           input [0:31]instructionmem[0:31];
           --------------------------------
           -----line of code---------------
           -------------------------------
           endmodule

テストベンチ:

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

     module1 m1(instructionmem);
     module2 m2(instructionmem);
     endmodule

この実装でエラーが発生します。では、そのような配列構造をどのように送信できますか?

4

1 に答える 1

9

これは Verilog では不可能です。(セクション 12.3.3、Verilog 2005 標準ドキュメント、IEEE Std. 1364-2005 の構文 12-4 を参照してください。)

代わりに、配列を「平坦化」して単純なベクトルとして渡す必要があります。

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
于 2013-05-04T10:30:09.917 に答える