Verilog语言中的系统任务和系统函数
Verilog语言中预先定义了一些任务和函数,用于完成一些特殊的功能,它们被称为系统任务和系统函数,这些函数大多数都是只能在Testbench仿真中使用的,使我们更方便的进行验证。
`timescale 1ns/1ns //时间尺度预编译指令 时间单位/时间精度
时间单位和时间精度由值1、10、和100以及单位s、ms、us、ns、ps和fs组成
时间单位:定义仿真过程所有与时间相关量的单位仿真中使用 “#数字”表示延时相应时间单位的时间,例#10表示延时10个单位的时间,即10ns。
时间精度:决定时间相关量的精度及仿真显示的最小刻度。
`timescale 1ns/10ps //精度0.01,#10.11 表示延时10110ps
下面这种写法就是错误的,因为时间单位不能比时间精度小。
`timescale 100ps/1ns
主要的函数有如下这些,在支持Verilog语法的编辑器中都会显示为高亮关键字 。
//--------------------------------------------------
$display //打印信息,自动换行
$write //打印信息
$strobe //打印信息,自动换行,最后执行
$monitor //监测变量
$stop //暂停仿真
$finish //结束仿真
$time //时间函数
$random //随机函数
$readmemb //读文件函数
//--------------------------------------------------
下面我们单独介绍它们的功能,并在ModelSim的Transcript界面中打印这些信息。
1、$display用于输出、打印信息
使用格式为:
$display("%b+%b=%d",a, b, c); //格式“%b+%b=%d” 格式控制,未指定时默认十进制
%h或%H //以十六进制的形式输出
%d或%D //以十进制的形式输出
%o或%O //以八进制的形式输出
%b或%B //以二进制的形式输出
//--------------------------------------------------
//a,b,c 输出列表,需要输出信息的变量
//每次打印信息后自动换行
`timescale 1ns/1ns
module tb_test();
reg [:] a;
reg [:] b;
reg [:] c;
initial begin
$display("Hello");
$display("xiangliangzi");
a = 'd5;
b = 'd6;
c = a + b;
#;
$display("%b+%b=%d", a, b, c);
end
endmodule
//--------------------------------------------------

2、$write 用于输出、打印信息
使用格式为:
$write("%b+%b=%d\n",a, b, c); //“%b+%b=%d\n” 格式控制,未指定时默认十进制
%h或%H //以十六进制的形式输出
%d或%D //以十进制的形式输出
%o或%O //以八进制的形式输出
%b或%B //以二进制的形式输出
\n //换行
//--------------------------------------------------
//a,b,c为输出列表,需要输出信息的变量
`timescale 1ns/1ns
module tb_test();
reg [:] a;
reg [:] b;
reg [:] c;
initial begin
$write("Hello ");
$write("xiangliangzi\n");
a = 'd5;
b = 'd6;
c = a + b;
#;
$write("%b+%b=%d\n",a, b, c);
end
endmodule
//--------------------------------------------------

3、$strobe用于输出、打印信息
使用格式为:
$strobe("%b+%b=%d",a,b,c); //“%b+%b=%d” 格式控制,未指定时默认十进制
%h或%H //以十六进制的形式输出
%d或%D //以十进制的形式输出
%o或%O //以八进制的形式输出
%b或%B //以二进制的形式输出
//--------------------------------------------------
//a,b,c 输出列表,需要输出信息的变量
//打印信息后自动换行,触发操作完成后执行
`timescale 1ns/1ns
module tb_test();
reg [:] a;
reg [:] b;
reg [:] c;
initial begin
$strobe("strobe:%b+%b=%d", a, b, c);
a = 'd5;
$display("display:%b+%b=%d", a, b, c);
b = 'd6;
c = a + b;
end
endmodule
//--------------------------------------------------

4、$monitor用于持续监测变量
使用格式为:
$monitor("%b+%b=%d",a,b,c); //“%b+%b=%d” 格式控制,未指定时默认十进制
%h或%H //以十六进制的形式输出
%d或%D //以十进制的形式输出
%o或%O //以八进制的形式输出
%b或%B //以二进制的形式输出
//--------------------------------------------------
//a,b,c 输出列表,需要输出信息的变量
//被测变量变化触发打印操作,自动换行
`timescale 1ns/1ns
module tb_test();
reg [:] a;
reg [:] b;
reg [:] c;
initial begin
a = 'd5;
#;
b = 'd6;
#;
c = a + b;
end
initial $monitor("%b+%b=%d", a, b, c);
endmodule
//--------------------------------------------------

5、$stop用于暂停仿真,
$finfish用于结束仿真
使用格式为:
//--------------------------------------------------
`timescale 1ns/1ns module tb_test(); initial begin
$display("Hello");
$display("xiangliangzi");
#;
$display("Stop Simulation");
$stop; //暂停仿真
$display("Continue Simulation");
#;
$display("Finish Simulation");
$finish; //结束仿真
end endmodule
//--------------------------------------------------

6、$time为时间函数,返回64位当前仿真时间;
$random用于产生随机函数,返回随机数
使用格式为:
//--------------------------------------------------
`timescale 1ns/1ns module tb_test(); reg [:] a; always # a = $random; initial $monitor("a=%d @time %d", a, $time); 12 endmodule
//--------------------------------------------------

7、$readmemh用于读二进制文件函数 ,
$readmemh 用于读十六进制文件函数
使用格式为:
$readmemb("<数据文件名>", <寄存器变量名>);
$readmemh("<数据文件名>", <寄存器变量名>);
//--------------------------------------------------
`timescale 1ns/1ns
module tb_test();
integer i;
reg [:] a [:];
initial begin
$readmemb("xiangliangzi.txt", a);
for(i=; i<=; i=i+) begin
#;
$write("%s", a[i]);
end
end
endmodule
//--------------------------------------------------
读取的”xiangliangzi.txt”文件为:
//--------------------------------------------------
// W
// e
// l
// c
// o
// m
// e
//空格
// t
// o
//空格
// x
// i
// a
// n
// g
// l
// i
// a
// n
// g
// z
// i
// !
//--------------------------------------------------

欢迎加入FPGA技术学习交流群,本群致力于为广大FPGAer提供良好的学习交流环境,不定期提供各种本行业相关资料!QQ交流群号:450843130

Verilog语言中的系统任务和系统函数的更多相关文章
- C语言中常用的字符串处理函数总结
C语言中字符串处理函数备注 此文仅用于自己研究和记录 字符串处理函数 1. char *gets(char *s); #include<stdio.h> 功能: 从标准输入读入字符,并保存 ...
- 【linux C】C语言中常用的几个函数的总结【二】
3.fgets 虽然用 gets() 时有空格也可以直接输入,但是 gets() 有一个非常大的缺陷,即它不检查预留存储区是否能够容纳实际输入的数据,换句话说,如果输入的字符数目大于数组的长度,get ...
- 【linux C】C语言中常用的几个函数的总结【一】
1.memset函数 定义变量时一定要进行初始化,尤其是数组和结构体这种占用内存大的数据结构.在使用数组的时候经常因为没有初始化而产生“烫烫烫烫烫烫”这样的野值,俗称“乱码”.每种类型的变量都有各自的 ...
- 关于C语言中的结构体内嵌函数(转)
https://blog.csdn.net/qq_39490500/article/details/80457831 看门见山 1.内嵌函数定义举例:经过真实测试 在函数中声明定义结构体 #inclu ...
- c语言中的文件格式化读写函数fscanf和fprintf函数
很多时候我们需要写入数据到文件中时都觉得很困扰,因为格式乱七八槽的,可读性太差了,于是我们就想有没有什么函数可以格式化的从文件中输入和输出呢,还真有.下面我将讲解一下fscanf和fprintf的强大 ...
- MySQL中的内置系统函数
一.字符串函数 1. CONCAT(S1,S2....SN): 把传入的参数连接成一个字符串 2. INSERT(str, x, y, insert): 将字符串 X位置开始,y个字符串长度替换为 ...
- C语言中常用的字符串操作函数
程序开头要声明 #include <string.h> 函数名: stpcpy 功 能: 拷贝一个字符串到另一个 用 法: char *stpcpy(char *destin, char ...
- C 语言中的 feof()函数
功能: feof 是 C 语言标准库函数函数,其原型在 stdio.h 中,其功能是检测流上的文件结束符,如果文件结束,则返回非0值,否则返回0,文件结束符只能被 clearerr() 清除. 用法: ...
- c语言中字符串转数字的函数
ANSI C 规范定义了 atof().atoi().atol().strtod().strtol().strtoul() 共6个可以将字符串转换为数字的函数,大家可以对比学习.另外在 C99 / C ...
随机推荐
- Get史上最优雅的加密方式!没有之一!
你的配置文件是不是还在使用下面这种落后的配置暴露一些密码: jdbc.url=jdbc:mysql://127.0.0.1:3305/afei jdbc.username=afei 如果是,那么继续往 ...
- 加分二叉树 vijos1991 NOIP2003第三题 区间DP/树形DP/记忆化搜索
描述 设一个n个节点的二叉树tree的中序遍历为(l,2,3,-,n),其中数字1,2,3,-,n为节点编号.每个节点都有一个分数(均为正整数),记第i个节点的分数为di,tree及它的每个子树都有一 ...
- 编写C#程序的IDE
编写C#程序,在Windows平台下,除了昂贵的Visual Studio.NET这个正宗的工具外,你还了解哪些? 听说有个Eclipse,IBM投钱开发的开源工具,有人也做了个for .NET的pl ...
- JAVA第一次blog总结
JAVA第一次blog总结 0.前言 大一下学期我们开展了OPP这门课程,这也是我们第一次接触到JAVA.与上学期我们在学校里学C语言不同的是,这学期由于疫情原因我们是以网课的方式在学习.在学习中我发 ...
- #Week4 Logistic Regression
一.Classification 主要讨论二元分类. 线性回归处理分类问题显然不靠谱,所以采用逻辑回归. 二.Hypothesis Representation 假设函数变为\(h_\theta(x) ...
- python(类继承)
一.继承 1.单继承 一个对象使用另一个对象的属性和方法,被继承的类也称父类 (1)父类与子类的方法不一样 class Four(): def sub(self,x,y): return x + y ...
- Python编程求解第1天1分钱之后每天两倍持续一个月的等比数列问题
一.问题 问题1 场景:如果你未来的丈母娘要求你,第1天给她1分钱,第2天给2分钱,第3天给4分钱,以此类推,每天给前一天的2倍,给1个月(按30天)算就行.问:第30天给多少钱,总共给多少钱? 问题 ...
- 支付宝小程序云开发(Serverless)
支付宝小程序云开发(Serverless) 博客说明 文章所涉及的资料来自互联网整理和个人总结,意在于个人学习和经验汇总,如有什么地方侵权,请联系本人删除,谢谢! 一.在支付宝账号里面开通小程序云服务 ...
- 解决json字符串转为对象时LocalDateTime异常问题
1 出现异常 这次的异常出现在前端向后端发送请求体里带了两个日期,在后端的实体类中,这两个日期的格式都是JDK8中的时间类LocalDateTime.默认情况下,LocalDateTime只能解析20 ...
- cdp协议简介
啥是cdp 根据官网的说法,cdp(Chrome DevTools Protocol) 允许我们检测,调试Chromium, Chrome 和其他基于 Blink的 浏览器. 这个协议被广泛使用. 其 ...