En raison d’un problème dans le logiciel Intel® Quartus® Prime Pro Edition version 21.4 et antérieure, vous pouvez voir cette erreur pendant l’étape d’analyse et de synthèse. Cela est dû au fait que les interfaces paramétrées n’ont pas réussi à remplacer les variables logiques localparam de l’interface SystemVerilog par les variables wrapper de niveau supérieur.
Dans l’exemple ci-dessous, les variables logiques localparam ADDR_W et DATA_W, avec les paramètres 4 et 1, ne sont pas remplacées par les variables wrapper de niveau supérieur, avec les paramètres 5 et 8 respectivement.
Wrapper de niveau supérieur :
module mem_wrapper #( int ADDR_W = 5, int DATA_W = 8 )
...
mem_if #( ADDR_W, DATA_W ) mem_if ( i_clk_a );
mem mem ( mem_if );
...
module d’extrémité : mem_wrapper
Interface:
interface mem_if #( int ADDR_W = 4, int DATA_W = 1 ) ( input clk );
Logique localparam [DATA_W - 1:0] INIT_V [2 ** ADDR_W] = '{default: '1};
...
modport mem (input clk, addr, wren, idat, output odat) ;
endinterface : mem_if
Modport :
module mem ( mem_if.mem mem_if );
logique [mem_if. DATA_W - 1:0] mem [2 ** mem_if. ADDR_W];
Initiale
for(int i = 0; i < 2 ** mem_if. ADDR_W; i++)
mem[i] = mem_if. INIT_V[i];
...
Module d’extrémité : MEM
Pour éviter cette erreur, n’utilisez pas la logique localparam dans l’interface SystemVerilog.
Par exemple :
Interface:
interface mem_if #( int ADDR_W = 4, int DATA_W = 1 ) ( input clk );
logique [DATA_W - 1:0] INIT_V [2 ** ADDR_W] = '{default: '1};
...
modport mem (input clk, addr, wren, idat, output odat, INIT_V);
endinterface : mem_if
Ce problème est résolu à partir de la version 22.4 du logiciel Intel® Quartus® Prime Pro Edition.