您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 电子设计/PCB > VHDLandPLD第03章VHDL程序结构(XXXX年9月)
第3章VHDL程序结构一个完整的设计实体的最低要求应该能为VHDL综合器所接受并能作为一个独立设计单元即元件的形式而存在的VHDL程序,这里的所谓元件,既可以被高层次的系统所调用,成为该系统的一部分,也可以作为一个电路功能块而独立存在和独立运行。第3章VHDL程序结构图3-1VHDL程序设计基本结构第3章VHDL程序结构在VHDL程序中实体ENTITY和结构体ARCHITECTURE这两个基本结构是必需的它们可以构成最简单的VHDL程序。通常,最简单的VHDL程序结构中还应包括另一重要的部分,即库LIBRARY和程序包PACKAGE一个实用的VHDL程序可以由一个或多个设计实体构成,可以将一个设计实体作为一个完整的系统直接利用,也可以将其作为其它设计实体的一个低层次的结构即元件来例化。元件调用和连接,就是用实体来说明一个具体的器件。图3-1中配置CONFIGURATION结构的设置常用于行为仿真中,如用于对特定结构体的选择控制。第3章VHDL程序结构3.1实体(ENTITY)实体作为一个设计实体的组成部分,其功能是对这个设计实体与外部电路进行接口描述。实体是设计实体的表层设计单元,实体说明部分规定了设计单元的输入输出接口信号或引脚。它是设计实体对外的一个通信界面。就一个设计实体而言,外界所看到的仅仅是它的界面上的各种接口。设计实体可以拥有一个或多个结构体,用于描述此设计实体的逻辑结构和逻辑功能,对于外界来说这一部分是不可见的。不同逻辑功能的设计实体可以拥有相同的实体描述。这是因为实体类似于原理图中的一个部件符号,而其具体的逻辑功能是由设计实体中结构体的描述确定的。实体是VHDL的基本设计单元它可以对一个门电路、一个芯片、一块电路板乃至整个系统进行接口描述。第3章VHDL程序结构1.实体语句结构以下是实体说明单元的常用语句结构:ENTITY实体名IS[GENERIC(类属表);][PORT(端口表);]ENDENTITY实体名;实体说明单元必须按照这一结构来编写实体应以语句ENTITY实体名IS开始,以语句ENDENTITY实体名结束。其中的实体名可以由设计者自己添加,中间在方括号内的语句描述,在特定的情况下并非是必需的。第3章VHDL程序结构2.实体名一个设计实体无论多大和多复杂,在实体中定义的实体名即为这个设计实体的名称在例化。(已有元件的调用和连接)中,即可以用此名对相应的设计实体进行调用。COMPONENTh_adder--元件调用说明PORT(ab:INSTD_LOGIC;coso:OUTSTD_LOGIC);ENDCOMPONENT;...u1:h_adderPORTMAP(a=ainb=binco=dso=e);...--这里的符号=是端口关联符号第3章VHDL程序结构3.GENERIC类属说明语句类属GENERIC参量是一种端口界面常数常以一种说明的形式放在实体或块结构体前的说明部分,类属为所说明的环境提供了一种静态信息通道,类属与常数不同常数只能从设计实体的内部得到赋值,且不能再改变而类属的值可以由设计实体外部提供。因此,设计者可以从外面通过类属参量的重新设定而容易地改变一个设计实体或一个元件的内部电路结构和规模。类属说明的一般书写格式如下:GENERIC([常数名:数据类型[:设定值]{常数名:数据类型[:设定值]});第3章VHDL程序结构程序3-2ENTITYmcu1ISGENERIC(addrwidth:INTEGER:=16);PORT(add_bus:OUTSTD_LOGIC_VECTOR(addrwidth-1DOWNTO0));第3章VHDL程序结构程序3-4LIBRARYIEEE;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;第3章VHDL程序结构程序3-5LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYexnISPORT(d1,d2,d3,d4,d5,d6,d7:INSTD_LOGIC;q1,q2:OUTSTD_LOGIC);END;ARCHITECTUREexn_behavOFexnISCOMPONENTandnGENERIC(n:INTEGER);PORT(a:INSTD_LOGIC_VECTOR(n-1DOWNTO0);c:OUTSTD_LOGIC);ENDCOMPONENT;BEGINu1:andnGENERICMAP(n=2)PORTMAP(a(0)=d1,a(1)=d2,c=q1);u2:andnGENERICMAP(n=5)PORTMAP(a(0)=d3,a(1)=d4,a(2)=d5,a(3)=d6,a(4)=d7,c=q2);END;第3章VHDL程序结构4.PORT端口说明实体端口说明的一般书写格式如下PORT(端口名:端口模式数据类型{端口名:端口模式数据类型});其中的端口名是设计者为实体的每一个对外通道所取的名字端口模式是指这些通道上的数据流动方式如输入或输出等,数据类型是指端口上流动的数据的表达格式或取值类型,这是由于VHDL是一种强类型语言即对语句中的所有的端口信号,内部信号和操作数的数据类型有严格的规定,只有相同数据类型的端口信号和操作数才能相互作用。一个实体通常有一个或多个端口端口类似于原理图部件符号上的管脚实体与外界交流的信息必须通过端口通道流入或流出。第3章VHDL程序结构端口对应于器件符号的外部引脚。端口名作为外部引脚的名称,端口模式用来定义外部引脚的信号流向。常用端口模式:IN模式:IN定义的通道确定为输入端口并规定为单向只读模式可以通过此端口将变量Variable信息或信号Signal信息读入设计实体中。OUT:模式OUT定义的通道确定为输出端口并规定为单向输出模式可以通过此端口将信号输出设计实体或者说可以将设计实体中的信号向此端口赋值。INOUT:模式INOUT定义的通道确定为输入输出双向端口,即从端口的内部看可以对此端口进行赋值,也可以通过此端口读入外部的数据信息。而从端口的外部看,信号既可以从此端口流出也可以向此端口输入信号。第3章VHDL程序结构程序3-7...ENTITYMCS51ISPORT(--与8031接口的各端口定义:P0:INOUTSTD_LOGIC_VECTOR(7DOWNTO0);--双向地址/数据口P2:INSTD_LOGIC_VECTOR(7DOWNTO0);--高8位地址线RDWR:INSTD_LOGIC;--读写允许...ENDMCS51;...PROCESS(WR_ENABLE2)BEGINIF(WR_ENABLE2'EVENTANDWR_ENABLE2='1‘)THENLATCH_OUT2=P0;ENDIF;--从P0口读入外部信息ENDPROCESS;PROCESS(P2,LATCH_ADDRES,READY,RD)BEGINIF(LATCH_ADDRES=01111110)AND(P2=10011111)AND(READY='1')AND(RD='0')THENP0=LATCH_IN1;--寄存器中的数据输入P0口,由P0向外输出ELSEP0=ZZZZZZZZ;ENDIF--禁止读数P0口输出呈高阻态ENDPROCESS;。。。第3章VHDL程序结构BUFFER模式:BUFFER定义的通道确定为具有数据读入功能的输出端口,它与双向端口的区别在于只能接受一个驱动源。BUFFER模式从本质上将仍是OUT模式,只是在内部结构中具有将输出至外端口的信号回读的功能,即允许内部回读输出的信号,即允许反馈,如计数器的设计,可将计数器输出的计数信号回读以作下一计数值的初值与INOUT模式相比。显然BUFFER的区别在于回读(输入)的信号不是由外部输入的,而是由内部产生,向外输出的信号,有时往往在时序上有所差异。第3章VHDL程序结构通常实现内部反馈有两种方式即利用BUFFER建立一个缓冲模式的端口如程序3-8所示,或在结构体内定义一个缓冲节点信号SIGNAL如程序3-9所示。它们的逻辑功能和综合后的电路都是一样的。第3章VHDL程序结构程序3-8LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYbfexpISPORT(clk,rst,din:INSTD_LOGIC;q1:BUFFERSTD_LOGIC;q2:OUTSTD_LOGIC);ENDbfexp;ARCHITECTUREbehav1OFbfexpISBEGINPROCESS(clk,rst)BEGINIFrst='0'THENq1='0';q2='0';ELSIFclk'EVENTANDclk='1'THENq2=din;--将由din读入的数据向q1输出q1=q1;--将向q1输出的数据回读,并向q2赋值ENDIF;ENDPROCESS;END;第3章VHDL程序结构程序3-9LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYbfexpISPORT(clk,rst,din:INSTD_LOGIC;q1:OUTSTD_LOGIC;q2:OUTSTD_LOGIC);ENDbfexp;ARCHITECTUREbehav1OFbfexpISSIGNALqbuf:STD_LOGIC;--定义数据暂存缓冲信号qbufBEGINPROCESS(clk,rst)BEGINIFrst='0'THENqbuf='0';q2='0';ELSIFclk'EVENTANDclk='1'THENqbuf=din;--将由din读入的数据暂存于qbufq2=qbuf;--将缓冲信号qbuf中的数据向q2赋值ENDIF;q1=qbuf;--将缓冲信号qbuf中的数据向q1赋值,并由此输出ENDPROCESS;END;第3章VHDL程序结构第3章VHDL程序结构3.2结构体(ARCHITECTURE)结构体是实体所定义的设计实体中的一个组成部分结构体描述设计实体的内部结构和/或外部设计实体端口间的逻辑关系。结构体由两大部分组成:1.对数据类型、常数、信号、子程序和元件等元素的说明部分。2.描述实体逻辑行为的以各种不同的描述风格表达的功能描述语句它们包括各种形式的顺序描述语句和并行描述语句。3.以元件例化语句为特征的外部元件(设计实体)端口间的连接方式(如程序2-3)。第3章VHDL程序结构结构体将具体实现一个实体,每个实体可以有多个结构体每个结构体对应着实体不同的结构和算法实现方案其间的各个结构体的地位是同等的它们完整地实现了实体的行为,但同一结构体不能为不同的实体所拥有。结构体不能单独存在它必须有一个界面说明,即一个实体对于具有多个结构体的实体必须用CONFIGURATION配置语句指明用于综合的结构体和用于仿真的结构体,即在综合后的可映射于硬件电路的设计实体中一个实体只能对应一个结构体。第3章VHDL程序结构在电路中,如果实体代表一个器件符号,则结构体描述了这个符号的内部行为。当把这
本文标题:VHDLandPLD第03章VHDL程序结构(XXXX年9月)
链接地址:https://www.777doc.com/doc-50847 .html