我正在使用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行是上面两个数组所在的行。
出了什么问题,如何解决这个荒谬的错误?
答案 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的另一个模拟器。