zhiweiqiang33 发表于 2017-7-7 17:05:15

深入理解阻塞和非阻塞赋值的不同

阻塞和非阻塞赋值的语言结构是Verilog 语言中最难理解概念之一。甚至有些很有经验的Verilog 设计工程师也不能完全正确地理解:何时使用非阻塞赋值何时使用阻塞赋值才能设计出符合要求的电路。他们也不完全明白在电路结构的设计中,即可综合风格的Verilog模块的设计中,究竟为什么还要用非阻塞赋值,以及符合IEEE 标准的Verilog 仿真器究竟如何来处理非阻塞赋值的仿真。本小节的目的是尽可能地把阻塞和非阻塞赋值的含义详细地解释清楚,并明确地提出可综合的Verilog模块编程在使用赋值操作时应注意的要点,按照这些要点来编写代码就可以避免在Verilog 仿真时出现冒险和竞争的现象。我们在前面曾提到过下面两个要点:

        在描述组合逻辑的always块中用阻塞赋值,则综合成组合逻辑的电路结构。
        在描述时序逻辑的always块中用非阻塞赋值,则综合成时序逻辑的电路结构。

为什么一定要这样做呢?回答是,这是因为要使综合前仿真和综合后仿真一致的缘故。如果不按照上面两个要点来编写Verilog代码,也有可能综合出正确的逻辑,但前后仿真的结果就会不一致。

为了更好地理解上述要点,我们需要对Verilog 语言中的阻塞赋值和非阻塞赋值的功能和执行时间上的差别有深入的了解。为了解释问题方便下面定义两个缩写字:

RHS – 赋值等号右边的表达式或变量可分别缩写为: RHS表达式或RHS变量。 LHS – 赋值等号左边的表达式或变量可分别缩写为: LHS表达式或LHS变量。
IEEE Verilog标准定义了有些语句有确定的执行时间,有些语句没有确定的执行时间。若有两条或两条以上语句准备在同一时刻执行,但由于语句的排列次序不同(而这种排列次序的不同是IEEE Verilog标准所允许的), 会产生不同的输出结果。这就是造成Verilog模块冒险和竞争现象的原因。为了避免产生竞争冒险现象,理解阻塞和非阻塞赋值在执行时间上的差别是至关重要的。

fpga_feixiang 发表于 2017-7-8 09:53:13

深入理解阻塞和非阻塞赋值的不同

4798345 发表于 2017-7-8 17:02:00

ganxielouzhufenxiang

4798345 发表于 2017-7-9 23:04:34

至芯科技的文档一向如此 非常详细 非常易懂值得信赖

陈飞龙 发表于 2017-7-10 11:26:52

在描述组合逻辑的always块中用阻塞赋值,则综合成组合逻辑的电路结构。
在描述时序逻辑的always块中用非阻塞赋值,则综合成时序逻辑的电路结构。:):):):)

晓灰灰 发表于 2017-7-10 11:43:02

感谢楼主分享

zxopenlz 发表于 2017-7-12 09:22:44

一个阻塞一个发生一个不阻塞一个发生

zhiweiqiang33 发表于 2017-7-20 16:15:50

以上大神都说的很有理理

fpga_feixiang 发表于 2017-7-21 13:23:53

很好的文章,深度解析

zhiweiqiang33 发表于 2017-7-21 16:34:14

恩恩 寇老湿 给予解析
页: [1] 2
查看完整版本: 深入理解阻塞和非阻塞赋值的不同