1. 基础入门篇

您所在的位置:网站首页 fpga用什么下载器 1. 基础入门篇

1. 基础入门篇

2024-07-04 01:46| 来源: 网络整理| 查看: 265

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