1:当为时序逻辑建模,使用“非阻塞赋值”。
2:当为锁存器(latch)建模,使用“非阻塞赋值”。
3:当用always块为组合逻辑建模,使用“阻塞赋值”。
4:当在同一个always块里面既为组合逻辑又为时序逻辑建模,使用“非阻塞赋值”。
5:不要在同一个always块里面混合使用“阻塞赋值”和“非阻塞赋值”。
6:不要在两个或两个以上always块里面对同一个变量进行赋值。
7:使用$strobe以显示已被“非阻塞赋值”的值。
8:不要使用#0延迟的赋值。
9:在VERILOG语法中, if...else if ... else 语句是有优先级的,一般说来第一个IF的优先级最高,最后一个ELSE的优先级最低。如果描述一个编码器,在XILINX的XST综合参数就有一个关于优先级编码器硬件原语句的选项Priority Encoder Extraction. 而CASE语句是“平行”的结构,所有的CASE的条件和执行都没有“优先级”。而建立优先级结构会消耗大量的组合逻辑,所以如果能够使用CASE语句的地方,尽量使用CASE替换IF...ELSE结构。
10:XILINX的底层可编程硬件资源叫SLICE,由2个FF和2个LUT组成。 FF触发器 LUT查找表,ALTERA的底层可编程硬件资源叫LE, 由1个FF和1个LUT组成。