在编译使用阻塞分配来更新
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&~in; 总是@(posedge clk或negedge重置) 开始 if(!reset) OUT =为2'b11; 否则如果(启用) 开始 temp_0 <= in; out [0] = in; out [1] = temp_1; 结束 结束 .... endmodule
这个问题在Quartus软件版本1999.1中得到修复。
没有回复内容