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 ...
随机推荐
- redis下的adlist
//adlist.h #ifndef __ADLIST__H__ #define __ADLIST__H__ typedef struct listNode_ { struct listNode_ * ...
- 利用describe( )中的count来检查数据是否缺省
#-*- coding: utf-8 -*- #在python的pandas库中,只需要读入数据,然后使用describe()函数就可以查看数据的基本情况 import pandas as pd in ...
- 定义类、System.Object对象、构造函数与析构函数、抽象类与静态类
一.类定义 class MyClass { //类成员 } 1.访问级别 默认访问级别为internal(内部类),也可以是public(公共类) internal(内部类):当前项目中的代码才能访问 ...
- 1001.A+B Format (20)解题描述
1. 作业链接 2. 解题的思路过程 首先这是道简单的计算题,要求计算a+b的值. 看初值条件,将a和b的取值限制在一个区间内. 本题难点和重点是如何把输出值形成题目要求的格式. 因为负数可通过在前面 ...
- MySQL 事务没有提交导致 锁等待 Lock wait timeout exceeded
java.lang.Exception: ### Error updating database. Cause: java.sql.SQLException: Lock wait timeout e ...
- ZooKeeper学习之路 (四)ZooKeeper开发环境eclipse配置
一.eclipse中配置zookeeper开发环境 1)将zookeeper eclipse plugin中的6个jar包放到eclipse安装目录下的plugins文件中,重启eclipse (2) ...
- programming-languages学习笔记--第5部分
programming-languages学习笔记–第5部分 */--> pre.src {background-color: #292b2e; color: #b2b2b2;} program ...
- 7、Dubbo-配置(2)
重试次数 通常配合timeout超时设置进行配置 <dubbo:reference "> </dubbo:reference> <dubbo:service i ...
- Nginx Web服务器配置
Nginx是一个轻量级高性能的web服务器,它是为快速响应大量静态文件请求和高效利用系统资源而设计的.与apache使用面向进程或线程的方式处理请求不同,nginx使用异步事件驱动模型在连接高并发的情 ...
- python之九九乘法表
for i in range(1,10): print( ) for j in range(1,i+1): print('%d*%d=%d '%(i,j,i*j),end="") ...