0

我想知道是否有任何方法可以将单行二维数组值作为输入传递给 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()

有人可以帮我弄这个吗?

4

1 回答 1

1

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, ....);
于 2020-06-01T17:21:35.817 回答