当前位置: 首页 > news >正文

Verilog 显示任务($display, $write, $strobe, $monitor)

Verilog 中主要用以下 4 种系统任务来显示(打印)调试信息:$display, $write, $strobe, $monitor。

$display

$display 使用方法和 C 语言中的 printf 函数非常类似,可以直接打印字符串,也可以在字符串中指定变量的格式对相关变量进行打印。例如:

$display("This is a test.");   //直接打印字符串
$display("This is a test number: %b.", num); //打印变量 num 为二进制格式

如果没有指定变量的显示格式,变量值会根据在字符串的位置显示出来,相当于参与了字符串连接。例如:

$display("This is a test number: ", num, "!!!");

如果没有指定格式,$display 默认显示是十进制$displayb, $displayo, $displayh 显示格式分别为二进制、八进制、十六进制。同理也有 $writeb, $writeo, $writeh, $strobeb 等。

下表是常用的格式说明。

%h 或 %H十六进制格式输出%c 或 %CASCII 码格式输出
%d 或 %D十进制格式输出%e 或 %E指数格式输出
%o 或 %O八进制格式输出%f 或 %F浮点数 (real 型) 格式输出
%b 或 %B二进制格式输出%t 或 %T当前时间格式输出
%s 或 %S字符串格式输出%m 或 %M当前层次访问路径输出

还可以使用转义字符显示特殊字符,例如:

\n换行符%%百分号"%"
\t制表符(Tab 键)\0八进制代表的字符
\\反斜杠"\"符\0x十六进制代表的字符
\"双引号

$write

        $wirte 使用方法与 $display 完全一样,只是前者会在每次显示信息完毕后不会自动换行,后者会自动换行。当输出后不需要换行时,可以使用显示任务 $write。

$write("This is a test");
$write("number: %b", num);
$write("!!!\n");

$strobe

        $strobe 为选通显示任务。$strobe 使用方法与 $display 一致,但打印信息的时间和 $display 有所差异。当许多语句与 $display 任务在同一时间内执行时,这些语句和 $display 的执行顺序是不确定的,一般按照程序的顺序结构执行。$strobe 则是在其他语句执行完毕之后,才执行显示任务。例如:

实例

   reg [3:0]  a ;
   initial begin
      a = 1 ;
      #1 ;
      a <= a + 1 ;
      //第一次显示
      $display("$display excuting result: %d.", a);
      $strobe("$strobe excuting result: %d.", a);
      #1 ;
      $display();
      //第二次显示
      $display("$display excuting result: %d.", a);
      $strobe("$strobe excuting result: %d.", a);
   end

        执行第一次显示任务时,非阻塞赋值与 $display 同时执行,$display 显示赋值之前的变量值,而 $strobe 显示赋值之后的变量值。这正体现了 $strobe 的选通显示特性。

 integer  i ;
   initial begin
      for (i=0; i<4; i=i+1) begin
         $display("Run times of $display: %d.", i);
         $strobe("Run times of $strobe: %d.", i);
      end
   end

执行结果如下:

        $display 按照程序结构,执行显示操作 4 次。而此循环语句是在 0 时刻执行的,所以 $strobe 显示的变量值是循环结束时变量的结果,即 i=4 退出循环后 $strobe 才会执行。这就体现了显示任务 $strobe 的时刻显示特性。

$monitor

$monitor 为监测任务,用于变量的持续监测。只要变量发生了变化,$monitor 就会打印显示出对应的信息。

例如:

实例

   reg [3:0]    cnt ;
   initial begin
      cnt = 3 ;
      forever begin
         # 5 ;
         if (cnt<7) cnt = cnt + 1 ;
      end
   end

   initial begin
      $monitor("Counter change to value %d at the time %t.", cnt, $time);
   end

相关文章:

  • 单片机毕业设计 stm32智能手环
  • Flink-输出算子(Sink)使用
  • 公众号配置调试“errMsg“:“config:fail,invalid signature
  • [附源码]Python计算机毕业设计安庆师范大学校园互助平台
  • 【C++位图】1. 快速查找某个数据是否在一个集合中 2. 排序(全部插入,遍历一遍) 3. 求两个集合的交集、并集等
  • 基于PHP+MySQL的宠物领养救助社交网站
  • 《深度学习进阶 自然语言处理》第六章:LSTM介绍
  • TCP/IP网络编程(10) IO函数
  • Burpsuite实验室之点击劫持
  • 配置静态ip,主机名,centos安装jdk,hadoop等
  • 目标检测论文解读复现之十:基于YOLOv5的遥感图像目标检测
  • 如何在Java中计算Levenshtein莱文斯坦(相似度)编辑距离 ?
  • 【Python性能优化实例】计算 numpy 数组首尾为 0 的数量
  • C语言百日刷题第九天
  • 「避坑宝典」为大家分享笔者在22 年所遇到“匪夷所思”的 Bug 趣事
  • 什么是JUC
  • 图解LeetCode——775. 全局倒置与局部倒置(难度:中等)
  • apache 组件下载地址
  • 【JavaSE】继承那些事儿
  • 【数据结构】栈基本操作的实现(C语言)
  • 短剧迷|《权宠》一出,《名不虚传》
  • 广东省副省长刘红兵任湖南省委常委、宣传部部长
  • 年轻人的事业!6家上海人工智能企业畅想“模范生”新征程
  • 上海开花区域结果,这项田径大赛为文旅商体展联动提供新样本
  • 宁夏民政厅原厅长欧阳艳已任自治区政府副秘书长、办公厅主任
  • 习近平:在庆祝中华全国总工会成立100周年暨全国劳动模范和先进工作者表彰大会上的讲话