深入理解Verilog HDL的阻塞和非阻塞赋值,提升RTL编码能力(一)

Verilog HDL作为芯片设计领域的一门语言,在世界范围内的使用者众多。特别是在我们国内,除了一些军工企业使用VHDL之外,包括企业、高校里面都大多使用Verilog HDL作为工作和教学的语言。相信很多电子相关专业的同学和从业者,对这门语言的第一感觉,都觉得很难,而阻塞赋值和非阻塞赋值有时Verilog HDL这门语言里面最难明白的结构之一。

不管是刚毕业的新同事,还是一些比较有经验的老从业者,有很多都不太清楚在仿真器里面“非阻塞赋值”和“阻塞赋值”究竟是怎么设定执行的。那么今天我就想分享一些我的理解(先不考虑延时的影响),来和大家进行讨论,因为自己水平有限,如果理解有误,欢迎大家指正。

深入理解Verilog HDL的阻塞和非阻塞赋值,提升RTL编码能力(一)

阻塞赋值

阻塞赋值使用“=”作为赋值符号,表示阻止下一句的执行。在具体使用的时候,有两种常用的语法结构:

assign语句中使用。这条大家应该会比较清楚,因为如果使用不正确,编译都没办法通过,在这里就不再讨论。在always块中使用阻塞赋值,来产生组合逻辑。这块的问题会比较多,因为如果使用不正确,在仿真阶段可能没有问题,但是也许会导致综合得到的电路和RTL代码的仿真结果不匹配,这就是很大的风险。非阻塞赋值

推荐阅读