您好,欢迎访问三七文档
当前位置:首页 > 办公文档 > 其它办公文档 > 第四章(第8讲)_Verilog_HDL_《电子设计自动化EDA》
第四章(第8讲)VerilogHDLamxu@home.swjtu.edu.cn2008-9-1EDA技术与DE2实践2•本章概要:本章介绍硬件描述语言VerilogHDL的语言规则、数据类型和语句结构,并介绍最基本、最典型的数字逻辑电路的VerilogHDL描述,作为VerilogHDL工程设计的基础。•知识要点:•(1)VerilogHDL设计模块的基本结构;•(2)VerilogHDL的语言规则;•(3)用VerilogHDL实现各种类型电路及系统设计的方法;•(4)VerilogHDL设计流程。2008-9-1EDA技术与DE2实践3•教学安排:本章教学安排8学时。通过本章的学习,使同学们熟悉VerilogHDL设计模块的基本结构和VerilogHDL的语言规则,进而掌握VerilogHDL的编程方法,并使读者在第2章学习的基础上,进一步掌握EDA技术的VerilogHDL文本输入设计法。2008-9-1EDA技术与DE2实践44.2.9编译指令•所有的VerilogHDL编译指令均以反引号“‘”开头(如‘timescale),编译指令用于在EDA工具软件对VerilogHDL源程序代码编译时,指定进行某种操作。例如,宏编译指令用于在编译时把一个文本替换为宏的名字;条件编译指令用于在编译时,根据指令指定的条件对相关的源程序语句代码进行选择性的编译;包含编译指令用于在编译时将指令指定的文件包含进来一起编译等。2008-9-1EDA技术与DE2实践5•在一般数字电路及系统的设计中,使用编译指令比较少,这里不再对它们进行一一介绍,仅以‘timescale编译指令为例,介绍编译指令的基本使用方法,供同学们参考。•‘timescale编译指令用来声明跟在其后的程序模块的时间单位和时间精度,‘timescale指令的使用格式为:•‘timescale[时间的基准单位]/[模拟时间的精度];2008-9-1EDA技术与DE2实践6•“时间的基准单位”用来指明时间或延迟的基准单位,“模拟时间的精度”用来指明该模块的模拟时间的精确程度。时间的基准单位和模拟时间的精度的数字必须是整数,有效数字为1、10和100,单位为s(秒)、ms(1毫秒=10-3秒)、s(1微秒=10-6秒)、ns(1纳秒=10-9秒)、ps(1皮秒=10-12秒)和fs(1飞秒=10-15秒)。2008-9-1EDA技术与DE2实践7•例如,语句:•‘timescale10us/100ns;•声明了其后的设计模块的时间数值均为10s的整数倍(即#1=10s),时间的精度为0.1s(100ns)。•如果程序模块不使用‘timescale编译指令,则编译时自动执行‘timescale1ns/1ns编译指令(默认)结果,即#1=1ns,时间精确度为1ns。2008-9-1EDA技术与DE2实践84.3VerilogHDL的语句•语句是构成VerilogHDL程序不可缺少的部分。VerilogHDL的语句包括赋值语句、条件语句、循环语句、结构声明语句和编译预处理语句等类型,每一类语句又包括几种不同的语句。在这些语句中,有些语句属于顺序执行语句,有些语句属于并行执行语句。2008-9-1EDA技术与DE2实践94.3.1赋值语句•在VerilogHDL中,赋值语句常用于描述硬件设计电路输出与输入之间的信息传送,改变输出结果。VerilogHDL有门基元、连续赋值、过程赋值和非阻塞赋值4种赋值方法(即语句)。不同的赋值语句使输出产生新值的方法不同。2008-9-1EDA技术与DE2实践10•1.门基元赋值语句•门基元赋值语句的格式为:•基本逻辑门关键词[例化门名称](门输出,门输入1,门输入2,……,门输入n);•其中,基本逻辑门关键词是VerilogHDL预定义的逻辑门,包括and、or、not、xor、nand、nor等:例化门名称属于可选项;圆括号中的内容是被描述门的输出和输入信号。例如,具有a、b、c、d4个输入和y为输出与非门的门基元赋值语句为:•nand(y,a,b,c,d);2008-9-1EDA技术与DE2实践11•或者•nandmynand(y,a,b,c,d);•上述语句与“assigny=~(a&b&c&d);”语句等效。2008-9-1EDA技术与DE2实践12•2.连续赋值语句•连续赋值语句的关键词是assign,赋值符号是“=”,赋值语句的格式为:•assign赋值变量=表达式;•例如,具有a、b、c、d4个输入和y为输出与非门的连续赋值语句为:•assigny=~(a&b&c&d);•连续赋值语句的“=”号两边的变量都应该是wire类型变量。在执行中,输出y的变化跟随输入a、b、c、d的变化而变化,反映了信息传送的连续性。连续赋值语句用于逻辑门和组合逻辑电路的描述。2008-9-1EDA技术与DE2实践13•[例4.4]4输入端与非门的VerilogHDL源程序。•moduleexample_4(y,a,b,c,d);•outputy;•inputa,b,c,d;•assign#1y=~(a&b&c&d);•endmodule•程序中的“#1”表示该门的输出与输入信号之间具有1个单位的时间延迟。2008-9-1EDA技术与DE2实践14•3.过程赋值语句•过程赋值语句出现在initial块语句和always块语句中,赋值符号是“=”,语句格式为:•赋值变量=表达式;•在过程赋值语句中,赋值号“=”左边的赋值变量必须是reg(寄存器)型变量,其值在该语句结束即可得到。如果一个块语句中包含若干条过程赋值语句,那么这些过程赋值语句按照语句编写的顺序由上至下一条一条地执行,前面的语句没有完成,后面的语句就不能执行,就如同被阻塞了一样。因此,过程赋值语句也称为阻塞赋值语句。2008-9-1EDA技术与DE2实践15•4.非阻塞赋值语句•非阻塞赋值语句也是出现在initial块语句和always块语句中,赋值符号是“=”,语句格式为:•赋值变量=表达式;•在非阻塞赋值语句中,赋值号“=”左边的赋值变量也必须是reg型变量,其值不像过程赋值语句那样在语句结束时即刻得到,而在该块语句结束才可得到。2008-9-1EDA技术与DE2实践16•例如,在下面的块语句中包含4条赋值语句:•always@(posedgeclock)•m=3;•n=75;•n=m;•r=n;•语句执行结束后,r的值是75,而不是3,因为第4行是非阻塞赋值语句“n=m”,该语句要等到本块语句结束时,n的值才能改变。块语句中的“@(posedgeclock)”是定时控制敏感函数,表示时钟信号clock的上升沿到来的敏感时刻。2008-9-1EDA技术与DE2实践17•过程赋值语句和非阻塞赋值语句都是在initial块语句和always块语句中使用的,因此都称为过程赋值语句,只是赋值方式不同。过程赋值语句常用于数字系统的触发器、移位寄存器、计数器等时序逻辑电路的描述。2008-9-1EDA技术与DE2实践18•[例4.5]上升沿触发的D触发器的VerilogHDL的源程序。•moduleD_FF(q,d,clock);•inputd,clock;•outputq;•regq;•always@(posedgeclock)•q=d;•endmodule•在源程序中,q是触发器的输出,属于reg型变量;d和clock是输入,属于wire型变量(由隐含规则定义)。在过程赋值语句中,赋值号“=”左边的赋值变量必须是reg(寄存器)型变量2008-9-1EDA技术与DE2实践19•语句是构成VerilogHDL程序不可缺少的部分。VerilogHDL的语句包括赋值语句、条件语句、循环语句、结构声明语句和编译预处理语句等类型,每一类语句又包括几种不同的语句。在这些语句中,有些语句属于顺序执行语句,有些语句属于并行执行语句。2008-9-1EDA技术与DE2实践20复习与回顾VHDL的IF语句•1.IF语句•IF语句的格式有3种。•格式1为:•IF条件句Then•顺序语句:•ENDIF;VHDL2008-9-1EDA技术与DE2实践21•格式2为:•IF条件句then•顺序语句:•ELSE•顺序语句:•ENDIF;•格式3为:•IF条件句Then•顺序语句:•ELSIF条件句Then•顺序语句;•顺序语句;•ENDIF;VHDLVHDL2008-9-1EDA技术与DE2实践224.3.2条件语句•条件语句包含if语句和case语句,它们都是顺序语句,应放在always块语句中。2008-9-1EDA技术与DE2实践23•begin•语句;•end•else•begin•语句;•end•1.if语句•完整的VerilogHDL的if语句结构如下:•If(表达式)•begin•语句;•end•elseif(表达式)2008-9-1EDA技术与DE2实践24•根据需要,if语句可以写为另外两种变化形式。•(1)if(表达式)•begin•语句;•end•(2)if(表达式)•begin•语句;•end•else•begin•语句;•end2008-9-1EDA技术与DE2实践25•在if语句中,“表达式”一般为逻辑表达式或关系表达式,也可以是位宽为1位的变量。系统对表达式的值进行判断,若为0,x,z,按“假”处理;若为1,按“真”处理,执行指定的语句。语句可以是多句,多句时用“begin-end'’语句括起来:也可以是单句,单句可以省略“begin-end'’语句。对于if语句嵌套,如果不清楚if和else的匹配,最好用“begin-end'’语句括起来。2008-9-1EDA技术与DE2实践26•if语句及其变化形式属于条件语句,在程序中用来改变控制流程。•[例4.6]8线-3线优先编码器的设计。•8线-3线优先编码器的功能见表4.5,in0~in7是8个信号输入端,定义in7的优先级最高,in0的优先级最低。当in7有效时(低电平0),其他输入信号无效,编码输出out20utlout0=111(in7输入的编码):如果in7无效(高电平1),而in6有效,则out20utlout0=110(in6输入的编码);依次类推。在传统的电路设计中,优先编码器的设计是一个相对困难的课题,而采用VerilogHDL的IF语句,此类难题迎刃而解,充分体现了硬件描述语言在数字电路设计方面的优越性。2008-9-1EDA技术与DE2实践27表4.58线-3线优先编码器的功能表2008-9-1EDA技术与DE2实践28•8线-3线优先编码器设计电路的VerilogHDL源程序example_6.v如下:•moduleexample_6(y,a);•input[7:0]a;•output[2:0]y;•reg[2:0]y;•always@(a)•begin•if(~a[7])y=’b111;•elseif(~a[6])y='b110;•elseif(~a[5])y=’b101;•elseif(~a[4])y='b100;•elseif(~a[3])y=’b011;•elseif(~a[2])y=’b010;•elseif(~a[1])y='b001;•elsey='b000;•end•endmodule2008-9-1EDA技术与DE2实践29•2.case语句•case语句是一种多分支的条件语句,完整的case语句的格式为:•case(表达式)•选择值1:语句1;•选择值2:语句2;•……•选择值n:语句n;•default:语句n+l;•endcase•执行case语句时,首先计算表达式的值,然后执行在条件句中找到的“选择值”与其值相同的语句。当所有的条件句的“选择值”与表达式的值不同时,则执行“default'’后的语句。default语句如果不需要,可以去掉。•case语句多用于数字系统中的译码器、数据选择器、状态机及微处理器的指令译码器等电路的描述。2008-9-1EDA技术与DE2实践30
本文标题:第四章(第8讲)_Verilog_HDL_《电子设计自动化EDA》
链接地址:https://www.777doc.com/doc-19949 .html