原则6:严禁在多个always块中对同一个变量赋值,包括阻塞和非阻塞赋值。
1,同一变量多次赋值,即便是非阻塞赋值,也会存在竞争冒险
两个always块都对输出q进行赋值。由于两个always块执行的顺序是随机的,所以仿真时会产生竞争冒险。
module badcode1(q, d1, d2, clk, rst_n);
output q;
input d1, d2, clk, rst_n;
reg q;
always@(posedge clk or negedge rst_n)
if(!rst_n)
q <= 1'b0;
else
q <= d1;
always@(posedge clk or negedge rst_n)
if(!rst_n)
q <= 1'd0;
else
q <= d2
endmodule