Testbench中阻塞赋值与非阻塞赋值

 1 module test();
 2 reg a;
 3 reg b;
 4 reg c;
 5 initial begin
 6   a=1'b0;
 7   b=1'b0;
 8   c=1'b1;
 9   
10   #10
11   a=1'b1;
12   b=#5 1'b1;
13   c=1'b0;
14   //b=#5 1'b0;
15   
16   #5
17   a<=1'b0;
18   c<=#2 1'b1;
19 end
20 endmodule
B=#5 1b1,使其后时钟推移,相当于#5 B=1'b1

Testbench中阻塞赋值与非阻塞赋值_第1张图片

 1 module test();
 2 reg a;
 3 reg b;
 4 reg c;
 5 initial begin
 6   a=1'b0;
 7   b=1'b0;
 8   c=1'b1;
 9   
10   #10
11   a=1'b1;
12   b<=#5 1'b1;
13   c=1'b0;
14   //b=#5 1'b0;
15   
16   #5
17   a<=1'b0;
18   c<=#2 1'b1;
19 end
20 endmodule
b<=#5 1'b1;只是本句延迟5单位,其后语句不受影响

Testbench中阻塞赋值与非阻塞赋值_第2张图片

 1 module test();
 2 reg a;
 3 reg b;
 4 reg c;
 5 initial 
 6 begin
 7   a=1'b0;
 8   b=1'b0;
 9   c=1'b1;
10   
11   #10
12   a=1'b1;
13   b<=#5 1'b1;
14   c=1'b0;
15   b=#5 1'b0;
16   
17   #5
18   a<=1'b0;
19   c<=#2 1'b1;
20 end
21 endmodule
在同一时刻有<=和=,那么<=赋值生效,同时,电路时刻根据=往后推若干单位

Testbench中阻塞赋值与非阻塞赋值_第3张图片

以上三个例子都是在说明,对于内延时,<=对其后语句没有影响,而=使其后语句延迟若干个单位。

 1 `timescale 10ns/ 1ns
 2 module test();
 3 reg a;
 4 reg b;
 5 reg c;
 6 reg d;
 7 initial begin
 8   a<=1;
 9   c<=1;
10 end
11 initial begin
12   #5 a=0;
13   b=a;
14 end
15 initial begin
16   #5 c<=0;
17   d<=c;
18 end
19 endmodule
级联D触发器模型

此时,不同的initial模块都在0时刻激活。在第一个initial语句,在时刻0,a和c均被赋值1,在第二个initial语句中,在时刻5,a被阻塞赋值0,在同一时刻,b被赋值a。而在第三个initial语句中,同样在时刻5 c被非阻塞赋值赋值0,在同一时刻d被非阻塞性赋值为之前c的值。

你可能感兴趣的:(Testbench中阻塞赋值与非阻塞赋值)