阻塞与非阻塞赋值

由两段代码想到纠结过的问题

Posted by Florian on April 15, 2019

阻塞与非阻塞赋值

曾经在数字电路课上初学Verilog语言的时候对阻塞与非阻塞赋值的问题产生过一定的纠结,但是由于考试不考,而且平时用到的时候感觉也没怎么需要深究这个概念。(抱歉,第一次合鸟了

直到几个月前看到了老师的一条朋友圈:“开口就问阻塞非阻塞区别的,其实都是没做过大型的数字系统设计,”

当时想的是,我得去认真理解下这条朋友圈的内容。

但是,当时匆匆应付期末考试(抱歉,第二次合鸟了

FLAG是显而易见的

直到最近几天看到两段功能相同的代码(学过编程的都知道Swap函数吧

使用一个中间变量交换a、b寄存器的值

always @ (posedge clk) begin
tmp = b;
b = a;
a = tmp;
end

不使用中间变量交换a、b寄存器的值

always @(posedge clk) begin
a <= b;
b <= a;
end

看到这里,阻塞与非阻塞赋值的问题应该不是问题了。