存器中,在begin和end之间所有语句的右边表达式都被计算并存储完后,对左边的寄存器变量的赋值才会进行。这样C得到的是B的原始值而不是A加一。 begin B <= A; C <= B +1; end
如果我们想让两个最基本的D触发器串联,我们用阻塞和非阻塞赋值看看结果有什么不同
阻塞和非阻塞的不同造成了电路上巨大的不同,因此他们的差别应该牢记。
我们在从仿真(Simulation)的角度去看一下,在输出结果上有造成什么样的不同,我们有同样的的testbench。
代码
仿真波形如下:
可以看到,在阻塞赋值的情况下当时钟上升沿来的时候读取输入iD的值,并且输出oQA和oQB的值应该是一样的,从波形中我们可以看出输出oQA和oQB的波形是完全一样的。 在非阻塞赋值的情况下,它是先计算 iD 和 oQA的值,开始 iD的值为1, oQA的值是不定的,所以oQA被赋为1, 而oQB还是被赋为不定值,两者的波形不一致。
阻塞和非阻塞的学习随着以后的深入还得深刻理解,在用时要遵循规则,避免麻烦。