湖南理工职业技术学院PLD课件(冯鸥)1第三节VHDL基本结构3.1块、子程序和进程3.2库和程序包3.3配置3.4VHDL描述风格湖南理工职业技术学院PLD课件(冯鸥)2回顾:结构体功能描述语句结构体功能描述语句位于BEGIN和END之间,具体地描述了构造体的行为及其连接关系。结构体的功能描述语句可以含有5种不同类型的并行语句,如图所示。每一语句结构内部可以使用并行语句,也可以是顺序语句。湖南理工职业技术学院PLD课件(冯鸥)3结构体(ARCHITECTURE)说明语句功能描述语句块语句(BLOCK)进程语句(PROCESS)信号赋值语句子程序调用语句元件例化语句结构体构造图:湖南理工职业技术学院PLD课件(冯鸥)4图中5种功能描述语句的基本组成和功能分别是:块语句是由一系列并行语句构成的组合体,它的功能是将结构体中的并行语句组成一个或多个子模块。(同时执行的语句)进程语句定义顺序语句模块,用以将从外部获得的信号值或内部运算数据向其他的信号进行赋值。(赋值)信号赋值语句将设计实体内的处理结果向定义的信号或界面端口进行赋值。(赋值)子程序调用语句可以调用进程或参数,并将获得的结果赋值于信号。(子程序调用)元件例化语句对其他的设计实体做元件调用说明,并将此元件的端口与其他元件、信号或高层实体的界面端口进行连接。(协调)湖南理工职业技术学院PLD课件(冯鸥)5例:2选1数据选择器ENTTITYmux2ISPORT(d0,d1:INBIT;sel:INBIT;s:OUTBIT);ENDmux2;ARCHITECTUREdataflowOFmux2ISSIGNALsig:BIT;BEGINSig=(d0ANDsel)OR(NOTselANDd1);S=sig;ENDdataflow;湖南理工职业技术学院PLD课件(冯鸥)6VHDL程序与其他软件语言程序中应用子程序的目的是相似的,即能够更有效地完成重复性的工作。子程序模块是利用顺序语句定义和完成算法的,但子程序不能像进程那样可以从本结构体的其他块或进程结构中读取信号值或向信号赋值,只能通过子程序调用与子程序的界面端口进行通信。子程序被调用时,首先要初始化,执行处理功能后,将处理结果传递给主程序。子程序内部的值不能保持,子程序返回后才能被再次调用并初始化。3.1子程序(SUBPROGRAM)湖南理工职业技术学院PLD课件(冯鸥)7子程序有两种类型:过程(PROCEDURE)和函数(FUNCTION)。1.过程(PROCEDURE)过程语句的书写格式为:PROCEDURE过程名(参数表)IS[说明部分]BEGIN过程语句部分ENDPROCEDURE过程名;湖南理工职业技术学院PLD课件(冯鸥)8例:用过程语句设计的子程序PROCEDUREvector_to_int(a:INSTD_LOGIC_VECTOR;x_flag:OUTBOOLEAN;q:INOUTINTEGER)ISBEGINq:=0;x_flag:=FALSE;FORiINa’RANGELOOPq:=q*2;IF(a(i)=1)THENq:=q+1;--矢量转换成整数*:乘,**:乘方湖南理工职业技术学院PLD课件(冯鸥)9ELSE(a(i)/=1)x_flag:=TRUE;ENDIF;ENDLOOP;ENDvector_to_int;这个过程名为vector_to_int实现将位矢量转换成整数的功能,在过程语句执行结束后,将输入值拷贝到调用者的OUT和INOUT所定义的变量中,完成子程序和主程序之间的数据传递。/=:不等湖南理工职业技术学院PLD课件(冯鸥)102.函数函数的语言书写格式为:FUNCTION函数名(参数表)RETURN数据类型IS[说明部分];BEGIN顺序语句;RETURN[返回变量名];ENDRETURN函数名;湖南理工职业技术学院PLD课件(冯鸥)11例:用VHDL构造的选择最大值的函数程序。LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;PACKAGEbpacISFUNCTIONmax(a:STD_LOGIC_VECTOR;b:STD_LOGIC_VECTOR)RETURNSTD_LOGIC_VECTOR;ENDbpac;PACKAGEBODYbpacISFUNCTIONmax(a:STD_LOGIC_VECTOR;b:STD_LOGIC_VECTOR)湖南理工职业技术学院PLD课件(冯鸥)12RETURNSTD_LOGIC_VECTORISVARIABLEtmp:STD_LOGIC_VECTOR(a’RANGE);BEGINIF(ab)THENtmp:=a;ELSEtmp:=b;ENDIF;RETURNtmp;END;ENDbpac;湖南理工职业技术学院PLD课件(冯鸥)133.2库和程序包库和程序包用来描述和保留元件、类型说明函数、子程序等,以便在其它设计中可以随时引用这些信息,提高设计效率。3.2.1库(LIBRARY)库是经编译后的数据的集合,它存放包集合定义、实体定义、结构定义和配置定义。库语句的格式为:LIBRARY库名;湖南理工职业技术学院PLD课件(冯鸥)14USE语句指明库中的程序包。一旦说明了库和程序包,整个设计实体都可以进入访问或调用,但其作用范围仅限于所说明的设计实体。USE语句的使用将使所说明的程序包对本设计实体部分或全部开放。USE语句有以下两种常用的格式:USE库名.程序包名.项目名;USE库名.程序包名.ALL;第一种语句格式的作用是向本设计实体开放指定库中的特定程序包内的所选定的项目。第二种语句格式的作用是向本设计实体开放指定库中的特定程序包内的所有内容。湖南理工职业技术学院PLD课件(冯鸥)15例如:LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_1164.STD_ULOGIC;此例中,第一个USE语句表明打开IEEE库中的STD_LOGIC_1164程序包,并使程序包中的所有公共资源对本语句后面的VHDL设计实体程序全部开放,关键词ALL代表程序包中的所有资源。第二个USE语句开放了程序包STD_LOGIC_1164中的STD_ULOGIC数据类型。STD_ULOGIC:可枚举数据类型湖南理工职业技术学院PLD课件(冯鸥)16注意:库说明语句的作用范围从一个实体说明开始到它所属的结构体、配置为止,当一个源程序中出现两个以上实体时,两条作为使用库的说明语句应在每个设计实体说明语句前重复书写。例:LIBRARYIEEE;--库使用说明USEIEEE.STD_LOGIC_1164.ALL;ENTITYandIS┇ENDand;ARCHITECTUREdataflowOFandIS┇ENDdataflow;湖南理工职业技术学院PLD课件(冯鸥)17CONFIGURATIONc1OFandIS--CONFIGURATION(配置)┇ANDc1;LIBRARYIEEE;--库使用说明USEIEEE.STD_LOGIC_1164.ALL;ENTITYorISCONFIGURATIONc2OFandIS┇ANDc2;湖南理工职业技术学院PLD课件(冯鸥)183.2.2程序包程序包也叫包集合,主要用来存放各个设计都能共享的数据类型、子程序说明、属性说明和元件说明等部分。设计者使用时只要用USE子句进行说明即可。程序包由两部分组成:程序包首和程序包体。程序包的一般书写格式如下:PACKAGE程序包名ISEND[PACKAGE]程序包名;--程序包首PACKAGEBODY程序包名IS┇--程序包体END[PACKAGEBODY][程序包名];湖南理工职业技术学院PLD课件(冯鸥)19例:USESTD.STD_LOGIC.ALL;PACKAGEmathISTYPEtw16ISARRAY(0TO15)OFSTD_LOGIC;FUNCTIONadd(a,b:INtw16)RETURNtw16;FUNCTIONsub(a,b:INtw16)RETURNtw16;ENDmath;PACKAGEBODYmathISFUNCTIONvect_to_int(s:tw16);RETURNINTEGERISVARIBLEresult:INTEGER:=0;程序包关键字湖南理工职业技术学院PLD课件(冯鸥)20BEGINFORiIN0TO7LOOPresult:=result*2;IFs(i)=’1’THENresult:=result+1ENDIF;ENDLOOP;RETURNresult;ENDvect_to_int;FUNCTIONint_to_tw16(s:INTEGER);RETURNtw16ISVARIBLEresult:tw16;VARIBLEdigit:INTEGER:=2**15;VARIBLElocal:INTEGER;湖南理工职业技术学院PLD课件(冯鸥)21BEGINlocal:=s;FORiIN15DOWNTO0LOOPIFlocal/digit=1THENLocal:=local-digit;ELSEresult(i):=0;ENDIF;digit:=digit/2;ENDLOOP;RETURNresult;ENDint_to_tw16;FUNCTIONadd(a,b:INtw16);RETURNtw16ISVARIBLEresult:INTEGER;湖南理工职业技术学院PLD课件(冯鸥)22BEGINresult:=vect_to_int(a)+vect_to_int(b);RETURNint_to_tw16(result);ENDadd;FUNCTIONsub(a,b:INtw16);RETURNtw16ISVARIBLEresult:INTEGER;BEGINresult:=vect_to_int(a)+vect_to_int(b);RETURNint_to_tw16(result);ENDsub;ENDmath;程序包关键字湖南理工职业技术学院PLD课件(冯鸥)23此例的程序包是由程序包首和程序包体两部分组成。程序包首定义了数据类型和函数的调用说明,程序包体中才具体描述实现该函数功能的语句和数据的赋值。这种分开描述的好处是,当函数的功能需要做某些调整或数据赋值需要变化时,只要改变程序包体的相关语句就可以了,而无需改变程序包首的说明,这样就使得需要重新编译的单元数目尽可能的减少了。湖南理工职业技术学院PLD课件(冯鸥)243.2.3maxii中常用程序包软件包库内容maxplus2AlteraMAX+PLUSII中支持VHDL的基本逻辑功能模块(primitives),宏功能模块(macrofunction以及部分巨功能模块(megafunctions)std_logic_1164ieee对VHDL数据、模型、STD_LOGIC和STD_LOGIC_VECTOR进行说明的标准std_logic_arithieeeSIGNED和UNSIGNED型、使用SIGNED和UNSIGNED型的算术、比较功能和转换功能CONV_INTEGER,CONV_SIGNED,andCONV_UNSIGNED.std_logic_signedieee允许MAX+PLUSII使用STD_LOGIC_VECTOR的一些有符号函数std_logic_unsignedieee允许MAX+PLUSII使用STD_LOGIC_VECTOR的一些无符号函数湖南理工职业技术学院PLD课件(冯鸥)253.3配置在用VHDL描述硬件电路时,常常采用结构描述方式和混合描述方式。在这两种描述方式中,常常需要将其他设计实体作为元件进行引用,这时就需要将不同元件通过配置安装到不同的设计实体中。VHDL提供了配置语句用于描述各种设计实体和元件之间连接关系以及设计实体和结构体之间的连接关系。默认配置(实体与结构体之间的连接关系)默认配置语句的基本格式为:CONFIGURATION配置名OF实体名ISFOR选配