您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 电子设计/PCB > 第4章 VHDL语言
第4章VHDL语言第9章VHDL结构与要素1实体2VHDL语言程序的结构体3VHDL语言的文字规则4数据类型5运算操作符习题第4章VHDL语言9.1.1VHDL的特点VHDL之所以被硬件设计者日趋重视,是因为它在进行工程设计时有如下优点:(1)VHDL行为描述能力明显强于其他HDL语言,这就使得用VHDL编程时不必考虑具体的器件工艺结构,能比较方便地从逻辑行为这一级别描述和设计电路系统。而对于已完成的设计,不改变其源程序,只需改变某些参量,就能轻易地改变设计的规模和结构。比如设计一个计数器,若要设计8位计数器,可以将其输出引脚定义为“BIT_VECTOR(7DOWNTO0);”,而要将该计数器改为16位计数器时,只要将引脚定义中的数据7改为15即可“BIT_VECTOR(15DOWNTO0);”。第4章VHDL语言(2)能在设计的各个阶段对电路系统进行仿真模拟,使得设计者在系统的设计早期就可检查设计系统的功能,极大地减少了可能发生的错误,降低了开发成本。(3)VHDL程序结构(如设计实体、程序包、设计库)决定了它在设计时可利用已有的设计成果,并能方便地将较大规模的设计项目分解为若干部分,从而实现多人多任务的并行工作方式,保证了较大规模系统的设计能被高效、高速地完成。(4)EDA工具和VHDL综合器的性能日益完善。经过逻辑综合,VHDL语言描述能自动地被转变成某一芯片的门级网表;通过优化能使对应的结构更小、速度更快。同时设计者可根据EDA工具给出的综合和优化后的设计信息对VHDL设计描述进行改良,使之更为完善。第4章VHDL语言9.1.2VHDL程序的一般结构小到一个元件、一个电路,大到一个系统,都可以用VHDL描述其结构、行为、功能和接口。编程时,VHDL将一项工程设计(或称设计实体)分成“外部端口”和“内部结构、功能及其实现算法”两大部分进行描述。一个设计实体的内、外部都设计完成后,其他实体就可以像调用普通元件一样直接调用它。例8-1给出了一个较简单的VHDL源程序,它实现了一个与门。[例8-1]第4章VHDL语言器件and2的外部引脚说明,这部分称为实体ENTITYand2ISPORT(a,b:INBIT;c:OUTBIT);ENDand2;--实体名称为and2--a、b是两个输入引脚--c为输出引脚器件and2的内部功能说明,这部分称为结构体ARCHITECTUREexam1OFand2ISBEGINc=aANDb;ENDexam1;--结构体exam1是对实体--and2的内部描述,描述--了and2器件的内部功能--为实现一个2输入端与门第4章VHDL语言该程序包括一个VHDL程序必备的两个部分:实体(ENTITY)说明部分和结构体(ARCHITECTURE)说明部分。图4-1AND2的电路符号ABCABCAND20第4章VHDL语言“实体”说明部分给出了器件AND2的输入/输出引脚(PORT)的外部说明,如图8-1所示。其中A、B是两个输入引脚(IN),数据类型为BIT,即“二进制位”数据类型,这种数据类型只有“0”和“1”两种逻辑值;C为输出引脚,数据类型也为BIT。这部分相当于是画原理图时的一个元件符号。第4章VHDL语言“结构体”说明部分给出了该器件的内部功能信息。其中“AND”是VHDL的一个运算符,表示“与”操作;而符号“=”是VHDL的赋值运算符,从电路的角度来说就是表示信号的传输,将输入信号A、B“与”操作后的结果传送到输出端C。VHDL的逻辑综合软件将根据该程序的描述得到相应的硬件设计结果。从这个例子可以看出,VHDL的所有语句都是以“;”结束,而“;”后的“--”表示是程序注释。第4章VHDL语言9.2VHDL语言的程序结构实体(Entity)、结构体(Architecture)是组成VHDL的两个最基本结构,如例4-1就是只包含这两个基本结构的最简单的VHDL程序。考虑到大型设计过程通常采用多人多组的形式进行,为了使已完成的设计成果(包括已定义的数据类型、函数、过程或实体等)为其他设计任务所共享,有必要把被共享的设计成果集中到一起。VHDL语言设置了库(Library)与程序包(Package)的程序结构。第4章VHDL语言此外,对于较复杂的设计项目,一个实体往往与多个结构体相对应。而当实体设计完成后,放入程序包供其他实体共享时,其他实体可能只需要使用该实体的一个结构体,这时,VHDL提供了配置(Configuration)这种结构,为实体配置(指定)一个结构体。可见,实体(Entity)、结构体(Architecture)、库(Library)、程序包(Package)与配置(Configuration)是构成一个完整的VHDL语言程序的五个基本结构。第4章VHDL语言9.2.1实体(Entity)VHDL语言描述的对象称为实体。实体代表什么几乎没有限制,你可以将任意复杂的系统、一块电路板、一个芯片、一个电路单元甚至一个门电路看作一个实体。如果设计时对设计系统自顶向下分层、划分模块,那么,各层的设计模块都可以看作实体。顶层的系统模块是顶级实体,低层次的设计模块是低级实体。描述时,高层次的实体可将比它低层的实体当作元件来调用。至于该元件内部的具体结构或功能,将在低层次的实体描述中详细给出。第4章VHDL语言实体说明的书写格式如下所示:ENTITY实体名IS[GENERIC(类属参数说明);][PORT(端口说明);]ENDENTITY实体名;在实体说明中应给出实体命名,并描述实体的外部接口情况。此时,实体被视为“黑盒”,不管其内部结构功能如何,只描述它的输入/输出接口信号。第4章VHDL语言例8-2是一个D触发器的实体说明。[例4-2]ENTITYdffISGENERIC(tsu:TIME:=5ns);PORT(clk,d:INbit;Q,qb:OUTbit);ENDdff;第4章VHDL语言1.类属参数说明语句(GENERIC)类属参数说明语句必须放在端口说明语句之前,用以设定实体或元件的内部电路结构和规模。其书写格式如下:GENERIC(常数名:数据类型:=设定值;常数名:数据类型:=设定值);第4章VHDL语言例9-2程序中的GENERIC(tsu:TIME:=5ns)指定了结构体内建立时间用tsu表示,值为5ns。再如[例9-3]ENTITYexamISGENERIC(width:INTEGER:=42);PORT(M:INSTD_LOGIC_VECTOR(width-1DOWNTO0);Q:OUTSTD_LOGIC_VECTOR(15DOWNTO0));第4章VHDL语言类属参数定义了一个宽度常数,在端口定义部分应用该常数width定义了一个42位的信号,这句相当于语句M:INSTD_LOGIC_VECTOR(41DOWNTO0);若该实体内部大量使用了width这个参数表示数据宽度,则当设计者需要改变宽度时,只需一次性在语句GENERIC(width:INTEGER:=某常数);中改变常数即可。一个数字的改变,从EDA的综合结果来看,将大大地影响设计结果的硬件规模,而从设计者的角度来看,只需改变一个数字。应用VHDL设计进行EDA设计的优越性从此可窥一斑。第4章VHDL语言LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYandsISGENERIC(n:INTEGER);PORT(a:INSTD_LOGIC_VECTOR(n-1DOWNTO0);C:OUTSTD_LOGIC);END;ARCHITECTUREbehaveOFandsISBEGINPROCESS(a)VARIABLEint:STD_LOGIC;BEGINint:='1';FORiINa'LENGTH-1DOWNTO0LOOPIFa(i)='0'THENint:='0';ENDIF;ENDLOOP;C=int;ENDPROCESS;END;第4章VHDL语言LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYenxISPORT(d1,d2,d3,d4,d5,d6,d7:instd_logic;q1,q2:outstd_logic);end;architectureenx_haveofenxiscomponentandsgeneric(n:integer);port(a:instd_logic_vector(n-1downto0);c:outstd_logic);endcomponent;beginu1:andsgenericmap(n=2)portmap(a(0)=d1,a(1)=d2,c=q1);u2:andsgenericmap(n=5)portmap(a(0)=d3,a(1)=d4,a(2)=d5,a(3)=d6,a(4)=d7,c=q2);end;第4章VHDL语言2.端口说明(PORT)在电路图上,端口对应于元件符号的外部引脚。端口说明语句是对一个实体界面的说明,也是对端口信号名、数据类型和端口模式的描述。语句的一般格式如下:PORT(端口信号名,{端口信号名}:端口模式端口类型;端口信号名,{端口信号名}:端口模式端口类型);第4章VHDL语言(1)端口信号名。端口信号名是赋给每个外部引脚的名称,如例8-1中的A、B、C。各端口信号名在实体中必须是唯一的,不能有重复现象。(2)端口模式。端口模式用来说明信号的方向,详细的信号方向说明见表8-1。第4章VHDL语言其中,BUFFER是INOUT的子集,它与INOUT的区别在于:INOUT是双向信号,既可以输入,也可以输出,而BUFFER也是实体的输出信号,但作输入用时,信号不是由外部驱动,而是从输出反馈得到,即BUFFER类的信号在输出外部电路的同时,也可以被实体本身的结构体读入,这种类型的信号常用来描述带反馈的逻辑电路,如计数器等。第4章VHDL语言表9-1信号方向说明方向定义含义IN输入OUT输出(结构体内不能再使用)INOUT双向(可以输入,也可以输出)BUFFER输出(结构体内可再使用),可以读或写第4章VHDL语言8.2.2结构体(Architecture)对一个电路系统而言,实体描述部分主要是对系统的外部接口描述,这一部分如同是一个“黑盒”,描述时并不需要考虑实体内部的具体细节。因为描述实体内部结构与性能的工作是由“结构体”所承担的。结构体是一个实体的组成部分,是对实体功能的具体描述。结构体主要是描述实体的硬件结构、元件之间的互连关系、实体所完成的逻辑功能以及数据的传输变换等方面的内容。具体编写结构体时,可以从其中的某一方面来描述,也可综合各个方面来进行描述。一个结构体的书写格式如下:第4章VHDL语言ARCHITECTURE结构体名OF实体名IS[说明语句]内部信号,常数,数据类型,函数等的定义;BEGIN[功能描述语句]END结构体名;结构体的组成部分是:1)对数据类型、常数、信号、子程序和元件等元素的说明部分2)描述实体逻辑行为的、以各种不同的描述风格表达的功能描述语句3)以元件例化语句为特征的外部元件(设计实体)端口间的连接第4章VHDL语言图4-2结构体的一般构造图块语句(BLOCK)进程语句(PROCESS)信号赋值语句子程序调用语句元件例化语句说明语句结构体(ARCHITECTURE)第4章VHDL语言一个实体中可以具有一个结构体,也可以具有几个结构体。一个实体内部若有几个结构体,则结构体名不能重复。结构体中的说明语句位于ARCHITECTURE和BEGIN之间,对结构体内部使用的信号(SIGNAL)、常数(CONSTANT)、数据类型、元件(COMPONENT)和过程(PROCEDURE)等加以说明。需要提醒读者的是,结构体内部定义的数据类型、常数或函数、过程等只能用于该结构体内部,若要使这些定义也能被其他实体或结构体所引用,则需先把它们放入程序包。其他实体或结构体只有打开相应的程序包后才能引用。第4章VHDL
本文标题:第4章 VHDL语言
链接地址:https://www.777doc.com/doc-3737691 .html