Verilog学习笔记基本语法篇(十)········ 常用系统函数
$display 和 $write 任务
格式:
$display (p1,p2,...,pn);
$write (p1,p2,..,pn);
这两个函数和系统的任务作用是用来输出信息,即将参数p2到pn按照参数p1给的格式输出。参数1通常称作“格式控制”,参数p2至pn通常称作输出表列。这两个任务的作用基本相同,但是$display自动的在输出后进行换行,而$write却不是这样。如果想在一行内输出多个信息,可以使用$write。
注意:其输出格式控制是用双引号括起来的字符串,可以包含以下两种信息:
1)格式说明,由“%”和格式字符组成。它的作用是将输出的数据转换成指定的格式输出。格式说明总是从%开始的。常见的几种输出格式
| 输出格式 | 说明 | 输出格式 | 说明 |
| %h或%H | 以十六进制形式输出 | %d或%D | 以十进制形式输出 |
| %o或%O | 以八进制形式输出 | %b或%B | 以二进制形式输出 |
| %c或%C | 以ASCII码形式输出 | %v或%V | 输出网格型数据信号轻度 |
| %m或%M | 输出等级层次名字 | %s或%S | 以字符串的形式输出 |
| %e或%E | 以指数形式输出实型数 | %f或%F | 以十进制的形式输出实型数 |
| %g或%G |
以指数或者十进制数输出实型数,但是 无论何种格式都以较短的结果输出 |
%t或%T | 输出当前的时间格式 |
2)普通字符,即需要原样输出的字符。其中一些特殊的字符可以通过转换序列来输出:
| 换码序列 | 功能 | 换码序列 | 功能 |
| \n | 换行 | \'' | 双引号字符" |
| \t | 横向跳格 | \o | 1-3位八进制数代表的字符 |
| \\ | 反斜杠字符 | %% | 百分符号% |
例:
$display("\\\t%%\n\"\123") 其输出结果为: \%
"S
val=101;
$display("val=%h hex val=%d decimal",val,val);
$display("val=%o otal val=%b binary",val,val);
其输出的结果为:
val=00000065 hex val=101 decimal
val=00000000145 otal val=00000000000000000000000001100101 binary
由上式可见,在$siaplay显示中,输出列表中的数据显示宽度是按照输出的格式进行自动调整的。在显示十进制时,输出结果前面的0值用空格来代替。对于其他禁止,输出结果前面的0仍然显示出来。为了消去其他进制有效数字前面的0,可以在%和表示进制的字符串中间插入一个0自动调整显示输出数据宽度的方式。如上式中的$display("val=%0b binary",val); 显示的结果就为val=101
如果在输出列表中表达式的值包含不确定的值或高阻值,其结果遵循以下规则:
1)输出为十进制的情况下:
a)如果表达式值的所有位均为不定值,则输出结果为小写的x;
b)如果表达式中所有的位均为高阻值,则输出结果为小写的z;
c)如果表达式值的部分位为不定值,则输出结果为大写的X;
d)如果表达式值的部分为高阻值,则输出的结果位大写的Z;
2)输出为十六进制和八进制的情况下:
a)每4位二进制数为一组代表一位十六进制数,每3位二进制数为一组代表一位八进制数。
b)如果表达式值相对应的某进制的所有位均为不定值,则输出为小写的x;
c)如果表达式值相对应的某进制数的所有位均为高阻值,则输出小写的z;
d)如果表达式值相对应的某进制数的部分位为不定值,则该位输出的结果为大写的X;
e)如果表达式值相对性的某进制数的部分位位高阻值,则该位输出的结果为大写的Z;
3)对于二进制的情况:
表达式的值每一位的输出结果都用0,1,x,z表示。
和$display 和 $write相似的还有$strobe,这个任务除了与$display有一点区别外,其他的非常相似。如果许多其他语句和$display在同一个时间单位执行,那么这些语句与$display任务的执行顺序是不确定的。如果使用$strobe,该语句总是在相同时刻的其他赋值语句执行完之后才执行,因此$strobe提供了一种同步机制,它可以在同一时钟沿赋值的其他语句在执行之后才会显示数据。
文件输出
1)打开文件:
文件可以用系统任务$fopen打开,用法:
文件句柄=$fopen("文件名");
任务$fopen返回一个被称作多通道描述符(multichannel descriptor)的32位值。多通道描述符中只有一位被设置成1。标准输出有一个多通道描述符,其最低位(第0位)被设置成1.标准输出也称作通道0,标准输出一直是开放的。以后对$fopen的每一次调用开辟一个新的通道,并且返回一个设置了第一位,第二位等,直到32位描述符的第30位。第31位是保留为。信号通道与多通道描述符中被设置为1的位相对应。
2)写文件:
写文件可以利用$fdisplay、$fmonitor实现。用法:
$fdisplay(文件描述符,p1,p2,..pn)
$fmonitor(文件描述符,p1,p2,...pn)
p1,p2,pn可以是变量,信号名或者带引号的字符串。文件描述符是一个多通道描述符,他可以是一个文件句柄或者多个文件句柄的按位组合。Verilog会把输出写到与文件描述符中值为1 的文件中。
Ex;
interger handle1,handle2,handle3;
//标准输出是打开的,descrpitor=32'h0000_0001(bit 0 set 1)
initial
begin
handle1=$fopen("file1.out"); //handle1=32'h0000_0002(bit 1 set 1)
handle2=$fopen("file2.out"); //handle2=32'h0000_0004(bit 2 set 1)
handle3=$fopen("file3.out"); //handle3=32'h0000_0008(bit 3 set 1)
end
integer des1.des2.des3;
initial
begin
des1=handle1|; //des1=32'h0000_0003
$fdisplay(des1,"display 1") //write to file1.out and std.out des2=handle1|handle2; //des1=32'h0000_0006
$fdisplay(des2,"display 2") //write to file1.out and file2.out des3=handle3; //des1=32'h0000_0006
$fdisplay(des3,"display 3") //write to file3.out
end
文件描述
3)关闭文件
文件可以用系统任务$fclose来关闭。用法:
$fclose(文件描述符); 如:$fclose(handle1);文件一旦被关闭,多通道描述符中的相应位被设置为0,下一次的fopen的调用可以重用这一位。
Verilog学习笔记基本语法篇(十)········ 常用系统函数的更多相关文章
- Verilog学习笔记基本语法篇(十一)········ 常用系统函数
1)系统任务:$monitor 格式: $monitor(p1,p2,p3...pn); $monitor; $monitoron; $monitoroff; 任务$monitor提供了监控输出列 ...
- Verilog学习笔记基本语法篇(十二)········ 编译预处理
h Verilog HDL语言和C语言一样也提供编译预处理的功能.在Verilog中为了和一般的语句相区别,这些预处理语句以符号"`"开头,注意,这个字符位于主键盘的左上角,其对应 ...
- Verilog学习笔记基本语法篇(八)········ 结构说明语句
Verilog中的任何过程都可以属于以下四种结构的说明语句; 1) initial; 2) always; 3) task; 4) function; 1) initial说明语句: 一个程序 ...
- Verilog学习笔记基本语法篇(九)········ 任务和函数
task 和 function 说明语句分别用来定义任务和函数,利用任务和函数可以把函数模块分成许多小的任务和函数便于理解和调试.任务和函数往往还是大的程序模块在不同地点多次用到的相同的程序段.输入. ...
- Verilog学习笔记基本语法篇(六)········ 循环语句
在Verilog中存在着4种类型的循环语句,用来控制执行语句的执行次数. 1)forever语句: 连续执行的语句. 2)repeat语句: 连续执行n次的语句. 3)while语句: 执行语 ...
- Verilog学习笔记基本语法篇(三)·········赋值语句(待补充)
在Verilog HDL语言中,信号有两种赋值方式. A)非阻塞赋值(Non-Blocking)方式(如:b<=a;) (1)在语句块中,上面语句所赋值的变量不能立即为下面的语句所用: (2)块 ...
- Verilog学习笔记基本语法篇(一)·········数据类型
Verilog中共有19种数据类型. 基本的四种类型: reg型.wire型.integer型.parameter型. 其他类型:large型.medium型.small型.scalared型.tim ...
- Verilog学习笔记基本语法篇(十三)...............Gate门
Verilog中已有一些建立好的逻辑门和开关的模型.在所涉及的模块中,可通过实例引用这些门与开关模型,从而对模块进行结构化的描述. 逻辑门: and (output,input,...) nand ( ...
- Verilog学习笔记基本语法篇(七)········ 生成块
生成块可以动态的生成Verilog代码.可以用于对矢量中的多个位进行重复操作.多个模块的实例引用的重复操作.根据参数确定程序中是否包含某段代码.生成语句可以控制变量的声明.任务和函数的调用.还能对实例 ...
随机推荐
- 【NLP】word2vec
http://blog.csdn.net/mytestmy/article/details/26969149?utm_source=tuicool&utm_medium=referral
- dll return a string
char g_szText[1024]; __declspec(dllexport) const char * __stdcall FuncName(const unsigned char *p) { ...
- ROS vpn (pptp) 配置及端口绑定配置
网络搜集 一. 按VPN的协议分类 VPN的隧道协议主要有三种,PPTP,L2TP和IPSec,其中PPTP和L2TP协议工作在OSI模型的第二层,又称为二层隧道协议:IPSec是第三层隧道协议,是最 ...
- 使用git提交内容到网盘
1.创建版本库(注意勾选纯版本库的选项) 2.客户端获取版本库代码 3.提交及获取 master是git默认的主要分支(主干),适合单人独自开发.多人开发时可以给每个人创建一个分支 参考资料: htt ...
- Ubuntu14.04安装中文输入法以及解决Gedit中文乱码问题
1 设置中文显示环境 1. 打开System Settings 2. 打开Personal-> Language Support. 会弹出如下对话框,提示你“语言支持没安装完整”. 点击“Rem ...
- 10个你必须掌握的超酷VI命令技巧
摘要:大部分Linux开发者对vi命令相当熟悉,可是遗憾的是,大部分开发者都只能掌握一些最常用的Linux vi命令,下面介绍的10个vi命令虽然很多不为人知,但是在实际应用中又能让你大大提高效率. ...
- [LeetCode] Best Meeting Point
Problem Description: A group of two or more people wants to meet and minimize the total travel dista ...
- Unity3d删除无用的美术资源
这个插件是我在国外网站逛论坛发现的,试用了一下非常好用,是一个轻量级的插件就一个类.开发中尤其是和美术合作的时候,可能你会发现Project视图中有很多没有用到的资源,但是你又不敢删除,因为你不知道那 ...
- centos6.5+jexus5.6.3+mono 3.10实践,让asp.net在linux上飞一会儿
备忘,这是给自己看的,用ubuntu server装mono 3.10老是卡在了编译libgdiplus上面,从来就没成功过,郁闷啊,零零散散搞了好几天,作罢.后来试了OpenSUSE 11很容易搞好 ...
- DevExpress.XtraGrid winform试用分享
DevExpress.XtraGrid在winform里使用还挺麻烦,为了减少重复代码和代码复用,本人针对DevExpress.XtraGrid封装了一个Form的基类,其中涵盖了DevExpress ...