Aufgrund eines Problems in der Intel® Quartus® Prime Pro Edition Software Version 21.4 und früher, kann dieser Fehler während der Analyse- und Synthesephase auftreten. Dies liegt daran, dass die parametrisierten Schnittstellen die localparam-Logikvariablen der SystemVerilog-Schnittstelle nicht mit den Wrappervariablen der obersten Ebene überschreiben können.
Im folgenden Beispiel werden die localparam-Logikvariablen ADDR_W und DATA_W der Schnittstelle mit den Parametern 4 und 1 nicht von den Wrappervariablen der obersten Ebene mit den Parametern 5 bzw. 8 überschrieben.
Wrapper der obersten Ebene:
Modul 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 );
...
Endmodul : mem_wrapper
Schnittstelle:
Schnittstelle mem_if #( int ADDR_W = 4, int DATA_W = 1 ) ( input clk );
localparam-Logik [DATA_W - 1:0] INIT_V [2 ** ADDR_W] = '{default: '1};
...
modport mem ( input clk, addr, wren, idat, output odat );
Endschnittstelle : mem_if
Modport:
Modul mem ( mem_if.mem mem_if );
Logik [mem_if. DATA_W - 1:0] mem [2 ** mem_if. ADDR_W];
Ersten
for(int i = 0; i < 2 ** mem_if. ADDR_W; i++)
mem[i] = mem_if. INIT_V[i];
...
Endmodule : Mem
Um diesen Fehler zu vermeiden, verwenden Sie nicht die localparam-Logik in der SystemVerilog-Schnittstelle.
Zum Beispiel:
Schnittstelle:
Schnittstelle mem_if #( int ADDR_W = 4, int DATA_W = 1 ) ( input clk );
Logik [DATA_W - 1:0] INIT_V [2 ** ADDR_W] = '{Standard: '1};
...
modport mem ( Eingabe clk, addr, wren, idat, Ausgabe odat, INIT_V);
Endschnittstelle : mem_if
Dieses Problem wurde ab der Intel® Quartus® Prime Pro Edition Software Version 22.4 behoben.