0

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

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 行是上面两个阵列所在的行。

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

4

1 回答 1

1

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

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

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

于 2017-06-02T17:12:53.223 回答