Dieser Fehler tritt nur in der Quartus® II Softwareversion 6.0 (einschließlich 6.0 SP1) auf, wenn das Design localparam-Deklarationen innerhalb von generate-Anweisungen verwendet, wie im unten stehenden Beispiel, da die Software einige Verilog-Sprachregeln strenger erzwingt als alle anderen Versionen.
generate
for (i = 0; i < WIDTH; i = i 8)
begin : my_loop
localparam j = i 7 > WIDTH-1 ? WIDTH-1 : i 7;
localparam k = BASE (i>>3); ...
endgenerate
Das Verilog Language Reference Manual (LRM) gibt die folgende Regel an:
Moduldeklarationen und Modulelemente, die in einer generate-Anweisung nicht erlaubt sein dürfen, umfassen: Parameter, lokale Parameter, Eingabedeklarationen, Ausgabedeklarationen, Inout-Deklarationen und Spezifizieren von Blöcken. 1364-2001 LRM 12.1.3
Um den Fehler zu vermeiden und die gleiche Funktionalität zu implementieren, stecken Sie die lokalen Parameteranweisungen in einen Always-Block wie im unten stehenden Beispiel:
generate for (i = 0; i < WIDTH; i = i 8) begin : my_loop always @(posedge clk or posedge reset) begin : my_params localparam j = i 7 > WIDTH-1 ? WIDTH-1 : i 7; localparam k = BASE i>>3); ... endgenerate