如果 verilog 不允许在模块的端口列表中声明/传递多维数组,是否有解决方法?假设我有一个像数组 [27:0][64:0] 这样的数组。我们如何将它传递到模块中?(比如将其作为一维数组并在模块主体上进行一些反转)我认为唯一的方法是将它作为一维传递并做一些机制来引用,就像原来的多维一样。谢谢。我不久前研究过,该功能在 SystemVerilog 中可用,但在原始 Verilog 中不可用。
问问题
6701 次
1 回答
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 循环。+: 语法很好,但是您甚至无法访问它,然后您可以相当容易地将其转换为显式边界。
于 2013-02-17T20:14:21.260 回答