2017-06-02 51 views
0

我使用伊卡洛斯的Verilog,視窗8.1的V10和時遇到麻煩編譯一維數組,如:伊卡洛斯不知道如何解析localparam數組?

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是線,其中上面兩個數組LO cated。

什麼是錯,我該如何解決這個荒謬的錯誤?

+0

該語法可能不受支持。你聯繫過開發人員嗎?目標是支持IEEE Std 1364-2005,但有一個免責聲明。 – toolic

+0

@toolic可以嘗試用reg替換localparam並且它可以工作。不,我不應該嗎? – user1806687

回答

1

Verilog不支持解壓後的陣列參數/ localparams; SystemVerilog的確如此。請參閱:

伊卡洛斯的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的模擬器。