第四章(第8讲)_Verilog_HDL_《电子设计自动化EDA》精编版

上传人:ahu****ng1 文档编号:141864508 上传时间:2020-08-13 格式:PPTX 页数:108 大小:3.17MB
返回 下载 相关 举报
第四章(第8讲)_Verilog_HDL_《电子设计自动化EDA》精编版_第1页
第1页 / 共108页
第四章(第8讲)_Verilog_HDL_《电子设计自动化EDA》精编版_第2页
第2页 / 共108页
第四章(第8讲)_Verilog_HDL_《电子设计自动化EDA》精编版_第3页
第3页 / 共108页
第四章(第8讲)_Verilog_HDL_《电子设计自动化EDA》精编版_第4页
第4页 / 共108页
第四章(第8讲)_Verilog_HDL_《电子设计自动化EDA》精编版_第5页
第5页 / 共108页
点击查看更多>>
资源描述

《第四章(第8讲)_Verilog_HDL_《电子设计自动化EDA》精编版》由会员分享,可在线阅读,更多相关《第四章(第8讲)_Verilog_HDL_《电子设计自动化EDA》精编版(108页珍藏版)》请在金锄头文库上搜索。

1、,8讲) Verilog HDL,2008-9-1,EDA技术与DE2实践,2,本章概要:本章介绍硬件描述语言Verilog HDL的语言规则、数据类型和语句结构,并介绍最基本、最典型的数字逻辑电路的Verilog HDL描述,作为Verilog HDL工程设计的基础。 知识要点: (1)Verilog HDL设计模块的基本结构; (2)Verilog HDL的语言规则; (3)用Verilog HDL实现各种类型电路及系统设计的方法; (4)Verilog HDL设计流程。,2008-9-1,EDA技术与DE2实践,3,教学安排:本章教学安排8学时。通过本章的学习,使同学们熟悉Verilog

2、 HDL设计模块的基本结构和Verilog HDL的语言规则,进而掌握Verilog HDL的编程方法,并使读者在第2章学习的基础上,进一步掌握EDA技术的Verilog HDL文本输入设计法。,2008-9-1,EDA技术与DE2实践,4,4.2.9 编译指令,所有的Verilog HDL编译指令均以反引号“”开头(如timescale),编译指令用于在EDA工具软件对 Verilog HDL源程序代码编译时,指定进行某种操作。例如,宏编译指令用于在编译时把一个文本替换为宏的名字;条件编译指令用于在编译时,根据指令指定的条件对相关的源程序语句代码进行选择性的编译;包含编译指令用于在编译时将指

3、令指定的文件包含进来一起编译等。,2008-9-1,EDA技术与DE2实践,5,在一般数字电路及系统的设计中,使用编译指令比较少,这里不再对它们进行一一介绍,仅以timescale编译指令为例,介绍编译指令的基本使用方法,供同学们参考。 timescale编译指令用来声明跟在其后的程序模块的时间单位和时间精度,timescale指令的使用格式为: timescale时间的基准单位/模拟时间的精度;,2008-9-1,EDA技术与DE2实践,6,“时间的基准单位”用来指明时间或延迟的基准单位,“模拟时间的精度”用来指明该模块的模拟时间的精确程度。时间的基准单位和模拟时间的精度的数字必须是整数,有

4、效数字为1、10和100,单位为s(秒)、ms(1毫秒=103秒)、s(1微秒=106秒)、ns(1纳秒=109秒)、ps(1皮秒=1012秒)和fs(1飞秒=1015秒)。,2008-9-1,EDA技术与DE2实践,7,例如,语句: timescale 10us/100ns; 声明了其后的设计模块的时间数值均为10s的整数倍(即#1=10s),时间的精度为0.1s(100ns)。 如果程序模块不使用timescale编译指令,则编译时自动执行timescale 1ns/ 1ns编译指令(默认)结果,即#1=1ns,时间精确度为1ns。,2008-9-1,EDA技术与DE2实践,8,4.3 V

5、erilog HDL的语句,语句是构成Verilog HDL程序不可缺少的部分。Verilog HDL的语句包括赋值语句、条件语句、循环语句、结构声明语句和编译预处理语句等类型,每一类语句又包括几种不同的语句。在这些语句中,有些语句属于顺序执行语句,有些语句属于并行执行语句。,2008-9-1,EDA技术与DE2实践,9,4.3.1 赋值语句,在Verilog HDL中,赋值语句常用于描述硬件设计电路输出与输入之间的信息传送,改变输出结果。Verilog HDL有门基元、连续赋值、过程赋值和非阻塞赋值4种赋值方法(即语句)。不同的赋值语句使输出产生新值的方法不同。,2008-9-1,EDA技术

6、与DE2实践,10,1. 门基元赋值语句 门基元赋值语句的格式为: 基本逻辑门关键词例化门名称(门输出,门输入1,门输入2,门输入n);,其中,基本逻辑门关键词是Verilog HDL预定义的逻辑门,包括and、or、not、xor、nand、nor等:例化门名称属于可选项;圆括号中的内容是被描述门的输出和输入信号。例如,具有a、b、c、d4个输入和y为输出与非门的门基元赋值语句为: nand (y,a,b,c,d);,2008-9-1,EDA技术与DE2实践,11,或者 nand mynand(y, a, b, c, d); 上述语句与“assign y = (a for (n=0;n8;n

7、=n+1) out = out an; end endmodule,异或,2008-9-1,EDA技术与DE2实践,39,2. repeat语句 repeat语句的语法格式为: repeat(循环次数表达式)语句; 用repeat语句实现例4.8(8位奇偶校验器)的描述如下: module example_8_l(a, out); parameter size = 7; input7:0 a; output out; reg out; integer n;,always (a) begin out = 0; n = 0; repeat(size) begin out= outan; n = n

8、+1; end end endmodule,异或,2008-9-1,EDA技术与DE2实践,40,注意,有的EDA工具软件不支持repeat语句(如MAX+PLUS ),因此将repeat视为非法语句,而Quartus II 和ModelSim支持。,循环语句包含for语句、repeat语句、while语句和forever语句4种。,2008-9-1,EDA技术与DE2实践,41,3. while语句 while语句的语法格式为: while(循环执行条件表达式) begin 重复执行语句; 修改循环条件语句; end,while语句在执行时,首先判断循环执行条件表达式是否为真。若为真,则执行

9、其后的语句;若为假,则不执行(表示循环结束)。为了使while语句能够结束,在循环执行的语句中必须包含一条能改变循环条件的语句。,2008-9-1,EDA技术与DE2实践,42,4. forever语句 forever语句的语法格式为: forever begin 语句; end,forever是一种无穷循环控制语句,它不断地执行其后的语句或语句块,永远不会结束。forever语句常用来产生周期性的波形,作为仿真激励信号。例如,产生时钟clk的语句为 #10forever #10 clk = !clk;,2008-9-1,EDA技术与DE2实践,43,4.3.4 结构声明语句,Verilog

10、HDL的任何过程模块都是放在结构声明语句中,结构声明语句包括 always、 initial、 Task 和function 4种结构。,2008-9-1,EDA技术与DE2实践,44,1. always块语句 在一个Verilog HDL模块(module)中,always块语句的使用次数是不受限制的,块内的语句也是不断重复执行的。always块语句的语法结构为: always (敏感信号表达式) begin /过程赋值语句; /if语句,case语句: /for语句,while语句,repeat语句; /task语句,function语句: end,2008-9-1,EDA技术与DE2实践

11、,45,在always块语句中,敏感信号表达式(event-expression)应该列出影响块内取值的所有信号(一般指设计电路的输入信号),多个信号之间用“or连接。当表达式中任何信号发生变化时,就会执行一遍块内的语句。块内语句可以包括:过程赋值、if 、 case、for、while、repeat、task和function等语句。always语句的使用,已在例4.5中给出。,2008-9-1,EDA技术与DE2实践,46,在进行时序逻辑电路的描述中,敏感信号表达式中经常使用“ posedge”和“ negedge”这两个关键词来声明事件是由时钟的正边沿(上升沿)或负边沿(下降沿)触发的。

12、若clk是设计电路的时钟信号,则“always( posedge clk)”表示模块的事件是由 clk的上升沿触发的;而“always( negedge clk)”表示模块的事件是由 clk的下降沿触发的。在8位二进制加法计数器(见例4.2)的模块中,就使用了这类语句。,2008-9-1,EDA技术与DE2实践,47,2. initial语句 initial语句的语法格式为: initial begin 语句1; 语句2; ; end,initial语句的使用次数也是不受限制的,但块内的语句仅执行一次,因此,initial语句常用于仿真中的初始化。initial语句的应用实例可以参考上一节叙述

13、的 display_testv和 monitor_test.v程序。,2008-9-1,EDA技术与DE2实践,48,3. task语句 在Verilog HDL模块中,task语句用来定义任务。任务类似高级语言中的子程序,用来单独完成某项具体任务,并可以被模块或其他任务调用。利用任务可以把一个大的程序模块分解成为若干小的任务,使程序清晰易懂,而且便于调试。,结构声明语句包括 always、 initial、 Task 和function 4种结构。,2008-9-1,EDA技术与DE2实践,49,可以被调用的任务必须事先用task语句定义,定义格式如下: task 任务名; 端口声明语句;

14、类型声明语句; begin 语句; end endtask,任务定义与模块(module)定义的格式相同,区别在于:任务用task-endtask语句来定义,而且没有端口名列表。,2008-9-1,EDA技术与DE2实践,50,例如,8位加法器任务的定义如下: Task adder8; output7:0 sum; output cout; input7:0 ina, inb; input cin; cout, sum= ina+inb+cin; endtask,module example_4_3(y, a, b, c); input a,b,c; output y; assign y:a

15、? b: c; endmodule,module有端口名列表,task无端口名列表,2008-9-1,EDA技术与DE2实践,51,任务调用的格式如下: 任务名(端口名列表); 例如,8位加法器任务调用语句如下: adder8(tsum,tcout,tina,tinb,tcin);,2008-9-1,EDA技术与DE2实践,52,always begin adder8(a,b,cin,sum,cout); end task adder8; input7:0 a,b; input cin; output7:0 sum;output cout; begin cout,sum=a+b+cin; en

16、d endtask endmodule,完整的8位加法器任务调用的源程序如下: Module adder_8( a,b,cin,sum,cout); input7:0 a, b; input cin ; output7:0 sum; output cout ;,在同一个module模块内,任务调用时的端口名列表,端口的排序,2008-9-1,EDA技术与DE2实践,53,使用任务时,需要注意以下几点: (1)任务的定义和调用必须在同一个module模块内,任务调用语句应在always块或task-endtask块中。 (2)定义任务时,没有端口名列表,但要进行端口和数据类型的声明,任务用顺序语句完成功能的描述。,(3)当任务被调用时,任务被激活。任务调用与模块调用一样,通过任务名实现,调用时需列出端口名列表,端口名和类型必须与任务定义中的排序和类型一致。例如,8位加法器

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 商业/管理/HR > 管理学资料

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