您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 一个VHDL设计由若干个VHDL文件构成-每个文件主要包含
一个VHDL设计由若干个VHDL文件构成,每个文件主要包含五个部分的一个或全部:在max+plusⅡ中后缀为(VHD).1.程序包(Package)2.实体(Entity)3.结构体(Architecture)4.配置(configuration)5.库(library)第2章VHDL语言程序的基本结构其中1~4为可分别编译的源设计单元。库用来存放已编译过的实体、构造体、包和配置。2.1VHDL语言设计的基本单元基本单元:基本设计实体,可很简单,如门,也可很复杂,如包含CPU的系统。设计一个数字系统,首先要解决两个问题:1)输入、输出是什么;2)内部完成什么功能。对于1,由实体(Entity)说明来描述;对于2,由构造体(Architecture)来描述。EntitymuxisGeneric(m:Time:=1ns);Port(do,d1,sel:INBit;q:outBit);Endmux;ArchitectureconnectOfmuxisSignaltmp:Bit;Begincale:Process(d0,d1,sel)Variabletmp1,tmp2,tmp3:Bit;Begintmp1:=d0ANDsel;tmp2:=d1AND(NOTsel);tmp3:=tmp1ORtmp2;tmp=tmp3;q=tmpAFTERm;ENDPROCESS;ENDCONNECT;实体说明部分构造体说明部分一个二选一数据选择器的描述2.1.1实体说明实体中定义电路单元和使用环境的接口,实体名必须与电路名相同。实体的格式ENTITY实体名IS[类属参数说明];[端口说明];END实体名;1)VHDL语言书写不分大小写;(个别例外)2)[]中内容有时可不要;3)END后的实体名可省。1.类属参数说明1)类属参数说明(generic)用来为设计引入信息,如时间;2)类属参数说明(generic)必须放在端口之前;3)类属参数说明(generic)常用来设计通用元件。2.端口说明格式:Port(端口名{,端口名}:方向数据类型名;…端口名{,端口名}:方向数据类型名);1)端口名电路外部引脚的名称,通常用英文字母加数字命名,如d0,A1,En,clk,LD.2)端口方向(模式)端口方向定义外部引脚信息的方向,共有五种:in,out,inout,buffer,linkage常用前4种Linkage:不指定方向,任何方向均可连接,只在文挡中使用。●IN信号进入实体但并不输出;●OUT信号离开实体但并不输入;并且不能在有内部反馈情况下使用;●INOUT信号是双向的(既可以进入实体,也可以离开实体);●BUFFER信号输出到实体外部,同时也可在实体内部反馈;BUFFER(缓冲)是INOUT(双向)的子集,但不是由外部驱动。端口模式可用下图说明:(黑框代表一个设计或模块)INOUTBUFFERINOUT3)数据类型VHDL中有10种数据类型,但逻辑设计只用两种,另在库中还定义了多种数据类型:1.Bit2.bit_vectorBit:位逻辑数据类型,取值为0或1;bit_vector:位矢量,取值为一组二进制位。Port(do,d1,sel:INBit;q:outBit;bus:outbit_vector(7downto0));Libraryieee;在编译时在指定的库、Useieee.std_logic_1164.all包中寻找这种数据类型EntitymuisPort(do,d1,sel:INstd_logic;q:outstd_logic;bus:outstd_logic__vector(7downto0));Endmu;2.1.2构造体构造体(Architecture)定义实体的实现,即电路的具体描述.构造体的一般格式如下:Architecturearchitecture_name构造体名ofentity_nameisbegin–以下开始构造体,用于描述设计的功能--concurrentsignalassignments并行语句信号赋值--processes进程(顺序语句描述设计)--componentinstantiations元件例化endarchitecture_name;--构造体声明区域--声明构造体所用的内部信号及数据类型--如果使用元件例化,则在此声明所用的元件定义语句1.构造体名称的命名:一般以描述方法命名,描述方法一般有:行为特性:behavioral简写为beh结构:structural简写为str数据流:dataflow如:ArchitecturebehOfmuxis2.定义语句:位于architecture和begin之间,用于对构造体内部使用的信号、变量、数据类型和函数定义。ArchitecturebehOfmuxissignaln1:bit;…begin…1)信号为内部使用,不须加方向2)信号应有名和数据类型3.并行处理语句:位于begin和end之间,描述构造体的行为和电路连接关系。所谓并行,指多个语句不以书写顺序执行。一数据选择器的构造体:architecturearchofmux4isbeginy=((((a0andnot(s(0)))or(a1ands(0))))andnot(s(1)))or(((a2andnots(0)))or(a3ands(0)))ands(1));endarchmux;•y=a0s1s0+a1s1s0+a2s1s0+a3s1s0=(a0s0+a1s0)s1+(a2s0+a3s0)s12.2VHDL语言构造体的子结构一个构造体可以用几个子结构来构成,即一个系统可以用几个比较独立的模快来构成。1.BLOCK语句结构2.PROCESS语句结构3.SUBPROGRAMS语句结构2.2.1BLOCK语句结构描述1.BLOCK语句的结构格式:块结构名;blockbegin…endblock块结构名;EntitymuxisPort(d0,d1,sel:INBit;q:outBit);Endmux;ArchitectureconnectOfmuxisSignaltmp1,tmp2,tmp3:Bit;Begincale:blockBegintmp1=d0ANDsel;tmp2=d1AND(NOTsel);tmp3=tmp1ORtmp2;q=tmp3;Endblockcale;ENDCONNECT;一个二选一数据选择器的描述2.块(block)和子原理图的关系:一个block相当于总图中的一个子图,分块设计有利于编辑查错。3.块(block)中语句的并发性:block中的语句为并发的。4.卫式block(Guardedblock):指满足条件时,块语句执行,不满足时不执行。例:…beginG1:block(clk=‘1’)beginq=guardeddafter5ns;qb=guardednot(d)after7ns;endblockG1;1)卫式块不能综合;2)after语句不能综合;3)当满足clk=1时执行。dqqbclk2.2.2进程(process)语句结构描述1.process语言结构[进程名]:process(信号1,信号2,…)Begin…Endprocess;ArchitectureconnectOfmuxisSignaltmp:Bit;Begincale:Process(d0,d1,sel)Variabletmp1,tmp2,tmp3:Bit;Begintmp1:=d0ANDsel;tmp2:=d1AND(NOTsel);tmp3:=tmp1ORtmp2;tmp=tmp3;q=tmpAFTERm;ENDPROCESS;ENDCONNECT;例如:变量只在进程中定义和使用。2.process中语句的顺序性:process中的语句按顺序执行。3.process语句的启动:process()括号内的量称为敏感量,敏感量发生变化,启动进程。4.Process的同步描述:当一个构造体内含有多个process时,进程之间为并行的,进程之间能通信。2.2.3子程序(subprogram)语句结构描述子程序有两类:1)过程(procedure)2)函数(function)1.过程语句格式Procedure过程名(参数1,参数2,…)is[定义语句];(变量等定义)Begin[顺序处理语句];(过程语句)End过程名;过程中的参数可以是输入,也可以是输出。见教材例2-7z:输入,位矢量x_flag:输出,布尔量q:输入输出,整数该过程实现将二进制数转换为整型数,x_flag为出错标志在过程中,如不作说明,则认为in为常量,out和inout为变量。如在过程调用后要将属性为in和inout的参数传递给信号,则要事先在过程中说明。(见例2-8)2)过程语句中的顺序性过程语句按顺序执行调用:①将初始值传递给过程的输入参数②执行语句③将输出值拷贝到out和inout所定义的变量和信号中去Architecturertlofexisprocedurecale(a,b:ininteger;avg,max:outinteger)is–默认为变量beginavg:=(a+b)/2ifabthenmax:=a;elsemax:=b;endif;endcale;如定义过程:调用过程Begincale(d1,d2,q1,q2);--错误,并行语句。Process(d3,d4)Variablea,b:integer;Begincale(d3,d4,a,b);--正确…2.函数语句1)格式:function函数名(参数1,2…)return数据类型名is[定义语句]begin顺序语句[返回变量名]end函数名;子程序可定义在进程、包和构造体中。例2-9为定义在包中的例子。定义了一个max函数。2)函数调用及结果返回①函数调用和一般高级语言相同;②函数调用既可在并行语句中,也可在顺序语句中;③函数和过程通常不必指定参数的矢量长度;④例2-9是将max函数放在了名为bpac的包中,而bpac包应放在库中。⑤例2-10第1行应写为libraryieee;librarynewlib;⑥由例2-10可知,bpac包存放在newlib库中。2.3包集合、库及配置包集合、库及配置是三个可独立编译的源设计单元。2.3.1库(Library)库专门存放预先编译好的程序包、实体、构造体和配置等,这样它们就可以在其它设计中被调用。库的功能类似一个子目录或文件夹。使用库时,要进行库说明。LIBRARYieee;librarynewlib;1.库的种类有5种:ieee;std;面向ASIC的库;work;用户定义库。其中:ieee库为ieee正式认可的库,使用库中包时要说明;std库为VHDL的标准库,使用该库中数据可不必说明;但使用库中TEXTIO包须说明。库名程序包名包中预定义内容stdstandardVHDL类型,如bit,bit_vectorieeestd_logic_1164定义std_logic,std_logic_vector等ieeenumeric_std定义了一组基于std_logic_1164中定义的类型的算术运算符,如“+”,“-”,SHL,SHR等ieeestd_logic_arith定义有符号与无符号类型,及基于这些类型上的算术运算。ieeestd_logic_signed定义了基于std_logic与std_logic_vector类型上的有符号的算术运算ieeestd_logic_unsigned定义了基于std_logic与std_logic_vector类型上的无符号的算术运算面向ASIC库:由工具商提供的库,在MAX-PLUSⅡ中,有ALTERA公司自己定义的库,名为ALTERA.里面存放两个程序包。1)maxplus2;2)megacore.WORK库:现行作业库,使用不必说明。用户定义库:由用户自己定义,使用需要说明。使用工作界面窗口中的options选项,在use
本文标题:一个VHDL设计由若干个VHDL文件构成-每个文件主要包含
链接地址:https://www.777doc.com/doc-4980964 .html