SV---仿真的结束

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

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值