1.结束方式
1) $finish
2) $stop
3)program隐式结束
program pgm1;
initial begin : proc1
#100ns;
$display("@%0t p1.proc1 finished",$time);
end
initial begin : proc2
#400ns;
$display("@%0t p1.proc2 finished",$time);
end
endprogram
program pgm2;
initial begin : proc1
#200ns;
$display("@%0t p2.proc1 finished",$time);
end
initial begin : proc2
#300ns;
$display("@%0t p2.proc2 finished",$time);
end
endprogram
module tb;
bit clk;
initial begin
forever #5ns clk <= !clk;
end
counter dut(clk);
pgm1 p1();
pgm2 p2();
endmodule
因为延时最大的是400ns,所以在p1.proc2处结束
4)program显式结束( $exit() )
若某program中存在forever语句,program不会自动停止,需要在目标program内置系统函数$exit()来要求该program强行结束,待该program结束之后,仿真器仍然会等待其他program执行完毕后再结束仿真。
program pgm1;
initial begin : proc1
#100ns;
$display("@%0t p1.proc1 finished",$time);
end
initial begin : proc2
#200ns;
$display("@%0t p1.proc2 finished",$time);
end
endprogram
program pgm2;
initial begin : proc1
#700ns;
$display("@%0t p2.proc1 finished",$time);
$exit();
end
initial begin : proc2
forever begin
#300ns;
$display("@%0t p2.proc2 finished",$time);
end
end
endprogram
module tb;
bit clk;
initial begin
forever #5ns clk <= !clk;
end
counter dut(clk);
pgm1 p1();
pgm2 p2();
endmodule
上述代码p2.proc2中存在forever,所以需要添加$exit()去停止仿真,$exit可以放在pmg2中任意一个initial中。
2.例题
program属于软件部分,所以不可以例化module,always过程块也是用于硬件部分,所以选AC