个人总结阻塞赋值和非阻塞赋值的区别 本文关键词:赋值,阻塞,区别
个人总结阻塞赋值和非阻塞赋值的区别 本文简介:关于阻塞复制和非阻塞赋值阻塞赋值和非阻塞赋值的区别阻塞赋值=阻塞性过程赋值在其后所有语句执行前执行,即在下一语句执行前该赋值语句完成执行。非阻塞赋值<=过程赋值中,对目标的赋值是非阻塞的(因为延时),但可预订在将来某个时间步发生(根据时延;如果是0时延,那么在当前时间步结束)。当非阻塞性过程赋值被执
个人总结阻塞赋值和非阻塞赋值的区别 本文内容:
关于阻塞复制和非阻塞赋值
阻塞赋值和非阻塞赋值的区别
阻塞赋值
=
阻塞性过程赋值在其后所有语句执行前执行,即在下一语句执行前该赋值语句完成执行。
非阻塞赋值
<=
过程赋值中,对目标的赋值是非阻塞的(因为延时),但可预订在将来某个时间步发生(根据时延;如果是0时延,那么在当前时间步结束)。
当非阻塞性过程赋值被执行时,计算右端表达式,右端值被赋予左端目标,并继续执行下一条语句。
预定的最早输出将在当前的时间步结束时,这种情况发生在赋值语句中没有时延时。在当前时间步结束或任意输出被调度时,即对左端目标赋值。
在同一个always/initial块里不要混用两种赋值语句
阻塞式过程赋值与非阻塞式过程赋值(VHDL中使用非阻塞式)
c
=
a
阻塞式过程赋值
c
<=
a
非阻塞式过程赋值
两种赋值不会对语句本身的赋值有影响,但会影响以后对赋值结果的引用。书中建议组合逻辑使用阻塞式,时序逻辑使用非阻塞式。且语句块中如果只有一条赋值语句,是阻塞还是非阻塞都没有任何不一样。
非阻塞式过程赋值的赋值对象是在未来(即当前仿真时刻结束时)被赋值。
例
always
@
(negedge
clockB)
begin
rightshift
=
rightshift
selectfist
<=
rightshift
|
xflag;
checkstop
<=
slectfist
^
mask;
end
endmodule
左边的红线是rightshift,其未经过触发器,右边的是selectfist经过触发器了.