Devido a um problema na versão 21.4 ou anterior do software Intel® Quartus® Prime Pro Edition, você pode ver esse erro durante a etapa de Análise &síntese. Isso ocorre devido à falha das interfaces parametrizadas em substituir as variáveis de lógica localparam da interface SystemVerilog com as variáveis wrapper de nível superior.
No exemplo a seguir, as variáveis de lógica localparam da interface ADDR_W e DATA_W, com os parâmetros 4 e 1, não estão desativadas pelas variáveis wrapper de nível superior, com os parâmetros de 5 e 8 respectivamente.
Invólucro de alto nível:
módulo mem_wrapper #(ADDR_W int = 5, int DATA_W = 8)
...
nº mem_if( ADDR_W, DATA_W) mem_if (i_clk_a);
mem (mem_if);
...
endmodule: mem_wrapper
Interface:
mem_if nº da interface (int ADDR_W = 4, int DATA_W = 1 ) (clk de entrada);
Lógica localparam [DATA_W - 1:0] INIT_V [2 ** ADDR_W] = '{default: '1};
...
mem modport (lk de entrada, somador, wren, idat, saída odat );
endinterface: mem_if
Modport:
module mem (mem_if.mem mem_if );
lógica [mem_if. DATA_W - 1:0] mem [2 ** mem_if. ADDR_W];
Inicial
for (int i = 0; i < 2 ** mem_if. ADDR_W, não ADDR_W; i++)
mem[i] = mem_if. INIT_V[i];
...
endmodule : mem
Para evitar esse erro, não use a lógica localparam na interface SystemVerilog.
Por exemplo:
Interface:
mem_if nº da interface (int ADDR_W = 4, int DATA_W = 1 ) (clk de entrada);
lógica [DATA_W - 1:0] INIT_V [2 ** ADDR_W] = '{default: '1};
...
mem modport (lk de entrada, somador, wren, idat, saída odat, INIT_V);
endinterface: mem_if
Esse problema foi corrigido a partir da Intel® Quartus® Software Prime Pro Edition versão 22.4.