第八章_VHDL结构-重庆科创职业学院

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

第8章VHDL结构与要素8.1实体8.1.1实体语句结构实体说明单元的一般语句结构:ENTITY实体名IS[GENERIC(类属表);][PORT(端口表);]ENDENTITY实体名;8.1.2GENERIC类属说明语句类属说明的一般书写格式如下:GENERIC([常数名:数据类型[:设定值]{;常数名:数据类型[:设定值]});【例8-1】LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYandnISGENERIC(n:INTEGER);--定义类属参量及其数据类型PORT(a:INSTD_LOGIC_VECTOR(n-1DOWNTO0);--用类属参量限制矢量长度c:OUTSTD_LOGIC);END;ARCHITECTUREbehavOFandnISBEGINPROCESS(a)VARIABLEint:STD_LOGIC;BEGINint:='1';FORIINa'LENGTH-1DOWNTO0LOOPIFa(i)='0'THENint:='0';ENDIF;ENDLOOP;c=int;ENDPROCESS;END;【例8-2】LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYexnISPORT(d1,d2,d3,d4,d5,d6,d7:INSTD_LOGIC;q1,q2:OUTSTD_LOGIC);END;ARCHITECTUREexn_behavOFexnISCOMPONENTandn--元件调用声明GENERIC(n:INTEGER);PORT(a:INSTD_LOGIC_VECTOR(n-1DOWNTO0);c:OUTSTD_LOGIC);ENDCOMPONENT;BEGIN--类属映射语句,定义类属变量,n赋值为2u1:andnGENERICMAP(n=2)PORTMAP(a(0)=d1,a(1)=d2,c=q1);u2:andnGENERICMAP(n=5)--定义类属变量,n赋值为5PORTMAP(a(0)=d3,a(1)=d4,a(2)=d5,a(3)=d6,a(4)=d7,c=q2);END;8.1.3类属映射语句类属映射语句可用于设计从外部端口改变元件内部参数或结构规模的元件,或称类属元件,这些元件在例化中特别方便,在改变电路结构或元件升级方面显得尤为便捷。其语句格式是:GENERICMAP(类属表)。类属映射语句与端口映射语句PORTMAP()具有相似的功能和使用方法,它描述相应元件类属参数间的衔接和传送方式,它的类属参数衔接(连接)表达方式也相同。【例8-3】LIBRARYIEEE;--待例化元件USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_arith.ALL;USEIEEE.STD_LOGIC_unsigned.ALL;ENTITYaddernISPORT(a,b:INSTD_LOGIC_VECTOR;result:outSTD_LOGIC_VECTOR);ENDaddern;ARCHITECTUREbehaveOFaddernISBEGINresult=a+b;END;LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_arith.ALL;USEIEEE.STD_LOGIC_unsigned.ALL;ENTITYaddersISGENERIC(msb_operand:INTEGER:=15;msb_sum:INTEGER:=15);PORT(b:INSTD_LOGIC_VECTOR(msb_operandDOWNTO0);result:OUTSTD_LOGIC_VECTOR(msb_sumDOWNTO0));ENDadders;接下页ARCHITECTUREbehaveOFaddersISCOMPONENTaddernPORT(a,b:INSTD_LOGIC_VECTOR;result:OUTSTD_LOGIC_VECTOR);ENDCOMPONENT;SIGNALa:STD_LOGIC_VECTOR(msb_sum/2DOWNTO0);SIGNALtwoa:STD_LOGIC_VECTOR(msb_operandDOWNTO0);BEGINtwoa=a&a;U1:addernPORTMAP(a=twoa,b=b,result=result);U2:addernPORTMAP(a=b(msb_operanddowntomsb_operand/2+1),b=b(msb_operand/2downto0),result=a);ENDbehave;接上页图8-1例8-3的逻辑电路图8.1.4PORT(端口)说明PORT(端口名:端口模式数据类型;{端口名:端口模式数据类型});其中的端口名是设计者为实体的每一个对外通道所取的名字,端口模式是指这些通道上的数据流动方式。数据类型是指端口上流动的数据的表达格式或取值类型,VHDL要求只有相同数据类型的端口信号和操作数才能相互作用。由于PORT说明语句是对一个设计实体界面的说明及对设计实体与外部电路的接口通道的说明,其中包括对每一接口的输入输出模式和数据类型的定义。其格式如下:8.2结构体结构体的组成部分是:•对数据类型、常数、信号、子程序和元件等元素的说明部分。•描述实体逻辑行为的、以各种不同的描述风格表达的功能描述语句。•以元件例化语句为特征的外部元件(设计实体)端口间的连接。1.结构体的一般语言格式ARCHITECTURE结构体名OF实体名IS[说明语句]BEGIN[功能描述语句]ENDARCHITECTURE结构体名;8.2结构体2.结构体说明语句3.功能描述语句结构进程语句信号赋值语句子程序调用语句元件例化语句8.3子程序(SUBPROGRAM)8.3.1函数(FUNCTION)函数的语言表达格式如下:FUNCTION函数名(参数表)RETURN数据类型--函数首FUNCTION函数名(参数表)RETURN数据类型IS--函数体[说明部分]BEGIN顺序语句;ENDFUNCTION函数名;【例8-4】LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;PACKAGEpackexpIS--定义程序包FUNCTIONmax(a,b:INSTD_LOGIC_VECTOR)--定义函数首RETURNSTD_LOGIC_VECTOR;FUNCTIONfunc1(a,b,c:REAL)--定义函数首RETURNREAL;FUNCTION*(a,b:INTEGER)--定义函数首RETURNINTEGER;FUNCTIONas2(SIGNALin1,in2:REAL)--定义函数首RETURNREAL;END;PACKAGEBODYpackexpISFUNCTIONmax(a,b:INSTD_LOGIC_VECTOR)--定义函数体RETURNSTD_LOGIC_VECTORISBEGINIFabTHENRETURNa;ELSERETURNb;ENDIF;ENDFUNCTIONmax;--结束FUNCTION语句END;--结束PACKAGEBODY语句接下页LIBRARYIEEE;--函数应用实例USEIEEE.STD_LOGIC_1164.ALL;USEWORK.packexp.ALL;ENTITYaxampISPORT(dat1,dat2:INSTD_LOGIC_VECTOR(3DOWNTO0);dat3,dat4:INSTD_LOGIC_VECTOR(3DOWNTO0);out1,out2:OUTSTD_LOGIC_VECTOR(3DOWNTO0));END;ARCHITECTUREbhvOFaxampISBEGINout1=max(dat1,dat2);--用在赋值语句中的并行函数调用语句PROCESS(dat3,dat4)BEGINout2=max(dat3,dat4);--顺序函数调用语句ENDPROCESS;END;接上页图8-2例8-4的逻辑电路图【例8-5】LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYfuncISPORT(a:INSTD_LOGIC_VECTOR(0to2);m:OUTSTD_LOGIC_VECTOR(0to2));ENDENTITYfunc;ARCHITECTUREdemoOFfuncISFUNCTIONsam(x,y,z:STD_LOGIC)RETURNSTD_LOGICISBEGINRETURN(xANDy)ORy;ENDFUNCTIONsam;BEGINPROCESS(a)BEGINm(0)=sam(a(0),a(1),a(2));m(1)=sam(a(2),a(0),a(1));m(2)=sam(a(1),a(2),a(0));ENDPROCESS;ENDARCHITECTUREdemo;8.3.2重载函数(OVERLOADEDFUNCTION)【例8-6】LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;PACKAGEpackexpIS--定义程序包FUNCTIONmax(a,b:INSTD_LOGIC_VECTOR)--定义函数首RETURNSTD_LOGIC_VECTOR;FUNCTIONmax(a,b:INBIT_VECTOR)--定义函数首RETURNBIT_VECTOR;FUNCTIONmax(a,b:ININTEGER)--定义函数首RETURNINTEGER;END;PACKAGEBODYpackexpISFUNCTIONmax(a,b:INSTD_LOGIC_VECTOR)--定义函数体RETURNSTD_LOGIC_VECTORISBEGINIFabTHENRETURNa;ELSERETURNb;ENDIF;ENDFUNCTIONmax;--结束FUNCTION语句FUNCTIONmax(a,b:ININTEGER)--定义函数体RETURNINTEGERIS接下页BEGINIFabTHENRETURNa;ELSERETURNb;ENDIF;ENDFUNCTIONmax;--结束FUNCTION语句FUNCTIONmax(a,b:INBIT_VECTOR)--定义函数体RETURNBIT_VECTORISBEGINIFabTHENRETURNa;ELSERETURNb;ENDIF;ENDFUNCTIONmax;--结束FUNCTION语句END;--结束PACKAGEBODY语句--以下是调用重载函数max的程序:LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEWORK.packexp.ALL;ENTITYaxampISPORT(a1,b1:INSTD_LOGIC_VECTOR(3DOWNTO0);a2,b2:INBIT_VECTOR(4DOWNTO0);a3,b3:ININTEGERRANGE0TO15;c1:OUTSTD_LOGIC_VECTOR(3DOWNTO0);c2:OUTBIT_VECTOR(4DOWNTO0);c3:OUTINTEGERRANGE0TO15);END;接上页ARCHITECTUREbhvOFaxampISBEGINc1=max(a1,b1);--对函数max(a,b:INSTD_LOGIC_VECTOR)的调用c2=max(a2,b2);--对函数max(a,b:INBIT_VECTOR)的调用c3=max(a3,b3);--对函数max(a,b:ININTEGER)的调用END;接上页【例8-7】LIBRARYIEEE;--程序包首USEIEEE.std_logic_1164.all;USEIEEE.std_logic_arith.all;PACKAGESTD_LO

1 / 52
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功