VHDL语言里没有阻塞与非阻塞之分。相比Verilog,VHDL更适合行为级建模。
Verilog HDL中,有两种过程赋值方式,即阻塞赋值(blocking)和非阻塞赋值(nonblocking)。阻塞赋值执行时,RHS(right hand statement)估值与更新LHS(left hand statement)值一次执行完成,计算完毕,立即更新。在执行时阻塞同块中的其他语句的执行。阻塞式(blocking)的操作符为 “ = ”。它的执行很像传统程序设计语言。非阻塞赋值RHS估值与更新LHS值分两步执行。在单位仿真周期开始时RHS估值,在同一单位仿真周期末更新LHS值,不阻塞同块中其他语句的执行。非阻塞式(non-blocking)的操作符为 “ <= ”,它的执行更像并行电路,使描述电路更自然。阻塞赋值与非阻塞赋值是Verilog HDL程序设计的难点,它们既有共同点,也有差异,深入剖析其异同,对于硬件程序的开发具有重大意义。
设计原则:
Ÿ 原则1:时序电路建模时,用非阻塞赋值。
Ÿ 原则2:锁存器电路建模时,用非阻塞赋值。
Ÿ 原则3:用always块写组合逻辑时,采用阻塞赋值。
Ÿ 原则4:在同一个always块中同时建立时序和组合逻辑电路时,用非阻塞赋值。
Ÿ 原则5:在同一个always块中不要同时使用非阻塞赋值和阻塞赋值。
Ÿ 原则6:不要在多个always块中为同一个变量赋值。
Ÿ 原则7:用$strobe系统任务来显示用非阻塞赋值的变量值
Ÿ 原则8:在赋值时不要使用 #0 延迟
和Verilog HDL中是一样的