Verilog中有两种为变量赋值的方法。一种叫做连续赋值,另一种叫做过程赋值。
过程赋值又分为阻塞赋值和非阻塞赋值。
阻塞性赋值使用“=”为变量赋值,在赋值结束前不可以进行其他操作,在赋值结束之后继续后面的操作。这个过程就好像阻断了程序的运行。
非阻塞赋值使用“<=”为变量赋值,在执行赋值语句时,仅仅对“<=”右边的值进行评估,但并不马上执行赋值,然后继续执行后面的操作。这个过程就好像没有阻断程序的运行。
多条阻塞赋值语句是顺序执行的,而多条非阻塞赋值是并行进行的,这就是两者的区别。
坚持做到以下列出的注意事项,就可以基本上避免使用阻塞赋值和非阻塞赋值不当引起的错误。
1.在使用always块描述组合逻辑时,使用阻塞赋值;在使用always块描述时序逻辑时,使用费阻塞赋值。
2.不要在同一个always块内同时使用阻塞赋值和非阻塞赋值。
3.无论是使用阻塞赋值还是使用非阻塞赋值,不要再不同的always块内为同一个变量赋值。
4.在程序中不要使用0延时。