如果verilog不允许在模块的端口列表中声明/传递多维数组,是否有解决方法呢?让我说我有一个像数组[27:0] [64:0]的数组。我们怎样才能将它传递给模块? (比如将它作为1d数组并在模块体上做一些反转)我认为唯一的方法是将它作为1维传递并做一些引用的机制,就像原始的多维数据库一样。谢谢。我刚刚研究过,这个功能在SystemVerilog中可用,但在原始的Verilog中没有。
答案 0 :(得分:5)
正如最初的评论者所指出的,在SystemVerilog中明确支持你所要求的内容。您甚至可以通过模块边界传递结构。
然而,如果你坚持使用旧式的Verilog,那么你要做的就是猜测。将其展平成一维阵列并将其吹回模块内部。
在伪代码中
input [WIDTH * DEPTH - 1:0] in;
reg [WIDTH - 1:0] array [0:DEPTH - 1];
integer i;
for (i = 0; i < DEPTH; i = i + 1)
array = in[i * WIDTH +: WIDTH];
在模块边界的另一侧使用类似的封装for-loop。 +:语法很好但你甚至没有访问权限,那么你可以很容易地将它转换为显式边界。