1. ** 阻塞赋值(=)** :阻塞赋值操作实质上是一次性连续完成的,即计算等号右边变量(或表达式)的值(RHS)并立即赋值给等号左边的变量(LHS)。其中阻塞的含义为在同一个always块中,当前赋值语句正在执行时禁止其后的所有其他赋值语句的执行。只有当前赋值语句执行完成后,其后的赋值语句才能被执行。
*****
2. ** 非阻塞赋值(<=)** :非阻塞赋值操作实质上是分两步完成的,
第一步:在敏感事件开始时刻(如clk正跳变沿开始时刻)开始计算等号右边变量(或表达式)的值RHS;
第二步:在敏感事件结束时刻(如clk正跳变沿结束时刻)将等号右边的值赋给等号左边的变量LHS。其中非阻塞的含义为在执行当前的非阻塞赋值语句的同时允许其他的语句执行。
由以上执行过程知,二者主要区别为:等号右边的变量值是否立即得到更新;赋值语句执行期间是否允许其他语句执行。
**阻塞赋值可能带来电路的竞争冒险从而使输出不确定**