Verilog中$finish、$stop的使用与区别

本文转自 Verilog中$finish、$stop的使用与区别,内容略有调整

1、函数说明

1、$finish

系统任务$finish的作用是退出仿真器,结束仿真过程。格式:

$finish
$finish(n)

$finish后面不带参数时,则默认参数为1。
当$finish带参数时,根据不同的参数值,系统输出的特征信息:

  • 0:不输出任何信息;
  • 1:输出当前仿真时刻和位置;
  • 2:输出当前仿真时刻、位置和仿真过程中所用的memory及CPU时间的统计。

2、$stop

$stop 任务得作用是把EDA工具(例如仿真器)置为暂停模式,在仿真环境下给出一个交互式的命令提示符,将控制权交给用户。格式与 $finish类似 :

$stop
$stop(n)

$stop 后面不带参数时,则默认参数为1。
$stop 带参数时,根据不同的参数值,系统输出的特征信息:

  • 0:不输出任何信息;
  • 1:输出当前仿真时刻和位置;
  • 2:输出当前仿真时刻、位置和仿真过程中所用的memory及CPU时间的统计。

2、实际应用

​ 这两个系统任务在不同的编译器下使用可能有细微的区别,接下来分别在vivado仿真器和modelsim仿真器中进行验证。

2.1 Vivado环境

2.1.1 $stop在vivado环境

使用如下testbenchn进行验证:信号a每20ns产生0或1,在200ns处使用$stop暂停。

`timescale 1ns / 1ns
 
module tb_test_sf();
	reg	a;
	
	initial begin	
		a = 0;
		#200 $stop(0);			
end 
always #10 a = {$random} % 2;

endmodule

点击RUN ALL按钮,:

  1. 不改变代码,​ $stop(0)
  • 波形仿真停留在200ns处,此时可以继续仿真。
    在这里插入图片描述
  • TCL窗口打印的信息:
    在这里插入图片描述
  1. 将$stop(0)内参数改为1:
  • 仿真结束后自动跳转到testbench的$stop语句处,波形依旧停留在200ns处。
    在这里插入图片描述
  • TCL窗口打印的信息变多了一些:
    在这里插入图片描述
  1. 将$stop(0)内参数改为2:
  • 仿真结束后自动跳转到testbench的$stop语句处,波形依旧停留在200ns处。
    在这里插入图片描述
  • TCL窗口打印的信息多了memory和CPU的使用情况:
    在这里插入图片描述

2.1.2、$finish在vivado环境

​ 使用如下testbenchn进行验证:信号a每20ns产生0或1,在200ns处使用$finish终止仿真。

`timescale 1ns / 1ns

module tb_test_sf();
	reg	a;

	initial begin	
		a = 0;
		#200 $finish(0);			
	end

always #10 a = {$random} % 2;

endmodule
  1. 不改变代码,​ $stop(0)
  • 波形仿真停留在200ns处, 仿真并不会停止,此后仍可以继续仿真。
    在这里插入图片描述
  • TCL打印信息:
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-q2kH7VmA-1682501294922)(./a.assets/f0b4b3da773e498c9181c3af4636e587-1682501097582-71.png)]
  1. 将$finish(0)内参数改为1:

​ 仿真结束后自动跳转到testbench的$finish语句处,波形依旧停留在200ns处(后续也仍可仿真)。
在这里插入图片描述

  • TCL窗口打印的信息变多了一些:
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3ezjgTcU-1682501294922)(./a.assets/98b99f7d2557442aa337ec7efe25d0c3-1682501097582-75.png)]
  1. $finish(2)的情况基本一致,只不过打印信息多了memory和CPU的使用情况:
    在这里插入图片描述

2.2 Modelsim环境

2.2.1 $stop在modelsim环境

依然使用上面的TB进行验证

  1. 将$stop(0)内参数设置为2
  • 点击仿真300ns,仿真结束后自动跳转到testbench的$stop语句处,波形则停留在200ns处
    在这里插入图片描述在这里插入图片描述

  • 窗口打印的信息:
    在这里插入图片描述

  • 此时,若点击继续仿真按钮,则会在仿真到300ns处暂停,接下来也可以继续进行仿真。
    在这里插入图片描述

  1. 接下来将$stop(2)内参数改为1,其他与参数为2的情况一致,只是窗口打印没有了memory和CPU的使用情况:
    在这里插入图片描述

  2. 将$stop(1)内参数改为0,仿真暂停后并没有自动跳转到testbench的对应界面,且打印信息更少:
    在这里插入图片描述

2.2.2、$finish在modelsim环境

​ 依然使用上面的TB进行验证,首先将$finish()内参数设置为0:

  • 弹出提示框:
    在这里插入图片描述
    若选择是则会退出仿真并关闭modelsim软件;选否则会将将波形在200ns处暂停,后续可以继续仿真,窗口自动跳转到 testbench 的 $finish语句处:
    在这里插入图片描述
    窗口打印信息:
    在这里插入图片描述

  • $finish(1) 的情况基本与 $finish (0)一致,只是打印信息的差别:
    在这里插入图片描述

​ - $finish(2)页是打印信息的差别:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-E4hp4rlA-1682501294924)(./a.assets/091af61df72a49daa268b8be08505b6e-1682501097582-87.png)]

3、总结

  • $finish可以终止仿真,一般用在仿真的结尾处。例如完成某些特定激励的仿真后将仿真终止,防止仿真不停地运行
  • $stop可以暂停仿真,一般用来在某个特定的时间暂定仿真
  • $stop和$finish常用在测试模块的initial模块中,配合时间延迟用来控制仿真的持续时间
  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值