阻塞赋值:
往往与触发沿没有关系,只与输入电平的变化有关系。它的操作可以认为是只有一个步骤的操作,即计算赋值号右边的语句并更新赋值号左边的语句,此时不允许有来自任何其他 verilog语句的干扰,直到现行的赋值完成,才允许下一条的赋值语句的执行。
串行块( begin-end)中,各条阻塞赋值语句将以它们在顺序块中的排列次序依次执行。
代码如下:
a = 1; b = 2; c = 3;
begin
a = b + 1; //①
b = a + 2; //②
c = a - 1; //③
end
运行顺序是:① ---->②----->③,依次运行,结果为:a = 3;b = 5;c = 2。 将右边的值赋给左边变量。一般用于组合逻辑电路。
非阻塞赋值:
对应的电路结构往往与触发沿有关系,只有在触发沿的时刻才能进行非阻塞赋值。
它的操作可以看作为两个步骤的过程:在赋值开始时刻,计算赋值号右边的语句。在赋值结束时刻,更新赋值号左边的语句。
在计算非阻塞语句赋值号右边的语句和更新赋值号左边的语句期间,允许其他的 Verilog语句同时进行操作,非阻塞操作只能用于对寄存器类型变量进行赋值,因此只能用于“ initial”和“ always”块中,不允许用于连续赋值assign
代码如下:
a = 1; b = 2; c = 3;
begin
a <= b + 1; //①
b <= a + 2; //②
c <= a - 1; //③
end
程序分析:① ----②-----③是并向执行的,在begin中“<=”右边的语句先执行完,执行完end后,将“<=”左边的值更新,a = 3;b = 3;c = 0;一般用于时序逻辑电路。