此错误仅在 Quartus® II 软件版本 6.0(包括 6.0 SP1)中发生,如果设计使用生成语句中的 localparam 声明,例如下面的示例,因为该软件比所有其它版本更严格地执行一些 Verilog 语言规则。
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
Verilog 语言参考手册 (LRM) 规定以下规则:
生成语句中不允许使用的模块声明和模块项目包括:参数、本地参数、输入声明、输出声明、输出声明和指定模块。1364-2001 LRM 12.1.3
为了避免错误并实施相同的功能,将本地参数语句放在一个始终模块中,如下示例所示:
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