一、禁用多驱动
一个wire型变量(具体到每个bit),只能在一个assign语句赋值
一个reg型变量(具体到每个bit),只能在一个always语句赋值
综合工具不能识别互斥条件
在一个always块内,一次触发,对同一个信号最多只赋一次值
比如:不要用多个if
always@(posedge clk or negedge rstn)begin
if(!rstn)begin
b<='d0;
end
else begin
if(c)begin
b<=a0;
end
if(d)begin
b<=a1;
end
end
end
这种写法是可以综合的,但是不便于理解和后期维护。如果c和d两个条件同时满足,综合时会采用d这个结果(最后面的一个条件)。
应该按照如下写法:
always@(posedge clk or negedge rstn)begin
if(!rstn)begin
b<='d0;
end
else begin
if(c)begin
b<=a0;
end
else if(d)begin
b<=a1;
end
end
end