本文主要参考夏宇闻的Verilog数字系统设计
1. 非阻塞赋值方式(b<=a)
(1)在语句块中,上面语句所赋的变量值不能立即就为下面的语句所用;
(2)块结束后才能完成这次赋值操作,而所赋的变量是上一次赋值所得到的‘
(3)在编写可综合的时序逻辑模块时,这是最常用的赋值方式。
example
用非阻塞赋值法确定reg型信号b和c
always @ (posedge clk)begin
b_reg <= a_reg;
c_reg <= b_reg;
end
该always块中,用了非阻塞赋值方式,定义两个reg信号b和c,clk信号的上升沿到来时,b就等于a, c就等于b, 这里用到了两个触发器。
注意:赋值是在always 块结束后执行的,c应为原来的b的值。
这个always块描述的电路功能如下:
2. 阻塞赋值方式(b=a)
(1)赋值语句执行完成后,块才结束;
(2)b的值在赋值语句执行完后立刻就改变的
(3)在时序逻辑中使用时,可能会产生意向不到的结果
example
用阻塞赋值法确定reg型信号b和c
always @ (posedge clk)begin
b = a;
c = a;
end
该always块中用了阻塞赋值方式,clk的信号上升沿到来时,将发生如下变化:b马上取a的值,c马上取b的值(即等于a)。
这个always块描述的电路如下
图中只用了一个触发器来寄存a的值,又输出给b和c。这大概不是设计者的初衷。