1、非阻塞串行语句块(begin_end) 当前赋值语句未执行完之前,可以执行下一条语句。所以串行逻辑的顺序不影响输出结论。
2、 阻塞串行语句块(begin_end)阻塞赋值语句以他们的排列顺序执行,当执行完上一条,下一条可以立即使用上一条的结论,类似组合逻辑,所以当顺序书写时,按照组合逻辑特性,一拍就可以输出结论,当倒序书写时才能实现延3拍的数据。(书写顺序看下举列)
always语句块描述例子,对应不同的书写顺序,观察对结论的影响
功能:从q端口延三拍输出d信号
正常顺序书写:
always @ (posedge clk)
begin
d_temp1 <= d;
d_temp2 <= d_temp1;
q <= d_temp2;
end
正常延迟三拍
always @ (posedge clk)
begin
d_temp1 = d;
d_temp2 = d_temp1;
q = d_temp2;
end
只延迟一拍,d_temp1,d_temp2,q都是延一拍为1(类似组合逻辑)
倒序顺序书写:
always @ (posedge clk)
begin
q = d_temp2;
d_temp2 = d_temp1;
d_temp1 = d;
end
正常延迟三拍
always @ (posedge clk)
begin
q <= d_temp2;
d_temp2 <= d_temp1;
d_temp1 <= d;
end
正常延迟三拍
总结:非阻塞“<=” always语句块内的描述顺序不影响结果
阻塞 "=" 正常顺序描述 延一拍, 倒序延三拍