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. Centos7下查询jdk安装路径

    今天一个小实验需要安装jdk,用命令java -version查询了一下,原来Centos7自带OpenJDK的环境,但是需要手动配置/etc/profile文件,于是开始找java的安装路径.... ...

  2. 第十届山东省赛L题Median(floyd传递闭包)+ poj1975 (昨晚的课程总结错了,什么就出度出度,那应该是叫讨论一个元素与其余的关系)

    Median Time Limit: 1 Second Memory Limit: 65536 KB Recall the definition of the median of elements w ...

  3. CF1324F Maximum White Subtree——换根dp

    换根dp,一般用来解决在无根树上,需要以每个节点为根跑一边dfs的dp问题 我们做两遍dfs 先钦定任意一个点为根 第一遍,算出\(f_i\)表示\(i\)的子树产生的答案,这里,子树指的是以我们钦定 ...

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

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

  5. andorid jar/库源码解析之zxing

    目录:andorid jar/库源码解析 Zxing: 作用: 生成和识别,二维码,条形码. 栗子: 生成二维码,赋值到ImageView上 QRCodeWriter qrCodeWriter = n ...

  6. cmake安装jsoncpp

    cd jsoncpp- mkdir -p build/debug cd build/debug cmake -DCMAKE_BUILD_TYPE=release -DBUILD_STATIC_LIBS ...

  7. 1年之后的拿高工资的资本,Java线程

    只要开启线程,都会开启一块对应的栈内存,然后进行同步执行. -- 谈斌 线程是CPU用来处理程序的资源,线程的执行是抢占式的. 线程开启方式: 创建一个类,继承Thread类.重写 run(), 并在 ...

  8. dp D. Caesar's Legions

    https://codeforces.com/problemset/problem/118/D 这个题目有点思路,转移方程写错了. 这个题目看到数据范围之后发现很好dp, dp[i][j][k1][k ...

  9. android关机流程

    关机过程的主要实现在ShutdownThread.java中在关机过程中,主要做了三件事:1.发送关机广播 有的模块可能需要监听手机关机事件,所以在关机时发送关机广播,通知相关模块处理.2.关闭一些主 ...

  10. webpack 中,module,chunk 和 bundle 的区别是什么?

    前两天为了优化公司的代码打包项目,恶补了很多 webpack4 的知识.要是放在几年前让我学习 webpack 我肯定是拒绝的,之前看过 webpack 的旧文档,比我们内部项目的文档还要简陋. 但是 ...