ASIC-WORLD Verilog(14)系统任务

本文介绍了Verilog语言中的系统任务,如$display、$strobe和$monitor用于实时监控,以及$time、$reset等用于处理仿真时间和控制流程。同时涵盖了文件操作任务如$fopen和$fdisplay等。
摘要由CSDN通过智能技术生成

写在前面

        在自己准备写一些简单的verilog教程之前,参考了许多资料----Asic-World网站的这套verilog教程即是其一。这套教程写得极好,奈何没有中文,在下只好斗胆翻译过来(加点自己的理解)分享给大家。

        这是网站原文:Verilog Tutorial

        这是系列导航:Verilog教程系列文章导航


介绍

        有些系统任务可以用在仿真期间生成输入和输出。这些系统任务以美元符号 ($) 开头。综合工具(在综合时)会解析并忽略系统功能,因此这些系统函数甚至可以包含在可综合模型中。

$display, $strobe, $monitor

        这三个命令具有相同的语法,他们都可以在仿真时在后台屏幕上打印文本。

        $display 和 $strobe 每次执行时都会打印一次,而 $monitor 则在其任意一个参数更改时就会打印一次。$display 和 $strobe 之间的区别在于 $strobe 显示当前仿真时间单位最末尾的参数,而不是确切执行时的参数。格式字符串与C/C++中的格式字符串类似,并且可以包含格式字符。格式字符包括%d(十进制)、%h(十六进制)、%b(二进制)、%c(字符)、%s(字符串)和%t(时间)、%m(层次结构级别)。%5d、%5b 等将为数字提供正好 5 个空格,而不是所需的空间。

语法

  • $display("format_string", par_1, par_2, ... );
  • $displayb (如上所述,但默认为二进制..);

  • $strobe("format_string", par_1, par_2, ... );
  • $strobeh(如上所述,但默认为十六进制..);

  • $monitor("format_string", par_1, par_2, ... );
  • $monitoro (如上所述,但默认为八进制..);

$time, $stime, $realtime

        它们分别以 64 位整数格式、32 位整数格式和实数格式返回当前所处的仿真时间。

$reset, $stop, $finish

        $reset 将仿真重置回时间 0;$stop 停止仿真工具并将其置于交互模式,用户可以在其中输入命令;$finish 退出模拟工具回到操作系统。

$scope, $showscope

        $scope(hierarchy_name) 将当前分层范围设置到hierarchy_name。$showscopes(n) 列出当前范围内(及以下,如果 n 设置为 1)的所有模块、任务和块名称。

$random

        $random 每次被调用时都会生成一个随机整数。如果序列是可重复的,则第一次调用 random 并给它一个数字参数(种子)。否则,种子来自计算机时钟。

$dumpfile、$dumpvar、$dumpon、$dumpoff、$dumpall

        这些任务可以将变量变化转储到像Debussy这样的模拟查看器。转储文件(dump files)能够转储仿真中的所有变量。这对于调试来说很方便,但可能会很慢。

语法

  • $dumpfile("ilename.vcd")
  • $dumpvar 转储设计中的所有变量。
  • $dumpvar(1, top) 转储顶部和下面模块中的所有变量,但不转储顶部实例化的模块。
  • $dumpvar(2, top) 转储模块顶部和下面 1 层中的所有变量。
  • $dumpvar(n, top) 转储模块顶部和下面 n-1 层中的所有变量。
  • $dumpvar(0, top) 转储模块顶部和下面所有级别的所有变量。
  • $dumpon 启动转储。
  • $dumpoff 停止转储。

          

$fopen、$fdisplay、$fstrobe、$fmonitor 和 $fwrite

        这些任务可以更有选择性地写入文件。

        $fopen 打开一个输出文件并为打开的文件提供一个句柄以供其他命令使用。
        $fclose 关闭文件并允许其他程序访问它。
        $fdisplay 和 $fwrite 每当执行时都会将格式化数据写入文件。它们是相同的,只是 $fdisplay 在每次执行后插入一个新行,而 $write 则不会。
        $strobe 在执行时也会写入文件,但它会等到时间步中的所有其他操作完成后才写入。因此初始#1 a=1;b = 0; $fstrobe(hand1, a,b); b=1;将为a和b写1 1。
        只要 $monitor 的任何参数发生更改,就会写入文件。

语法

  • handle1=$fopen("filenam1.suffix")
  • handle2=$fopen("filenam2.suffix")
  • $fstrobe(handle1, format, variable list)     //选通数据到filenam1.suffix
  • $fdisplay(handle2, format, variable list)    //将数据写入filenam2.suffix
  • $fwrite(handle2, format, variable list)        //将数据写入 filenam2.suffix 中,全部写在一行中。在需要换行的地方输入格式字符串。

  • 📣您有任何问题,都可以在评论区和我交流📃!
  • 📣本文由 孤独的单刀 原创,首发于CSDN平台🐵,博客主页:wuzhikai.blog.csdn.net
  • 📣您的支持是我持续创作的最大动力!如果本文对您有帮助,还请多多点赞👍、评论💬和收藏⭐!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

孤独的单刀

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值