(二)VHDL语言程序的基本结构.ppt
《(二)VHDL语言程序的基本结构.ppt》由会员分享,可在线阅读,更多相关《(二)VHDL语言程序的基本结构.ppt(86页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、VHDL硬件描述语言 第二章第二章VHDL语言程序的基本结构语言程序的基本结构 第三章第三章VHDL语言的数据类型及运算操作符语言的数据类型及运算操作符 第四章第四章VHDL语言构造体的描述方式语言构造体的描述方式第五章第五章VHDL语言的主要描述语句语言的主要描述语句 第七章第七章基本逻辑电路设计基本逻辑电路设计 VHDL语言描述数字系统的基本方法语言描述数字系统的基本方法在电原理图中,如果要描述一个“与门”,那么在图上画出一个“与门”的逻辑符号就行了,如图1所示。图1“与门”的逻辑符号描述人们看到了这个逻辑符号(如图1所示),就会联想到两件事:(1)确定该逻辑有两个输入信号a和b,有一个输
2、出信号c,而且都是位信号(每个信号占二进制位1位)。(2)根据逻辑符号形状判断,它是一个“与门”,在电路中实现“与”操作,即c=ab。知道了这两点,该电路的功能就一目了然了。由此我们可推论,要完整地描述一个系统或电路,就必须对输入和输出输入和输出以及电路的功能电路的功能这两部分作详细说明,从大规模的CPU到最简单的逻辑门都适用这一法则。从这个认识出发,用VHDL语言描述电路,就是要用相应的语句将电路的输入和输出及电路的功能描述清楚,那么其结果是完全和电原理图描述等效的。在用VHDL语言描述一个“与门”时,其语言描述与电原理图描述的对应关系如图2所示。图2VHDL语言描述与电原理图描述的对应关系
3、第二章:第二章:VHDL语言程序的基本结构语言程序的基本结构 2.1 VHDL语言的基本设计单元构成语言的基本设计单元构成VHDL语 言 程 序 的 完 整 设 计 单 元 应 由 5部 分 构 成:库库(Library)说明、包包集集合合(Package)说明、实实体体(Entity)描 述、构构 造造 体体(Architecture)描 述 和 配配 置置(Configuration)描述。1最基本的设计单元构成最基本的设计单元构成一个最基本的设计单元由实体实体和构造体构造体两部分组成,如例2-1所示。【例例2-1】ENTITYmux2ISPROT(d0,d1,sel:INBIT;q:OU
4、TBIT);ENDmux2;ARCHITECTURErtlOFmux2ISBEGIN;PROCESS(d0,d1,sel)VARIABLEtmp1,tmp2,tmp3:BIT;BEGINtmp1:=d0ANDsel;tmp2:=d1AND(NOTsel);tmp3:=tmp1ORtmp2;q=tmp3;ENDPROCESS;ENDrtl;例2-1是一个最基本的设计单元,只有实体和构造体就行了。如前所述,它描述的是一个二选一选择器电路。利用EDA工具可以对它进行编译、综合生成TTL的器件。该设计单元仅由实体和构造体这两个描述部分组成。这是有条件的:有条件的:第一,在实体和构造体中所使用的数据类型
5、一定是在STD库中定义的,如BIT类型。STD库已自动挂接在VHDL语言的编译器中,因而无需在设计单元描述中进行独立的库声明。第二,设计单元的实体只与一个构造体对应。如前所述,一个实体可以对应多个构造体。在编译时一个实体只能选择某一个构造体进行设计单元编译,这种选择应由配置语句描述。2一个完整的设计单元构成一个完整的设计单元构成一个完整的设计单元构成的实例如例2-2所示。【例例2-2】LIBRARYIEEE;-库说明库说明USEIEEE.STD_LOGIC_1164.ALL;-包集合说明包集合说明ENTITYmux2IS-实体说明实体说明PORT(d0,d1,sel:INSTD_LOGIC;q
6、:OUTSTD_LOGIC);ENDmux2;ARCHITECTURErtl1OFmux2IS-构造体说明构造体说明BEGINPROCESS(d0,d1,sel)VARIABLEtmp1,tmp2,tmp3:STD_LOGIC;BEGINtmp1:=d0ANDsel;tmp2:=d1AND(NOTsel);tmp3:=tmp1ORtmp2;ENDPROCESS;ENDrtl1;ARCHITECTURErtl2OFmux2IS-构造体说明构造体说明ENDrtl2;CONFIGURATIONrtl_mux2OFmux2IS-配置说明配置说明FORrtl1ENDFOR;ENDrtl_mux2;例2-
7、2中的第一行是对设计单元所使用的库库进行的描述和说明,这是因为该设计单元使用了IEEE库中定义的包集合。第二行说明使用了IEEE库中定义的1164包集合包集合。这是因为STD_LOGIC数据类型等在该1164包集合中定义。例2-2中包含了一个实体实体和两个构造体构造体,配置配置说明编译时应选中rtl1构造体。当然,如果只有一个构造体,配置说明也就可以省略了。2.1.1实体描述实体描述实体在电路描述中主要是说明该电路的输输入入和和输输出出关关系系。此外,实体还定义电电路路名名称称及构构造造体体中中所所用用参数参数等。实体描述的一般书写格式如下:ENTITY 实体名实体名 IS类属参数说明;类属参
8、数说明;端口说明;端口说明;END实体名;实体名;实体描述从“ENTITY实体名实体名IS”开始开始,至“END实体名实体名”结束结束。例如在例2-2中,实体描述可从“ENTITYmux2IS”开始,至“ENDmux2”结束。这里的大写字母大写字母表示实体描述的框架,所用的词都是VHDL语言的保留用词,用户在编程中一般不能将其用作它用。每个实体都应这样书写,它们是不可缺少和省略的部分。小写字母小写字母是设计者添写的部分,随设计单元的不同而不同。实际上,对VHDL语言而言,大写和小写字母都一视同仁大写和小写字母都一视同仁,不加区分。这样规定仅仅是为了增加程序的可读性而已。【例2-3】2输入或非门
9、的实体说明程序:ENTITY nor2 ISPORT(a,b:IN bit;-说明两个输入端口a、b z :OUT bit);-说明一个输出端口zEND nor2;【例2-4】3位计数器的实体说明程序:ENTITY count3 ISGENERIC(m:TIME:=5ns);PORT(clock,enable:IN STD_LOGIC;qout:OUT INTEGER RANGE 0 TO 7);END count3;图2-1二选一选择器的电原理图【例2-5】图2-1的VHDL语言描述:ENTITYmux2ISGENERIC(m:TIME:=1ns);PORT(d0,d1,sel:INBIT;
10、q:OUTBIT);ENDmux2;ARCHITECTUREconnectOFmux2ISSIGNALtmp:BIT;BEGIN;PROCESS(d0,d1,sel);VARIABLEtmp1,tmp2,tmp3:BIT;BEGIN;tmp1=d0ANDsel;tmp2=d1AND(NOTsel);tmp3=tmp1ORtmp2;tmp=tmp3;q=tmpAFTERm;ENDPROCESS;ENDconnect;1.类属参数说明类属参数说明类属参数说明必须放在端端口口说说明明之之前前,用于指指定定参参数数,如例2-5中的GENERIC(m:TIME=1ns)。该语句指定了构造体内m的值为1n
11、s。这样,语句q=tmpAFTERm;表 示 tmp经 1ns延 迟 才 送 到 q。在 这 个 例 子 中,GENERIC利用类属参数为q建立一个延迟值。类属参数说明语句的书写格式如下:GENERIC(常数名常数名:数据类型数据类型:=设定值设定值;常数名常数名:数据类型数据类型:=设定值设定值);2.端口说明端口说明端口说明是对基基本本设设计计实实体体(单单元元)与与外外部部接接口口的的描描述述,也可以说是对外外部部引引脚脚信信号号的的名名称称,数数据据类类型型和和输输入入、输输出方向的描述出方向的描述。其一般书写格式书写格式如下:PORT(端口名端口名,端口名,端口名:方向方向 数据类型
12、名;数据类型名;端口名端口名,端口名,端口名:方向方向 数据类型名数据类型名);1)端口名端口名。端口名是赋予每个外部引脚的名称,通常用一个或几个英文字母,或者用英文字母加数字命名之,例如图2-1中的外部引脚d0,d1,sel,q等。2)端端口口方方向向。端口方向用来定义外部引脚的信号方向是输输入入还还是是输输出出。例如,图2-1中的d0,d1,sel为输入引脚,故用方向说明符“IN”说明之,而q则为输出引脚,用方向说明符“OUT”说明之。凡是用“IN”进行方向说明的端口,其信号自端口输入到构造体,而构造体内部的信号不能从该端口输出。相反,凡是用“OUT”进行方向说明的端口,其信号将从构造体内
13、经端口输出,而不能通过该端口向构造体输入信号。另外,“INOUT”用以说明该端口是双向双向的,可以输入也可以输出;“BUFFER”用以说明该端口可以输可以输出信号,且在构造体内部也可以利用该输出信号出信号,且在构造体内部也可以利用该输出信号。“LINKAGE”用以说明该端口无指定方向无指定方向,可以与任与任何方向的信号相连接何方向的信号相连接。表示方向的说明符及其含义如表2-1所示。表表2-1 端口方向说明端口方向说明 方向定义含义IN 输输入端口入端口输入OUT 输输出端口出端口输出(构造体内部不能再使用)INOUT 双向端口双向端口双向BUFFER 缓缓冲端口冲端口输出(构造体内部可再使用
14、)LINKAGE 可可连连接端口接端口不指定方向,无论那个方向都可连接表2-1中“OUT”和“BUFFER”都可以定义输出端口,但是它们之间是有区别区别的,如图2-2所示。图2-2OUT和和BUFFER的区别的区别(a)OUT;(b)BUFFER3)数据类型数据类型。在VHDL语言中有10种种标准数据类型,但是在逻辑电路设计中常用到两种两种:BIT和和BIT_VECTOR。当端口被说明为BIT数据类型时,该端口的信号取值只可能是“1”或“0”。注意,这里的“1”和“0”是指逻辑值。所以,BIT数据类型是位位逻逻辑辑数数据据类类型型,其取值只能是两个逻辑值(“1”和“0”)中的一个。当端口被说明
15、为BIT_VECTOR数据类型时,该端口的取值可能是一组二进制位的值一组二进制位的值。例如,某一数据总线输出端口具有8位的总线宽度,那么这样的总线端口的数据类型可以被说明成BIT_VECTOR。总线端口上的值由8位二进制位的值所确定。较完整的端口说明如例26所示。【例例2-6】PORT(d0,d1,sel:INBIT;q:OUTBIT;bus:OUTBIT_VECTOR(7DOWNTO0);该例中,d0,d1,sel,q 都是BIT数据类型,而bus是BIT_VECTOR类型,(7DOWNTO0)表示该bus端口是一个8位端口,由B7B08位构成,位矢量长度为8位。在某些VHDL语言的程序中,
16、数数据据类类型型的的说说明明符符号号有有所所不不同同。仍以例2-6为例进行说明。【例例2-7】LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYmuISPORT(d0,d1,sel:INSTD_LOGIC;q:OUTSTD_LOGIC;bus:OUTSTD_LOGIC_VECTOR(7DOWNTO0);ENDmu;该例中BIT类型用STD_LOGIC替代,而bus则用STD_LOGIC_VECTOR(7DOWNTO0)说明。这样做在语法上都是语法上都是对的对的,所不同的是BIT、BIT_VECTOR与STD_LOGIC、STD_LOGIC_VECTOR尽
17、管都同样描述位和位矢量同样描述位和位矢量,但是它们的数数据类型是不一样的据类型是不一样的,前者只有两种状态两种状态“1”和和“0”;而后者却有9种状态种状态(这一点在后面详述)。BIT和和BIT_VECTOR在VHDL语言的标准库(STD库)中定义,使用该类型数据可以不作任何说明不作任何说明。STD_LOGIC和STD_LOGIC_VECTOR在IEEE库的1164包集合中定义。在该包集合中专门对STD_LOGIC和和STD_LOGIC_VECTOR数据类型的定义作了具体说明,其作用像C语言中的include文件一样。正如例2-7所示那样,如果在实体和构造体中要使用这种类型的数据,就必须在实体
18、描述前加两条语句:库说明语句和使用包集合的必须在实体描述前加两条语句:库说明语句和使用包集合的说明语句说明语句。这样可以使VHDL语言的编译器在对实体编译时从指定库的包集合中找到数据类型的定义。2.1.2 构造体描述构造体描述构造体具体地指指明明了了该该对对应应实实体体的的行行为为、元元件件及及内内部部的的连连接接关关系系,也就是说它定义了设设计计单单元元具具体体的的功功能能。构造体功能可以用3种种描描述述方方式式,即行行为为描描述述(数数学学模模型型描描述述)、寄寄存存器器传传输输描描述述(数数据据流流描描述述)和结结构构描描述述(逻逻辑辑元元件件连连接接描描述述)。不同的描述方式,只体现在
19、描述语句上,而其构造体的结构是完全一样的。由于构造体是对实体功能的具体描述,因此它它一一定定要要跟跟在在实实体体的的后后面面。通常,编译实体之后才能对构造体进行编译。如果实体需要重新编译,那么相应构造体也应重新进行编译。一个构造体的具体结构描述如下:ARCHITECTURE 构造体名构造体名 OF 实体名实体名 IS 定义语句内部信号,常数,数据类型,函数等的定义;定义语句内部信号,常数,数据类型,函数等的定义;BEGIN 并行处理语句;并行处理语句;END构造体名;构造体名;一个构造体从从“ARCHITECTURE 构造体名构造体名 OF 实体名实体名 IS”开开始,至始,至“END 构造体
20、名构造体名”结束结束。下面对构造体的有关内容和书写方法作一说明。1.构造体名称的命名构造体名称的命名构造体的名称是对本构造体的命名,它是该构造体的惟一名称。OF后面紧跟的实体名表明了该构造体所对应的是哪一个实体。用IS来结束构造体的命名。构造体的名称可以由设计者自自由由命命名名,但最好与与其其性性质质有有关关。在大多数的文献和资料中,通通常常把把构构造造体体的的名名称称命命名名为为 behavioral(行行为为)、dataflow(数数据据流流)、rtl(寄寄存存器器传传输输)或或者者 structural(结结构构)。如前所述,这3个名称实际上是3种构造体描述方式的名称。当设计者采用某一种
21、描述方式来描述构造体时,该构造体的结构名称就命名为某名称。这样,使得阅读VHDL语言程序的人能直直接接了了解解设计者所采用的描描述述方方式式。例如,使用结构描述方式来描述二选一电路,那么二选一电路的构造体就可以这样命名:ARCHITECTUREstructuralOFmuxIS2.定义语句定义语句 定义语句位于ARCHITECTURE和BEGIN之间,用用于于对对构构造造体体内部所使用的信号、常数、数据类型和函数等进行定义内部所使用的信号、常数、数据类型和函数等进行定义,例如:ARCHITECTUREbehavOFmuxISSIGNALnes1:BIT;BEGINENDbehav;信号定义和端
22、口说明的语句一样,应有信号名和数据类型信号名和数据类型的说明。因它是内部连接用的信号内部连接用的信号,故没有也不需有方向的说明不需有方向的说明。3.并行处理语句并行处理语句并行处理语句处于语句BEGIN 和END 之间,这些语句具体地描描述述了了构构造造体体的的行行为为及及其其连连接接关关系系。例如,二选一的数据流方式描述可以如例2-8所示。【例2-8】ENTITYmux2ISPORT(d0,d1:INBIT;sel:INBIT;q:OUTBIT);ENDmux2;ARCHITECTUREdataflowOFmux2ISBEGINq=(d0ANDsel)OR(NOTselANDd1);ENDd
23、ataflow;一个异或门实体对应的一个异或门实体对应的3种描述方式的构造体种描述方式的构造体【例例2-8】异或门构造体的数据流方式描述:异或门构造体的数据流方式描述:ARCHITECTUREdata_flowOFxor_gateISBEGINc=(aand(notb)or(nota)andb);ENDdata_flow;【例例2-9】异或门构造体的行为描述异或门构造体的行为描述:ARCHITECTUREbehavioralOFxor_gateISPROCESS(a,b)BEGINIF(a=0ANDb1)THENc=1;ELSIF(a=1ANDb0)THENc=1;ELSEc=0;ENDIF;
24、ENDPROCESS;ENDbehavioral;【例例2-10】异或门构造体的结构描述异或门构造体的结构描述:ARCHITECTUREstructureOFxor_gateISCOMPONENTnot_gatePORT(a:INBIT;b:OUTBIT);ENDCOMPONENT;COMPONENTand_gatePORT(a,b:INBIT;c:OUTBIT);ENDCOMPONENT;COMPONENTor_gatePORT(a,b:INBIT;c:OUTBIT);ENDCOMPONENT;SIGNALna,nb:BIT;SIGNALc1,c2:BIT;BEGINu1:not_gateP
25、ORTMAP(a,na);u2:not_gatePORTMAP(b,nb);u3:and_gatePORTMAP(a,nb,c1);u4:and_gatePORTMAP(b,na,c2);u5:or_gatePORTMAP(c1,c2,c);ENDstructure;2.2.2 VHDL语言构造体的子结构描述语言构造体的子结构描述在规模较大的电路设计中,全部电路都用惟一的一个模块来描述是非常不方便的。为此,电路设计者总希望将整个电路分成若干个相对比较独立的模块来进行电路的描述。这样,一个构造体可以用几个子结构,即相对比较独立的几个模块来构成。VHDL语言可以有以下3 种种形形式式的子结构描述语
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- VHDL 语言 程序 基本 结构
限制150内