在编译使用阻塞分配来更新
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中得到修复。





没有回复内容