Este erro ocorre apenas no software Quartus® II versão 6.0 (incluindo 6.0 SP1), se o design usar declarações localparam dentro de declarações de geração, como no exemplo abaixo, porque o software aplica algumas regras do idioma Verilog mais rigorosamente do que todas as outras versões.
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
O manual de referência do idioma Verilog (LRM) diz a seguinte regra:
As declarações de módulos e itens de módulo que não devem ser permitidos em uma declaração de geração incluem: parâmetros, parâmetros locais, declarações de entrada, declarações de saída, declarações de entrada e especificar blocos. 1364-2001 LRM 12.1.3
Para evitar o erro e implementar a mesma funcionalidade, coloque as instruções dos parâmetros locais dentro de um bloco sempre como no exemplo abaixo:
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