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语言中的系统任务和系统函数的更多相关文章

  1. C语言中常用的字符串处理函数总结

    C语言中字符串处理函数备注 此文仅用于自己研究和记录 字符串处理函数 1. char *gets(char *s); #include<stdio.h> 功能: 从标准输入读入字符,并保存 ...

  2. 【linux C】C语言中常用的几个函数的总结【二】

    3.fgets 虽然用 gets() 时有空格也可以直接输入,但是 gets() 有一个非常大的缺陷,即它不检查预留存储区是否能够容纳实际输入的数据,换句话说,如果输入的字符数目大于数组的长度,get ...

  3. 【linux C】C语言中常用的几个函数的总结【一】

    1.memset函数 定义变量时一定要进行初始化,尤其是数组和结构体这种占用内存大的数据结构.在使用数组的时候经常因为没有初始化而产生“烫烫烫烫烫烫”这样的野值,俗称“乱码”.每种类型的变量都有各自的 ...

  4. 关于C语言中的结构体内嵌函数(转)

    https://blog.csdn.net/qq_39490500/article/details/80457831 看门见山 1.内嵌函数定义举例:经过真实测试 在函数中声明定义结构体 #inclu ...

  5. c语言中的文件格式化读写函数fscanf和fprintf函数

    很多时候我们需要写入数据到文件中时都觉得很困扰,因为格式乱七八槽的,可读性太差了,于是我们就想有没有什么函数可以格式化的从文件中输入和输出呢,还真有.下面我将讲解一下fscanf和fprintf的强大 ...

  6. MySQL中的内置系统函数

    一.字符串函数  1. CONCAT(S1,S2....SN): 把传入的参数连接成一个字符串  2. INSERT(str, x, y, insert): 将字符串 X位置开始,y个字符串长度替换为 ...

  7. C语言中常用的字符串操作函数

    程序开头要声明 #include <string.h> 函数名: stpcpy 功 能: 拷贝一个字符串到另一个 用 法: char *stpcpy(char *destin, char ...

  8. C 语言中的 feof()函数

    功能: feof 是 C 语言标准库函数函数,其原型在 stdio.h 中,其功能是检测流上的文件结束符,如果文件结束,则返回非0值,否则返回0,文件结束符只能被 clearerr() 清除. 用法: ...

  9. c语言中字符串转数字的函数

    ANSI C 规范定义了 atof().atoi().atol().strtod().strtol().strtoul() 共6个可以将字符串转换为数字的函数,大家可以对比学习.另外在 C99 / C ...

随机推荐

  1. 解决vue中BMap未定义问题

    原文链接: 点我 最近在项目中使用了百度地图来显示物流信息,实现方式有两种: 引用Vue Baidu Map引用BMap存在的问题:\color{red}{存在的问题:}存在的问题::使用BMap可以 ...

  2. 图论--网络流--费用流--POJ 2156 Minimum Cost

    Description Dearboy, a goods victualer, now comes to a big problem, and he needs your help. In his s ...

  3. Java面试题:String、StringBuilder、StringBuffer区别

    String:不可变字符序列. StringBuilder:可变字符序列.效率高.线程不安全,适合单线程. StringBuffer:可变字符序列.效率低.线程安全,适合多线程. 效率从高到低:Str ...

  4. 重新认识 Spring IOC

    spring IOC 剖析 再品IOC与DI IOC(Inversion of Control) 控制反转:所谓控制反转,就是把原先我们代码里面需要实现的对象创 建.依赖的代码,反转给容器来帮忙实现. ...

  5. zabbix日常问题总结

    1.connection to database 'zabbix' failed: [1040] Too many connections 问题:数据库连接池太少解决:增加数据库连接池步骤:(1).进 ...

  6. rabbitmq启动时出错epmd error for host

    centos7环境下新装rabbitmq,第一次启动时发现出错:ERROR: epmd error for host "****":XXXXXXX 检查发现当前机器的名称为 1  ...

  7. AntDesignPro的权限控制和动态路由

    最近看了AntDesignPro关于权限控制的官方文档以及自己框架里权限控制的实现,总结一下. 先贴一下官网上关于权限控制的图有利于理解 步骤如下: 判断是否有 AccessToken 如果没有则跳转 ...

  8. 王颖奇 201771010129 第三周 Java基本程序设计总结

    实验三 Java基本程序设计 实验时间 2018-9-13 201771010129 王颖奇 1.实验目的与要求 (1)进一步掌握Eclipse集成开发环境下java程序开发基本步骤: (2)熟悉PT ...

  9. 【Scala】用实例弄清楚scala几种函数的定义和特点

    文章目录 作为参数的函数 匿名函数 柯里化函数(currying) 闭包函数 作为参数的函数 scala> val a1 = Array(1,2,3,4) //这是一个数组 a1: Array[ ...

  10. ASP.NET Core中结合枚举和资源文件显示列表

    模型类的某些属性以枚举形式出现,我们希望在打开编辑表单时在选择列表中显示枚举值.有时我们想要枚举元素名称,但有时我们想要使用自定义名称甚至翻译. 这个例子演示了如何获取枚举元素名称以选择ASP.NET ...