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

时间:2017-06-02 09:31:24

标签: arrays verilog iverilog

我正在使用Icarus Verilog的v10,Windows 8.1并且遇到了编译1D阵列的麻烦,例如:

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

或2D数组如:

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

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

1 个答案:

答案 0 :(得分:1)

Verilog不支持解压缩的阵列参数/ localparams; SystemVerilog可以。参见:

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的另一个模拟器。