由於 Intel® Quartus® Prime Pro Edition 軟體版本 21.4 及更早版本存在問題,您可能會在分析和合成階段看到此錯誤。這是由於參數化介面無法使用頂級包裝變數覆蓋 SystemVerilog 介面本地參數邏輯變數。
在下面的示例中,參數分別為 4 和 1 的介面 localparam 邏輯變數 ADDR_W 和 DATA_W 不會被參數分別為 5 和 8 的頂級包裝變數覆蓋。
頂級包裝器:
模組 mem_wrapper #( int ADDR_W = 5, int DATA_W = 8 )
...
mem_if #( ADDR_W, DATA_W ) mem_if ( i_clk_a );
記憶 ( mem_if );
...
終端模組 : mem_wrapper
介面:
介面 mem_if #( int ADDR_W = 4, int DATA_W = 1 ) ( 輸入 clk );
局部參數邏輯 [DATA_W - 1:0] INIT_V [2 ** ADDR_W] = '{default: '1};
...
modport mem ( input clk, addr, wren, idat, output odat );
端介面 : mem_if
改裝:
模組記憶體 ( mem_if.mem mem_if );
邏輯[mem_if。DATA_W - 1:0] 記憶體 [2 ** mem_if.ADDR_W];
初始
for(int i = 0; i < 2 ** mem_if.ADDR_W;i++)
記憶體[i] = mem_if。INIT_V[i];
...
終端模組:記憶體
若要避免此錯誤,請不要在SystemVerilog 介面中使用localparam 邏輯。
例如:
介面:
介面 mem_if #( int ADDR_W = 4, int DATA_W = 1 ) ( 輸入 clk );
邏輯 [DATA_W - 1:0] INIT_V [2 ** ADDR_W] = '{default: '1};
...
modport mem ( input clk, addr, wren, idat, output odat, INIT_V);
端介面 : mem_if
此問題已從 Intel® Quartus® Prime Pro Edition 軟體版本 22.4 開始修復。