verilog if判断和非阻塞赋值
时间:10-02
整理:3721RD
点击:
请问,如果用下面的代码来判断,if是判断的CLK上升沿到来之前的Start_Sig,还是CLK上升沿之后的电平?如果在这个上升沿Start_Sig的电平也发生变化,该如何判断?
还有就是非阻塞赋值,例如Start_Sig<=1'b1;是在下一个CLK到来之前就更新完LHS变量的值,还是到来之后更新?恳请各位前辈解答。
- always @ (posedge CLK or negedge RSTn)
- if(!RSTn)
- begin
- i<=4'd0;
- end
- else if(Start_Sig)
- case (i)
- 0:
- 1:
- endcase
还有就是非阻塞赋值,例如Start_Sig<=1'b1;是在下一个CLK到来之前就更新完LHS变量的值,还是到来之后更新?恳请各位前辈解答。
貌似是将跳变前后分为 0- 0+ 两个时刻,按照经验仿真来看,if判断时用的是0-时刻的值,例如Start_Sig上升沿,if用0做条件判断,下降沿,if用1做条件判断。
第一个问题:在时序逻辑中,if语句判断的Start_Sig是上升沿前的,上升沿时Start_Sig的电平也发生变化则下一个上升沿,if语句才能检测到
第二个问题:一般非阻塞赋值用在时序逻辑中,故非阻塞赋值是上升沿后值再更新。
学习了,原来是这么回事,谢谢楼上二位
上升沿后再更新
