SYoong的个人空间 https://blog.eetop.cn/1584010 [收藏] [复制] [分享] [RSS]

空间首页 动态 记录 日志 相册 主题 分享 留言板 个人资料

日志

Verilog学习笔记基本语法篇(十)········ 常用系统函数

已有 2741 次阅读| 2016-9-24 20:17 |个人分类: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横向跳格\o1-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 的文件中。


点赞

评论 (0 个评论)

facelist

您需要登录后才可以评论 登录 | 注册

  • 关注TA
  • 加好友
  • 联系TA
  • 0

    周排名
  • 0

    月排名
  • 0

    总排名
  • 0

    关注
  • 3

    粉丝
  • 0

    好友
  • 3

    获赞
  • 1

    评论
  • 访问数
关闭

站长推荐 上一条 /1 下一条

小黑屋| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-4-27 15:52 , Processed in 0.036847 second(s), 19 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
返回顶部