阻塞赋值和非阻塞赋值
阻塞和非阻塞过程赋值的误用不仅在仿真时会产生逻辑错误,而且会造成仿真和综合的不一致,更为严重的这种错误往往不容易发现。为解决这一问题,必须深刻理解阻塞和非阻塞过程赋值的功能和执行过程中的本质区别。
在硬件中过程赋值语句表示的是:用赋值语句RHS(Right Hand Side,表示右边表达式和变量)表达式所推导出的逻辑来驱动该赋值语句LHS(Left Hand Side,表示左边表达式和变量)的变量,且只能出现在always语句和initial语句。
阻塞赋值有符号“=”来完成,“阻塞赋值”由其赋值操作行为而得名:“阻塞”即是说在当前的赋值行为完成前阻塞其他类型的赋值行为。
非阻塞赋值由符号“<=”来完成,“非阻塞赋值“在一个时间步的开始估计RHS表达式的值,并在这个时间步结束时用等式右边的值取代LHS。在估算RHS表达式和更新LHS表达式的中间时间段,其他的对LHS的非阻塞赋值可以被执行。即”非阻塞赋值“从估计RHS开始并不阻碍执行其他的赋值任务。