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代码.可以用于对矢量中的多个位进行重复操作.多个模块的实例引用的重复操作.根据参数确定程序中是否包含某段代码.生成语句可以控制变量的声明.任务和函数的调用.还能对实例 ...
随机推荐
- __new__ 的简单应用
用__new__与__init__不同,通过继承内建类型对象,__new__可以用来创建一个简单的新类型,在__new__加入一些动作以完成创建. class RoundFloat(float): d ...
- POJ 2853 Sequence Sum Possibilities
Sequence Sum Possibilities Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 5537 Accep ...
- 跟随标准与Webkit源码探究DOM -- 获取元素之getElementsByClassName
按照类名获取元素 -- getElementsByClassName(HTML5) 标准 WHATWG 在Document与Element上均有定义,原型 HTMLCollection getElem ...
- HMM MEMM & label bias
(http://blog.csdn.net/xum2008/article/details/38147425) 隐马尔科夫模型(HMM): 图1. 隐马尔科夫模型 隐马尔科夫模型的缺点: 1.HMM只 ...
- 理解RxJava:(四)Reactive Android
在前三部分,我在通用层面介绍了RxJava的工作原理.但是作为一个Android开发者,如何在工作中使用它呢?下面是一些给Android开发者的RxJava的具体应用. RxAndroid RxAnd ...
- java中静态代码块的用法 static用法详解(转)
(一)java 静态代码块 静态方法区别一般情况下,如果有些代码必须在项目启动的时候就执行的时候,需要使用静态代码块,这种代码是主动执行的;需要在项目启动的时候就初始化,在不创建对象的情况下,其他程序 ...
- 安装虚拟机VMware tools
不懂得安装虚拟机VMware tools的想必都是刚在虚拟机上玩系统初学者,无疑我们对虚拟机的了解并不深,这使得本来很容易安装的VMware tools在我们安装时变得复杂而又难以琢磨,到头一直的付出 ...
- 关于js中的几个小问题。
问题1: 使用连续赋值后面的变量会成为全局对象的一个属性,并且这个属性可以通过delete删除. 原因:赋值语句是从右往左执行的,我们将10赋值给了c,但是c此时还声明,接着把c的返回值赋值给了b,但 ...
- Transactional replication 的Snapshot 文件在什么情况下会被清除
Snapshot agent负责收集publication database的信息,将article的内容存储在snapshot文件中.而distribuiton cleanup job(后文简称清除 ...
- C# 5.0 新特性——Async和Await使异步编程更简单
http://www.cnblogs.com/zhili/archive/2013/05/15/csharp5asyncandawait.html http://blog.zhaojie.me/201 ...