您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 02_EDA_第一章Convertor
1.1实体1.2结构体1.3块、子程序和进程1.4库和程序包1.5配置第一章VHDL基本结构一个完整的VHDL程序或设计实体,要求能为VHDL综合器所支持,并能作为一个独立的设计单元,即元件的形式而存在的VHDL程序。实体和结构体是必需的——可构成最简单VHDL程序。通常VHDL程序包含五个部分:(1)实体(ENTITY)(2)结构体(ARCHITECTURE)(3)包集合(PACKAGE)(4)库(LIBRARY)(5)配置(CONFIGURATION)实体是VHDL语言设计的基本单元。1.1实体实体说明是对设计实体与外部电路的接口描述,它规定了设计单元的输入输出接口信号或引脚,是设计实体对外的一个通信界面。结构体用于描述此设计实体的逻辑结构和逻辑功能。实体语句结构如下:例:ENTITYor2ISPORT(a,b:INSTD_LOGIC;C:OUTSTD_LOGIC);ENDENTITYor2;ENTITY实体名IS[GENERIC(类属表);][PORT(端口表);]ENDENTITY实体名;在层次化系统中,实体说明是整个模块或整个系统的输入输出(I/O)接口在器件级设计中实体说明是芯片的输入输出(I/O)1.1.1类属参量(GENERIC)类属参量是实体说明组织中的可选项,放在端口说明之前,其一般格式为:GENERIC[CONSTANT]名字表:[IN]子类型标识[:=静态表达式],…]1.1.1类属参量(GENERIC)类属参量是实体说明组织中的可选项,放在端口说明之前,其一般格式为:GENERIC[CONSTANT]名字表:[IN]子类型标识[:=静态表达式],…]类属参量用来规定端口的大小、实体中子元件数目及实体的定时特性等。它和常数不同,常数只能从设计实体的内部得到赋值且不能改变;而类属参量的值可由设计实体的外部提供。其一般书写格式为:PORT(端口名:端口模式数据类型;端口名:端口模式数据类型;……);这里类属参量中参数trise为上升沿宽度,tfall为下降沿宽度,用于仿真模块的设计;定义地址总线的宽度为Addrwidth位,类属值Addrwidth的改变将使结构体中所有相关的总线定义同时改变,由此使整个设计实体的硬件结构发生变化。例:GENERIC(trise,tfall:TIME:=1ns;Addrwidth:INTEGER:=16);PORT(a0,a1:INSTD_LOGIC;Add_bus:OUTSTD_LOGIC_VECTOR(addrwidth-1DOWNTO0);1.1.2端口说明(PORT)端口是对基本设计单元与外部接口的描述。其功能相当电路图符号的外部引脚。端口可以被赋值,也可以当做逻辑变量用在逻辑表达式中。其中端口名是设计者为实体的每一个对外通道所取的名字,通常为英文字母加数字,名字的定义有一定的惯例,如clk表示时钟,D开头的端口名表示数据,A开头的端口名表示地址。端口模式是指这些通道上的数据流动的方式,如输入或输出等。端口模式有以下几种类型:1.输入(IN)允许信号进入实体,主要用于时钟输入、控制输入(如load、reset、enable、clk)和单向的数据输入(如地址数据信号address)等。2.输出(OUT)输出模式只允许信号离开实体,常用于计数输出、单向数据输出、被设计实体产生的控制其他实体的信号等。注意:输出模式不能用于被设计实体的内部反馈,因为输出端口在实体内不能看做是可读的。3.双向模式(INOUT)双向模式允许信号双向传输(既可以进入实体,也可以离开实体),双向模式端口允许引入内部反馈。4.缓冲(BUFFER)缓冲模式允许信号输出到实体外部,但同时也可以在实体内部引用该端口的信号。缓冲端口既能用于输出也能用于反馈。缓冲模式用于在实体内部建立一个可读的输出端口,例如计数器输出、计数器的现态用来决定计数器的次态。端口模式可用下图说明,图中方框代表一个设计实体或模块。在VHDL设计中,通常将输入信号端口指定为输入模式,输出信号端口指定为输出模式,而双向数据通信信号,如计算机PCI总线的地址/数据复用总线,DMA控制器数据总线等纯双向的信号采用双向端口模式。从端口的名称、模式就能一目了然地指导信号的用途、性质、来源和去向。总目录结构体是对实体功能的具体描述,因此它一定要跟在实体的后面。行为描述(基本设计单元的数学模型描述)、寄存器传输描述(数据流描述)和结构描述(逻辑元件连接描述)1.2结构体结构体也叫构造体,结构体描述了基本设计单元(实体)的结构、行为、元件及内部连接关系,也就是说它定义了设计实体的功能,规定了设计实体的数据流程,制定了实体内部元件的连接关系。结构体对其基本设计单元的输入和输出关系可用以下三种方式进行描述,即:结构体一般由两大部分组成:ARCHITECTURE结构体名OF实体名IS[定义语句]BEGIN[功能描述语句]END结构体名;(1)对数据类型、常数、信号、子程序和元件等因素进行说明的部分;(2)描述实体的逻辑行为、以各种不同的描述风格表达的功能描述语句,包括各种顺序语句和并行语句。结构体的语句格式为:1.2.1结构体名结构体名由设计者自行定义,OF后面的实体名指明了该结构体所对应的是哪个实体。有些设计实体有多个结构体,这些结构体的结构体名不可相同,通常用dataflow(数据流)、behavior(行为)、structural(结构)命名。这3个名称体现了3种不同结构体的描述方式,使得阅读VHDL语言程序时,能直接了解设计者采用的描述方式。结构体信号定义语句必须放在关键词ARCHITECTURE和BEGIN之间,用于对结构体内部将要使用的信号、常数、数据类型、元件、函数和过程加以说明。结构体中的信号定义和端口说明一样,应有信号名称和数据类型定义。因为它是内部连接用的信号,因此不需要方向说明。1.2.2结构体信号定义语句需要注意的是:实体说明中定义的信号是外部信号,而结构体定义的信号为该结构体的内部信号,它只能用于这个结构体中。ARCHITECTURErtlOFmujISSIGNALs1:BITSIGNALs2,s3:STD_LOGIC_VECTOR(0TO3);┇BEGIN┇ENDrtl;例:结构体的信号定义实例。结构体名实体名结构体信号定义语句功能描述语句1.2.3结构体功能描述语句结构体功能描述语句位于BEGIN和END之间,具体地描述了构造体的行为及其连接关系。结构体的功能描述语句可以含有5种不同类型的并行语句,如图所示。每一语句结构内部可以使用并行语句,也可以是顺序语句。章目录总目录结构体构造图:结构体(ARCHITECTURE)说明语句功能描述语句块语句(BLOCK)进程语句(PROCESS)信号赋值语句子程序调用语句元件例化语句由一系列并行语句构成的组合体,它的功能是将结构体中的并行语句组成一个或多个子模块定义顺序语句模块,用以将从外部获得的信号值或内部运算数据向其他的信号进行赋值将设计实体内的处理结果向定义的信号或界面端口进行赋值可以调用进程或参数,并将获得的结果赋值于信号对其他的设计实体做元件调用说明,并将此元件的端口与其他元件、信号或高层实体的界面端口进行连接例:2选1数据选择器ENTTITYmux2ISPORT(d0,d1:INBIT;sel:INBIT;s:OUTBIT);ENDmux2;ARCHITECTUREdataflowOFmux2ISSIGNALsig:BIT;BEGINSig=(d0ANDsel)OR(NOTselANDd1);S=sig;ENDdataflow;信号定义语句(内部信号,无方向)功能描述语句1.3.1块语句(BLOCK)在较大规模的电子系统设计中,传统的硬件电路设计通常包括一张系统总电路原理图和若干张子原理图。在VHDL程序设计中,结构体是由多个BLOCK块构成的,如果将结构体比做总电路原理图,那么,每个BLOCK块则相当于一张子原理图。1.3块、子程序和进程BLOCK块语句的结构:块标号:BLOCK接口说明类属说明BEGIN并行块语句ENDBLOCK(块标号);例:B1:BLOCKSIGNALs1:BIT;BEGINs1=aANDb;B2:BLOCKSIGNALs2:BIT;BEGINs2=cANDd;B3:BLOCKBEGINZ=s2;ENDBLOCKB3;ENDBLOCKB2;y=s1;ENDBLOCKB1;PROCESS结构是最能体现VHDL语言特色的语句。与BLOCK语句一样,利用PROCESS语句结构可以描述一个功能独立的电路。与BLOCK语句不同之处是,在系统仿真时,PROCESS结构中的语句是按顺序逐条向下执行的,而不像BLOCK语句那样并发执行。一个结构体中可以有多个并行运行的进程结构,每一个进程内部是由一系列顺序语句来构成的。1.3.2进程(PROCESS)PROCESS语句的结构:注意:(1)在多个进程的结构体描述中,进程标号是区分各个进程的标志。但是进程标号并不是必需的。(2)单进程以PROCESS开始,以ENDPROCESS结束。[进程标号]PROCESS[(敏感信号表)][IS][进程说明语句]BEGIN顺序描述语句ENDPROCESS[进程标号];LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYnor2_v2ISPORT(a,b:INSTD_LOGIC;y:OUTSTD_LOGIC);ENDnor2_v2;ARCHITECTUREbehaveOFnor2_v2ISBEGINPROCESS(a,b)VARIABLEcomb:STD_LOGIC_VECTOR(1DOWNTO0);例:两输入或非门y=NOT(aORb);BEGINcomb:=a&b;CASEcombISWHEN00=y='1';WHEN01=y='0';WHEN10=y='0';WHEN11=y='0';WHENOTHERS=y='X';ENDCASE;ENDPROCESS;ENDbehave;‘X’:不定子程序被调用时,首先要初始化,执行处理功能后,将处理结果传递给主程序。子程序内部的值不能保持,子程序返回后才能被再次调用并初始化。1.3.3子程序(SUBPROGRAM)VHDL程序与其他软件语言程序中应用子程序的目的是相似的,即能够更有效地完成重复性的工作。子程序模块是利用顺序语句定义和完成算法的,但子程序不能像进程那样可以从本结构体的其他块或进程结构中读取信号值或向信号赋值,只能通过子程序调用与子程序的界面端口进行通信。子程序有两种类型:1.过程(PROCEDURE)过程(PROCEDURE)和函数(FUNCTION)过程语句的书写格式为:PROCEDURE过程名(参数表)IS[说明部分]BEGIN过程语句部分ENDPROCEDURE过程名;例:用过程语句设计的子程序PROCEDUREvector_to_int(矢量转换成整数)(a:INSTD_LOGIC_VECTOR;x_flag:OUTBOOLEAN;q:INOUTINTEGER)ISBEGINq:=0;x_flag:=FALSE;FORiINa’RANGELOOPq:=q*2;(*:乘,**:乘方)IF(a(i)=1)THENq:=q+1;ELSE(a(i)/=1)THENx_flag:=TRUE;ENDIF;ENDLOOP;ENDvector_to_int;这个过程名为vector_to_int实现将位矢量转换成整数的功能,在过程语句执行结束后,将输入值拷贝到调用者的OUT和INOUT所定义的变量中,完成子程序和主程序之间的数据传递。2.函数函数的语言书写格式为:FUNCTION函数名(参数表)RETURN数据类型IS[说明部分];BEGIN顺序语句;RETURN[返回变量名];ENDRETURN函数名;例:用VHDL构造的选择最大值的函数程序。LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;PACKAGEbpacISFU
本文标题:02_EDA_第一章Convertor
链接地址:https://www.777doc.com/doc-3117253 .html