Verilog的一些系统任务(一)
$display、$write;$fopen、$fdisplay、$fclose;$strobe
$display和$write任务
- 格式: $display(p1,p2,...pn); $write(p1,p2,...pn);
- p1通常称为"格式控制”;p2~pn称为“输出列表”;
- 这两个任务的作用基本相同。$display在结束后自动换行,$write不会自动换行。所以,当想让消息在一行显示时,用$write
- 在$display和$write中,输出格式控制要用双引号括起来。
- 下表给出几种常用的输出格式:
| 输出格式 | 说明 |
| %h或%H | 16进制 |
| %d或%D | 10进制 |
| %o或%O | 8进制 |
| %b或%B | 2进制 |
| %c或%C | ASCII码 |
| %v或%V | 输出网络型数据信号强度 |
| %m或%M | 输出等级层次的名字 |
| %s或%S | 字符串 |
| %t或%T | 以当前的时间格式 |
| %e或%E | 指数形式 |
| %f或%F | 以10进制形式输出实型数 |
| %g或%G | 以指数或10进制的形式输出实型数 |
其中:%v %m %t的具体情况可见:http://blog.51cto.com/lihaichuan/981060。
换码序列及功能
| 换码序列 | 功能 |
| \n | 换行 |
| \t | 右移一个制表符 |
| \\ | 字符\ |
| \" | 双引号字符" |
| \o | 1~3位八进制数代表的字符 |
| %% | 百分号% |
在$display()中可以通过在%和表示进制的字符之间插入一个0来自动调整显示输出数据宽度的方式。eg:
$display("d=%0h a=%0h",data,addr);
如果输出列表中表达式的值包含有不确定的值或高阻值,其结果输出遵循以下规则:
(1).在输出格式为十进制的情况下:
• 如果表达式值的所有位均为不定值,则输出结果为小写的x。
• 如果表达式值的所有位均为高阻值,则输出结果为小写的z。
• 如果表达式值的部分位为不定值,则输出结果为大写的X。
• 如果表达式值的部分位为高阻值,则输出结果为大写的Z。
(2).在输出格式为十六进制和八进制的情况下:
• 每4位二进制数为一组代表一位十六进制数,每3位二进制数为一组代表一位八进制数。
• 如果表达式值相对应的某进制数的所有位均为不定值,则该位进制数的输出的结果为小写的
x。
• 如果表达式值相对应的某进制数的所有位均为高阻值,则该位进制数的输出结果为小写的z。
• 如果表达式值相对应的某进制数的部分位为不定值,则该位进制数输出结果为大写的X。
• 如果表达式值相对应的某进制数的部分位为高阻值,则该位进制数输出结果为大写的Z。
对于二进制输出格式,表达式值的每一位的输出结果为0、1、x、z。下面举例说明:
语句输出结果:
$display("%d",'bx); // 输出结果为:x
$display("%h",'bx0_1010); //输出结果为:xxXa
$display("%h %o",'b001x_xx10_1x01,12'b001_xxx_101_x01); //结果为:XXX1x5X
$display("%h %o",12'b001x_xx10_1x01,12'b001_xxx_101_x01); 输出结果为:XXX 1x5X
注意:因为$write在输出时不换行,要注意它的使用。可以在$write中加入换行符\n,以确保明确的
输出显示格式。
文件输出
文件可以用系统任务$fopen打开;
- 用法:$fopen("<文件名>"); 用法:<文件句柄>=$fopen("<文件名>");
- 任务$fopen返回一个被称为多通道描述符的32位值。多通道描述符中只有一位被设置为1。标准输出有一个多通道描述符,其最低位(第0位)被设置为1。标准输出也被称为通道0.标准通道一直开放。
- 由于标准输出将描述符的最低位占用,同时描述符的第31位是保留位。所以,使用多通道2描述符最多可以同时开30个文件。
- 注意:用$fopen打开文件会将原来的文件清空,若要读数据就用$readmemb,$readmemh就可以了,这个语句不会清空原来文件中的数据。
用$fopen的情况是为了取得句柄,即文件地址,也就是写文件时用$fdisplay(desc,"display1");时才用。$readmemb和$readmemh会在Verilog的一些系统任务(二)。
系统任务$fdisplay、$fmonitor、$fwrite和$fstrobe都用于写文件。
- $fdisplay和$fmonitor任务的用法: $fdisplay/$fmonitor(<文件描述符>,p1,p2,...,pn);
下面是一个对文件打开和写文件的例子:
module files;
integer handle1,handle2,handle3;
// 标准输出一直是打开的:descriptor=32'h0000_0001;(bit0 set 1)
initial
begin
handle1=$fopen("file1.out"); // handle1=32'h0000_0002(bit1 set 1)
handle2=$fopen("file2.out"); // handle2=32'h0000_0004(bit2 set 1)
handle3=$fopen("file3.out"); // handle3=32'h0000_0008(bit3 set 1)
end
integer desc1,desc2,desc3;
initial
begin
# desc1=handle1|; // 按位或;desc1=32'h0000_0003
$fdisplay(desc1,"Display 1"); // 写到文件file1.out和标准输出stdout desc2=handle2|handle1; // desc2=32'h0000_0006
$fdisplay(desc2,"Display 2"); // 写道文件file1.out和file2.out desc3=handle3; // desc3=32'h0000_0008
$fdisplay(desc3,"Display 2"); // 只写到文件file3.out # $fclose(handle1);
$fclose(handle2);
$fclose(handle3);
end
endmodule
显示层次
- 通过任何显示任务,例如$display、$write、$monitor或者$strobe任务中的%m选项的方式可以显示任何级别的层次。
选通显示
- 选通显示由关键字为$strobe的系统任务完成。这个任务与$display任务大体上相同。但是如果使用strobe语句,那么$strobe语句总是在其他同时刻的其他赋值语句执行完成以后才执行。
- 用处:$strobe提供了一种同步机制,他可以确保所有在同一时钟沿赋值的其他语句在执行完毕以后才显示数据。
- 例子如下:
always @(posedge clock)
begin
a=b;
c=d;
end always @(posedge clock)
$ strobe ("Displaying a=%b,c=%b",a,c);如果使用的是display,那么忧郁两个always块同时运行,会出现无法找到display是在前一个always赋值语句之前还是之后执行。而顺序不同会产生不同的结果。但是当使用了strobe后,则strobe语句是在同时刻的所有语句的最后执行。那么,就可以确保是在赋值完毕后才进行输出操作。
Verilog的一些系统任务(一)的更多相关文章
- Verilog的一些系统任务(二)
$monitor 任务$monitor提供了监控和输出参数列表中的表达式或变量值的功能. 格式: $monitor(p1,p2,...,pn); $monitor; $monitor ...
- verilog语法实例学习(1)
本文档中通过verilog实例来学习verilog语法.Verilog是一种硬件描述语言,它具有并发性和时序性.并发性是指不同硬件模块的同时操作,时序性是指信号的赋值或操作在时钟的边沿进行.由于作者本 ...
- 【FPGA篇章五】FPGA函数任务:对讲解函数与任务专题展开详解
欢迎大家关注我的微信公众账号,支持程序媛写出更多优秀的文章 任务和函数也属于过程块,多用于仿真文件设计中,使用两者的目的有所区别: 函数(function):对输入的值执行一些处理,返回一个新的值. ...
- Verilog语言中的系统任务和系统函数
Verilog语言中预先定义了一些任务和函数,用于完成一些特殊的功能,它们被称为系统任务和系统函数,这些函数大多数都是只能在Testbench仿真中使用的,使我们更方便的进行验证. `timescal ...
- Verilog学习笔记基本语法篇(十一)········ 常用系统函数
1)系统任务:$monitor 格式: $monitor(p1,p2,p3...pn); $monitor; $monitoron; $monitoroff; 任务$monitor提供了监控输出列 ...
- Verilog学习笔记设计和验证篇(五)...............层次化事件队列
详细的了解层次化事件队列有助于理解Verilog的阻塞赋值和非阻塞赋值功能.所谓层次化事件队列指的是用于调度仿真时间的不同Verilog事件队列.在IEEE的5.3节中定义了层次化事件队列在逻辑上分为 ...
- Verilog学习笔记基本语法篇(十)········ 常用系统函数
$display 和 $write 任务 格式: $display (p1,p2,...,pn); $write (p1,p2,..,pn); 这两个函数和系统的任务作用是用来输出信息,即将参数p2到 ...
- 【verilog】fdisplay中如何保存有符号形式
2014-01-02 10:10:29 参考:http://xilinx.eetop.cn/viewthread-275584 使用系统任务$signed,如 $fdisplay(fp, " ...
- 对Verilog 初学者比较有用的整理(转自它处)
*作者: Ian11122840 时间: 2010-9-27 09:04 ...
随机推荐
- 3 Dockerfile指令详解-FROM&MAINTAINER&RUN
1.FROM指令 FROM centos #指定centos为基础镜像 2.MAINTAINER 指令 MAINTAINER @QQ.COM #指定维护人等信息,方便维护 3.RUN 命令 #新建 ...
- js url传值中文乱码完美解决(JAVA)
js url传值中文乱码完美解决(JAVA) 首先在你的jsp页面这样更改: var url="你要传入的Action的位置&ipid="+ipid+"& ...
- angularJs的过滤器扩展及自定义过滤器
一.过滤器扩展 1.过滤器的组合使用 <!DOCTYPE HTML> <html ng-app="myApp"> <head> <meta ...
- Hadoop学习之路(二十二)MapReduce的输入和输出
MapReduce的输入 作为一个会编写MR程序的人来说,知道map方法的参数是默认的数据读取组件读取到的一行数据 1.是谁在读取? 是谁在调用这个map方法? 查看源码Mapper.java知道是r ...
- PAT——1048. 数字加密
本题要求实现一种数字加密方法.首先固定一个加密用正整数A,对任一正整数B,将其每1位数字与A的对应位置上的数字进行以下运算:对奇数位,对应位的数字相加后对13取余——这里用J代表10.Q代表11.K代 ...
- PAT——1032. 挖掘机技术哪家强
为了用事实说明挖掘机技术到底哪家强,PAT组织了一场挖掘机技能大赛.现请你根据比赛结果统计出技术最强的那个学校. 输入格式: 输入在第1行给出不超过105的正整数N,即参赛人数.随后N行,每行给出一位 ...
- (转)查看mysql数据库连接数、并发数相关信息
查看mysql数据库连接数.并发数相关信息 1.mysql> show status like 'Threads%';+-------------------+-------+| Variabl ...
- OpenID Connect Core 1.0(五)使用授权码流验证(下)
3.1.2.6 验证错误响应(Authentication Error Response) 验证错误响应是一个OAuth 2.0授权错误响应消息,是RP发送授权请求的消息,由OP授权终结点的响应返回. ...
- java 企业门户网站 源码 自适应响应式 freemarker 静态引擎 html5 SSM
官网 http://www.fhadmin.org/ 系统介绍: 1.网站后台采用主流的 SSM 框架 jsp JSTL,网站后台采用freemaker静态化模版引擎生成html 2.因为是生成的ht ...
- 离线服务器下docker的部署与应用
一分钟内形成docker的模糊概念 网上很多文章避免将docker与虚拟机混为一谈,但对于初学者来说,完全可以将docker当做一种虚拟机技术,只需要牢牢记住一点最重要的区别:docker依赖于物理机 ...