verilog多维数组

Wan*_*tIt 1 verilog

如果verilog不允许在模块的端口列表中声明/传递多维数组,是否有解决方法呢?让我说我有一个像数组[27:0] [64:0]的数组.我们怎样才能将它传递给模块?(比如将它作为1d数组并在模块体上进行一些反转)我认为唯一的方法是将它作为1维传递并做一些引用的机制,就像原始的多维数据库一样.谢谢.我刚刚研究过,这个功能在SystemVerilog中可用,但在原始的Verilog中没有.

Bri*_*son 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];
Run Code Online (Sandbox Code Playgroud)

在模块边界的另一侧使用类似的封装for-loop.+:语法很好但你甚至没有访问权限,那么你可以很容易地将它转换为显式边界.