




已阅读5页,还剩130页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
信息08,第3章硬件描述语言VHDL的语法结构及编程,3.1概述3.2VHDL程序基本结构3.3VHDL语言要素3.4VHDL顺序语句3.5VHDL并行语句3.63.7VHDL描述风格,信息08,3.1概述,一、VHDL的发展VHSIC(VeryHighSpeedIntegratedCircuit)HardwareDescriptionLanguage.就是超高速集成电路硬件描述语言。VHDL语言最早由美国国防部提出。VHDL于80年代由美国国防部基于Ada语言开发,1987年VHDL成为IEEE标准,成为IEEEstd1076-19871993年VHDL做若干修改,成为IEEEstd1076-1993,信息08,二、在数字逻辑电路和数字系统的设计,VHDL描述电路行为的算法有很多优点:(1)设计层次较高、用于较复杂的系统时,能尽早发现存在的问题,缩短设计周期。(2)独立实现,修改方便,系统硬件描述能力强。(3)可读性好,有利于交流,适合于文档保存。(4)VHDL语言标准、规范、移植性强。(5)VHDL类型众多而且支持用户自定义类型,支持自顶而下的设计方法和多种电路的设计。,信息08,三、与其他的硬件描述语言相比,VHDL的优点:(1)与其他的硬件描述语言相比,VHDL具有更强的行为描述能力,从而决定了他成为系统设计领域最佳的硬件描述语言。强大的行为描述能力是避开具体的器件结构,从逻辑行为上描述大规模电子系统的重要保证。(2)VHDL丰富的仿真语句和库函数,使得在任何大系统的设计早期就能查验设计系统的功能可行性,随时可对设计进行仿真模拟。(3)VHDL语句的行为描述能力和程序结构决定了他具有支持大规模设计的分解和已有设计的再利用功能。(4)对于用VHDL完成的一个确定的设计,可以利用EDA工具进行逻辑综合和优化,并自动的把VHDL描述设计转变成门级网表。(5)VHDL对设计的描述具有相对独立性,设计者可以不懂硬件的结构,而进行独立的设计。,信息08,四、VHDL程序设计约定VHDL语言由关键字组成,每条语句由;结束。VHDL的编译器和综合器对程序文字的大小写是不加区分的.本书一般使用大写.程序中的注释使用双横线-.在VHDL程序的任何一行中,双横线-后的文字都不参加编译和综合.考虑到MAX+plusll要求源程序文件的名字与实体名必须一致,因此为了使同一个VHDL源程序文件能适应各个EDA开发软件上的使用要求,建议各个源程序文件的命名均与实体名一致.语句结构描述中方括号内的内容为可选内容.为了便于程序的阅读和调试,书写和输入程序时,使用层次缩进格式,同一层次的对齐,低层次的较高层次的缩进两个字符.,信息08,3.2VHDL程序基本结构模块化和自顶向下、逐层分解的结构化设计思想贯穿整个VHDL程序设计。一个完整的VHDL程序包含:库(Library):存放预编译程序包。程序包(Package):各设计模块共享的,如:常量、子程序。实体(Entity):描述电路外部接口信号.结构体(Architecture):对实体功能的具体描述配置(Configuration):为实体选定某个特定的结构体一个VHDL程序至少有一个实体和结构体。,信息08,下面通过举例来具体说明VHDL程序的结构LIBRARYIEEE;-库引用说明USEIEEE.STD_LOGIC_1164.ALL;-ENTITYmux21IS-实体说明PORT(a,b:INSTD_LOGIC;-端口说明s:INSTD_LOGIC;y:OUTSTD_LOGIC);ENDmux21;-ARCHITECTUREmux_archOFmux21IS-结构体描述BEGINy=aWHENs=0ELSEb;-并行语句ENDmux_arch;,信息08,2选1多路选择器的电路元件图如图。mux21实体对应的逻辑电路如图:mux21结构体,信息08,一、VHDL设计简述1、实体语句:对这个设计实体与外部电路进行接口描述,实体说明部分规定了设计单元的输入输出接口信号或引脚。-ENTITY实体名ISGENERIC(类属表);PORT(端口表);ENDENTITY实体名;-以语句“ENTITY实体名IS”开始,“END实体名;”结束;,信息08,类属(GENERIC)说明语句类属参量是一种端口界面常数,常放在实体或结构体前的说明部分类属说明的一般书写格式如下:GENERC(常数名:数据类型:=设定值;常数名:数据类型:=设定值);【例】ENTITYmckISGENERIC(width:INTEGER:=8);PORT(add_bus:OUTSTD_LOGIC_VECTOR(width-1)DOWNTO0);在这里,GENERIC语句对实体mck的作为地址总线的端口add_bus的数据类型和寛度作了定义,即定义add_bus为一个8位的位矢量.,信息08,PORT端口说明PORT说明语句是对一个设计实体界面的说明,也是对设计实体与外部电路的接口通道的说明,其中包括对每一接口的输入输出模式和数据类型的定义.其格式如下:PORT(端口名:端口模式数据类型;端口名:端口模式数据类型);例:ENTITYmux21IS_实体说明PORT(a,b:INBIT;_端口说明s:INBIT;y:OUTBIT);ENDENTITYmux21;,信息08,端口模式:IN:输入,将变量或信号信息通过该端口读入OUT:输出,单向赋值模式,将信号通过该端口输出INOUT:双向,可以通过该端口读入或写出信息BUFFER:具有读功能的输出模式,可以读或写,只能有一个驱动源P67:图3-4端口模式符号图数据类型BIT:0、1BIT_VECTOR:一组二进制STD_LOGIC:0、1、X、ZSTD_LOGIC_VECTOR:,信息08,2、结构体:对实体功能的具体描述,必须跟在实体后面.用于描述设计实体的内部结构以及实体端口间的逻辑关系.一般结构体由两个基本层次组成:(1)对数据类型,常数,信号,子程序和元件等元素的说明部分.(2)描述实体逻辑行为的,以各种不同描述风格表达的功能描述语句.ARCHITECTURE结构体名OF实体名IS说明语句;BEGIN功能描述语句;ENDARCHITECTURE结构体名;结构体将具体实现一个实体.每个实体可以有多个结构体,每个结构体对应着实体不同结构和算法实现方案,其间的各个结构体的地位是同等的.,信息08,说明语句是对结构体的功能描述语句中将要用到的信号(SIGNAL),数据类型(TYPE),常数(CONSTANT),元件(COMPONENT),函数(FUNCTION)和过程(PROCEDURE)等加以说明的语句.但在一个结构体中说明和定义的数据类型,常数,元件,函数和过程只能用于这个结构体中。,信息08,功能描述语句描述实体逻辑行为(功能)。默认为并行处理语句。语句是并行的,各语句没有顺序关系;若使各语句是顺序关系,用进程(Process)描述,若含有多个进程,进程间为并行。结构体有3种描述方式:1、行为描述(behavioral):描述电路功能和行为2、数据流描述(dataflowe):RLT级描述,数学公式描述3、结构化描述(structural):描述该单元设计的硬件电路。,信息08,3、配置为实体选定某个特定的结构体:LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYmux21bISPORT(a,b:INSTD_LOGIC;s:INSTD_LOGIC;y:OUTSTD_LOGIC);ENDmux21b;ARCHITECTUREmux_arch1OFmux21bISBEGINy=aWHENs=0ELSEb;ENDmux_arch1;ARCHITECTUREmux_arch2OFmux21bISBEGINProcess(a,b,s)BEGINIF(s=1)THENy=a;ELSEy=b;ENDIF;ENDProcess;ENDmux_arch2;,CONFIGURATIONfirstOFmux21bISFORmux_arch1ENDFOR;ENDfirst;CONFIGURATIONsecondOFmux21bISFORmux_arch2ENDFOR;ENDsecond;,信息08,4、库(Library):存放预编译程序包。为了提高设计效率以及使设计遵循某些统一的语言标准或数据格式,将一些有用的信息汇集在一个或几个库中以供调用。这些信息可以是预先定义好的数据类型、子程序等设计单元的集合体程序包或预先设计好的各种设计实体元件库程序包。因此可以把库看成是一种用来存储预先完成的程序包数据集合体和元件的仓库。如果要在一项VHDL设计中用到某一程序包就必须在这项设计中预先打开这个程序包使此设计能随时使用这一程序包中的内容,即用LIBRARY和USE等语句以显式声明。格式如下:LIBRARYIEEE;-指定所使用库名USE库名.程序包名.项目名;-指定库中的特定程序包内所选定的项目或USE库名.程序包名.ALL-向本设计实体开放指定库中的特定程序包内所有的内容例如:LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;,信息08,VHDL有5种库:IEEE:1)STD_LOGIC_1164:最重要和最常用的程序包大部分基于数字系统设计的程序包都是以此程序包中设定的标准为基础。其中包含了数据类型、子类型和函数定义等。2)STD_LOGIC_ARITH:是Synopsys公司的程序包,比上述多些数据类型,算术运算符和转换函数。3)STD_LOGIC_SIGNED:4)STD_LOGIC_UNSIGNED:扩展混合运算符和STD_LOGIC_VECTOR到INTEGER的转换函数。STD:定义了两个标准程序包即STANDARD和TEXTIO(程序包文件输入/输出程序包)。设计中自动地将其包含进去,不用显式表达。WORK:现行工作库用于存放用户设计和定义的一些设计单元和程序包。也不必以显式表达VITAL:只在VHDL仿真器中使用,可以提高VHDL门级时序模拟的精度。用户自定义库:用户还可以自己定义一些库将自己的设计内容或通过交流获得的程序包设计实体并入这些库中,信息08,5、程序包(Package):库和程序包是VHDL的设计共享资源,一些共用的、经过验证的模块放在程序包中,实现代码重用。一个或多个程序包可以预编译到一个库中,使用起来更为方便。程序包说明象C语言中的include语句一样,用来罗列VHDL语言中所要用到的常数定义、数据类型、函数定义等,是一个可编译的设计单元,也是库结构中的一个层次,要使用程序包时可用USE语句说明。程序包由标题和包体两部分组成,其结构如下:标题部分:PACKAGE程序包名IS-说明语句END程序包名包体部分:PACKAGEBODY程序包名IS-说明语句ENDBODY;标题是主设计单元,它可以独立编译并插入设计库中。包体是次级设计单元,它可以在其对应的标题编译并插入设计库之后,再独立进行编译并也插入设计库中。包体并不总是需要的。但在程序包中若包含有子程序说明时则必须用对应的包体。这种情况下,子程序体不能出现在标题中,而必须放在包体中。若程序包只包含类型说明,则包体是不需要,信息08,随堂练习1、VHDL的编译器和综合器对源程序文字的大小写加以区分应使用大写.答:错2、程序中的注释使用,其后的文字都不参加编译和综合.答:双横线-.3、一个完整的VHDL程序含:,答:库(Library):存放预编译程序包。程序包(Package):各设计模块共享的,如:常量、子程序。实体(Entity):描述电路外部接口信号.结构体(Architecture):对实体功能的具体描述配置(Configuration):为实体选定某个特定的结构体4、实体描述:,信息08,3.3VHDL语言要素VHDL语言类似高级语言有算法及数据对象(Dataobject)组成。其中数据对象包括:常量(constant):代表数字电路中电源、地、及恒定逻辑值等变量(variable):代表暂存数值的载体。信号(signal):代表物理设计中某一硬件连接线。变量和常量可以从软件语言中找到对应的数据类型,然而信号的表现较特殊,它具有更多的硬件特征。,信息08,一、VHDL语言的文字规则VHDL语言的文字主要包括数值、标识符、关键字等。标识符:用来表示数据对象的名字。数值:用来表示数据对象的值。(保留)关键字:VHDL语言定义、有特殊含义。1、数值型文字主要包括:数字型:eg:62.3字符及字符串型:eg:A“zzzzz”,信息08,1)数字型文字整数:十进制数。eg:356712E323_35_576实数:带小数点的十进制数。eg:3.342.01.2E-323_0.35_576含数制基数的数字eg:2#10#E+2-(1*21)*222#1100_0101#16#E2#E110#1701#E-2物理量文字eg:3s5A,信息08,2)字符及字符串型字符:单引号内的ASCII码eg:s#1字符串:双引号内的ASCII码串字符串:eg:“ERROR”“af”“a例:SIGNALA,B,C:BIT_VECTOR(0TO5);SIGNALM:INTEGERRANGE0TO5;SIGNALY,Z:BIT;Y=A(M):-M是不可计算型下标表示Z=B(3):-3是可计算型下标表示C(0TO3)=A(4TO7):-以段的方式进行赋值C(7DOWNTO4)=A(3DOWNTO0):-以段的方式赋值,信息08,二、VHDL数据对象(Dataobject)其中包括:常量(constant):代表数字电路中电源、地、及恒定逻辑值等变量(variable):代表暂存数值的载体。信号(signal):代表物理设计中某一硬件连接线。包括输出、输入端口变量和常量可以从软件语言中找到对应的数据类型,然而信号的表现较特殊,它具有更多的硬件特征。,信息08,三种对象的特点:变量(variable):局部量,用于process、function、procedure。信号(signal):全局量,用于architecture、package、entity常量(constant):全局量,信息08,二、VHDL数据对象(Dataobject)其中包括:常量(constant):代表数字电路中电源、地、及恒定逻辑值等变量(variable):代表暂存数值的载体。信号(signal):代表物理设计中某一硬件连接线。包括输出、输入端口变量和常量可以从软件语言中找到对应的数据类型,然而信号的表现较特殊,它具有更多的硬件特征。,信息08,1、常量(constant):在程序中,常量是一个恒定不变的值,一旦作了数据类型和赋值定义后,在程序中不能再改变,因而具有全局性意义。常量定义一般表述式:CONSTANT常数名:数据类型:=表达式;例如:CONSTANTFBUS:BIT_VECTOR(3DOWNTO0):=1011;CONSTANTVCC:REAL:=5.0;CONSTANTDELY:TIME=25ns;VHDL要求所定义的常量数据类型必须与表达式的数据类型一致,信息08,常量的数据类型可以是标量类型或复合类型,但不能是文件类型(File)或存取类型(Access).常量定义语句所允许的设计单元有实体,结构体,程序包,块,进程和子程序.在程序中定义的常量可以暂不设具体数值,它可以在程序包体中设定.常量的可视性,即常量的使用范围取决于它被定义的位置.例:定义在设计实体中的常量,其有效范围为这个实体定义的所有的结构体;定义在设计实体的某一结构体中的常量,则只能用于此结构体;定义在结构体的某一单元的常量,如一个进程中,则这个常量只能用在这一进程中.,信息08,2、变量(VARIABLE)变量常用在进程中作临时数据存贮单元.变量的语法格式如下:VARIABLE变量名:数据类型:=初始值;例如:VARIABLEA:INTEGER;-定义A为整数型变量VARIABLEB,C:INTEGER:=3;-定义B和C为整型变量,初始值为3VARIABLEcount:INTEGERRANGE0to255:=3;在VHDL语法规则中,变量是一个局部量,只能在进程和子程序中使用.变量不能将信息带出对它作出定义的当前设计单元.变量的赋值是一种理想化的数据传输,是立即发生,不存在任何延时的行为.变量名:=表达式定义变量作为局部量,其适用范围仅限于定义了变量的进程或子程序中.,信息08,2、变量(VARIABLE)变量常用在进程中作临时数据存贮单元.变量的语法格式如下:VARIABLE变量名:数据类型约束条件:=初始值;例如:VARABLEA:INTEGER;-定义A为整数型变量VARIABLEB,C:INTEGER:=3;-定义B和C为整型变量,初始值为3VARIABLEcount:INTEGERRANGE0to255:=3;在VHDL语法规则中,变量是一个局部量,只能在进程和子程序中使用.变量不能将信息带出对它作出定义的当前设计单元.变量的赋值是一种理想化的数据传输,是立即发生,不存在任何延时的行为.变量名:=表达式定义变量作为局部量,其适用范围仅限于定义了变量的进程或子程序中.,信息08,3、信号(SIGNAL)信号是描述硬件系统的基本数据对象,它类似于连接线.信号可以作为设计实体中并行语句模块间的信息交流通道.信号的定义格式如下:SIGNAL信号名:数据类型约束条件:=初始值;例:SIGNALS1:STD_LOGIG:=0-定义了一个标准位的单值信号S1,初始值为低电平SIGNALS4:STD_LOGIG_VECTOR(15DOMNTO0);SIGNALS2,S3:BIT:-定义了两个位BIT的信号信号赋值格式变量名B)的结果为布尔量,信息08,(2)位(BIT)数据类型、位数据类型也属于枚举型,取值只能是1或0.位数据类型的数据对象,如变量,信号等,可以参与逻辑运算,运算结果仍是位的数据类型.VHDL综合器用一个二进制位表示BIT.在程序包STANDARD中定义的源代码是:TYPEBITIS(01);,信息08,(3)位矢量(BIT_VECTOR)数据类型位矢量只是基于BIT数据类型的数组。在程序包STANDARD中定义的源代码是:TYPEBIT_VETORISARRAY(NATURALRANGE)OFBIT;使用位矢量必须注明位宽,即数组中的元素个数和排列,例如:SIGNALA:BIT_VECTOR(7DOWNTO0);信号A被定义为一个具有8位位宽的矢量,它的最左位是A(7),最右位是A(0).,信息08,(4)字符(CHARACTER)数据类型字符类型通常用单引号引起来,如A.字符类型区分大小写,如B不同于b.字符型已在STANDARD程序包中作了定义.,信息08,(5)整数(INTEGER)数据类型整数类型的数代表正整数,负整数和零.在VHDL中,整数的取值范围是-21474836472147483647,即可用32位有符号的二进制数表示.在实际应用中,VHDL仿真器通常将INTEGER类型作为有符号数处理,而VHDL综合器将INTEGER作为无符号数处理.在使用整数是,VHDL综合器要求用RANGE子句为所定义的数限定范围,然后根据所限定的范围来决定表示此信号或变量的二进制的位数,因为VHDL综合器无法综合未限定的整数类型的信号或变量.如语句SIGNALTYPEI:INTEGERRANGE0TO15;规定整数TYPEI的取值范围是015共16个值,可用4位二进制数来表示,因此,TYPEI将被综合成由四条信号线构成的信号.整数常量的书写方式示例如下:10E4-十进制整数;16#D2#-十六进制整数;2#11011010#-二进制整数.,信息08,(6)自然数(NATURAL)和正整数(POSITIVE)数据类型自然数是整数的一个子类型,非负的整数,即零和正整数;正整数也是一个子类型,它包括整数中非零和非负的数值.它们在STANDARD程序包中定义的源代码如下:SUBTYPENATURALISINTEGERRANGE0TOINTEGERHIGH;SUBTYPEPOSITIVEISINTEGERRANGE1TOINTEGERHIGH;,信息08,(7)实数(REAL)数据类型VHDL的实数类型类似于数学上的实数,或称浮点数.实数的取值范围为-1.0E38+1.0E38.通常情况下,实数类型仅能在VHDL仿真器中使用,VHDL综合器不支持实数,因为实数类型的实现相当复杂,实数常量的书写方式举例如下:65971.333333-十进制浮点数;8#43.6#E+4-八进制浮点数;43.6E-4-十进制浮点数.,信息08,(8)字符串(STRING)数据类型字符串数据类型是字符数据类型的一个约束型数组,或称为字符串数组.字符串必须用双引号标明.如:VARIABLESTRING_VAR:STRING(0TO3);STRING_VAR:=ABCD;,信息08,(9)时间(TIME)数据类型VHDL中唯一预定义物理类型是时间.完整的时间类型包括整数和物理量单位两部分,整数和单位之间至少留一个空格,如50ms,30ns.STANDARD程序包中也定义了时间.定义如下:TYPETIMEISRANGE-2147483647TO-2147483647unitsfs:-飞秒,VHDL中的最小时间单位ps=1000fs:-皮秒ns=1000ps:-纳秒us=1000ns:-微秒ms=1000us:-毫秒sec=1000ms:-秒min=60sec:-分hr=60min:-时enduntis:,信息08,(10)错误等级(SEVERITY_LEVEL)在VHDL仿真器中,错误等级用来指示设计系统的工作状态,共有四种可能的值:NOTE(注意),WARNING(警告),ERROR(出错),FAILURE(失败).在仿真过程中,可输出这四种值来提示被仿真系统当前的工作情况.其定义如下:TYPESEVERITY_LEVEIIS(NOTE,WARNING,ERROR,FAILURE);,信息08,2、IEEE预定义标准逻辑位与矢量在IEEE库中程序包STD_LOGIC_1164.ALL中,定义了两个非常重要的数据类型。STD_LOGIC:TYPESTD_LOGICIS(U,0,1,Z,W,L,H,-)STD_LOGIC_VECTOR:标准一维数组,每个元素的数据类型都是STD_LOGIC用到这两种数据类型时,需库声明:LIBRARYIEEE;USEIEEE.STD_LOGIC-1164.ALL;,信息08,3、VHDL允许的自定义数据类型自定义数据类型主要有数组类型、枚举类型、子类型等。用类型定义语句TYPE和子类型定义语句SUBTYPE来完成。1)TYPE语句用法定义数组的语句格式如下:TYPE数组名ISARRAY(数组范围)OF数据类型;其中,数组名是新定义的数组类型的名称;数组范围是元素的数量和排序方式,并且以整数表示;数据类型则是数组各元素的数据类型。例:TYPEstISARRAY(0TO15)OFSTD_LOGIC,信息08,2)SUBTYPE语句用法定义子类型的语句格式如下:SUBTYPE子类型名IS数据类型名RANGE约束条件;子类型子类型是已经定义的类型或者子类型的一个子集。有类型定义的地方就可以有子类型。例:SUBTYPEdightISINTEGERRANGE0TO9,信息08,4、数据类型转换不同数据类型的数据对象进行操作时,需数据类型转换。1)类型转换函数:自定义库DATAIO中std_logic_OPS程序包有两个:TO_VECTOR和TO_INTEGER类型转换函数在STD库中STANDARD程序包有TO_BITVECTOR类型转换函数格式:类型转换函数(表达式)2)直接类型转换:格式:数据类型(表达式)3)STD_LOGIC_UNSIGNED和STD_LOGIC_SIGNEDINTEGER、STD_LOGIC及STD_LOGIC_VECTOR运算及转化。,信息08,四、VHDL操作符,信息08,VHDL操作符优先级,信息08,操作符使用说明:操作符间操作数必须为相同数据类型;操作符有优先级,一个表达式含两个操作符时,可使用括号;关系操作符的作用对数据对象进行比较、排序判断,常出现在条件判断中,表达式结果为BOOTLEAN型;逻辑操作符:表达式中只有AND、OR、XOR时,可使用括号;并置操作符-b、c相与后向a赋值,a、b、c的数据类型同属4位长的位矢量d=eORfORg;-两个操作符OR相同,不需括号h=(iNANDj)NANDk;-NAND不属上述三种算符中的一种,必须加括号l=(mXORn)AND(oXORp);-操作符不同,必须加括号h=iANDjANDk;-两个操作符都是AND,不必加括号h=iANDjORk;-两个操作符不同,未加括号,表达错误ac,0=d);,信息08,例3SIGNALa,b:std_logic;SIGNALc:std_logic_vector(1DOWNTO0);SIGNALd,e:std_logic_vector(3DOWNTO0);SIGNALf:std_logic_vector(4DOWNTO0);c=a-位和一个位矢量连接,信息08,操作符重载:ieee库中的std_logic_unsigned程序包里定义了操作符重载,INTEGER、STD_LOGIC、STD_LOGIC_VECTOR之间可以混合计算。,信息08,3.4VHDL顺序语句引言:VHDL主要描述语句1、顺序语句:在进程(PROCESS)、函数(FUNCTION)、过程(PROCEDURE)中执行的语句;具有高级语言的特点。2、并行语句:在结构体(ARCHITECTURE)中执行的语句;具有硬件描述的特点。,信息08,进程(PROCESS)进程内所有语句都是顺序执行的;结构体中有多个进程时,各进程间为并行语句语法如下:标记:process(敏感信号表)变量说明语句;begin顺序语句;endprocess标记;顺序语句:是指完全按照程序中书写的顺序执行各语句,并且在结构层次中前面的语句执行结果会直接影响后面各语句的执行结果。,信息08,VHDL顺序语句主要包括:赋值语句(Evaluate)转向控制语句IF语句CASE语句LOOP语句EXT语句EXIT语句WAIT语句子程序调用语句(ProcedureCall)RETURN语句NULL语句,信息08,3.4.1赋值语句一、信号赋值语句格式:目的信号量G(1),0=G(2):=H;,信息08,3.4.2转向控制语句IF语句CASE语句LOOP语句NEXT语句EXIT语句,信息08,一、IF语句IF语句是根据的设置条件来选择执行指定的顺序语句。IF语句中至少有一个条件句,判断结果为BOOLEANIF语句可用于选择器、比较器、编码器、译码器、状态机等的设计。,信息08,格式为以下3种:IF条件THEN顺序语句;ENDIF;IF条件THEN顺序语句ELSE顺序语句ENDIF;,IF条件1THEN顺序语句ELSIF条件2顺序语句ELSIF条件3顺序语句ELSE顺序语句ENDIF;,信息08,例1:利用IF语句生成D触发器LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYdffISPORT(clk,d:INSTD_LOGIC;q:OUTSTD_LOGIC);ENDdff;ARCHITECTURErtlOFdffISBEGINPROCESS(clk)BEGINIF(clkEVENTANDclk=1)THENq=d;ENDIF;ENDPROCESS;ENDrtl;,信息08,例2:二选一电路结构体的描述LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYmux2ISPORT(A,B,S:INSTD_LOGIC;C:OUTSTD_LOGIC);ENDmux2;ARCHITECTURErtlOFmux2ISBEGINPROCESS(a,b,s)BEGINIF(s=1)THENc=a;ELSEc=b;ENDIF;ENDPROCESS;ENDrtl;,信息08,例3:四选一多路选择器的描述:LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYmux4ISPORT(input:INSTD_LOGIC_VECTOR(3DOWNTO0);sel:INSTD_LOGIC_VECTOR(1DOWNTO0);y:OUTSTD_LOGIC);ENDmux4;ARCHITECTURErtlOFmux4ISBEGINPROCESS(input,sel)BEGINIF(sel=00)THENy=input(0);ELSIF(sel=01)THENy=input(1);ELSIF(sel=10)THENy顺序语句,ENDCASE;其中WHEN条件选择值可以有四种表达方式;(1)单个普通数值,如WHEN2=顺序语句;(2)并列数值,如WHEN3|5=顺序语句;(3)数值选择范围,形如WHEN2TO5=顺序语句;(4)WHENOTHERS=顺序语句;,信息08,例1CASE语句使用CASEselISWHEN3TO9=cccccccNULL;-无效ENDCASE;,信息08,LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYmux41ISPORT(input:INSTD_LOGIC_VECTOR(3DOWNTO0);sel:INSTD_LOGIC_VECTOR(1DOWNTO0);y:OUTSTD_LOGIC);ENDmux41;ARCHITECTURErtlOFmux41ISBEGINPROCESS(input,sel)BEGINCASEselISWHEN00=yyyyNULL;-无效ENDCASE;ENDPROCESS;ENDrtl;,信息08,例33-8译码器。LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYdecoder3_8ISPORT(a,b,c,g1,g2a,g2b:INSTD_LOGIC;y:OUTSTD_LOGIC_VECTOR(7DOWNTO0);ENDdecoder3_8;ARCHITECTURErtlOFdecoder3_8ISSIGNALindata:STD_LOGIC_VECTOR(2DOWNTO0);-说明BEGINindatayyyyyyyyy=“XXXXXXXX”;-X:不定ENDCASE;ELSE-指不满足g1=1ANDg2a=0ANDg2b=0情况y=“11111111”;ENDIF;ENDPROCESS;ENDrtl;,信息08,LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYdecoder3_8ISPORT(a,b,c,g1,g2a,g2b:INSTD_LOGIC;y:OUTSTD_LOGIC_VECTOR(7DOWNTO0);ENDdecoder3_8;ARCHITECTURErtlOFdecoder3_8ISSIGNALindata:STD_LOGIC_VECTOR(2DOWNTO0);-说明BEGINindatayyyyyyyyy=“XXXXXXXX”;-X:不定ENDCASE;ELSEIF-指不满足g1=1ANDg2a=0ANDg2b=0情况y10;ENDLOOPL1;,信息08,2.FOR_LOOP语句格式为:标号:FOR循环变量IN离散范围LOOP顺序处理语句ENDLOOP标号;根据离散范围,自动递增(减)循环变量;循环变量不用提前说明,默认为整数;,信息08,例:8位奇偶校验电路LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYparity_checkISPORT(a:INSTD_LOGIC_VECTOR(7DOWNTO0);y:OUTSTD_LOGIC);ENDparity_check;ARCHITECTURErtlOFparity_checkISBEGINPROCESS(a)VARIABLEtmp:STD_LOGIC;BEGINtmp:=0;FORiIN0TO7LOOPtmp:=tmpXORa(i);ENDLOOP;y=tmp;-y=1,a为奇数个1,y=0,a为偶数个1。ENDPROCESS;ENDrtl;,信息08,3.WHILE_LOOP语句格式为:标号:WHILE条件LOOP顺序处理语句ENDLOOP标号;在该LOOP语句中,没有给出循环次数的范围,而是给出了循环执行顺序语句的条件循环控制条件为布尔表达式,当条件为“真”时,则进行循环,如果条件为“假”,则结束循环。,信息08,例:8位奇偶校验电路的WHILE_LOOP设计形式LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYparity_check2ISPORT(a:INSTD_LOGIC_VECTOR(7DOWNTO0);y:OUTSTD_LOGIC);ENDparity_check2;ARCHITECTUREbehavOFparity_check2ISBEGINPROCESS(a)VARIABLEtmp:STD_LOGIC;BEGINtmp:=0;i:=0;WHILE(i8)LOOPtmp:=tmpXORa(i);i:=i+1;-循环次数计算语句ENDLOOP;y=tmp;ENDPROCESS;ENDbehav;,信息08,四、NEXT语句格式为:NEXT标号WHEN条件该语句主要用于LOOP语句内部的循环控制。当NEXT语句后不跟标号,NEXT语句作用于当前最内层循环,即从LOOP语句的起始位置进入下一个循环。若NEXT语句不跟WHEN条件,NEXT语句立即无条件跳出循环。,信息08,例:NEXT语句应用举例WHILEdata10LOOPdata:=data+1;NEXTWHENdata=2-条件成立而无标号,跳出循环data:=data*data;ENDLOOP;例2:N1:FORiIN10DOWNTO1LOOPN2:FORjIN0TOiLOOPNEXTN1WHENi=j;-条件成立,跳到N1处m:=j*i+1;-条件不成立,继续内层循环N2ENDLOOPN2;ENDLOOPN1;,信息08,五:EXIT语句格式为:EXITLOOP标号WHEN条件;EXIT语句也是用来控制LOOP的内部循环,与NEXT语句不同的是EXIT语句跳向LOOP终点,结束LOOP语句;而NEXT语句是跳向LOOP语句的起始点,结束本次循环,开始下一次循环。当EXIT语句中含有标号时,表明跳到标号处继续执行。含WHEN条件时,如果条件为“真”,跳出LOOP语句;如果条件为“假”,则继续执行LOOP循环。EXIT语句不含标号和条件时,表明无条件结束LOOP语句的执行,因此,它为程序需要处理保护、出错和警告状态,提供了一种快捷、简便的调试方法。,信息08,例:两个元素位矢量a、b进行比较,当发现a与b不同时,跳出循环比较程序并报告比较结果。SIGNALa,b:STD_LOGIC_VECTOR(3DOWNTO0);SIGNALa_less_than_b:BOOLEAN;a_less_than_b=FALSE;FORiIN3DOWNTO0LOOPIF(a(i)=1ANDb(i)=0)THENa_less_than_b=FALSE;EXIT;-无条件跳出循环ELSEIF(a(i)=0ANDb(i)=1)THENa_less_than_b=TRUE;EXIT;ELSENULL;ENDIF;ENDLOOP;,信息08,3.4.3WAIT语句进程在仿真运行中处于执行或挂起两种状态之一。当进程执行到等待语句时,就将被挂起并设置好再次执行的条件。WAIT语句可以设置4种不同的条件:无限等待、时间到、条件满足以及敏感信号量变化。这几类WAIT语句可以混合使用。,信息08,(1)WAIT-无限等待语句这种形式的WAIT语句在关键字“WAIT”后面不带任何信息,是无限等待的情况。(2)WAITON信号表-敏感信号等待语句这种形式的WAIT语句使进程暂停,直到敏感信号表中某个信号值发生变化。WAITON语句后面跟着的信号表,在敏感信号表中列出等待语句的敏感信号。当进程处于等待状态时,其中敏感信号发生任何变化都将结束挂起,再次启动进程。,信息08,例APROCESSBEGINWAITONa,b;ys_time);-局部端口参量设定PORT(pb1:INBIT;pb2:INOUTBIT);-块结构中局部端口定义PORTMAP(pb1=b1,pb2=a1);-块结构端口连接说明CONSTANTdelay:Time:=1ms;-局部常数定义SIGNALs1:BIT;-局部信号定义BEGINs1=pb1AFTERdelay;pb2=s1AFTERgb1;ENDBLOCKblk1;ENDARCHITECTUREfunc;,信息08,1.简单信号赋值语句格式:赋值目标=表达式;例如:output1=aANDb;output2=c+d;g=eORf;h=eXORf;规则:赋值目标必须是信号,而且出现在结构体或块语句中,3.5.3并行信号赋值语句,信息08,例如:对4选1多路选择器的描述z=aWHENs=”00”ELSEbWHENs=”01”ELSEcWHENs=”10”ELSEd;,2、条件信号赋值语句格式:赋值目标=表达式WHEN赋值条件ELSE表达式WHEN赋值条件ELSE表达式;,信息08,3.选择信号赋值语句WITH选择表达式SELECT赋值目标信号a1,b=b1,y=y1);,信息08,2020/5/28,123,【例3.12】利用2输入端与非门元件,设计4输入端的或电路。,信息08,2020/5/28,124,第一步:设计2输入端与非门LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYnd2ISPORT(a,b:INSTD_LOGIC;c:OUTSTD_LOGIC);ENDnd2;ARCHITECTUREnd2behvOFnd2ISBEGINcc1,b=d1,c=y);-名字关联方式u3:nd2PORTMAP(x,y,c=z1);-混合关联方式ENDord41behv;,信息08,2020/5/28,127,3.5.6生成语句(Generate)生成语句是一种循环语句,具有复制电路的功能。生成语句有FOR-GENERATE和IF-GENERATE两种形式,,格式1:标号:FOR循环变量IN取值范围GENERATE说明部分BEGIN并行语句;-元件例化语句,以重复产生并行元件。ENDGENERATE标号;格式2:标号:IF条件GENERATE说明部分BEGIN并行语句ENDGENERATE标号;,信息08,2020/5/28,128,例:生成语句产生的8个相同的电路模块COMPONENTcompPORT(x:INSTD_LOGIC;y:OUTSTD_LOGIC);ENDCOMPONENT;SIGNALa:STD_LOGIC_VECTOR(0TO7);SIGNALb:STD_LOGIC_VECTOR(0TO7);.gen:FORiINaRANGEGENERATEu1:compPORTMA(x=a(i),y=b(i);ENDG
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 老人护理课件教学
- 老人和儿童的课件
- 美术教学课件儿童
- 继电保护技能培训课件
- 道路安全教育心得体会800字
- 安全检查工岗位安全生产责任制
- 美术儿童课件大纲
- 施工安全检查制度
- 安全生产责任险 费率
- 2025年科普工作计划
- 第22课 现代科技革命和产业发展(课件)-【中职专用】《世界历史》(高教版2023基础模块)
- TDT 1015.2-2024 地籍数据库 第2部分:自然资源(正式版)
- 2023年山东省艺术本科(美术类)第一次投档分数线
- 变更抚养权协议书
- 九年级数学教学教学反思5篇
- 云南省昆明市盘龙区2024年八年级下学期期末数学试卷附答案
- 贵州省毕节地区选调生考试(行政职业能力测验)综合能力题库各版本
- 2022-2023学年河南省郑州市高一下学期期末考试数学试题(解析版)
- 2023初三一模闵行英语卷+答案
- 传感器与自动检测技术
- 体育馆运营整体方案
评论
0/150
提交评论