1. 基础入门篇 |
您所在的位置:网站首页 › fpga用什么下载器 › 1. 基础入门篇 |
2.2.16. Verilog语言中的系统任务和系统函数¶
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界面中打印这些信息。 $display用于输出、打印信息 使用格式为: $display(“%b+%b=%d”,a, b, c);//格式“%b+%b=%d” 格式控制,未指定时默认十进制 %h或%H //以十六进制的形式输出 %d或%D //以十进制的形式输出 %o或%O //以八进制的形式输出 %b或%B //以二进制的形式输出 1 //a,b,c 输出列表,需要输出信息的变量 2 //每次打印信息后自动换行 3 `timescale 1ns/1ns 4 5 module tb_test(); 6 7 reg [3:0] a; 8 reg [3:0] b; 9 reg [3:0] c; 10 11 initial begin 12 $display(“Hello”); 13 $display(“EmbedFire”); 14 a = 4’d5; 15 b = 4’d6; 16 c = a + b; 17 #100; 18 $display(“%b+%b=%d”, a, b, c); 19 end 20 21 endmodule 图 8‑1 打印信息图 $write 用于输出、打印信息 使用格式为: $write(“%b+%b=%dn”,a, b, c); //“%b+%b=%dn” 格式控制,未指定时默认十进制 %h或%H //以十六进制的形式输出 %d或%D //以十进制的形式输出 %o或%O //以八进制的形式输出 %b或%B //以二进制的形式输出 \n //换行 1 //a,b,c为输出列表,需要输出信息的变量 2 `timescale 1ns/1ns 3 module tb_test(); 4 5 reg [3:0] a; 6 reg [3:0] b; 7 reg [3:0] c; 8 9 initial begin 10 $write(“hello “); 11 $write(“EmbedFiren”); 12 a = 4’d5; 13 b = 4’d6; 14 c = a + b; 15 #100; 16 $write(“%b+%b=%dn”,a, b, c); 17 end 18 19 endmodule 图 8‑2 打印信息图 $strobe用于输出、打印信息 使用格式为: $strobe(“%b+%b=%d”,a,b,c); //“%b+%b=%d” 格式控制,未指定时默认十进制 %h或%H //以十六进制的形式输出 %d或%D //以十进制的形式输出 %o或%O //以八进制的形式输出 %b或%B //以二进制的形式输出 1 //a,b,c 输出列表,需要输出信息的变量 2 //打印信息后自动换行,触发操作完成后执行 3 `timescale 1ns/1ns 4 module tb_test (); 5 6 reg [3:0] a; 7 reg [3:0] b; 8 reg [3:0] c; 9 10 initial begin 11 $strobe(“strobe:%b+%b=%d”, a, b, c); 12 a = 4’d5; 13 $display(“display:%b+%b=%d”, a, b, c); 14 b = 4’d6; 15 c = a + b; 16 end 17 18 endmodule 图 8‑3 打印信息图 $monitor用于持续监测变量 使用格式为: $monitor(“%b+%b=%d”,a,b,c); //“%b+%b=%d” 格式控制,未指定时默认十进制 %h或%H //以十六进制的形式输出 %d或%D //以十进制的形式输出 %o或%O //以八进制的形式输出 %b或%B //以二进制的形式输出 1 //a,b,c 输出列表,需要输出信息的变量 2 //被测变量变化触发打印操作,自动换行 3 `timescale 1ns/1ns 4 module tb_test (); 5 6 reg [3:0] a; 7 reg [3:0] b; 8 reg [3:0] c; 9 10 initial begin 11 a = 4’d5; 12 #100; 13 b = 4’d6; 14 #100; 15 c = a + b; 16 end 17 18 initial $monitor(“%b+%b=%d”, a, b, c); 19 20 endmodule 图 8‑4 打印信息图 $stop用于暂停仿真,$finish用于结束仿真 1 `timescale 1ns/1ns 2 3 module tb_test(); 4 5 initial begin 6 $display(“Hello”); 7 $display(“EmbedFire”); 8 #100; 9 $display(“Stop Simulation”); 10 $stop; //暂停仿真 11 $display(“Continue Simulation”); 12 #100; 13 $display(“Finish Simulation”); 14 $finish; //结束仿真 15 end 16 17 endmodule 图 8‑5 打印信息图 $time为时间函数,返回64位当前仿真时间;$random用于产生随机函数,返回随机数 1 `timescale 1ns/1ns 2 module tb_test (); 3 4 reg [3:0] a; 5 6 always #10 a = $random; 7 8 initial $monitor(“a=%d @time %d”,a,$time); 9 10 endmodule 图 8‑6 打印信息图 $readmemb用于读二进制文件函数 ,$readmemh 用于读十六进制文件函数 使用格式为: $readmemb(“”,); $readmemh(“”,); 1 `timescale 1ns/1ns 2 module tb_test (); 3 4 integer i; 5 6 reg [7:0] a [20:0]; 7 8 initial begin 9 $readmemb(“EmbedFire.txt”, a); 10 for(i=0; i |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |