文章目录

  • 前言
  • 正文
    • Display/Write Tasks
    • Verilog Strobes
    • Verilog Continuous Monitors
    • Verilog Format Specifiers
    • Verilog Escape Sequences
  • 往期回顾
  • 参考资料及推荐关注

前言

显示系统任务主要用于显示信息和调试信息,从日志文件中跟踪仿真的流程,也有助于更快地进行调试。显示任务有不同的组别和格式,它们可以打印数值。

仿真可不是只有波形就完事无忧的,有的时候需要一些显示任务将某些节点的数据打印出来,有利于分析。
如下格式语句一定见过吧:

  $monitor ("[$monitor] time=%0t a=0x%0h b=0x%0h", $time, a, b);$display ("[$display] time=%0t a=0x%0h b=0x%0h", $time, a, b);

类似的东西都很常见,这里一起学习下吧。

正文

Display/Write Tasks

$display$write都会按照参数列表中的顺序显示参数。

$display(<list_of_arguments>);
$write(<list_of_arguments>);

$write不会在字符串末尾添加换行符,而$display会,从下面的例子可以看出。

module tb;initial begin$display ("This ends with a new line ");$write ("This does not,");$write ("like this. To start new line, use newline char
");$display ("This always start on a new line !");end
endmodule
This ends with a new line
This does not,like this. To start new line, use newline char
Hi there !

Verilog Strobes

strobe在当前delta时间步长结束时打印变量的最终值,其格式与strobe在当前delta时间步长结束时打印变量的最终值,其格式与strobe在当前delta时间步长结束时打印变量的最终值,其格式与display类似。

module tb;initial beginreg [7:0] a;reg [7:0] b;a = 8'h2D;b = 8'h2D;#10;                  // Wait till simulation reaches 10nsb <= a + 1;           // Assign a+1 value to b$display ("[$display] time=%0t a=0x%0h b=0x%0h", $time, a, b);$strobe  ("[$strobe]  time=%0t a=0x%0h b=0x%0h", $time, a, b);#1;$display ("[$display] time=%0t a=0x%0h b=0x%0h", $time, a, b);$strobe  ("[$strobe]  time=%0t a=0x%0h b=0x%0h", $time, a, b);end
endmodule

需要注意的是,$strobe在时间10ns显示变量b的最终更新值,也就是0x2E,而$display只有在11ns的下一次模拟delta中才会接收到这个值。

[$display] time=10 a=0x2d b=0x2d
[$strobe]  time=10 a=0x2d b=0x2e
[$display] time=11 a=0x2d b=0x2e
[$strobe]  time=11 a=0x2d b=0x2e

Verilog Continuous Monitors

每当参数列表中的变量或表达式发生变化时,$monitor就会自动打印出变量或表达式的值。它达到的效果与每次更新参数后调用$display类似。

module tb;initial beginreg [7:0] a;reg [7:0] b;a = 8'h2D;b = 8'h2D;#10;                  // Wait till simulation reaches 10nsb <= a + 1;           // Assign a+1 value to b$monitor ("[$monitor] time=%0t a=0x%0h b=0x%0h", $time, a, b);#1 b <= 8'hA4;#5 b <= a - 8'h33;#10 b <= 8'h1;end
endmodule

请注意,monitor就像一个在主线程后台生成运行的任务,它监视并显示其参数变量的值变化。新的monitor就像一个在主线程后台生成运行的任务,它监视并显示其参数变量的值变化。新的monitor就像一个在主线程后台生成运行的任务,它监视并显示其参数变量的值变化。新的monitor任务可以在仿真过程中任意多次发出。

[$monitor] time=10 a=0x2d b=0x2e
[$monitor] time=11 a=0x2d b=0xa4
[$monitor] time=16 a=0x2d b=0xfa
[$monitor] time=26 a=0x2d b=0x1

Verilog Format Specifiers

为了在显示函数中打印变量,必须为每个变量给出适当的格式指定符。

Argument Description
%h, %H Display in hexadecimal format
%d, %D Display in decimal format
%b, %B Display in binary format
%m, %M Display hierarchical name
%s, %S Display as a string
%t, %T Display in time format
%f, %F Display ‘real’ in a decimal format
%e, %E Display ‘real’ in an exponential format
module tb;initial beginreg [7:0]  a;reg [39:0] str = "Hello";time       cur_time;real       float_pt;a = 8'h0E;float_pt = 3.142;$display ("a = %h", a);$display ("a = %d", a);$display ("a = %b", a);$display ("str = %s", str);#200 cur_time = $time;$display ("time = %t", cur_time);$display ("float_pt = %f", float_pt);$display ("float_pt = %e", float_pt);end
endmodule
a = 0e
a =  14
a = 00001110
str = Hello
time =                  200
float_pt = 3.142000
float_pt = 3.142000e+00

Verilog Escape Sequences

有些字符被认为是特殊字符,因为它们代表其他显示目的,如换行、制表符和换页。为了打印这些特殊字符,必须对这些字符的每次出现进行转义。

Argument Description
\n New line character
\t Tab character
\ The \ character
" The " character
%% The % character
module tb;initial begin$write ("Newline character \n");$display ("Tab character \tstop");$display ("Escaping  " %%");/*// Compilation errors$display ("Without escaping ");       // ERROR : Unterminated string$display ("Without escaping "");       // ERROR : Unterminated string
*/end
endmodule
Newline character Tab character  stop
Escaping  " %

往期回顾

Verilog初级教程(22)赋值间延迟语句与赋值内延迟语句

Verilog初级教程(21)Verilog中的延迟控制语句

Verilog初级教程(20)Verilog中的`ifdef 条件编译语句

Verilog初级教程(19)Verilog中的参数

Verilog初级教程(18)Verilog中的函数与任务

Verilog初级教程(17)Verilog中的case语句

Verilog初级教程(16)Verilog中的控制块

Verilog初级教程(15)Verilog中的阻塞与非阻塞语句

Verilog初级教程(14)Verilog中的赋值语句

Verilog初级教程(13)Verilog中的块语句

Verilog初级教程(12)Verilog中的generate块

Verilog初级教程(11)Verilog中的initial块

Verilog初级教程(10)Verilog的always块

Verilog初级教程(9)Verilog的运算符

Verilog初级教程(8)Verilog中的assign语句

Verilog初级教程(7)Verilog模块例化以及悬空端口的处理

Verilog初级教程(6)Verilog模块与端口

Verilog初级教程(5)Verilog中的多维数组和存储器

Verilog初级教程(4)Verilog中的标量与向量

Verilog初级教程(3)Verilog 数据类型

Verilog初级教程(2)Verilog HDL的初级语法

Verilog初级教程(1)认识 Verilog HDL

芯片设计抽象层及其设计风格

Verilog以及VHDL所倡导的的代码准则

FPGA/ASIC初学者应该学习Verilog还是VHDL?

参考资料及推荐关注

个人微信公众号: FPGA LAB

交个朋友

Verilog初级教程(23)Verilog仿真中的显示任务相关推荐

  1. Verilog初级教程(14)Verilog中的赋值语句

    文章目录 前言 正文 合理的左值 过程性赋值(Procedural assignment) 连续赋值 过程连续性赋值 往期回顾 前言 何为赋值语句?即将值放到线网或者变量上,这种操作称为赋值,英文:a ...

  2. Verilog初级教程(21)Verilog中的延迟控制语句

    文章目录 前言 正文 延迟控制语句 事件控制语句 Named Events Event or operator 往期回顾 参考资料及推荐关注 前言 Verilog中的延迟控制有两种类型–延迟和事件表达 ...

  3. Verilog初级教程(20)Verilog中的`ifdef 条件编译语句

    文章目录 前言 正文 语法 示例 Testbench文件 往期回顾 参考资料及推荐关注 前言 `ifdef条件编译语句在逻辑设计中还是很常见的,但也常见一些滥用的情况,这应该避免. 应该在什么情况下使 ...

  4. Verilog初级教程(15)Verilog中的阻塞与非阻塞语句

    文章目录 前言 正文 阻塞赋值 非阻塞赋值 往期回顾 参考资料以及推荐关注 前言 本文通过仿真的方式,形象的说明阻塞赋值以及非阻塞赋值的区别,希望和其他教程相辅相成,共同辅助理解. 正文 阻塞赋值 阻 ...

  5. Verilog初级教程(12)Verilog中的generate块

    文章目录 前言 正文 generate for generate if generate case 参考资料 本系列博文 前言 verilog中的generate块可以称为生成块,所谓生成,可以理解为 ...

  6. Verilog初级教程(11)Verilog中的initial块

    文章目录 前言 正文 语法格式 initial块是用来干什么的? initial块何时开始又何时结束? 一个模块中允许有多少个initial块? 参考资料 写在最后 前言 仿真中通常会依次执行一组Ve ...

  7. Verilog初级教程(19)Verilog中的参数

    文章目录 前言 正文 模块参数 覆盖参数 例子说明 递增计数器 递减计数器 Specify参数 模块参数与Specify参数的区别 往期回顾 参考资料及推荐关注 前言 Verilog中的参数是使得设计 ...

  8. Verilog初级教程(16)Verilog中的控制块

    文章目录 前言 正文 条件语句if 语法 硬件实现 循环语句 forever repeat while for 往期回顾 参考资料及推荐关注 前言 硬件行为的实现离不开条件语句和其他控制逻辑流的方式. ...

  9. Verilog初级教程(2)Verilog HDL的初级语法

    文章目录 前言 正文 注释 空格 操作符 数字格式 字符串 标识符 关键字 verilog修订 写在最后 前言 学习Verilog和学习任何一门编程语言一样,都需要从语法开始,不会语法去学习设计是几乎 ...

最新文章

  1. 什么是 SAP UI5 的 Element binding
  2. JDK1.6官方下载_JDK6官方下载地址:http://www.java.net/download
  3. webgl 游戏_如何选择 WebGL 框架和引擎?
  4. javascript在第三个文本框中显示文字_一段中的个别文字,显示在目录中
  5. Windows XP Embedded with Service Pack 2 开发包光盘 3CD
  6. 用linux上网有什么优点,Linux系统的介绍,有什么优点,怎么使用
  7. js 拉勾网效果_python爬取拉勾网职位数据
  8. iText生成pdf详解
  9. Cisco 2960交换机配置
  10. 【sklearn第四讲】数据集变换
  11. python cmath模块_python-cmath模块
  12. Python实验-字典攻击
  13. java把字符串转为日期_Java程序将字符串转换为日期
  14. logisim实验三:原码一位乘法器设计实验
  15. GC bias GC偏好
  16. gcc: libc: __ASSEMBLER__; Kernel: __ASSEMBLY__
  17. C#上位机工作感想2(2020.4.15-2021.7.24)
  18. 【数据分析实例】 7000 条北京的租房数据分析
  19. iOS程序破解:获取应用商店上应用的ipa程序包
  20. 如何在本地运行jsp文件

热门文章

  1. Windows 7使用MMC管理控制台“远程桌面”功能【转载】
  2. 智能卡技术和身份认证
  3. centos7 cmake安装mysql_centos7 安装cmake
  4. android矢量动画 充电,android矢量动画
  5. solr kerberos java_solr添加kerberos认证及授权
  6. c语言写简单运行批处理,PC-LINT批处理的简单编写
  7. eclipse java luna,java-如何在Eclipse Luna中配置Lombok
  8. er图主码外码怎么看_霸屏了!因为这个老师,广科er纷纷表示要转专业了
  9. 如何让自学更有效率?
  10. 第十五届全国大学生智能车东北赛区成绩