1、阻塞赋值/非阻塞
阻塞赋值,操作符为“=”,“阻塞”是指在进程语句(initial和always)中,当前的赋值语句会阻断其后语句的正常执行,也就是说后面的语句必须等到当前的赋值语句执行完毕才能执行。而且阻塞赋值可以看成是一步完成的,即:计算等号右边的值并同时赋给左边变量。
非阻塞赋值,操作符为“<=”,“非阻塞”是指在进程语句(initial和always)中,当前的赋值语句不会阻断其后语句的正常执行。
掌握可综合风格的Verilog模块编程的六个原则,可以为解决在综合后仿真中出现绝大多数的冒险竞争问题。
1) 时序电路建模时,用非阻塞赋值;
2) 锁存器电路建模时,用非阻塞赋值;
3) 用always块建立组合逻辑模型时,用阻塞赋值;
4) 在同一个always块中建立时序和组合逻辑电路时,用非阻塞赋值;
5) 在同一个always块中不要既用非阻塞赋值又用阻塞赋值;
6) 不要在一个以上的always块中为同一个变量赋值。
2、有限状态机
最后的输出不仅和当前状态有关还和输入有关则称为 Mealy 状态机。最后的输出只和当前状态有关而与输入无关则称为 Moore 型状态机。
三段式:使用三个always模块。一个采用同步时序描述状态转移,一个采用组合逻辑判断状态转移条件,描述状态转移规律,另一个描述状态输出(可以用组合电路输出,也可以时序电路输出)。
为什么三段式:二段式在组合逻辑特别复杂时,注意需在后面加一个触发器以消除组合逻辑对输出产生的毛刺的影响。三段式因为第三个always会生成触发器。其实现在的器件根本不在乎这一点资源消耗。