首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在两个verilog模块之间传递数组结构

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

Stack Overflow用户
提问于 2013-05-04 09:26:17
回答 1查看 15.8K关注 0票数 6

我试图在两个模块之间传递一个reg 0:31指令Mem0:31的数组结构。

我将其编码如下:

模块1:

代码语言:javascript
复制
       module module1(instructionmem);
            output reg [0:31]instructionmem[0:31];
            ------------------
            ----lines of code---

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

模块2:

代码语言:javascript
复制
         module module2(instructionmem);
           input [0:31]instructionmem[0:31];
           --------------------------------
           -----line of code---------------
           -------------------------------
           endmodule

Testbench:

代码语言:javascript
复制
     module test_bench();
     wire [0:31]instructionmem[0:31];

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

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-05-04 18:30:10

这在Verilog中是不可能的。(参见sec。12.3.3,Verilog 2005标准文档的语法12-4,IEEE标准。1364-2005年。)

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

代码语言:javascript
复制
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
票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16369698

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档