《Verilog HDL 综合实用教程》读书笔记——阻塞与非阻塞(补充)
0赞
组合逻辑用阻塞式赋值,时序逻辑用非阻塞式赋值(当对变量的赋值和引用都在同一条always中时,可以采用阻塞式)。
阻塞赋值的组合逻辑:
reg TM,TN,TO,TZ;
always @ (A or B or C or D or E)
begin
TM = A & B;
TN = C & D;
TO = TM|TN|E;
TZ = !TO;
end
阻塞式是计算A & B之后立即更新TM的值。既TO使用的是当前的A与B的结果。如果是用非阻塞:
reg TM,TN,TO,TZ;
always @ (A or B or C or D or E)
begin
TM <= A & B;
TN <= C & D;
TO <= TM|TN|E;
TZ <= !TO;
end
A & B的值在当前仿真周期结束之后被赋给TM,所以TO使用的是上一时刻的A与B。若要使非阻塞和阻塞的结果一样,要将非阻塞的always事件表中加入TM、TN、TO:
always @ (A or B or C or D or E or TM or TN or TO)这样每次TM、TN、TO变化时也要执行这段代码。(但使用ISE6.3对以上三种情况综合的结果完全相同)
又若有这种情况:
always @ (posedge ClkA)
... = DataOut;
always @ (posedge ClkA)
DataOut = ...;
两个进程的执行顺序不定,所以改成:
always @ (posedge ClkA)
... = DataOut;
always @ (posedge ClkA)
DataOut <= ...;
(具体情况具体分析啊)
