关于非阻塞赋值的问题,求解释?
Stop: begin
if (clk_low) begin
mode <= 1'b0;
State <= Stop;
end
else if (clk_high) begin
ctrl_cnt <= ctrl_cnt + 1'b1;
if (ctrl_cnt[0] == 1'b0)
State <= Start;
else
State <= Idle;
end
else
State <= Stop;
End
如果一开始ctrl_cnt为0,那么第一次执行else if (clk_high) begin……end中的语句时,State是跳到Start还是Idle?
可不可以这样理解
可不可以这样理解:当clk_high为1时, ctrl_cnt <= ctrl_cnt + 1'b1 和 if (ctrl_cnt[0] == 1'b0) 同时被触发,所以这个时钟结束后, ctrl_cnt 加1变为1,同时 State跳到 Start
Start状态,因为这是非阻塞赋值;
要是ctrl_cnt <= ctrl_cnt + 1'b1,改为ctrl_cnt = ctrl_cnt + 1'b1的话,结果就为Idle状态
start .非阻塞是同时进行的,两个语句同时,所以在其加1同时满足下面的条件,故到start