如果verilog不允许在模块的端口列表中声明/传递多维数组,是否有解决方法呢?让我说我有一个像数组[27:0] [64:0]的数组.我们怎样才能将它传递给模块?(比如将它作为1d数组并在模块体上进行一些反转)我认为唯一的方法是将它作为1维传递并做一些引用的机制,就像原始的多维数据库一样.谢谢.我刚刚研究过,这个功能在SystemVerilog中可用,但在原始的Verilog中没有.
正如最初的评论者指出的那样,在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];
Run Code Online (Sandbox Code Playgroud)
在模块边界的另一侧使用类似的封装for-loop.+:语法很好但你甚至没有访问权限,那么你可以很容易地将它转换为显式边界.