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. App《最美诗词》开发 -- Java后端(整合框架)

    本人一直是致力于Android开发,由于我们三位Android开发者 @老蔡 @不肯过江东 打算一起开发Android App<最美诗词>,需要服务器端的接口支持,所以便兼职做起了后端的代 ...

  2. JAVA编程思想 Ch3.6题

    练习6:在练习5的基础上,创建一个新的Dog索引,并对其赋值为Spot对象.测试用==和equals()方法来比较引用结果. public class quan { String name; Stri ...

  3. 题解 CF545A 【Toy Cars】

    题目传送门 太弱了,只能写写A题的题解 题意 给你一个 $n·n$ 的矩阵,翻车分三种情况: 如果 $a_i,_j=1$ ,记录第 $i$ 辆车 如果 $a_i,_j=2$ ,记录第 $j$ 辆车 如 ...

  4. 《Docker从入门到跑路》之Dockerfile基本操作

    一.简介 Dockerfile是一个文本文件,里面包含一条条指令,每一条指令就是一层镜像.一般情况下,Dockerfile分为4个部分: 基础镜像 维护者信息 镜像操作指令 容器启动时执行命令 例如: ...

  5. libevhtp初探

    libevent的evhttp不适合多线程,libevhtp重新设计了libevent的http API,采用了和memcached类似的多线程模型. worker线程的管道读事件的回调函数为htp_ ...

  6. 基于KepServer实现与S7-1200PLC之间的通信

    对于学习上位机开发,有一种通信方式是必须要了解的,那就是OPC是OLE for Process Control的简称,然而随着技术的不断发展,人们开始对它有了新的定义,比如Open Platform ...

  7. Linux编程实现递归查找文件

    命令格式如下:SCRIPT_NAME       SEARCH_ON_DIR       SEARCH_FILENAME #!/bin/bash Find(){ files=`` for file i ...

  8. Leetcode_236. 二叉树的最近公共祖先

    求二叉树的LCA code /** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *le ...

  9. ABAP 内表与XML转换

    1需求说明 在系统交互中需要将SAP内表转换为XML文件,发送给其他系统,并且将其他系统返回的XML文件转换为SAP内表. 2创建转换编辑器 事务代码:STRANS 选择简单转换 以图形方式编辑 右键 ...

  10. [hdu4714 Tree2cycle]树形DP

    题意:给一棵树,删边和加边的代价都为1,求把树变成一个圈所花的最小代价. 思路:对原树进行删边操作,直到将原树分成若干条链,然后通过在链之间添加边形成圈,由于删边和加边一一对应,且最后需要额外一条边连 ...