打印
[Verilog HDL]

verilog延时函数

[复制链接]
3441|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
gaochy1126|  楼主 | 2024-9-28 16:19 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
Verilog语言中预先定义了一些任务和函数,用于完成一些特殊的功能,它们被称为系统任务和系统函数,这些函数大多数都是只能在Testbench仿真中使用的,使我们更方便的进行验证。
[size=1em]1 `timescale 1ns/1ns //时间尺度预编译指令 时间单位/时间精度


时间单位和时间精度由值1、10、和100以及单位s、ms、us、ns、ps和fs组成
时间单位:定义仿真过程所有与时间相关量的单位仿真中使用 “#数字”表示延时相应时间单位的时间,例#10表示延时10个单位的时间,即10ns。
时间精度:决定时间相关量的精度及仿真显示的最小刻度。
[size=1em]1 `timescale 1ns/10ps  //精度0.01,#10.11 表示延时10110ps


下面这种写法就是错误的,因为时间单位不能比时间精度小。
[size=1em]1 `timescale 100ps/1ns


主要的函数有如下这些,在支持Verilog语法的编辑器中都会显示为高亮关键字 。
[size=1em]//--------------------------------------------------$display    //打印信息,自动换行 $write        //打印信息$strobe        //打印信息,自动换行,最后执行 $monitor       //监测变量 $stop          //暂停仿真 $finish        //结束仿真 $time          //时间函数 $random        //随机函数 $readmemb     //读文件函数//--------------------------------------------------


下面我们单独介绍它们的功能,并在ModelSim的Transcript界面中打印这些信息。
1、$display用于输出、打印信息
使用格式为:
[size=1em]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 endmodule28 //--------------------------------------------------



2、$write 用于输出、打印信息
使用格式为:
[size=1em]1 $write("%b+%b=%d\n",a, b, c); //“%b+%b=%d\n” 格式控制,未指定时默认十进制  2 %h或%H //以十六进制的形式输出  3 %d或%D //以十进制的形式输出  4 %o或%O //以八进制的形式输出  5 %b或%B //以二进制的形式输出 6 \n     //换行 7 //--------------------------------------------------     8 //a,b,c为输出列表,需要输出信息的变量 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   $write("Hello ");    19   $write("xiangliangzi\n");20   a = 4'd5; 21   b = 4'd6; 22   c = a + b; 23   #100; 24   $write("%b+%b=%d\n",a, b, c);25 end 26  27 endmodule    28 //--------------------------------------------------



3、$strobe用于输出、打印信息
使用格式为:
[size=1em]1 $strobe("%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   $strobe("strobe:%b+%b=%d", a, b, c); 19   a = 4'd5;    20   $display("display:%b+%b=%d", a, b, c); 21   b = 4'd6; 22   c = a + b; 23 end  24  25 endmodule26 //--------------------------------------------------



4、$monitor用于持续监测变量
使用格式为:
[size=1em]1 $monitor("%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   a = 4'd5; 19   #100; 20   b = 4'd6; 21   #100; 22   c = a + b; 23 end 24  25 initial $monitor("%b+%b=%d", a, b, c); 26  27 endmodule28 //--------------------------------------------------



5、$stop用于暂停仿真,
$finfish用于结束仿真
使用格式为:
[size=1em]1 //-------------------------------------------------- 2 `timescale 1ns/1ns  3   4 module tb_test();  5   6 initial begin  7   $display("Hello");  8   $display("xiangliangzi");  9   #100; 10   $display("Stop Simulation"); 11   $stop;     //暂停仿真 12   $display("Continue Simulation"); 13   #100; 14   $display("Finish Simulation"); 15   $finish;     //结束仿真 16 end 17  18 endmodule19 //--------------------------------------------------



6、$time为时间函数,返回64位当前仿真时间;
$random用于产生随机函数,返回随机数
使用格式为:
[size=1em]1 //-------------------------------------------------- 2 `timescale 1ns/1ns 3    4 module tb_test(); 5    6 reg [3:0] a;  7   8 always #10 a = $random; 9  10 initial $monitor("a=%d @time %d", a, $time); 11  12 endmodule13 //--------------------------------------------------



7、$readmemh用于读二进制文件函数 ,
$readmemh 用于读十六进制文件函数
使用格式为:
[size=1em]1 $readmemb("<数据文件名>", <寄存器变量名>);  2 $readmemh("<数据文件名>", <寄存器变量名>); 3 //-------------------------------------------------- 4 `timescale 1ns/1ns 5    6 module tb_test();  7  8 integer i;  9 10 reg [7:0] a [23:0]; 11  12 initial begin 13    $readmemb("xiangliangzi.txt", a); 14    for(i=0; i<=23; i=i+1) begin 15       #10; 16       $write("%s", a); 17    end 18 end 19  20 endmodule21 //--------------------------------------------------


读取的”xiangliangzi.txt”文件为:
[size=1em]1 //-------------------------------------------------- 2 01010111 // W  3 01100101 // e  4 01101100 // l  5 01100011 // c  6 01101111 // o  7 01101101 // m  8 01100101 // e  9 00100000 //空格10 01110100 // t 11 01101111 // o 12 00100000 //空格13 01111000 // x 14 01101001 // i15 01100001 // a16 01101110 // n17 01100111 // g18 01101100 // l19 01101001 // i20 01100001 // a21 01101110 // n22 01100111 // g23 01111010 // z24 01101001 // i25 00100001 // !26 //--------------------------------------------------







使用特权

评论回复

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:这个社会混好的两种人:一是有权有势,二是没脸没皮的。

1061

主题

11320

帖子

26

粉丝