第2章 VHDL语言程序的基本结构

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

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

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

资源描述

第2章VHDL语言程序的基本结构第2章VHDL语言程序的基本结构2.1VHDL程序基本结构2.2VHDL语言设计的基本单元及其构成2.3VHDL语言构造体的子结构描述2.4包集合、库及配置习题第2章VHDL语言程序的基本结构2.1VHDL程序基本结构2.1.1VHDL程序设计举例当我们使用一个集成芯片时,根据数字电子技术的知识,我们至少需要了解三个方面的信息:①该芯片符合什么规范,是谁生产的,是否大家认可;②该芯片有多少管脚,每个管脚是输入还是输出,每个管脚对输入/输出有什么要求;③该芯片各管脚之间的关系,以及能完成什么逻辑功能。第2章VHDL语言程序的基本结构相应地,当我们使用VHDL语言设计一个硬件电路时,我们至少需要描述三个方面的信息:①设计是在什么规范范围内设计的,亦即此设计符合某个设计规范,能得到大家的认可,这就是库、程序包使用说明;②所设计的硬件电路与外界的接口信号,这就是设计实体的说明;③所设计的硬件电路其内部各组成部分的逻辑关系以及整个系统的逻辑功能,这就是该设计实体对应的结构体说明。第2章VHDL语言程序的基本结构1.设计思路根据数字电子技术的知识,我们知道,74LS00是一个四—2输入与非门,亦即该芯片由四个2输入与非门组成,因此我们设计时可先设计一个2输入与非门(如图2.1(a)所示),再由四个2输入与非门构成一个整体——MY74LS00(如图2.1(b)所示)。第2章VHDL语言程序的基本结构图2.1MY74LS00的设计过程示意图ABYYABNAND2(a)YABNAND2A1B1U1Y1YABNAND2A2B2U2Y2YABNAND2A3B3U3Y3YABNAND2A4B4U4Y4MY74LS00A1B1A2B2A3B3A4B4Y1Y2Y3Y4(b)第2章VHDL语言程序的基本结构2.VHDL源程序1)2输入与非门NAND2的逻辑描述--IEEE库及其中程序包的使用说明LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;--实体NAND2的说明ENTITYNAND2ISPORT(A,B:INSTD_LOGIC;Y:OUTSTD_LOGIC);ENDENTITYNAND2;第2章VHDL语言程序的基本结构--实体NAND2的结构体ART1的说明ARCHITECTUREART1OFNAND2ISBEGINY=ANANDB;ENDARCHITECTUREART1;第2章VHDL语言程序的基本结构2)MY74LS00的逻辑描述--IEEE库及其中程序包的使用说明LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;--实体MY74LS00的说明ENTITYMY74LS00ISPORT(A1,B1,A2,B2,A3,B3,A4,B4:INSTD_LOGIC;Y1,Y2,Y3,Y4:OUTSTD_LOGIC);ENDENTITYMY74LS00;第2章VHDL语言程序的基本结构--实体MY74LS00的结构体ART2的说明ARCHITECTUREART2OFMY74LS00IS--元件调用声明COMPONENTNAND2ISPORT(A,B:INSTD_LOGIC;Y:OUTSTD_LOGIC);ENDCOMPONENTNAND2;--元件连接说明第2章VHDL语言程序的基本结构BEGINU1:NAND2PORTMAP(A=A1,B=B1,Y=Y1);U2:NAND2PORTMAP(A=A2,B=B2,Y=Y2);U3:NAND2PORTMAP(A3,B3,Y3);U4:NAND2PORTMAP(A4,B4,Y4);ENDARCHITECTUREART2;第2章VHDL语言程序的基本结构2.1.2VHDL程序的基本结构VHDL语言程序包含:实体(Entity)构造体(Architecture)配置(Configuration)包集合(Package)库(Library)第2章VHDL语言程序的基本结构实体用于描述所设计的系统的外部接口信号构造体用于描述系统内部的结构和行为包集合说明象C语言中include语句一样,是设计常用子程序和公共数据类型的集合,用来单纯的罗列VHDL语言中所要用到的信号定义、常数定义、数据类型、函数定义和过程定义等,它是一个可编译的设计单元,也是库结构中的一个层次。库存放已经编译的实体、构造体、包集合和配置。库可由用户生成或由ASIC芯片制造商提供,以便于在设计中为大家所共享。库的说明总是放在设计单元的最前边,这样,在设计单元内的语句就可以使用库中的数据。在VHDL语言中可以存在多个不同的库,但是,库和库之间是独立的,不能互相嵌套。配置用于从库中选取所需单元来组成系统设计的不同版本库(LIBRARY)程序包(PACKAGE)实体(ENTITY)结构体(ARCHITECTURE)进程其它并行结构配置(CONFIGURATION)设计实体2.2VHDL语言设计的基本单元及其构成VHDL语言设计的基本单元(DesignEntity),就是VHDL语言的一个基本设计实体。简单的可以是一个与门(ANDGate),复杂点的可以是一个微处理器或一个系统。但是,不管是简单的数字电路,还是复杂的数字电路,其基本构成是一致的。它们都由实体说明(EntityDeclaration)和构造体(ArchitectureBody)两部分构成也就是说我们实际做的程序,并不象开始所列的那样必须包含5部分,通常下面结构才是基本的和必需的Use定义区Entity定义区Architecture定义区我们以一个实际的例子来看一下VHDL语言基本语法结构Use定义区应写成LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_ARITH.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;Entity定义区写成ENTITYexampleISPORT(Pin48:INSTD_LOGIC;Pin7:OUTSTD_LOGIC);ENDexample;487Architecture定义区写成ARCHITECTUREBEHAVOFexampleISBEGINPin7=Pin48;ENDBEHAV;例1LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYandnISGENERIC(n:INTEGER);PORT(a:INSTD_LOGIC_VECTOR(n-1DOWNTO0);b:OUTSTD_LOGIC);ENDandn;ARCHITECTUREBEHAVOFandnISBEGINPROCESS(a)VARIABLEint:STD_LOGIC;BEGINint:=‘1’;FORIINa’LENGTH-1DOWNTO0LOOPIFa(i)=‘0’THENint:=‘0’;ENDIF;ENDLOOP;b=int;ENDPROCESS;ENDBEHAV;例2LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYexnISPORT(d1,d2,d3,d4,d5,d6,d7:INSTD_LOGIC;q1,q2:OUTSTD_LOGIC);ENDexn;ARCHITECTUREBEHAVOFexnISCOMPONENTandnGENERIC(n:INTEGER);PORT(a:INSTD_LOGIC_VECTOR(n-1DOWNTO0);b:OUTSTD_LOGIC);ENDCOMPONENT;BEGINU1:andnGENERICMAP(n=2)PORTMAP(a(0)=d1,a(1)=d2,b=q1);U2:andnGENERICMAP(n=5)PORTMAP(a(0)=d3,a(1)=d4,a(2)=d5,a(3)=d6,a(4)=d(7),b=q2);ENDBEHAV;2.2.1实体实体作为设计实体的组成部分,其功能是对这个设计实体与外部电路进行接口描述。实体是设计实体的表层设计单元,实体说明部分规定了设计单元的输入输出接口信号或引脚,它是设计实体对外的一个通信界面。1.实体语句结构ENTITY实体名IS[GENERIC(类属表);][PORT(端口表);]END实体名;一个设计实体无论多大和多复杂,在实体中定义的实体名即为这个设计实体的名称。2.GENERIC类属说明语句类属说明的一般书写格式为:GENERIC([类属参量名:数据类型[:设定值]{;类属参量名:数据类型[:设定值]});类属说明语句必须放在端口说明之前,用于设计实体和其外部环境通信的参数和传递信息。类属参量名由设计者决定。数据类型通常取INTEGER或TIME类型,但只有INTEGER类型的可以被综合。设定值即是初值。类属参量在所定义的环境中的地位与常数相似,但常数只能从设计实体的内部得到赋值,且不能再改变,而类属能从环境外部动态的接受赋值,其行为类似于端口PORT。上面两个例子给出了类属语句的典型应用。设计者可以从外面通过类属参量的重新设定,从而容易的改变一个设计实体或一个元件的内部电路结构和规模。类属映射语句类属映射语句可用于设计从外部端口改变元件内部参数或结构规模的元件,或称类属元件,这些元件在例化中特别方便,在改变电路结构或元件升级方面显得尤为便捷。其语句格式是:GENERICMAP(类属表)。类属映射语句与端口映射语句PORTMAP()具有相似的功能和使用方法,它描述相应元件类属参数间的衔接和传送方式,它的类属参数衔接(连接)表达方式也相同。3.PORT端口说明端口说明是对基本设计实体(单元)与外部接口的描述,也可以说是对外部引脚信号的名称,数据类型和输入、输出方向的描述。端口说明语句的格式为:PORT(端口名{,端口名}:方向数据类型名;...端口名{,端口名}:方向数据类型名;端口名{,端口名}:方向数据类型名);1)端口名端口名是赋予每个外部引脚的名称,通常用一个或几个英文字母,或者用英文字母加数字命名。如d0,d1,sel,q等。一般情况下我们用有含意的词来命名端口,比如说把时钟信号定义为clk,把数据定义为data。2)端口方向端口方向用来定义外部引脚的信号方向。一般来讲,端口方向有5种定义方式:IN、OUT、INOUT、BUFFER、LINKAGE。用“IN”进行方向说明的端口,其信号自端口输入到构造体,而构造体内部的信号不能从该端口输出。用“OUT”进行方向说明的端口,其信号将从构造体内经端口输出,而不能通过该端口向构造体输入信号。“INOUT”用以说明该端口是双向的,可以输入也可以输出。“BUFFER”用以说明该端口可以输出信号,而且在构造体内部也可以利用该输出信号。“LINKAGE”用以说明该端口无指定方向,可以与任何方向的信号相连接。在图(a)中,锁存器的输出端口被说明为OUT”,而在图(b)中,锁存器的输出被说明为BUFFER”。从图中可以看到,如果构造体内部要使用该信号,那么锁存器的输出端必须说明为“BUFFER,而不能用“OUT”说明。当一个构造体用“BUFFER”说明输出端口时,与其连接的另一个构造体的端口也要用“BUFFER”说明。对于OUT”则没有这样的要求。“OUT”和“BUFFER都可以定义输出端口,但是它们之间是有区别的。libraryieee;useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;entitycounterisport(clk:instd_logic;cou:outstd_logic_vector(0to2));endcounter;architecturebehavofcounterisbeginprocess(clk)beginifclk’eventandclk=‘1’thencou=cou+1;endif;endprocess;endbehav;3)数据类型指端口上流动的数据的表达格

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

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

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

×
保存成功