您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 电子设计/PCB > 第3章硬件描述语言VHDL基础
第3章硬件描述语言VHDL基础⒈硬件描述语言概述⒉VHDL语言程序结构⒊VHDL常用语句⒋VHDL语法基础3.1硬件描述语言概述VHDL硬件描述语言的英文全名是VeryHighSpeedIntegratedCircuitHardwareDescriptionLanguage,即超高速集成电路硬件描述语言,以下简称为VHDL语言。使用VHDL语言可以实现数字电子系统的行为级描述,RTL(寄存器传输级)描述以及结构级描述。目前在国内外应用的硬件描述语言有许多种,其中应用最广泛的有VHDL语言和Verilog-HDL语言。3.1硬件描述语言概述运用VHDL语言设计系统一般采用自顶向下分层设计的方法,首先从系统级功能设计开始,对系统高层模块进行行为描述和功能仿真。系统的功能验证完成后,将抽象的高层设计自顶向下逐级细化,直到与所用可编程逻辑器件相对应的逻辑描述。3.2VHDL语言程序结构VHDL语言程序可由实体(Entity)说明、结构体(Architecture)、程序包(Package)、库(Library)、配置(Configuration)5个部分组成。其中库、实体说明、结构体是一个VHDL语言程序的基本组成部分。VHDL语言把这个设计单元作为一个设计实体处理,一个设计实体只能唯一地对应一个设定单元。一个设计实体由实体说明和结构体组成。一个实体说明可以对应多个结构体。库(Library)程序包(Package)配置(Configuration)进程(Process)等各种并行语句实体(EntityDeclaration)结构体(Architecture)【例3-1】二选一MUX的VHDL描述。--2to1muxVHDLLIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYmuxISPORT(d0,d1,sel:INSTD_LOGIC;f:OUTSTD_LOGIC);ENDmux;ARCHITECTUREstructureOFmuxISSIGNALtemp:STD_LOGIC;BEGIN库说明实体说明端口说明结构体信号定义P0:PROCESS(d0,d1,sel)VARIABLEtempl,temp2,temp3:STD_LOGIC;BEGINtempl:=d0AND(NOTsel);temp2:=d1ANDsel;temp3:=templORtemp2;temp=temp3;f=temp;ENDPROCESSP0;ENDstructure;进程变量定义d0ftemp1temp2temp3d1sel3.2.1实体说明实体说明的书写格式如下所示:ENTITY实体名IS[GENERIC(类属说明);][PORT(端口说明);][实体语句部分;]END[ENTITY]实体名;其中“”中的部分是必选项,“[]”中的部分是可选项。3.2.1实体说明例如,4位加法器作为一个设计实体的实体说明如下:ENTITYadder_rippleISGENERIC(m:TIME:=5ns);PORT(a,b:INSTD_LOGIC_VECTOR(3DOWNTO0);q:OUTSTD_LOGIC_VECTOR(3DOWNTO0);Cout:OUTSTD_LOGIC);ENDadder_ripple;3.2.1实体说明1.类属说明语句(GENERIC)类属说明语句必须放在端口说明语句之前,用以设定实体或元件的内部电路结构和规模,其书写格式如下:GENERIC(常数名:数据类型[:=设定值];┇常数名:数据类型[:=设定值]);例如:GENERIC(m:TIME:=5ns);指定了结构体内m的值为5ns。3.2.1实体说明2.端口说明(PORT)端口对应于电路图中元件符号的外部引脚。端口说明语句是对基本设计实体(单元)与外部接口的描述,也可以说是对外部引脚信号的名称、数据类型和输入输出方向的描述。端口说明语句的一般格式如下:PORT(端口名,[端口名]:[模式]数据类型名;┇端口名,[端口名]:[模式]数据类型名);3.2.1实体说明注意:(1)端口名是赋给每个外部引脚的名称,通常用一个或几个英文字母,或者用英文字母加数字命名。各端口名在实体中必须是唯一的,不能重复。(2)模式用来说明信号的方向,详细的端口方向说明见下表。需要指出的是,BUFFER是INOUT的子集;做输入时,信号不是由外部驱动,而是从输出反馈得到。方向定义含义IN输入OUT输出(结构体内不能再使用)INOUT双向(可以输入,也可以输出)BUFFER输出(结构体内可再使用),可以读或写LINKAGE不指定方向,无论哪一个方向都可以连接3.2.1实体说明(3)数据类型名则是端口信号的取值类型,有:BIT:位类型,取值0、1,由STANDARD程序包定义;BIT_VECTOR:位向量类型,是BIT的组合;STD_LOGIC:工业标准的逻辑类型,取值0、1、X、Z等,由STD_LOGIC_1164程序包定义;INTEGER:整数类型,可用作循环指针或常数,通常不用作I/O信号;BOOLEAN:布尔类型,取值FALSE、TRUESTD_LOGIC_VECTOR:工业标准的逻辑向量类型,是STD_LOGIC的组合;3.2.2结构体结构体(Architecture)是对实体功能的具体描述。结构体主要是描述实体的硬件结构、元件之间的互连关系、实体所完成的逻辑功能以及数据的传输变换等方面的内容。结构体对其实体的输入/输出关系描述有三种方式:行为描述方式(behavioral)、数据流描述方式(dataflow)和结构描述方式(structure)。最常用的是结构描述方式。一个结构体的书写格式如下:ARCHITECTURE结构体名OF实体名IS[定义语句;]BEGIN并行处理语句;END结构体名;3.2.2结构体一个实体中可以具有一个结构体,也可以具有几个结构体。一个实体内部若有几个结构体,则结构体名不能重复。结构体中的定义语句位于ARCHITECTURE和BEGIN之间,用于对结构体内部所使用的信号(SIGNAL)、常数(CONSTANT)、数据类型、元件(COMPONENT)和过程(PROCEDURE)等进行定义。3.2.2结构体【例3-2】一个RS触发器的结构体的行为描述方式。ARCHITECTURErs_behavOFrsffISBEGINq=NOT(qbANDset);qb=NOT(qANDreset);ENDrs_behav;是一个RS触发器的结构体的行为描述方式。【例3-3】一个RS触发器的结构体的结构描述方式。ARCHITECTURErs_struOFrsffISCOMPONENTnand2PORT(a,b:INBIT;c:OUTBIT);ENDCOMPONENT;BEGINu1:nand2PORTMAP(a=set,b=qb,c=q);u2:nand2PORTMAP(a=reset,b=q,c=qb);ENDrs_stru;--是一个RS触发器的结构体的结构描述方式。【例3-4】使用RTL描述方式的全加器VHDL程序LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYfull_adderISGENERIC(tpd:TIME:=5ns);--tpd=5nsPORT(a,b,Cin:INSTD_LOGIC;S,Co:OUTSTD_LOGIC);ENDfull_adder;ARCHITECTURErtlOFfull_adderISSIGNALh:STD_LOGIC;--内部信号定义BEGINh=aXORbAFTERtpd;S=hXORCinAFTERtpd;Co=(aANDb)OR(hANDCin)AFTER2*tpd;ENDrtl;3.2.2结构体在实际的硬件电路设计中,当电路的规模较大时,全部电路用一个模块来描述很不方便。一般情况下,是将整个电路分成若干相对独立的子模块来进行描述。VHDL语言的功能描述语句结构可以是含有五种不同类型、并以并行方式工作的语句结构。VHDL语言中常用的三种子结构描述语句为BLOCK语句结构、PROCESS语句结构和SUBPROGRAM语句结构。1.块(BLOCK)语句结构BLOCK的应用类似于将一个电路原理图分为几个子模块进行绘制,而其中每个子模块都可以是一个具体的电路原理图。也就是说,按照模块方式对结构体进行划分并不会改变电路的逻辑功能。设计者可以合理地将一个模块划分为数个区域,在每个区域中都能定义或描述局部信号、数据类型和常量。1.块(BLOCK)语句结构所有能在结构体的说明部分进行说明的对象都可以在BLOCK的说明部分进行说明。BLOCK语句的书写格式如下:[块标号:]BLOCK[卫式表达式][类属子句[类属接口表;];][端口子句[端口接口表;];][块说明部分;]BEGIN块语句部分ENDBLOCK[块标号];【例3-5】采用BLOCK语句来描述的计数器电路LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYcounter2ISPORT(clk:INSTD_LOGIC;q1,q0:OUTSTD_LOGIC);ENDcounter2;ARCHITECTUREarch_counter2OFcounter2ISSIGNALcount:STD_LOGIC_VECTOR(1DOWNTO0);BEGINcounter:BLOCKBEGINPROCESS(clk)BEGINIF(clk’EVENTANDclk=‘1’)THENIF(count(0)=‘1’ANDcount(1)=‘1’)THENcount=“00;ELSEcount=count+1;ENDIF;ENDIF;q1=count(1);q0=count(0);ENDPROCESS;ENDBLOCKcounter;ENDarch_counter2;在对程序进行仿真时,BLOCK语句中所描述的各条语句是并行执行的,执行顺序与书写顺序无关【例3-6】含卫式表达式的VHDL程序。ENTITYdlatchISPORT(d,clk:INBIT;q,qb:OUTBIT);ENDdlatch;ARCHITECTURElatch_guardOFdlatchISBEGINg1:BLOCK(clk=‘1’)BEGINq=GUARDEDdAFTER5ns;qbGUARDEDNOT(d)AFTER5ns;ENDBLOCKg1;ENDlatch_guard;当卫式表达式为真时,BLOCK语句被执行,否则将跳过BLOCK语句。在BLOCK块中的信号传送语句前都要加一个前卫关键词GUARDED,以表明只有在条件满足时此语句才会执行。2.进程(PROCESS)语句结构用PROCESS语句描述电路结构的书写格式为:[进程标号:]PROCESS[敏感信号表][IS][进程语句说明部分;]BEGIN顺序语句部分;ENDPROCESS[进程标号];2.进程(PROCESS)语句结构进程标号是进程的命名,是可选项。敏感信号表列出了进程语句敏感的所有信号,任意一个敏感信号改变,进程中由顺序语句定义的行为就会重新执行一遍。进程说明部分对该进程所需的局部数据环境进行定义。BEGIN和ENDPROCESS之间是描述进程行为的顺序执行语句。进程行为的结果可以赋给信号,通过信号可被其他的PROCESS或BLOCK读取或赋值。当执行完进程中最后一个语句后,执行过程将返回到进程的第一个语句,以等待下一次敏感信号变化。2.进程(PROCESS)语句结构一个结构体中可以含有多个PROCESS结构,每个进程可以在任何时刻被激活或者启动。而所有被激活的进程都是并行运行的,所以PROCESS结构本身是并行语句。【例3-7】带敏感信号表的进程语句实例。LIBRARYIEEE;
本文标题:第3章硬件描述语言VHDL基础
链接地址:https://www.777doc.com/doc-3747804 .html