




已阅读5页,还剩155页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
2019/11/19,1,第三章,硬件描述语言VHDL基础,2,2019/11/19,章节目录,3.1硬件描述语言概述3.2VHDL语言程序结构3.3VHDL常用语句3.4VHDL语法基础3.5组合电路的VHDL描述3.6时序电路的VHDL描述,调换,3,2019/11/19,3.1硬件描述语言概述,可编程逻辑器件、电子设计自动化(EDA)与硬件描述语言,可编程逻辑器件是一种功能可变的集成器件,可通过编程的方法设计其完成不同的逻辑功能,设计需借助软件工具,即采用电子设计自动化的方式,设计形式有原理图和硬件描述语言两种,硬件描述语言是用来描述数字电路系统的一种语言,4,2019/11/19,3.1硬件描述语言概述,目前常用的硬件描述语言有两种,VHDL,VerilogHDL,VeryHighSpeedIntegratedCircuitHardwareDescriptionLanguage超高速集成电路硬件描述语言,VerilogHardwareDescriptionLanguageVerilog硬件描述语言,VHDL语言发展较早,从使用者数量来看,目前两种语言平分秋色,VHDL语言更严谨、更适合设计大型数字系统。两种语言相似的地方很多,学会一种可自学另一种。,5,2019/11/19,3.1硬件描述语言概述,VHDL语言的IEEE标准VHDLIEEE1076-1987VHDLIEEE1076-1993,早在1980年,因为美国军事工业需要描述电子系统的方法,美国国防部开始进行VHDL的开发1987年,由IEEE(InstituteofElectricalandElectronicsEngineers,电气和电子工程师协会)将VHDL制定为标准,称为IEEE1076-19871993年制定了第二个IEEE标准版本,称为IEEE1076-1993,增加了一些新的命令和属性,6,2019/11/19,章节目录,3.1硬件描述语言概述3.2VHDL语言程序结构3.4VHDL语法基础3.3VHDL常用语句3.5组合电路的VHDL描述3.6时序电路的VHDL描述,7,2019/11/19,3.2VHDL语言程序结构,五个基本组成部分,库(Library)程序包(Package),实体说明(EntityDeclaration),结构体(Archiecture),配置(Configuration),主要部分,注意:程序扩展名为.vhd,8,2019/11/19,3.2VHDL语言程序结构,【例3-1】2选1数据选择器的VHDL语言描述,功能:2选1数据选择器,Sel=0时,f=d0;Sel=1时,f=d1;,9,2019/11/19,-2to1muxVHDLLIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYmuxISPORT(d0,d1,sel:INSTD_LOGIC;f:OUTSTD_LOGIC);ENDmux;,库程序包,实体说明,VHDL语言程序,注释,3.2VHDL语言程序结构,10,2019/11/19,ARCHITECTUREstructureOFmuxISSIGNALtemp:STD_LOGIC;-内部信号BEGINp0:PROCESS(d0,d1,sel)-进程VARIABLEtemp1,temp2,temp3:STD_LOGIC;BEGIN-进程内的局部变量temp1:=d0AND(NOTsel);-变量间的逻辑关系temp2:=d1ANDsel;temp3:=temp1ORtemp2;temp=temp3;f=temp;ENDPROCESSp0;-进程结束ENDstructure;-结构体结束,结构体,3.2VHDL语言程序结构,11,2019/11/19,EDA工具软件QuartusII综合出来的电路,3.2VHDL语言程序结构,12,2019/11/19,3.2VHDL语言程序结构,1行是注释,用“-”引头23行是库说明部分,打开库及库中的程序包47行是实体说明部分,描述电路的端口信号8最后是结构体部分,描述电路的逻辑功能VHDL语言不区分大小写,为阅读方便,关键字用大写,用户自定义部分用小写。,说明,13,2019/11/19,三方面内容,3.2.1实体说明3.2.2结构体3.2.3程序包、库及配置,3.2VHDL语言程序结构,14,2019/11/19,3.2.1实体说明,【格式】,ENTITYIS,GENERIC(类属说明);,PORT(端口说明);,实体语句部分;,ENDENTITY;,主要部分,表示必选项,表示可选项,【主要功能】说明电路的名字、输入输出信号。,15,2019/11/19,3.2.1实体说明,【例】4位纹波加法器的实体说明。,ENTITYadder_rippleIS,GENERIC(m:TIME:=5ns);,PORT(a,b:INSTD_LOGIC_VECTOR(3DOWNTO0);q:OUTSTD_LOGIC_VECTOR(3DOWNTO0);cout:OUTSTD_LOGIC);,ENDadder_ripple;,16,2019/11/19,3.2.1实体说明,实体名由用户自定义,必须和主文件名一致必须以ENTITYIS开始,以END结束在端口说明部分说明输入输出信号的情况在类属说明部分说明类属常数的情况,通常电路中的常数可在设计实体的内部进行赋值,且一旦赋值就不能再改变。如果电路中某个常数值需要在实体外部进行修改,则在实体说明部分的类属说明中加以说明,这样的常数可称为类属常数,以与普通常数区别。,VHDL语言程序的扩展名是vhd,即*.vhd。,说明:,17,2019/11/19,3.2.1实体说明,1.类属说明语句,GENERIC(m:TIME:=5ns);,【格式】,GENERIC(常数名:数据类型:=设定值;常数名:数据类型:=设定值);,【功能】说明类属常数的名字,数据类型,设定值。,【例】,18,2019/11/19,3.2.1实体说明,2.端口说明语句,【格式】,PORT(端口名,端口名:模式数据类型;端口名,端口名:模式数据类型);,PORT(a,b:INSTD_LOGIC_VECTOR(3DOWNTO0);q:OUTSTD_LOGIC_VECTOR(3DOWNTO0);cout:OUTSTD_LOGIC);,【功能】说明输入输出信号的名字,输入输出模式,数据类型。,【例】,19,2019/11/19,3.2.1实体说明,端口名是输入输出信号的名字。模式是指输入输出信号的方向。数据类型是指输入输出信号的取值类型。,表3-1端口方向说明,BITBIT_VECTORSTD_LOGICINTEGERBOOLEANSTD_LOGIC_VECTOR,常用数据类型,数据类型在3.4节详细介绍,说明:,20,2019/11/19,3.2.2结构体,【格式】,ARCHITECTUREOFIS定义语句;BEGINEND;,【功能】描述电路的具体结构、功能。,主要部分,21,2019/11/19,3.2.2结构体,ARCHITECTURE是关键字。结构体名可随意起,实体名必须和实体说明中的实体名一致。定义语句是指对内部信号、变量等的说明。并行处理语句部分是结构体的主要部分,描述电路的结构、功能等。BEGIN后开始结构和功能的描述。,说明:,22,2019/11/19,3.2.2结构体,【例3-2】一个RS触发器的结构体(数据流描述方式),该电路中并行语句部分使用的是并行信号赋值语句,描述了两个与非门的连接关系。,23,2019/11/19,3.2.2结构体,【例3-3】一个RS触发器的结构体(结构描述方式),本例是RS触发器的另一种描述方式,并行处理语句采用的是元件例化语句,后面3.3.1介绍。,24,2019/11/19,3.2.2结构体,【例3-4】一个全加器的VHDL程序(数据流描述方式),本例结构体中的并行处理部分采用的也是并发信号赋值语句。描述了两个异或门和一个与或门。本例中的类属说明语句说明了一个时间常数tpd是5ns,后面的赋值语句使用了该延时参数。,25,2019/11/19,3.2.2结构体,3种常用的子结构描述方式,进程语句结构块语句结构子程序语句结构,主要讲解,26,2019/11/19,3.2.2结构体,进程(PROCESS)语句结构,【格式】,进程标号:PROCESS敏感信号表IS进程语句说明部分;BEGINENDPROCESS进程标号;,27,2019/11/19,3.2.2结构体,【例3-7】带敏感信号表的进程语句实例。,28,2019/11/19,3.2.3包集合、库及配置,1.包集合(Package),包集合中存放供多个实体公用的数据类型、常量、子程序。包集合又存放在库中。一般情况下,要使用某个包集合中的资源时,必须对该包集合进行使用说明。一般情况下,要使用某个库中的包集合时,也必须对该库进行说明。,【格式】,LIBRARY;USE,LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL,【例】,29,2019/11/19,3.2.3包集合、库及配置,VHDL提供的标准包集合:STANDARDSTD_LOGIC_1164,STANDARD包中定义了若干数据类型、子类型、函数;该包已预先在STD库中编译好,并且自动与所有模型连接,使用时无须说明;STD_LOGIC_1164包中也定义了若干数据类型和函数;该包已预先在IEEE库中编译好,但是在使用时须加以使用说明;,LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;,在STD库中,在IEEE库中,用时不须说明,用时须说明,30,2019/11/19,3.2.3包集合、库及配置,常用的数据类型(整数、实数、BIT、BIT_VECTOR、布尔量、字符、字符串、物理型、错误等级、自然数和正整数)均在STANDARD程序包中,常用的数据类型(STD_LOGIC、STD_LOGIC_VECTOR)在STD_LOGIC_1164程序包中,31,2019/11/19,3.2.3包集合、库及配置,【包集合结构格式】,PACKAGEIS说明语句;END包集合名;,PACKAGEBODYIS说明语句;END包集合名;,包首,包体,用户可自定义包集合。,32,2019/11/19,3.2.3包集合、库及配置,【例3-10】自定义包集合的例子。,-包集合说明(包首)PACKAGEexampleISTYPEalu_opIS(add,sub,mul,div,eq,gt,lt);CONSTANTpi:REAL:=3.1415926;delay1:TIME;COMPONENTnand2PORT(a,b:INBIT;c:OUTBIT);ENDCOMPONENT;FUNCTIONmean(a,b,c:REAL)RETURNREAL;ENDexample;,说明了一个枚举类型的数据alu_op,两个常数pi、delay1,一个元件nand2,一个函数mean,33,2019/11/19,3.2.3包集合、库及配置,-包集合体PACKAGEBODYexampleISCONSTANTdelay1:TIME=15ns;FUNCTIONmean(a,b,c:REAL)RETURNREAL;BEGINRETURN(a+b+c)/3.0;ENDmean;ENDexample;,包集合体中具体说明了时间常数delay1的值、函数mean的功能,34,2019/11/19,3.2.3包集合、库及配置,USEWORK.example.ALL;,自定义的包集合存放在WORK库中。自定义的包集合在使用时也必须进行使用说明。,【例】,35,2019/11/19,3.2.3包集合、库及配置,2.库(Library),【格式】,库中存放已编译过的设计单元(如实体、程序包等);库中内容可以用作其它VHDL描述的资源。使用库时需要说明。,LIBRARY;,5种库,IEEESTDASICWORK用户定义库,LIBRARYIEEE;,【例】,36,2019/11/19,3.2.3包集合、库及配置,IEEESTD_LOGIC_1164NUMERIC_BITNUMERIC_STDSTD_LOGIC_ARITHSTD_LOGIC_SIGNEDSTD_LOGIC_UNSIGNEDSTDSTANDARDTEXTIOVATIL(面向ASIC的库)VATIL_TIMINGVATIL_PRIMITIVEWORK(现行工作库)用户定义库,无须说明,不但要说明库,还要说明库中的程序包。,例:LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL,最常用,例:LIBRARYSTD;USESTD._STANDARD.ALL;,37,2019/11/19,3.2.3包集合、库及配置,3.配置语句(Configration),【格式】,CONFIGURATIONOF实体名IS说明语句;END配置名;,配置语句描述层与层之间的连接关系,以及实体与结构体之间的连接关系;可利用配置语句来选择不同的结构体,使其与要设计的实体相对应。,【例】,CONFIGURATIONconfrOFrsffISFORrs_behav;ENDFOR;ENDconfr;,38,2019/11/19,章节目录,3.1硬件描述语言概述3.2VHDL语言程序结构3.4VHDL语法基础3.3VHDL常用语句3.5组合电路的VHDL描述3.6时序电路的VHDL描述,39,2019/11/19,3.4VHDL语法基础,3.4.1标识符和保留字3.4.2数据对象3.4.3数据类型3.4.4数据类型的转换3.4.5运算操作符,五方面内容,40,2019/11/19,3.4.1标识符和保留字,规则:由字母数字下划线组成必须以英文字母开头最后一个字符不能是下划线不允许出现连续两个下划线保留字不能作一般的标识符不区别大小写,1.标识符,即由用户起的实体名、结构体名、信号名、变量名.,41,2019/11/19,3.4.1标识符和保留字,2.保留字,表3-3常用保留字,见P.109,保留字即VHDL语言中已使用的关键字。保留字不能用作标识符。,42,2019/11/19,3.4.2数据对象,对象有四种类型:,常数信号变量文件,最常用,VHDL93标准新加的,43,2019/11/19,3.4.2数据对象,1.常数,CONSTANT常数名:数据类型:=表达式;,【常数声明格式】,使用前必须声明,CONSTANTtoler:DISTANCE:=1.5nm;CONSTANTpi:REAL:=3.141592;CONSTANTcycle_time:TIME:=100ns;CONSTANTPropagation_Delay:DELAY_LENGTH;,【例】,常数值,44,2019/11/19,3.4.2数据对象,2.变量,VARIABLE变量名:数据类型约束条件:=表达式;,【变量声明格式】,使用前必须声明,【例】,VARIABLEresult:STD_LOGIC:=0;VARIABLEx,y,z:INTEGER;VARIABLEcount:INTEGERRANGE0TO255:=10;,初始值,声明时可带初始值,约束条件,45,2019/11/19,3.4.2数据对象,【变量赋值格式】,变量名:=表达式;,【例】,result:=1;x:=y+3;,注意赋值符号:=表达式的数据类型和变量的类型必须一致。表达式可以是运算表达式也可以是具体数值。,46,2019/11/19,3.4.2数据对象,3.信号,SIGNAL信号名:数据类型约束条件:=表达式;,【信号声明格式】,使用前必须声明,【例】,SIGNALfirst_sig:INTEGER;SIGNALsys_clk:BIT:=0;SIGNALsecond_fig,third_sig:INTEGER:=10;SIGNALs:INTEGERRANGE0TO20:=15;,初值,声明时可带初始值,约束条件,47,2019/11/19,3.4.2数据对象,【信号赋值格式】,信号名=表达式;,【例】,a=bAFTER10ns;a=expression_b;a=expression_bAFTER10ns;,注意信号说明中的赋初值符号是:=,而信号赋值语句中的赋值符号为=。表达式的数据类型和信号的类型必须一致。表达式可以是运算表达式也可以是具体数值。信号赋值可以添加延时信息。,48,2019/11/19,3.4.2数据对象,变量是局部的,信号是全局的;变量只能用在进程内,信号没有此限制。若变量用于进程之外,必须将该变量先赋给一个相同类型的信号,用信号在进程之间传递数据。信号可以延迟,变量不能。变量不能用于硬件连线,常用在高层次建模的计算中。信号可视为实际硬件系统中连线的抽象。进程对信号敏感而对变量不敏感。赋值符号不一样;,信号和变量的区别,49,2019/11/19,3.4.3数据类型,Scalartypes标量型Composite复合型Access存取型File文件型Protected保护型,5种类型,每一种中又有若干子类型和具体数据类型。,50,2019/11/19,3.4.3数据类型,已经在标准数据包STANDARD和STD_LOGIC_1164中定义好的常用的数据类型如下:,整数、实数、BIT、BIT_VECTOR、布尔量、字符、字符串、物理型、错误等级、自然数和正整数,本节介绍以上数据类型的特点。,STD_LOGIC、STD_LOGIC_VECTOR,STANDARD,STD_LOGIC_1164,51,2019/11/19,3.4.3数据类型,整数(INTEGER)(属于:标量型整数型,在STANDARD程序包中),整数的表示范围为-(231-1)(231-1)。,【例】,VARIABLEa:INTEGER:=15;,SIGNALs:INTEGERRANGE0TO20:=15;,INTEGER型数据值不用引号括起来,52,2019/11/19,3.4.3数据类型,2.实数(REAL)(属于:标量型浮点型,在STANDARD程序包中),实数的表示范围为-1.0E38+1.0E38。,实数的书写方式举例:1.0666.66636.5e-4,某些数即可以用整数表示,也可以用实数表示,如1.0是实数,1是整数,两者数值相同但类型不同。,REAL型数据值不用引号括起来,53,2019/11/19,3.4.3数据类型,3.BIT(属于:标量型枚举型),和BIT_VECTOR(属于:复合型数组型),在STANDARD程序包中,BIT又称位型,其值仅有2个,0和1;,BIT_VECTOR又称位矢量,是BIT的数组。,例:,BIT型数值要用单引号括起来,BIT_VECTOR型数值要用双引号括起来。,SIGNALa:BIT;SIGNALLow_byte:BIT_VECTOR(0to7);a=1;Low_byte=“00000101”;,54,2019/11/19,3.4.3数据类型,4.布尔型(BOOLEAN)(属于:标量型枚举型,在STANDARD程序包中),BOOLEAN的值仅有2个,TRUE和FALSE。,55,2019/11/19,3.4.3数据类型,5.STD_LOGIC,和STD_LOGIC_VECTOR,在STD_LOGIC_1164程序包中,STD_LOGIC又称标准逻辑变量,其值有9个,U,X,0,1,Z,W,L,H,-。常用的是0,1,Z。STD_LOGIC_VECTOR称标准逻辑向量,是STD_LOGIC的数组。,STD_LOGIC型数值要用单引号括起来,STD_LOGIC_VECTOR型数值要用双引号括起来。,例:,SIGNALa:STD_LOGIC;a=1;,56,2019/11/19,3.4.3数据类型,6.字符(CHARACTER)(属于:标量型枚举型),和字符串(STRING)(属于:复合型数组型),在STANDARD程序包中,CHARACTER型数值要用单引号括起来。STRING型数值要用双引号括起来。,例:A,a,1,2。“ABC”,“HELLO”。,57,2019/11/19,3.4.3数据类型,7.时间型(TIME)(属于:标量型物理型,在STANDARD程序包中),GENERIC(m:TIME:=5ns);,【例】,58,2019/11/19,3.4.3数据类型,8.错误等级(SEVERITY_LEVEL)(属于:标量型枚举型,在STANDARD程序包中),SEVERITY_LEVEL的值有4个,NOTE,WARNING,ERROR,FAILURE。注意,警告,错误,失败。,59,2019/11/19,3.4.3数据类型,9.自然数(NATURAL)(标量型整数型整数),和正整数(POSITIVE)(标量型整数型整数),在STANDARD程序包中,NATURAL和POSITIVE是INTEGER的子类型。,60,2019/11/19,3.4.3数据类型,以上是已经在标准数据包STANDARD和STD_LOGIC_1164中定义好的常用的数据类型。,除此之外,还可以由用户自定义数据类型。,可以由用户自定义的数据类型:枚举类型整数类型数组类型记录类型存取类型文件类型时间类型实数类型,TYPE数据类型名IS数据类型定义OF基本数据类型;,TYPE数据类型名IS数据类型定义;,【格式】,61,2019/11/19,3.4.3数据类型,TYPEalu_opIS(add,sub,mul,div,eq,gt,lt);,TYPEBITis(0,1);,TYPEBIT_VECTORisarray(NATURALrange)ofBIT;,SUBTYPEPOSITIVEisINTEGERrange1toINTEGERHIGH;,定义一个数据类型alu_op,是枚举型,取值为add,sub,mul,div,eq,gt,lt中的一个声明变量a是alu_op型的。,VARIABLEa:alu_op,【例】,下例为标准程序包中的某些数据类型定义:,62,2019/11/19,3.4.4数据类型的转换,自学(见P.114),63,2019/11/19,3.4.5运算操作符,5类运算操作符,逻辑运算关系运算算术运算并置运算移位运算,64,2019/11/19,3.4.5运算操作符,可以对BIT,BOOLEAN,STD_LOGIC,STD_LOGIC_VECTOR等类型数据进行逻辑运算。,1.逻辑运算符,65,2019/11/19,3.4.5运算操作符,2.算术运算符,66,2019/11/19,3.4.5运算操作符,3.关系运算符,67,2019/11/19,3.4.5运算操作符,4.并置运算符,sel=b,例:,若b=1,a=0,则sel=“10”,Y=HBEGINEND;,并行语句用在结构体的并行处理语句部分,73,2019/11/19,3.3.1并行语句,进程语句并行信号赋值语句元件例化语句块语句过程调用语句参数传递语句生成语句并行断言语句,74,2019/11/19,3.3.1并行语句,1.进程语句,【格式】,进程标号:PROCESS敏感信号表IS进程语句说明部分;BEGINENDPROCESS进程标号;,进程语句是最主要的并行语句,它在VDHL程序设计中使用频率最高,也是最能体现硬件描述语言的一条语句。,75,2019/11/19,3.3.1并行语句,【例3-7】带异步复位功能的D触发器的VHDL描述。,76,2019/11/19,3.3.1并行语句,当敏感信号发生变化时,执行进程。当执行完最后一个语句时,回到第一个语句,等待下一次敏感信号变化。一个结构体中可以有多个进程,进程之间是并行的。进程内部各条语句是顺序执行的。进程语句说明部分可以说明需要的局部变量。,【说明】,77,2019/11/19,3.3.1并行语句,2.并行信号赋值语句,并发信号赋值语句,例:q1=a+b;q2=a*b;,当a或b有变化时,两条语句同时执行。模拟了两个加法器和乘法器电路。,注意前提是信号赋值语句放在进程外;若放在进程中,则变成了顺序执行的语句。,当信号赋值语句放在进程外时,就是并发信号赋值语句。,78,2019/11/19,3.3.1并行语句,条件信号赋值语句,【格式】,目标信号=表达式1WHEN条件1ELSE表达式2WHEN条件2ELSE表达式3WHEN条件3ELSE表达式n-1WHEN条件n-1ELSE表达式n;,当条件1满足时,目标信号=表达式1当条件2满足时,目标信号=表达式2,【功能】,条件判断是并行的,不是先判断条件1满足否,再判断条件2满足否,而是同时判断。,79,2019/11/19,3.3.1并行语句,【例3-11】用条件信号赋值语句设计4选1数据选择器。,80,2019/11/19,3.3.1并行语句,选择信号赋值语句,【格式】,WITH选择条件表达式SELECT目标信号=表达式1WHEN选择条件1表达式2WHEN选择条件2表达式3WHEN选择条件3表达式nWHEN选择条件n;,当选择条件符合条件1时,目标信号=表达式1当选择条件符合条件2时,目标信号=表达式2,【功能】,81,2019/11/19,3.3.1并行语句,【例3-12】用选择信号赋值语句设计4选1数据选择器。,语句之间是并行的,该例既使用了条件信号赋值语句也使用了选择信号赋值语句,82,2019/11/19,3.3.1并行语句,3.元件例化语句,元件例化语句是最能体现层次化设计思想的语句。,例如设计由D触发器构成的移位寄存器,可以将设计分成2层,底层描述D触发器,顶层调用底层描述的D触发器。,在顶层中调用底层设计时,就要用到元件例化语句。,层次化设计简单说即将整个系统分成不同的层次,顶层设计可以调用底层设计。,83,2019/11/19,3.3.1并行语句,【格式】,COMPONENTGENERIC类属说明;PORT;ENDCOMPONENT;,GENERICMAP(参数映射)PORTMAP(端口映射);,定义元件:底层设计定义成一个元件,元件例化:调用定义好的元件,并说明该元件与其他信号的连接关系。,84,2019/11/19,3.3.1并行语句,【例3-14】用元件例化语句描述由D触发器构成的移位寄存器。,dff是另一个程序对应的电路,这里将其定义成一个元件,并用其构成一个移位寄存器。,语句之间是并行的,85,2019/11/19,3.3.1并行语句,s0,s4,86,2019/11/19,3.3.1并行语句,元件名必须与底层文件的实体名一致。端口映射部分要指明元件内部信号与外部信号的连接关系,其顺序必须与端口说明部分的顺序一致。一个元件定义部分可以对应多个元件例化部分,相当于调用了多个元件而已。元件标号名可以帮助标识不同的元件。,【说明】,87,2019/11/19,3.3.1并行语句,4.生成语句,非重点不讲,88,2019/11/19,3.3.1并行语句,ARCHITECTURECOMPONENTENDCOMPONENT;BEGINPROCESSENDPROCESSdff1:dffPORTMAP(S(0),clk,S(1);q1;,各部分之间是并行的,89,2019/11/19,3.3.2顺序语句,顺序语句是相对于并行语句而言的。顺序语句的特点是:每一条顺序语句的执行顺序是与它们的书写顺序相一致的。顺序语句只能出现在进程和子程序中。,进程标号:PROCESS敏感信号表IS进程语句说明部分;BEGINENDPROCESS进程标号;,90,2019/11/19,3.3.2顺序语句,顺序赋值语句WAIT语句IF语句CASE语句LOOP语句EXIT语句RETURN语句NULL语句REPORT语句断言语句,常用,91,2019/11/19,3.3.2顺序语句,1.顺序赋值语句,92,2019/11/19,3.3.2顺序语句,信号赋值语句,【格式】,目标信号=表达式,信号赋值语句中的赋值符号为=。表达式的数据类型和信号的类型必须一致。表达式可以是运算表达式也可以是具体数值。信号赋值可以添加延时信息。用在进程中才是顺序语句,s=aXORbXORc;,【例】,当信号赋值语句放在进程内时,就是顺序语句。放在进程外时就是并行语句。,93,2019/11/19,3.3.2顺序语句,2.WAIT语句,【格式】,WAIT-无限等待WAITON-敏感信号变化WAITUNTIL-条件满足WAITFOR-时间到,进程在仿真运行时总是处于两种状态之一:执行或挂起。进程状态的变化可受WAIT语句控制。,94,2019/11/19,3.3.2顺序语句,3.IF语句,IF语句是一种条件控制语句,是常用语句之一。IF语句只能用在进程中。,网上有一句话:IF、CASE打天下,95,2019/11/19,3.3.2顺序语句,【格式】,IFTHEN;ENDIF;,IFTHEN语句,当条件满足时,执行THEN后的语句,否则,不执行,【功能】,96,2019/11/19,3.3.2顺序语句,顺序处理语句,当条件满足时,d的值赋给q,否则,q值不变,【例3-17】用IFTHEN语句描述D触发器功能。,97,2019/11/19,3.3.2顺序语句,【格式】,IFTHEN;ELSE;ENDIF;,两分支,IFTHENELSE语句,当条件满足时,执行THEN后的语句,否则,执行ELSE后的语句。,【功能】,98,2019/11/19,3.3.2顺序语句,【例】用IFTHENELSE语句描述二选一数据选择器,LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYmuxISPORT(d0,d1,sel:INSTD_LOGIC;f:OUTSTD_LOGIC);ENDmux;,99,2019/11/19,3.3.2顺序语句,ARCHITECTUREbehaOFmuxISBEGINPROCESS(d0,d1,sel)BEGINIF(sel=0)THENf=d0;ELSEf顺序处理语句2;.WHENOTHERS=顺序处理语句n;ENDCASE;,CASE语句也是常用语句之一,具有条件控制功能。也只能用在进程中。,105,2019/11/19,3.3.2顺序语句,几个条件是同等级的,106,2019/11/19,3.3.2顺序语句,【例3-19】用CASE语句实现3-8线译码器。,LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYdecoder_3to8ISPORT(a,b,c,g1,g2,g3:INSTD_LOGIC;y:OUTSTD_LOGIC_VECTOR(7DOWNTO0);ENDdecoder_3to8;ARCHITECTUREbehaOFdecoder_3to8ISSIGNALindata:STD_LOGIC_VECTOR(2DOWNTO0);BEGINindatayyyyyyyyy=“XXXXXXXX”;ENDCASE;ELSEy=“11111111”;ENDIF;ENDPROCESS;ENDbeha;,108,2019/11/19,3.3.2顺序语句,CASE语句的各条件表达式是同时执行的。条件表达式的所有情况都要列举到。可用WHENOTHERS描述。,【说明】,109,2019/11/19,3.3.2顺序语句,5.LOOP语句,【格式】,LOOP标号:FOR循环变量IN取值范围LOOP;ENDLOOPLOOP标号;,LOOP是循环语句,有两种,FORLOOPWHILELOOP,FORLOOP,若循环变量在取值范围内则执行循环,否则结束循环。,【功能】,110,2019/11/19,3.3.2顺序语句,【例3-20】用FORLOOP语句描述的偶校验发生器。,设a=11001110,则tmp=1,奇数个1;设a=11001100,则tmp=0,偶数个1。,111,2019/11/19,3.3.2顺序语句,【格式】,LOOP标号:WHILE条件LOOP;ENDLOOPLOOP标号:;,若条件为真则执行循环,若为假则结束循环。,WHILELOOP,【功能】,112,2019/11/19,3.3.2顺序语句,【例3-21】用WHILELOOP语句描述的偶校验发生器。,功能和例3-20相同,113,2019/11/19,3.3.2顺序语句,归纳一下:前面介绍的IF语句、CASE语句、LOOP语句,有一个共同的特点,即不是对电路的具体结构进行描述,而是对电路的功能和行为进行了描述,采用的是类似C语言的高级描述语言,我们把这种描述方式称为行为描述方式。,后面介绍,114,2019/11/19,3.3.2顺序语句,6.EXIT语句,【格式】,EXITLOOP标号;,EXITLOOP标号WHEN条件;,程序执行到该语句处,无条件跳出。程序执行到LOOP标号处,无条件跳出。条件满足时,执行到该语句处跳出。条件满足时,执行到LOOP标号处跳出。,除正常结束循环外,还可利用EXIT语句退出。,115,2019/11/19,3.3.2顺序语句,7.断言语句(ASSERT),【格式】,ASSERTREPORTSEVERITY,断言语句主要用于程序仿真、调试中的人机会话,它可以给出一个文字串作为警告和错误的信息。,【功能】,如果断言条件为假,则顺序执行REPORT语句,输出用双引号括起来的以文字串表示的错误信息,同时还要报告错误信息的严重级别。,116,2019/11/19,3.3.2顺序语句,【例3-22】使用ASSERT语句的RS触发器的VHDL程序。注意在RS触发器中,不允许两个输入都为1。,该程序使用断言语句,一旦出现两个输入r、s都为1的情况,则发出错误提示。,117,2019/11/19,3.3.2顺序语句,VHDL语言的三种描述方式,数据流描述方式(RTL级描述方式),结构描述方式,行为描述方式,主要采用逻辑关系式的描述方式,说明了数据的流向,主要采用元件例化语句,说明元件之间的连接关系,主要采用IF、CASE、WAIT、LOOP等高级语言,说明电路的功能和行为,118,2019/11/19,3.3.2顺序语句,数据流描述方式的2选1数据选择器,LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYmuxISPORT(d0,d1,sel:INSTD_LOGIC;f:OUTSTD_LOGIC);ENDmux;ARCHITECTUREmux_1OFmuxISBEGINp0:PROCESS(d0,d1,sel)VARIABLEtemp1,temp2:STD_LOGIC;BEGINtemp1:=d0AND(NOTsel);temp2:=d1ANDsel;f=temp1ORtemp2;ENDPROCESSp0;ENDmux_1;,主要采用逻辑关系式的描述方式,说明了数据的流向,119,2019/11/19,3.3.2顺序语句,结构描述方式的2选1数据选择器,LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYmuxISPORT(d0,d1,sel:INSTD_LOGIC;f:OUTSTD_LOGIC);ENDmux;ARCHITECTUREmux_2OFmuxISSIGNALy1,y2,y3:STD_LOGICCOMPONENTNOT1PORT(a:INSTD_LOGIC,y:OUTSTD_LOGIC);ENDCOMPONENT;,120,2019/11/19,3.3.2顺序语句,主要采用元件例化语句,说明元件之间的连接关系,COMPONENTAND2PORT(a,b:INSTD_LOGIC,y:OUTSTD_LOGIC);ENDCOMPONENT;COMPONENTOR2PORT(a,b:INSTD_LOGIC,y:OUTSTD_LOGIC);ENDCOMPONENT;BEGINu1:NOT1PORTMAP(sel,y1)u2:AND2PORTMAP(d0,y1,y2)u3:AND2PORTMAP(d1,sel,y3)u4:OR2PORTMAP(y2,y3,y)ENDmux_2;,121,2019/11/19,3.3.2顺序语句,LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYmuxISPORT(d0,d1,sel:INSTD_LOGIC;f:OUTSTD_LOGIC);ENDmux;ARCHITECTUREbehaOFmuxISBEGINPROCESS(d0,d1,sel)BEGINIF(sel=0)THENf=d0;ELSEf=d1;ENDIF;ENDPROCESS;ENDbeha;,行为描述方式的2选1数据选择器,主要采用IF、CASE、WAIT、LOOP等高级语言,说明电路的功能和行为,122,2019/11/19,3.3.2顺序语句,实际程序中往往几种描述方式混合使用,初学阶段不必过于在意所采用的描述方式,知道有这种说法即可。,123,2019/11/19,章节目录,3.1硬件描述语言概述3.2VHDL语言程序结构3.4VHDL语法基础3.3VHDL常用语句3.5组合电路的VHDL描述3.6时序电路的VHDL描述,124,2019/11/19,3.5组合电路的VHDL描述,1.,【例4-3】判定电路的VHDL程序。(P123),本例使用了条件赋值语句,同学们可以尝试用CASE语句实现,125,2019/11/19,3.5组合电路的VHDL描述,综合结果,126,2019/11/19,3.5组合电路的VHDL描述,2.,【例】4-2线优先编码器的VHDL程序。(P126),本例使用了IFTHENELSIFTHEN语句,利用IF条件的优先级很方便地实现了优先编码的功能。,如果用CASE语句则只能实现普通编码器的功能。,THEN后面的顺序语句用分号隔开;,127,2019/11/19,3.5组合电路的VHDL描述,3.,【例】74138的VHDL程序。(P130)使用IFTHENELSE、CASE语句),128,2019/11/19,3.5组合电路的VHDL描述,4.,【例】7448的VHDL程序。(P135)(ifthenelsifthenelse语句),129,2019/11/19,条件不完整,缺少最后一条ELSE综合时会综合出寄存器,RTL图说明了这一点。,【程序存在的问题】,130,2019/11/19,综合电路局部,寄存器,【修改】,在ENDIF前加一句:ELSEsegout=0000000;rbo=1;就不会产生寄存器,131,2019/11/19,3.5组合电路的VHDL描述,5.,【例】1-4数据分配器的VHDL程序。(P136)(ifthenelsifthenelse语句),该程序仍然出现条件不完整的情况,结果会综合出寄存器。修改程序,在ENDIF前加ELSEw(0)=0;w(1)=0;w(2)=0;w(3)=0;则寄存器消失。,132,2019/11/19,3.5组合电路的VHDL描述,6.,【例】4选1数据选择器的VHDL程序。(P137)(ifthenelsifthenelse语句),和上例同样的问题,综合出了寄存器,加ELSEf=0语句修改。,133,2019/11/19,3.5组合电路的VHDL描述,7.,【例】全加器的VHDL程序。(P143)(并行赋值语句),该程序没有使用进程。,134,2019/11/19,3.5组合电路的VHDL描述,8.,【例4-10】ALU的VHDL程序。(ifthenelsifthenelse、case语句),该程序用到了IEEE库中的STD_LOGIC_ARITH和STD_LOGIC_UNSIGNED程序包。实际上可以不用,135,2019/11/19,3.5组合电路的VHDL描述,9.,【例】偶发生器的VHDL程序。P151(进程+并行赋值语句),此程序可以把进程去掉。,136,2019/11/19,3.5组合电路的VHDL描述,10.,【例】偶校验器的VHDL程序。P152(并行赋值语句),137,2019/11/19,3.5组合电路的VHDL描述,VHDL语言的可综合性,一部分语句可综合出电路另一部分语句不能综合出电路,例如延时语句、对文件的操作语句、断言语句、测试程序等都不能综合出电路,通俗地讲综合即将VHDL语言程序转换成电路,由EDA软件完成,138,2019/11/19,章节目录,3.1硬件描述语言概述3.2VHDL语言程序结构3.3VHDL语法基础3.4VHDL常用语句3.5组合电路的VHDL描述3.6时序电路的VHDL描述,139,2019/11/19,复习VHDL语言程序结构,五个基本组成部分,库(Library)程序包(Package),实体说明(EntityDeclaration),结构体(Archiecture),配置(Configuration),主要部分,140,2019/11/19,3.2VHDL语言程序结构,【例3-1】2选1数据选择器的VHDL语言描述,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 小麦赔偿处理协议书
- 钢结构工程火灾应急预案(3篇)
- 小学承包转让协议书
- 生日礼物协议书
- 小区门卫聘用协议书
- 工厂员工干股协议书
- 工期延误索赔协议书
- 带队家政服务协议书
- 法律委托协议书
- 班级合作协议书
- 《祝福》配套剧本 课件
- 电源板QC工程图
- 苏州市初一信息技术期末复习知识点整理-葵花宝典
- 小学数学小升初小升初专题复习小升初专题复习
- GB/T 8162-2008结构用无缝钢管
- GB/T 4942.1-2001旋转电机外壳防护分级(IP代码)
- GB/T 32662-2016废橡胶废塑料裂解油化成套生产装备
- GB/T 24675.2-2009保护性耕作机械深松机
- GB/T 224-2008钢的脱碳层深度测定法
- GB/T 18400.4-2010加工中心检验条件第4部分:线性和回转轴线的定位精度和重复定位精度检验
- 无人机结构与系统-第1章-无人机结构与飞行原理课件
评论
0/150
提交评论