DFF推理错误:“只允许1个未经测试的边沿触发器作为always语句的时钟。” (Quartus™1999.06,Verilog HDL)

在编译使用阻塞分配来更新always语句中的位片的设计时,您可能会遇到此错误,该语句依赖于同一阵列中的单独位片。

例:

模块示例(clk,in,reset,out);
输入clk,in,reset;
输出[1:0]输出;
reg [1:0] out;
reg enable;
...
总是@(posedge clk或negedge重置)
    开始
        if(!reset)
              OUT =为2'b11;
       否则如果(启用)
           开始
              out [0] <= in;
              out [1] <= out [0]&~in;
          结束
    结束
....
endmodule

output 1位取决于前一个时钟周期的第0位的值。

解决方法是在always块中创建一个临时变量而不进行位切片。

例:

模块示例(clk,in,reset,out);
输入clk,in,reset;
输出[1:0]输出;
reg [1:0] out;
reg enable;
reg temp_0;
wire temp_1;
...
赋值temp_1 = temp_0&~i​​n;
总是@(posedge clk或negedge重置)
    开始
        if(!reset)
              OUT =为2'b11;
       否则如果(启用)
           开始
              temp_0 <= in;
              out [0] = in;
              out [1] = temp_1;
          结束
    结束
....
endmodule

这个问题在Quartus软件版本1999.1中得到修复。

编辑 重设标签(回车键确认) 标为违禁 关闭 合并 删除

提问于 2018-08-03 22:14:00 +0800

这个帖子被标记为一个社区wiki

这个帖子是一个wiki(维基). 任何一个积分 >500的人都可以完善它