有人可以解释内部延迟和延迟声明吗?
这是一个简单的逻辑,由 (a,b,c) 触发并将 a&b&c 分配给 d。
module abcd(input a,b,c,output d);
reg d;
always @ (a, b, c)
begin
// d = #5 a & b & c; //intra-delay
#5 d = a & b & c; //delay statement
end
endmodule
module tb;
reg a,b,c;
wire d;
abcd a0(a,b,c,d);
initial
begin
$monitor("time=%d, a=%b, b=%b, c=%b, d=%b",$time,a,b,c,d);
a=0; b=0; c=0;
#4 a=1; b=1; c=1; //4
#1 a=0; //5
#1 a=1; //6
#1 a=0; //7
#1 a=1; //8
#1 a=0; //9
#1 a=1; //10
#1 a=0; //11
#1 a=1; //12
#1 a=0; //13
#100 $finish;
end
endmodule
如果使用intra-delay,结果如下图
time= 0, a=0, b=0, c=0, d=x
time= 4, a=1, b=1, c=1, d=x
time= 5, a=0, b=1, c=1, d=0
time= 6, a=1, b=1, c=1, d=0
time= 7, a=0, b=1, c=1, d=0
time= 8, a=1, b=1, c=1, d=0
time= 9, a=0, b=1, c=1, d=0
time= 10, a=1, b=1, c=1, d=0
time= 11, a=0, b=1, c=1, d=0
time= 12, a=1, b=1, c=1, d=0
time= 13, a=0, b=1, c=1, d=0
time= 15, a=0, b=1, c=1, d=1
如果使用延迟语句,结果如下所示。
time= 0, a=0, b=0, c=0, d=x
time= 4, a=1, b=1, c=1, d=x
time= 5, a=0, b=1, c=1, d=1
time= 6, a=1, b=1, c=1, d=1
time= 7, a=0, b=1, c=1, d=1
time= 8, a=1, b=1, c=1, d=1
time= 9, a=0, b=1, c=1, d=1
time= 10, a=1, b=1, c=1, d=0
time= 11, a=0, b=1, c=1, d=0
time= 12, a=1, b=1, c=1, d=0
time= 13, a=0, b=1, c=1, d=0
有人可以解释其中的区别吗?