Verilog初级教程(23)Verilog仿真中的显示任务
文章目录
- 前言
- 正文
- 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仿真中的显示任务相关推荐
- Verilog初级教程(14)Verilog中的赋值语句
文章目录 前言 正文 合理的左值 过程性赋值(Procedural assignment) 连续赋值 过程连续性赋值 往期回顾 前言 何为赋值语句?即将值放到线网或者变量上,这种操作称为赋值,英文:a ...
- Verilog初级教程(21)Verilog中的延迟控制语句
文章目录 前言 正文 延迟控制语句 事件控制语句 Named Events Event or operator 往期回顾 参考资料及推荐关注 前言 Verilog中的延迟控制有两种类型–延迟和事件表达 ...
- Verilog初级教程(20)Verilog中的`ifdef 条件编译语句
文章目录 前言 正文 语法 示例 Testbench文件 往期回顾 参考资料及推荐关注 前言 `ifdef条件编译语句在逻辑设计中还是很常见的,但也常见一些滥用的情况,这应该避免. 应该在什么情况下使 ...
- Verilog初级教程(15)Verilog中的阻塞与非阻塞语句
文章目录 前言 正文 阻塞赋值 非阻塞赋值 往期回顾 参考资料以及推荐关注 前言 本文通过仿真的方式,形象的说明阻塞赋值以及非阻塞赋值的区别,希望和其他教程相辅相成,共同辅助理解. 正文 阻塞赋值 阻 ...
- Verilog初级教程(12)Verilog中的generate块
文章目录 前言 正文 generate for generate if generate case 参考资料 本系列博文 前言 verilog中的generate块可以称为生成块,所谓生成,可以理解为 ...
- Verilog初级教程(11)Verilog中的initial块
文章目录 前言 正文 语法格式 initial块是用来干什么的? initial块何时开始又何时结束? 一个模块中允许有多少个initial块? 参考资料 写在最后 前言 仿真中通常会依次执行一组Ve ...
- Verilog初级教程(19)Verilog中的参数
文章目录 前言 正文 模块参数 覆盖参数 例子说明 递增计数器 递减计数器 Specify参数 模块参数与Specify参数的区别 往期回顾 参考资料及推荐关注 前言 Verilog中的参数是使得设计 ...
- Verilog初级教程(16)Verilog中的控制块
文章目录 前言 正文 条件语句if 语法 硬件实现 循环语句 forever repeat while for 往期回顾 参考资料及推荐关注 前言 硬件行为的实现离不开条件语句和其他控制逻辑流的方式. ...
- Verilog初级教程(2)Verilog HDL的初级语法
文章目录 前言 正文 注释 空格 操作符 数字格式 字符串 标识符 关键字 verilog修订 写在最后 前言 学习Verilog和学习任何一门编程语言一样,都需要从语法开始,不会语法去学习设计是几乎 ...
最新文章
- 什么是 SAP UI5 的 Element binding
- JDK1.6官方下载_JDK6官方下载地址:http://www.java.net/download
- webgl 游戏_如何选择 WebGL 框架和引擎?
- javascript在第三个文本框中显示文字_一段中的个别文字,显示在目录中
- Windows XP Embedded with Service Pack 2 开发包光盘 3CD
- 用linux上网有什么优点,Linux系统的介绍,有什么优点,怎么使用
- js 拉勾网效果_python爬取拉勾网职位数据
- iText生成pdf详解
- Cisco 2960交换机配置
- 【sklearn第四讲】数据集变换
- python cmath模块_python-cmath模块
- Python实验-字典攻击
- java把字符串转为日期_Java程序将字符串转换为日期
- logisim实验三:原码一位乘法器设计实验
- GC bias GC偏好
- gcc: libc: __ASSEMBLER__; Kernel: __ASSEMBLY__
- C#上位机工作感想2(2020.4.15-2021.7.24)
- 【数据分析实例】 7000 条北京的租房数据分析
- iOS程序破解:获取应用商店上应用的ipa程序包
- 如何在本地运行jsp文件
热门文章
- Windows 7使用MMC管理控制台“远程桌面”功能【转载】
- 智能卡技术和身份认证
- centos7 cmake安装mysql_centos7 安装cmake
- android矢量动画 充电,android矢量动画
- solr kerberos java_solr添加kerberos认证及授权
- c语言写简单运行批处理,PC-LINT批处理的简单编写
- eclipse java luna,java-如何在Eclipse Luna中配置Lombok
- er图主码外码怎么看_霸屏了!因为这个老师,广科er纷纷表示要转专业了
- 如何让自学更有效率?
- 第十五届全国大学生智能车东北赛区成绩