Verilog HDL数字系统设计——原理、实例及仿真 教学课件 ppt 作者 康磊 第1-7章 第6章

上传人:E**** 文档编号:89364422 上传时间:2019-05-24 格式:PPT 页数:59 大小:245.50KB
返回 下载 相关 举报
Verilog HDL数字系统设计——原理、实例及仿真 教学课件 ppt 作者 康磊 第1-7章 第6章_第1页
第1页 / 共59页
Verilog HDL数字系统设计——原理、实例及仿真 教学课件 ppt 作者 康磊 第1-7章 第6章_第2页
第2页 / 共59页
Verilog HDL数字系统设计——原理、实例及仿真 教学课件 ppt 作者 康磊 第1-7章 第6章_第3页
第3页 / 共59页
Verilog HDL数字系统设计——原理、实例及仿真 教学课件 ppt 作者 康磊 第1-7章 第6章_第4页
第4页 / 共59页
Verilog HDL数字系统设计——原理、实例及仿真 教学课件 ppt 作者 康磊 第1-7章 第6章_第5页
第5页 / 共59页
点击查看更多>>
资源描述

《Verilog HDL数字系统设计——原理、实例及仿真 教学课件 ppt 作者 康磊 第1-7章 第6章》由会员分享,可在线阅读,更多相关《Verilog HDL数字系统设计——原理、实例及仿真 教学课件 ppt 作者 康磊 第1-7章 第6章(59页珍藏版)》请在金锄头文库上搜索。

1、第6章 任务、函数及其他,6.1 任务 6.2 函数 6.3 预处理指令 6.4 系统任务和函数,6.1 任 务 任务(task)是通过调用来执行的,而且只有在调用时才执行。设计者将具有一定功能的Verilog HDL代码封装在任务中,然后在其他需要的地方进行调用。在定义任务时,设计者可以为其添加输入和输出端口,用于在任务调用时传递参数。另外,任务可以彼此调用,而且任务内还可以调用函数。任务可以包含带时序控制的语句,如#delays、wait等。当调用带时序控制的任务时,任务返回时的时间和调用时的时间可能不相同。,6.1.1 任务的定义 任务定义的语法格式如下:,【例6.1】 任务定义举例。,

2、6.1.2 任务的调用 任务调用的语法格式如下: (端口1,端口2,端口n); 例如: my_task(v,w,x,y,z); 任务调用变量(v,w,x,y,z)和任务定义时的I/O变量(a, b, c, d, e)的顺序是一一对应的。当任务启动时,由v、w和x传入的变量赋给了a、b和c,而当任务完成后的输出又通过c、d和e赋给了x、y和z。,【例6.2】 定义一个完成两个操作数按位与操作的任务,然后在后面的算术逻辑单元的描述中调用该任务完成与操作。,通过上面的例子,在使用任务时,应注意以下几点: (1) 任务的定义与调用须在一个module模块内; (2) 定义任务时,没有端口名列表,但需要

3、紧接着进行输入、输出端口和数据类型的说明。 (3) 当任务被调用时,任务被激活。任务的调用与模块的调用相同,都是通过任务名调用来实现的。调用时,须列出端口名列表,端口名的排序和类型必须与任务定义中的相 一致。 (4) 一个任务可以调用别的任务和函数,可以调用的任务和函数个数不限。,【例6.3】 任务参数传递示例。,6.2 函 数 函数和任务一样,也用来定义一个可重复调用的模块。不同的是,函数可以返回一个值,因此可以出现在等号右边的表达式中,而任务的返回值只能通过任务的输出端口来获得;对任务的调用是一个完整的语句,而函数的调用通常出现在赋值语句的右边,函数的返回值可以用于表达式的进一步计算。,函

4、数的特点如下: (1) 函数定义不能包含任何时序控制语句。 (2) 函数必须含有输入,但不能有输出或双向信号。 (3) 函数中不使用非阻塞赋值语句。 (4) 一个函数只能返回一个值,该值的变量名与函数同名,数据类型默认为reg类型。 (5) 传递给函数参数的顺序与函数定义时输入参数声明的顺序相同。 (6) 函数定义必须包含在模块定义之内。,(7) 函数不能调用任务,但任务可以调用函数。 (8) 虽然函数只能返回一个值,但是它们的返回值可以直接赋给一个信号拼接,从而使它们等效多个输出。例如: o1, o2, o3, o4=f_or_and(a, b, c, d, e); (9) 自动函数有独立的

5、本地变量,可以同时在多处调用或递归调用,其语法格式如下: function automatic 函数名;,6.2.1 函数的定义 函数的目的是返回一个值,以用于表达式的计算。函数的语法格式如下:,【例6.4】 逻辑运算示例。,6.2.2 函数的调用 与任务一样,函数也是在被调用时才执行,调用函数的语法格式如下: (); 其中,为要调用的函数名; 是传递给函数的输入参数列表,其顺序必须与函数定义时所声明顺序相同。 例如,使用连续赋值语句调用函数get0时可以采用如下语句: assign out=is_legal? get0(in):1b0;,【例6.5】 用函数定义一个8-3编码器。,6.3 预

6、 处 理 指 令 与C语言一样,Verilog HDL语言也提供了编译预处理的功能。“预处理指令”是Verilog HDL编译系统的一个组成部分。Verilog HDL编译系统通常先对一些特殊的命令进行“预处理”,然后将预处理的结果和源程序一起再进行通常的编译 处理。,1宏定义命令define和undef (1) define指令是用一个指定的标识符(即名字)来代表一个字符串,它的一般形式为: define (标识符) 字符串 例如: define sum ina+inb+inc+ind,例如:,(2) undef指令用于取消前面定义的宏。例如:,2条件编译命令ifdef、else、endif

7、 通常,Verilog HDL源程序中所有的行都会被编译器编译(注释除外),但有时设计者希望对其中的一部分内容只有在满足条件时才进行编译,也就是对一部分内容指定编译的条件,当条件满足时对一组语句进行编译,而当条件不满足时则编译另一部分,这就是“条件编译”。条件编译命令有以下几种形式。,(1) 形式一: ifdef 宏名 (标识符) 程序段1 else 程序段2 endif,(2) 形式二: ifdef 宏名 (标识符) 程序段1 endif,【例6.6】 条件编译举例。,3文件包含命令include Verilog HDL语言提供了include命令用来实现“文件包含”的操作,使用includ

8、e编译命令,在编译时能把其指定的整个文件包括进来一起处理,即将另外的文件包含到本文件之中。其一般形式为: include “文件名”,需要注意的是: (1) 一个include命令只能指定一个被包含文件。如果要包含多个文件,需要多个include命令,但可以将多个include命令写在一行。例如:,(2) 被包含文件名可以是相对路径名,也可以是绝对路径名。例如: include “parts/counter.v” include “/library/mux.v” (3) 文件包含可以嵌套,file1.v包含file2.v,而file2.v可以再包含file3.v。但是在file1.v中被包含的

9、底层文件应该按由底至上的顺序书写文件包含声明。例如图6.1的文件包含关系中,file1.v中文件包含声明的先后顺序应该如下: include“file4.v” include“file3.v” include“file2.v” 合理地使用include 可以使程序条理清楚、易于查错。,图6.1 include文件包含关系,4时间尺度命令 timescale timescale命令用来定义跟在该命令后模块的时间单位和时间精度。它的命令格式如下: timescale / 其中,用来定义模块中仿真时间和延迟时间的基准单位;用来声明该模块仿真时间的精确程度,该参量用来对延迟时间值进行取整操作(仿真前)

10、,因此该参量又被称为取整精度。,在timescale命令中,用于说明时间单位和时间精度参量值的数字必须是整数,且其有效数字为1、10、100,单位为秒(s)、毫秒(ms)、微秒(us)、纳秒(ns)、皮秒(ps)、毫皮秒(fs)。这几种时间单位和时间精度参量值参见表6.1。,6.4 系统任务和函数 Verilog HDL提供了内置的系统任务和函数,即在语言中预定义的任务和函数。以 $字符开始的标识符表示系统任务或系统函数,以区别用户自定义的任务和函数。这些系统任务和函数提供了非常强大的功能,有兴趣的读者可以参阅Verilog HDL语言参考手册。,6.4.1 显示任务 1显示和写入任务 显示任

11、务将特定信息输出到标准输出设备,并且带有行结束字符;写入任务输出特定信息时不带有行结束符。 显示任务的几种形式:$display、$displayb、$displayh、$displayo。 写入任务的几种形式:$write、$writeb、$writeh、$writeo。 显示和写入任务的语法格式如下: $display(“格式控制符”,输出变量名列表); $write (“格式控制符“,输出变量名列表);,其作用是输出信息,即将输出变量名列表(可以是表达式、变量或其他函数)按格式控制符给定的格式输出。这两个任务的作用基本相同。 例如: $display(“a=%h b=%h“,a, b);

12、,在$display和$write中,其输出格式控制符是用双引号括起来的字符串,它包括两种信息: (1) 格式说明,由“%”和格式字符组成。它的作用是将输出的数据转换成指定的格式后输出。格式说明总是由“%”字符开始的,对于不同类型的数据用不同的格式控制符。表6.2中给出了常用的几种输出格式控制符。,(2) 普通字符,即需要原样输出的字符。一些特殊的控制符和字符可以通过表6.3中的转换来输出。,2探测任务 探测任务是在指定时间显示仿真数据,但这种任务的执行要推迟到当前时刻结束时才显示仿真数据。它有4种形式: $strobe、$strobeb、$strobeh、$strobeo。 其语法格式如下:

13、 $strobe (“格式控制符“,输出变量名列表);,3监控任务 监控任务是指连续监控指定的参数。只要参数表中的参数值发 生变化,整个参数表就在当前仿真时刻结束时显示。监控任务有4种形式:$monitor、$monitorb、$monitorh、$monitoro。 监控任务的语法格式如下: $monitor (“格式控制符“,输出变量名列表);,6.4.2 文件输入/输出任务 Verilog HDL语言提供了丰富的文件操作任务,使设计者能方便地对磁盘上的文件进行操作。 1文件的打开和关闭 在对任务文件进行读/写操作时,必须先将文件打开,并且获取一个文件描述符,以便对其进行存放。$fopen

14、和$fclose任务分别用来打开和关闭某个文件,其语法格式如下: integer file_pointer = $fopen(file_name); $fclose(file_pointer);,【例6.7】 $fopen和$fclose任务的用法示例。,2输出到文件 在文件打开后,显示、写入、探测和监控等系统任务都可以向文件输出数据,将信息写入文件。这些任务有 $fdisplay、$fdisplayb、$fdisplayh、$fdisplayo、$fwrite、$fwriteb、$fwriteh、$fwriteo、$fstrobe、$fstrobeb、$fstrobeh、$fstrobeo、

15、$fmonitor、$fmonitorb、$fmonitorh、$fmonitoro。,这些任务的使用方法和效果与$display、$write和$monitor等任务的基本相同。不同的是,这些任务是将信息输出到指定的文件。也就是说,在使用时只需要增加一个参数即第一个参数,该参数是文件指针(指示要把信息写入哪个文件)。其语法格式如下:,【例6.8】 $fdisplay任务的用法示例。,3从文件中读取数据 有两个系统任务能够从文本文件中读取数据,并将数据加载到存储器,它们是$readmemb(读取二进制格式数)和$readmemh(读取十六进制格式数)。 其语法格式如下: $readmemb/h (“文件名”,数组变量); $readmemb/h (“文件名”,数组变量,起始地址); $readmemb/h (“文件名“,数组变量,起始地址,结束地址);,【例6.9】 没有设定地址范围。 reg 3:0 mem_A 63:0; initial $readmemb(“mem.txt”, mem_A); 读入的每个数字都被依次指派给从0开始到63的存储器单元。,【例6.10】 设定了地址范围。 reg 3:0 mem_A 63:0; initial $readmemb(“mem.txt”, mem_A, 15, 30);

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号