verilog中阻塞与非阻塞

越是看似简单、经常接触的。我们越是不知其所以然。这就是我写本文的原因。
阻塞和非阻塞赋值一般使用在进程中,包括always和initial进程、assign赋值等操作中。

阻塞赋值与非阻塞赋值

always @(event-expression)

    begin     <LHS1=RHS1>

                  <LHS2=RHS2>

      ......   

    end

同样可将采用非阻塞赋值方式的always进程块写成下面的形式:

always @(event-expression)

    begin     <LHS1<=RHS1>

                  <LHS2<=RHS2>

   ......

    end

        阻塞赋值“=”与非阻塞赋值“<=”的本质区别在于:非阻塞赋值语句右端表达式计算完后并不立即赋值给左端,而是同时启动下一条语句继续执行,我们 可以将其理解为所有的右端表达式RHS1、RHS2等在进程开始时同时计算,计算完后 ,等进程结束时同时分别赋给左端变量LHS1、LHS2等。
        而阻塞赋值语句在每个右端表达式计算完后立即赋给左端变量,即赋值语句LHS1=RHS1执行完后LHS1是立即更新的,同时只有LHS1=RHS1执行 完后才可执行语句LHS1=RHS2,依次类推。前一条语句的执行结果直接影响到后面语句的执行结果。

原文地址:https://www.cnblogs.com/yulone/p/4059737.html