将二维数组的一行作为输入传递给 verilog 中的模块

Passing a single row of a 2d array as an input to a module in verilog

我想知道是否有任何方法可以将二维值数组的一行作为输入传递给 Verilog 中的模块。

假设我的数组是这样定义的:

   reg[15:0] arr[0:9][0:63];
   ...
   ...
   mod1 m(..., arr[5], ....);

mod1 的定义为:

module mod1 (..., input[15:0] arr[0:63],...);
...
...
endmodule

我使用 icarus verilog 作为我的编译器。当我使用 -g2012 标志编译时,它抛出以下错误:

assert: elaborate.cc:1456: failed assertion rval_net->pin_count() == prts[0]->pin_count()

有人可以帮我解决这个问题吗?

iverilog 的 SystemVerilog 支持有限。启用 -g2012 标志后,它可以跨端口传递多维数组。您正在使用的版本和 EDAplayground 上可用的版本,无法自动将多维结构转换为另一个多维结构。这是一个工具限制,不是 IEEE1800 LRM 中的限制。

有了我可用的版本(从 2014 年开始),我不得不创建一个中间翻译。

reg[15:0] arr[0:9][0:63];
reg[15:0] arr5[0:63];
...
always @* begin // should be always_comb; 2014 version does not support it
  foreach(arr5[idx])
    arr5[idx] = arr[5][idx];
end
...
mod1 m(..., arr5, ....);