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)
我收到了这个实现的错误.那么我们如何发送这样的数组结构呢?
这在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)
| 归档时间: |
|
| 查看次数: |
13433 次 |
| 最近记录: |