阻塞赋值和非阻塞赋值的区别

在阻塞赋值和非阻塞赋值问题当中有一个概念叫做正规延迟和内定延迟,这是两个比较重要的概念。

其中正规延迟是指延迟信号在赋值语句之外,#N sun=a+b.(#N sun<=a+b)

正规延迟的定义为,在T时刻满足赋值语句执行的条件时,需要在T+N时刻正式执行,也就是说,如果在时序电路中,满足具体情况之后还需要在等待N时刻才能完成执行,且执行时数据为T+N时刻数据。
always () #1.5 y=x;
在这里插入图片描述
always (
) #1.5 y<=x;
在这里插入图片描述
他们的结果是一样的

内定延迟可表示为: sun= #N a+b (sun<= #N a+b)

在T时刻满足执行条件时,取T时刻情况下的a,b值,将其相加在一块,然后在T+N时刻赋予sum。
且阻塞赋值与非阻塞赋值的区别就在这个地方体现了出来,阻塞赋值中,T时刻得到的结果会保存下来,在没有成功赋予出去时不会再有下一步操作,即不会发生没有将结果赋予出去就出现下一步操作将保存结果刷新掉。
在非阻塞赋值语句当中,其在未赋值出去之前若又遇到可执行情况,会将该时刻结果存起来,在上一个结果赋出去之后最新的结果也能在一段时间间隔间隔之后赋出去。
always () y= #1.5 x;
在这里插入图片描述
always (
) y<=#1.5 x
在这里插入图片描述
由于内定延迟中是需要一个寄存器将结果寄存一段时间的,所以与连续赋值是有冲突的,故连续赋值语句没有内定延迟的写法,只有正规延迟的写法。
assign #1.5 y=x;

猜你喜欢

转载自blog.csdn.net/dajunzhi/article/details/107522846