Cette erreur se produit uniquement dans la version 6.0 du logiciel Quartus® II (y compris la version 6.0 SP1), si la conception utilise des déclarations localparam à l’intérieur des déclarations de générer, comme dans l’exemple ci-dessous, car le logiciel applique certaines règles linguistiques Verilog plus strictement que toutes les autres versions.
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
Le manuel de référence linguistique (LRM) de Verilog indique la règle suivante :
Les déclarations de modules et les éléments de module qui ne doivent pas être autorisés dans une déclaration de génération comprennent : paramètres, paramètres locaux, déclarations d’entrées, déclarations de sortie, déclarations de sortie, déclarations de sortie et blocs de spécifient. 1364-2001 LRM 12.1.3
Pour éviter l’erreur et implémenter la même fonctionnalité, placez les relevés de paramètres locaux dans un bloc toujours bloqué comme dans l’exemple ci-dessous :
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