Icarus 不知道如何解析 localparam 数组?

Icarus doesnt know how to parse localparam arrays?

我正在使用 Icarus Verilog v10,Windows 8.1 并且在编译一维数组时遇到问题,例如:

localparam [15:0] A[0:5]  = {
    0,
    10920, 
    21840,
    32760,
    43680,
    54600
};

或二维数组,如:

localparam [1:0] B[0:5][0:2] = {
    {2'b00, 2'b10, 2'b01},
    {2'b10, 2'b00, 2'b01},
    {2'b10, 2'b01, 2'b00},
    {2'b00, 2'b01, 2'b10},
    {2'b01, 2'b00, 2'b10},
    {2'b01, 2'b10, 2'b00}
};

当我尝试在命令提示符下使用 iverilog 编译它时,如:iverilog -o tb.vvp ".v files here" 我收到以下错误:

tb.v:39: syntax error
tb.v:39: error: syntax error localparam list.
tb.v:54: syntax error
tb.v:54: error: syntax error localparam list.

第39行和第54行是上面两个数组所在的行

出了什么问题,我该如何解决这个荒谬的错误?

Verilog 不支持解包数组parameters/localparams; SystemVerilog 可以。参见:

  • How to initialize parameter array in verilog?

Icarus Verilog (iverilog) 对 SystemVerilog 的支持有限。 EDAplayground 目前包括 Icarus Verilog 0.10.0 11/23/14,它不支持启用 SystemVerilog 的解压缩数组参数。您可以尝试使用最新版本的 Icarus。通过将文件灭绝从 .v 更改为 .sv 来启用 SystemVerilog,您可能需要添加 -g2012 编译选项。

如果这不起作用,您需要将数组转换为大向量。您可以使用 +: 运算符对数组进行切片(在 Verilog 2001 中添加并受 Icarus Verilog 支持。请参阅 Indexing vectors and arrays with +:)。或者换个支持SystemVerilog的模拟器。