我正在为一个简单的XOR门创建一个TESTBENCH。我在测试平台内使用了非阻塞语句。我期待并行执行但我最终得到了顺序执行。我正在附加下面的代码和输出。可能是什么问题?
module test_xor_tb;
wire y;
reg a,b;
test_xor x1(y,a,b);
initial begin
a<=0;b<=0;
#10 a<=1;
#10 b<=1;
#25 b<=0;
#35 a<=0;
end
initial
$monitor("AT TIME %t,a=%b,b=%b,Y=%b",$time,a,b,y);
endmodule
/////////////////////////////////////////////////////////////////////
module test_xor(y,a,b);
input a,b;
output y;
assign y=a^b;
endmodule
我得到的输出在下面给出
# AT TIME 0,a=0,b=0,Y=0
# AT TIME 10,a=1,b=0,Y=1
# AT TIME 20,a=1,b=1,Y=0
# AT TIME 45,a=1,b=0,Y=1
# AT TIME 80,a=0,b=0,Y=0
我的预期输出是
# AT TIME 0,a=0,b=0,Y=0
# AT TIME 10,a=1,b=0,Y=1
# AT TIME 10,a=1,b=1,Y=0
# AT TIME 25,a=1,b=0,Y=1
# AT TIME 35,a=0,b=0,Y=0
那么为什么非阻塞分配在顺序执行
答案 0 :(得分:1)
#10 a<=1;
相当于#10; a<=1;
,#10;
是阻止声明。要实现并行,您需要非阻塞延迟a<= #10 1;
initial begin
a<=0;b<=0;
a<= #10 1;
b<= #10 1;
b<= #25 0;
a<= #35 0;
end
或者,您可以在分支连接中放置分配。
initial begin
fork
a<=0;b<=0;
#10 a<=1;
#10 b<=1;
#25 b<=0;
#35 a<=0;
join
end
我建议使用fork-join方法的非阻塞延迟,但两者都可以。