FPGA中阻塞赋值与⾮阻塞赋值原理实验
实验⽬的:掌握阻塞赋值与⾮阻塞赋值的区别
1.实验原理:
在Verilog HDL语⾔中,信号有两种赋值⽅式:⾮阻塞赋值和阻塞赋值;
1.在描述组合逻辑的always块中⽤阻塞赋值,则综合成组合逻辑的电路结构;
2.在描述时序逻辑的always块中⽤⾮阻塞赋值,则综合成时序逻辑的电路结构。
以下缩写词定义:
RHS-赋值等号右边的表达式或变量。
LHS-赋值等号左边的表达式或变量。
IEEE Verilong标准定义了有些语句有确定的执⾏时间,有些语句没有确定的执⾏时间。
如果有两条或两条以上语句准备在同⼀时刻执⾏,但由于语句的排列顺序不同,却产⽣了不同的输出结果,这就造成了Verilog模块冒险和
竞争现象的原因。为了避免这⼀现象,需理清阻塞赋值和⾮阻塞赋值之间的区别。
⾮阻塞赋值操作符为"<=",⾮阻塞与阻塞赋值最⼤的区别就是⾮阻塞赋值允许其他的Verilog语句同时进⾏操作,⾮阻塞的操作过程可以看
作两个步骤:
(1)在赋值开始时刻,计算⾮阻塞赋值RHS表达式;
(2)在赋值结束时刻,更新⾮阻塞赋值LHS表达式;
⾮阻塞赋值操作只能⽤于对寄存器类型变量进⾏赋值,因此只能⽤在“initial”块和“always”块等过程块中,且⾮阻塞赋值不允许⽤于连
续赋值。
(1)在语句块中,语句所赋值的变量值不能⽴即就为下⾯的语句所⽤;
(2)块结束后才能完成这次赋值操作,⽽所赋的变量值是上⼀次赋值得到的;
(3)在编写可综合的时序逻辑模块时,这是最常⽤的赋值⽅法。
阻塞赋值的操作符为“=”,该种赋值⽅式在执⾏时只有⼀个步骤,即计算RHS并更新LHS,此时不能允许有来⾃任何其他Verilog语句⼲
扰,所谓阻塞的概念是指在同⼀个always块中,其后⾯的赋值语句从概念上(即使不设定延迟)是在前⼀句赋值语句结束后再开始赋值的。
如果在⼀个过程块中阻塞赋值的RHS变量正好是另⼀个过程块中阻塞赋值的LHS变量,这两个过程块⼜⽤同⼀个时钟沿触发,这时阻塞赋
值操作就会出现问题,即如果阻塞顺序安排的不好,就会出现竞争,若这两个阻塞赋值操作⽤同⼀个时钟沿触发,则执⾏的顺序是⽆法确定
的。
(1)赋值语句完成后,块才结束;
(2)b的值在赋值语句执⾏完后⽴刻改变。
(3)在时序逻辑中使⽤时,可能会产⽣意想不到的结果。
通俗⼀点讲就是阻塞赋值,操作符为“ =”, “阻塞”是指在进程语句( initial 和 always)中,当前的赋值语句阻断了其后的语句,也就
是说后⾯的语句必须等到当前的赋值语句执⾏完毕才能执⾏。⽽且阻塞赋值可以看成是⼀步完成的,即:计算等号右边的值并同时赋给左边
变量。⾮阻塞赋值,操作符为“ <=”, “⾮阻塞”是指在进程语句( initial 和 always)中,当前的赋值语句不会阻断其后的语句。
注:实验步骤注重不同赋值⽅式的对⽐区别和实现⽅法,以及如何体现在RTL视⾓电路及仿真信号结果的不同展⽰。