您好,欢迎访问三七文档
本章要点●VHDL的特点;●VHDL程序的基本结构;●常用语句;●数据类型;●各类操作符。VHDL概述VHDL(VeryHighSpeedIntegratedCircuitsHardwareDescriptionLanguage超高速集成电路硬件描述语言)。VHDL语言是美国国防部于80年代后期出于军事工业的需要开发的。1984年VHDL被IEEE(InstituteOFElectricalandElectorincsEngineers)确定为标准化的硬件描述语言。1994年IEEE对VHDL进行了修订,增加了部分新的VHDL命令与属性,增强了系统的描述能力,并公布了新版本的VHDL,即IEEE标准版本1046-1994版本。VHDL已经成为系统描述的国际公认标准,得到众多EDA公司的支持,越来越多的硬件设计者使用VHDL描述系统的行为。VHDL的特点(1)VHDL行为描述能力明显强于其他HDL语言,这就使得用VHDL编程时不必考虑具体的器件工艺结构,能比较方便地从逻辑行为这一级别描述、设计电路系统。(2)能在设计的各个阶段对电路系统进行仿真模拟,使得在系统的设计早期就检查系统的设计功能,极大地减少了可能发生的错误,降低了开发成本;(3)VHDL语句程序结构(如设计实体、程序包、设计库)决定了它在设计时可利用已有的设计成果,并能方便地将较大规模的设计项目分解为若干部分,从而实现多人多任务的并行工作方式,保证了较大规模系统的设计能被高效、高速地完成;(4)EDA工具和VHDL综合器的性能日益完善。VHDL语言的程序结构实体(Entity)、结构体(Architecture)是组成VHDL的两个最基本结构,为其它设计任务所共享,有必要把被共享的设计成果集中到一起。VHDL语言设置了库(Library)与程序包(Package)的程序结构。一个实体往往与多个结构体相对应。而当实体设计完成后,放入程序包供其他实体共享时,其他实体可能只需要使用该实体的一个结构体,这时,VHDL提供了配置(Configuration)这种结构,为实体配置(指定)一个结构体可见,实体(Entity)、结构体(Architecture)、库(Library)、程序包(Package)与配置(Configuration)是构成一个完整的VHDL语言程序的五个基本结构。VHDL程序的一般结构小到一个元件、一个电路,大到一个系统,都可以用VHDL描述其结构、行为、功能和接口。编程时,VHDL将一项工程设计(或称设计实体)分成“外部端口”和“内部结构、功能及其实现算法”两大部分进行描述。一个设计实体的内、外部都设计完成后,其它实体就可以象调用普通元件一样直接调用它。例题4-1给出了一个较简单的VHDL源程序,它实现了一个与门,各部分如程序中所示。nENTITYand2IS――实体名称为and2PORT(a,b:INBIT;――a、b是两个输入引脚c:OUTBIT);――c为输出引脚ENDand2;ARCHITECTUREexam1OFand2IS――结构体exam1是对实BEGIN——体and2的内部描述,c=aANDb;——描述了and2器件内部功能——为实现一个2输入端与门ENDexam1;器件and2的外部引脚说明,这部分称为实体器件and2的内部功能说明,这部分称为结构体图4-1and2的电路符号程序包括一个VHDL程序必备的两个部分:实体(ENTITY)说明部分和结构体(ARCHITECTURE)说明部分。“实体”说明部分,给出了器件and2的输入输出引脚(PORT)的外部说明,如图4-1所示。其中a、b是两个输入引脚(IN),数据类型为BIT,即“二进制位”数据类型,这种数据类型只有“0”和“1”两种逻辑值;c为输出引脚,数据类型也为BIT。这部分相当于是画原理图时的一个元件符号。““结构体”说明部分给出了该器件的内部功能信息,其中“AND”是VHDL的一个运算符,表示“与”操作;而符号“=”是VHDL的赋值运算符,从电路的角度来说就是表示信号的传输,将输入信号a、b“与”操作后的结果传送到输出端c。VHDL的逻辑综合软件将根据该程序的描述得到相应的硬件设计结果。从这个例子可以看出,VHDL的所有语句都是以“;”结束,而“;”后的“――”表示是程序注释。实体定义相关语句VHDL语言描述的对象称为实体.实体说明的书写格式如下所示:ENTITY实体名IS[GENERIC(类属参数说明);][PORT(端口说明);]END实体名;在实体说明中应给出实体命名,并描述实体的外部接口情况。此时,实体被视为“黑盒”,不管其内部结构功能如何,只描述它的输入输出接口信号。例4-2是一个D触发器的实体说明:[例4-2]ENTITYdffISGENERIC(tsu:TIME:=5ns)PORT(clk,d:INbit;Q,qb:OUTbit);ENDdff;上面给出的程序是1位D触发器的实体说明。实体说明以ENTITY开始,dff是实体名,GENERIC为类属参数表,PORT后为输入输出端口表。下面分别对各部分的定义方法进行详细的说明。4.2.1类属参数说明语句类属参数说明语句必须放在端口说明语句之前,用以设定实体或元件的内部电路结构和规模。其书写格式如下:GENERIC(常数名:数据类型:=设定值;∶常数名:数据类型:=设定值);例4-2的程序中的GENERIC(tsu:TIME:=5ns)指定了结构体内建立时间用tsu表示,值为5ns。再如[例4-3]ENTITYexamISGENERIC(width:INTEGER:=42);PORT(M:INSTD_LOGIC_VECTOR(width-1DOWNTO0);Q:OUTSTD_LOGIC_VECTOR(15DOWNTO0));类属参数定义了一个宽度常数,在端口定义部分应用该常数width定义了一个42位的信号,这句相当于语句M:INSTD_LOGIC_VECTOR(41DOWNTO0);若该实体内部大量使用了width这个参数表示数据宽度,则当设计者需要改变宽度时,只需一次性在语句GENERIC(width:INTEGER:=某常数)中改变常数即可。4.2.2端口说明在电路图上,端口对应于元件符号的外部引脚。端口说明语句是对一个实体界面的说明,也是对端口信号名、数据类型和端口模式的描述。语句的一般格式如下:PORT(端口信号名,{端口信号名}:端口模式端口类型;∶端口信号名,{端口信号名}:端口模式端口类型);1)端口信号名端口信号名是赋给每个外部引脚的名称,如例中的a、b、c。各端口信号名在实体中必须是唯一的,不能有重复现象。2)端口模式端口模式用来说明信号的方向,详细的端口方向说明见表4-1。3)端口类型端口类型指的是端口信号的取值类型,常见的有以下几种:BIT:二进位类型,取值只能是0、1,由STANDARD程序包定义;BIT_VECTOR:位向量类型,表示一组二进制数,常用来描述地址总线、数据总线等端口,如datain:INBIT_VECTOR(7downto0),定义了一8位位宽的输入数据总线;STD_LOGIC:工业标准的逻辑类型,取值0、1、X、Z等,由STD_LOGIC_1164程序包定义:INTEGER:整数类型,可用作循环的指针或常数,通常不用作I/O信号;STD_LOGIC_VECTOR:工业标准的逻辑向量类型,是STD_LOGIC的组合;BOOLEAN:布尔类型,取值FALSE、TRUE。在上例中,D触发器作为实体,其端口有两个输入信号和一个输出信号,输入信号和输出信号的类型相同。4.3结构体及子结构语句对一个电路系统而言,实体描述部分主要是系统的外部接口描述,这一部分如同是一个“黑盒”,描述时并不需要考虑实体内部的具体细节。因为描述实体内部结构与性能的工作是由“结构体”所承担的。4.3.1结构体的格式及构造结构体是一个实体的组成部分,是对实体功能的具体描述。一个结构体的书写格式如下:ARCHITECTURE结构体名OF实体名IS[说明语句]内部信号,常数,数据类型,函数等的定义;BEGIN[功能描述语句]END结构体名;例4-4描述了一个具有简单逻辑操作功能的电路,原理图如图4-3所示。实体部分说明了四个输入端与一个输出端,结构体描述以关键字ARCHITECTURE开头,a是结构体名,OF之后为实体名(应与实体说致)。[例4-4]ENTITYexam2ISPORT(a,b,c,d:INbit;f:OUTbit);ENDexam2;ARCHITECTUREaOFexam2ISSIGNALtemp1,temp2:BIT;BEGINf=temp1XORtemp2;temp1=aANDb;temp2=cORd;ENDa;子结构之描述BLOCK语句结构事实上,BLOCK语句的应用只是一种将结构体中的并行描述语句进行组合的方法,VHDL程序的设计者使用BLOCK的目的主要是:改善程序的可读性或关闭某些信号。以BLOCK语句对大型电路进行的划分仅限于形式上的划分,而不会改变电路的逻辑功能。BLOCK语句的书写格式如下,其中加方括号的为可选内容:块标号名:BLOCK[块保护表达式][端口说明语句][类属参数说明语句]BEGIN并行语句ENDBLOCK块结构名;4.3.3子结构之进程(PROCESS)语句结构不管它们的书写顺序先后,只要有相应的敏感信号的变化就能启动PROCESS立刻执行,所以PROCESS本身属于并行语句。PROCESS是最常用的VHDL的语句之一,极具VHDL特色。一个结构体中可以含有多个PROCESS结构,每一个PROCESS结构对于其敏感信号参数表中定义的任一敏感参量的变化,每个进程可以在任何时刻被激活。PROCESS的语句格式如下所示:[进程名]:PROCESS(信号1,信号2……)[进程说明部分]BEGIN∶ENDPROCESS;进程名是进程的命名,并不是必需的。括号中的信号是进程的敏感信号,任一个敏感信号改变,进程中由顺序语句定义的行为就会重新执行一遍。进程说明部分对该进程所需的局部数据环境进行定义。BEGIN和ENDPROCESS之间是由设计者输入的描述进程行为的顺序执行语句。进程行为的结果可以赋给信号,并通过信号被其他的PROCESS或BLOCK读取或赋值。当进程中最后一个语句执行完成后,执行过程将返回到进程的第一个语句,以等待下一次敏感信号变化。PROCESS语句结构通常由三部分组成:进程说明部分、顺序描述语句部分和敏感信号参数表。进程说明部分主要是定义一些局部量,可包括数据类型、常数、变量、属性、子程序等,例如PROCESS内部需要用到变量时,需首先在说明部分对该变量的名称、数据类型进行说明。顺序描述语句部分可分为赋值语句、进程启动语句、子程序调用语句、顺序描述语句和进程跳出语句等。敏感信号参数表列出用于启动本进程可读入的信号名。例4-7所示的结构体是一个状态机的局部,进程名为St_change,完成的功能是实现当前状态变为下一状态。其中Current_stat表示当前状态,Next_stat是下一状态。这是一个典型的含有进程的结构体。[例4-7]ARCHITECTUREexamOFstatOFstates_machISBEGINSt_change:PROCESS(clk)BEGINIF(clk’EVENTANDclk=’1’)THENCurrent_stat=Next_stat;ENDIF;ENDPROCESS;:ENDexamOFstat;此进程中的进程名为St_change,进程的敏感信号为时钟信号clk。每出现一个时钟脉冲的变化就运行一次BEGIN和END之间的顺序描述语句。由于时钟
本文标题:第四章VHDL语言
链接地址:https://www.777doc.com/doc-2092287 .html