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