版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
第3章
VHDL程序結(jié)構(gòu)一個完整的設(shè)計實(shí)體的最低要求應(yīng)該能為VHDL綜合器所接受并能作為一個獨(dú)立設(shè)計單元即元件的形式而存在的VHDL程序,這里的所謂元件,既可以被高層次的系統(tǒng)所調(diào)用,成為該系統(tǒng)的一部分,也可以作為一個電路功能塊而獨(dú)立存在和獨(dú)立運(yùn)行。第3章
VHDL程序結(jié)構(gòu)
圖3-1VHDL程序設(shè)計基本結(jié)構(gòu)第3章
VHDL程序結(jié)構(gòu)在VHDL程序中實(shí)體ENTITY和結(jié)構(gòu)體ARCHITECTURE這兩個基本結(jié)構(gòu)是必需的它們可以構(gòu)成最簡單的VHDL程序。通常,最簡單的VHDL程序結(jié)構(gòu)中還應(yīng)包括另一重要的部分,即庫LIBRARY和程序包PACKAGE一個實(shí)用的VHDL程序可以由一個或多個設(shè)計實(shí)體構(gòu)成,可以將一個設(shè)計實(shí)體作為一個完整的系統(tǒng)直接利用,也可以將其作為其它設(shè)計實(shí)體的一個低層次的結(jié)構(gòu)即元件來例化。元件調(diào)用和連接,就是用實(shí)體來說明一個具體的器件。圖3-1中配置CONFIGURATION結(jié)構(gòu)的設(shè)置常用于行為仿真中,如用于對特定結(jié)構(gòu)體的選擇控制。第3章
VHDL程序結(jié)構(gòu)3.1實(shí)體(ENTITY)實(shí)體作為一個設(shè)計實(shí)體的組成部分,其功能是對這個設(shè)計實(shí)體與外部電路進(jìn)行接口描述。實(shí)體是設(shè)計實(shí)體的表層設(shè)計單元,實(shí)體說明部分規(guī)定了設(shè)計單元的輸入輸出接口信號或引腳。它是設(shè)計實(shí)體對外的一個通信界面。就一個設(shè)計實(shí)體而言,外界所看到的僅僅是它的界面上的各種接口。設(shè)計實(shí)體可以擁有一個或多個結(jié)構(gòu)體,用于描述此設(shè)計實(shí)體的邏輯結(jié)構(gòu)和邏輯功能,對于外界來說這一部分是不可見的。不同邏輯功能的設(shè)計實(shí)體可以擁有相同的實(shí)體描述。這是因為實(shí)體類似于原理圖中的一個部件符號,而其具體的邏輯功能是由設(shè)計實(shí)體中結(jié)構(gòu)體的描述確定的。實(shí)體是VHDL的基本設(shè)計單元它可以對一個門電路、一個芯片、一塊電路板乃至整個系統(tǒng)進(jìn)行接口描述。第3章
VHDL程序結(jié)構(gòu)1.實(shí)體語句結(jié)構(gòu)以下是實(shí)體說明單元的常用語句結(jié)構(gòu):ENTITY實(shí)體名IS[GENERIC(類屬表);][PORT(端口表);]ENDENTITY實(shí)體名;實(shí)體說明單元必須按照這一結(jié)構(gòu)來編寫實(shí)體應(yīng)以語句ENTITY實(shí)體名IS開始,以語句ENDENTITY實(shí)體名結(jié)束。其中的實(shí)體名可以由設(shè)計者自己添加,中間在方括號內(nèi)的語句描述,在特定的情況下并非是必需的。第3章
VHDL程序結(jié)構(gòu)2.實(shí)體名一個設(shè)計實(shí)體無論多大和多復(fù)雜,在實(shí)體中定義的實(shí)體名即為這個設(shè)計實(shí)體的名稱在例化。(已有元件的調(diào)用和連接)中,即可以用此名對相應(yīng)的設(shè)計實(shí)體進(jìn)行調(diào)用。COMPONENTh_adder--元件調(diào)用說明
PORT(ab:INSTD_LOGIC;coso:OUTSTD_LOGIC);ENDCOMPONENT;...u1:h_adderPORTMAP(a=>ainb=>binco=>dso=>e);
...--這里的符號=>是端口關(guān)聯(lián)符號第3章
VHDL程序結(jié)構(gòu)3.GENERIC類屬說明語句類屬GENERIC參量是一種端口界面常數(shù)常以一種說明的形式放在實(shí)體或塊結(jié)構(gòu)體前的說明部分,類屬為所說明的環(huán)境提供了一種靜態(tài)信息通道,類屬與常數(shù)不同常數(shù)只能從設(shè)計實(shí)體的內(nèi)部得到賦值,且不能再改變而類屬的值可以由設(shè)計實(shí)體外部提供。因此,設(shè)計者可以從外面通過類屬參量的重新設(shè)定而容易地改變一個設(shè)計實(shí)體或一個元件的內(nèi)部電路結(jié)構(gòu)和規(guī)模。類屬說明的一般書寫格式如下:GENERIC([常數(shù)名:數(shù)據(jù)類型[:設(shè)定值]{常數(shù)名:數(shù)據(jù)類型[:設(shè)定值]});第3章
VHDL程序結(jié)構(gòu)
程序3-2ENTITYmcu1ISGENERIC(addrwidth:INTEGER:=16);PORT(add_bus:OUTSTD_LOGIC_VECTOR(addrwidth-1DOWNTO0));第3章
VHDL程序結(jié)構(gòu)程序3-4LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYandnISGENERIC(n:INTEGER);PORT(a:INSTD_LOGIC_VECTOR(n-1DOWNTO0);c:OUTSTD_LOGIC);END;ARCHITECTUREbehavOFandnISBEGINPROCESS(a)VARIABLEint:STD_LOGIC;BEGINint:='1';FORiINa'LENGTH-1DOWNTO0LOOPIFa(i)='0'THENint:='0';ENDIF;ENDLOOP;c<=int;ENDPROCESS;END;第3章
VHDL程序結(jié)構(gòu)程序3-5LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYexnISPORT(d1,d2,d3,d4,d5,d6,d7:INSTD_LOGIC;q1,q2:OUTSTD_LOGIC);END;ARCHITECTUREexn_behavOFexnISCOMPONENTandnGENERIC(n:INTEGER);PORT(a:INSTD_LOGIC_VECTOR(n-1DOWNTO0);c:OUTSTD_LOGIC);ENDCOMPONENT;BEGINu1:andnGENERICMAP(n=>2)PORTMAP(a(0)=>d1,a(1)=>d2,c=>q1);u2:andnGENERICMAP(n=>5)PORTMAP(a(0)=>d3,a(1)=>d4,a(2)=>d5,a(3)=>d6,a(4)=>d7,c=>q2);END;第3章VHDL程序結(jié)構(gòu)4.PORT端口說明實(shí)體端口說說明的一般般書寫格式式如下PORT(端口名:端口模式數(shù)數(shù)據(jù)類類型{端口名:端口模式數(shù)數(shù)據(jù)類類型});其中的端口口名是設(shè)計計者為實(shí)體體的每一個個對外通道道所取的名名字端口口模式是指指這些通道道上的數(shù)據(jù)據(jù)流動方式式如輸入入或輸出等等,數(shù)據(jù)類類型是指端端口上流動動的數(shù)據(jù)的的表達(dá)格式式或取值類類型,這是是由于VHDL是一種強(qiáng)類類型語言即即對語句句中的所有有的端口信信號,內(nèi)部部信號和操操作數(shù)的數(shù)數(shù)據(jù)類型有有嚴(yán)格的規(guī)規(guī)定,只有有相同數(shù)據(jù)據(jù)類型的端端口信號和和操作數(shù)才才能相互作作用。一個實(shí)體通通常有一個個或多個端端口端口口類似于原原理圖部件件符號上的的管腳實(shí)實(shí)體與外界界交流的信信息必須通通過端口通通道流入或或流出。第3章VHDL程序結(jié)構(gòu)端口對應(yīng)于于器件符號號的外部引引腳。端口口名作為外外部引腳的的名稱,端端口模式用用來定義外外部引腳的的信號流向向。常用端口模模式:IN模式:IN定義的通道道確定為輸輸入端口并并規(guī)定為為單向只讀讀模式可可以通過此此端口將變變量Variable信息或信號號Signal信息讀入設(shè)設(shè)計實(shí)體中中。OUT:模式OUT定義的通道道確定為輸輸出端口并并規(guī)定為為單向輸出出模式可可以通過此此端口將信信號輸出設(shè)設(shè)計實(shí)體或或者說可可以將設(shè)計計實(shí)體中的的信號向此此端口賦值值。INOUT:模式INOUT定義的通道道確定為輸輸入輸出雙雙向端口,,即從端端口的內(nèi)部部看可以對對此端口進(jìn)進(jìn)行賦值,,也可以通通過此端口口讀入外部部的數(shù)據(jù)信信息。而從從端口的外外部看,信信號既可以以從此端口口流出也也可以向此此端口輸入入信號。第3章VHDL程序結(jié)構(gòu)程序3-7...ENTITYMCS51ISPORT(--與8031接口的各端端口定義:P0:INOUTSTD_LOGIC_VECTOR(7DOWNTO0);--雙向地址/數(shù)據(jù)口P2:INSTD_LOGIC_VECTOR(7DOWNTO0);--高8位地址線RDWR:INSTD_LOGIC;--讀寫允許許...ENDMCS51;...PROCESS(WR_ENABLE2)BEGINIF(WR_ENABLE2'EVENTANDWR_ENABLE2='1‘‘)THENLATCH_OUT2<=P0;ENDIF;--從P0口讀入外部部信息ENDPROCESS;PROCESS(P2,LATCH_ADDRES,READY,RD)BEGINIF(LATCH_ADDRES="01111110")AND(P2="10011111")AND(READY='1')AND(RD='0')THENP0<=LATCH_IN1;--寄存器中的的數(shù)據(jù)輸入入P0口,由P0向外輸出ELSEP0<="ZZZZZZZZ";ENDIF--禁止讀數(shù)P0口輸出呈高高阻態(tài)ENDPROCESS;。。。第3章VHDL程序結(jié)構(gòu)BUFFER模式:BUFFER定義的通道道確定為具具有數(shù)據(jù)讀讀入功能的的輸出端口口,它與雙雙向端口的的區(qū)別在于于只能接受受一個驅(qū)動動源。BUFFER模式從本質(zhì)質(zhì)上將仍是是OUT模式,只是是在內(nèi)部結(jié)結(jié)構(gòu)中具有有將輸出至至外端口的的信號回讀讀的功能,,即允許內(nèi)內(nèi)部回讀輸輸出的信號號,即允許反饋饋,如計數(shù)數(shù)器的設(shè)計計,可將計計數(shù)器輸出出的計數(shù)信信號回讀以以作下一一計數(shù)值的的初值與與INOUT模式相比。。顯然BUFFER的區(qū)別在于于回讀(輸入)的信號不是是由外部輸輸入的,而而是由內(nèi)部部產(chǎn)生,向向外輸出的的信號,有有時往往在在時序上有有所差異。。第3章VHDL程序結(jié)構(gòu)通常實(shí)現(xiàn)內(nèi)內(nèi)部反饋有有兩種方式式即利用用BUFFER建立一個緩緩沖模式的的端口如如程序3-8所示,或在在結(jié)構(gòu)體內(nèi)內(nèi)定義一個個緩沖節(jié)點(diǎn)點(diǎn)信號SIGNAL如程序3-9所示。它們們的邏輯功功能和綜合合后的電路路都是一樣樣的。第3章VHDL程序結(jié)構(gòu)程序3-8LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYbfexpISPORT(clk,rst,din:INSTD_LOGIC;q1:BUFFERSTD_LOGIC;q2:OUTSTD_LOGIC);ENDbfexp;ARCHITECTUREbehav1OFbfexpISBEGINPROCESS(clk,rst)BEGINIFrst='0'THENq1<='0';q2<='0';ELSIFclk'EVENTANDclk='1'THENq2<=din;--將由din讀入的數(shù)據(jù)據(jù)向q1輸出q1<=q1;--將向q1輸出的數(shù)據(jù)據(jù)回讀,并向q2賦值ENDIF;ENDPROCESS;END;第3章VHDL程序結(jié)構(gòu)程序3-9LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYbfexpISPORT(clk,rst,din:INSTD_LOGIC;q1:OUTSTD_LOGIC;q2:OUTSTD_LOGIC);ENDbfexp;ARCHITECTUREbehav1OFbfexpISSIGNALqbuf:STD_LOGIC;--定義數(shù)據(jù)暫存存緩沖信號qbufBEGINPROCESS(clk,rst)BEGINIFrst='0'THENqbuf<='0';q2<='0';ELSIFclk'EVENTANDclk='1'THENqbuf<=din;--將由din讀入的數(shù)據(jù)暫暫存于qbufq2<=qbuf;--將緩沖信號qbuf中的數(shù)據(jù)向q2賦值ENDIF;q1<=qbuf;--將緩沖信號qbuf中的數(shù)據(jù)向q1賦值,并由此輸出ENDPROCESS;END;第3章VHDL程序結(jié)構(gòu)第3章VHDL程序結(jié)構(gòu)3.2結(jié)構(gòu)體(ARCHITECTURE)結(jié)構(gòu)體是實(shí)體體所定義的設(shè)設(shè)計實(shí)體中的的一個組成部部分結(jié)構(gòu)體體描述設(shè)計實(shí)實(shí)體的內(nèi)部結(jié)結(jié)構(gòu)和/或外部設(shè)計實(shí)實(shí)體端口間的的邏輯關(guān)系。。結(jié)構(gòu)體由兩大大部分組成::1.對數(shù)據(jù)類型、、常數(shù)、信號號、子程序和和元件等元素素的說明部分分。2.描述實(shí)體邏輯輯行為的以以各種不同的的描述風(fēng)格表表達(dá)的功能描描述語句它它們包括各種種形式的順序序描述語句和和并行描述語語句。3.以元件例化語語句為特征的的外部元件(設(shè)計實(shí)體)端口間的連接接方式(如程序2-3)。第3章VHDL程序結(jié)構(gòu)結(jié)構(gòu)體將具體體實(shí)現(xiàn)一個實(shí)實(shí)體,每個實(shí)實(shí)體可以有多多個結(jié)構(gòu)體每每個結(jié)構(gòu)體體對應(yīng)著實(shí)體體不同的結(jié)構(gòu)構(gòu)和算法實(shí)現(xiàn)現(xiàn)方案其間間的各個結(jié)構(gòu)構(gòu)體的地位是是同等的它它們完整地實(shí)實(shí)現(xiàn)了實(shí)體的的行為,但同同一結(jié)構(gòu)體不不能為不同的的實(shí)體所擁有有。結(jié)構(gòu)體不不能單獨(dú)存在在它必須有有一個界面說說明,即一個個實(shí)體對于于具有多個結(jié)結(jié)構(gòu)體的實(shí)體體必須用CONFIGURATION配置置語語句句指指明明用用于于綜綜合合的的結(jié)結(jié)構(gòu)構(gòu)體體和和用用于于仿仿真真的的結(jié)結(jié)構(gòu)構(gòu)體體,,即即在在綜綜合合后后的的可可映映射射于于硬硬件件電電路路的的設(shè)設(shè)計計實(shí)實(shí)體體中中一一個個實(shí)實(shí)體體只只能能對對應(yīng)應(yīng)一一個個結(jié)結(jié)構(gòu)構(gòu)體體。。第3章章VHDL程序序結(jié)結(jié)構(gòu)構(gòu)在電電路路中中,,如如果果實(shí)實(shí)體體代代表表一一個個器器件件符符號號,,則則結(jié)結(jié)構(gòu)構(gòu)體體描描述述了了這這個個符符號號的的內(nèi)內(nèi)部部行行為為。。當(dāng)當(dāng)把把這這個個符符號號例例化化成成一一個個實(shí)實(shí)際際的的器器件件安安裝裝到到電電路路上上時時,,則則需需配配置置語語句句為為這這個個例例化化的的器器件件指指定定一一個個結(jié)結(jié)構(gòu)構(gòu)體體即即指指定定一一種種實(shí)實(shí)現(xiàn)現(xiàn)方方案案,,或或由由編編譯譯器器自自動動選選一一個個結(jié)結(jié)構(gòu)構(gòu)體體。。第3章章VHDL程序序結(jié)結(jié)構(gòu)構(gòu)1.結(jié)構(gòu)構(gòu)體體的的一一般般語語言言格格式式結(jié)構(gòu)構(gòu)體體的的語語句句格格式式如如下下ARCHITECTURE結(jié)構(gòu)構(gòu)體體名名OF實(shí)體體名名IS[說明明語語句句]BEGIN[功能能描描述述語語句句]ENDARCHITECTURE結(jié)構(gòu)構(gòu)體體名名;第3章章VHDL程序序結(jié)結(jié)構(gòu)構(gòu)實(shí)體體名名必必須須是是所所在在設(shè)設(shè)計計實(shí)實(shí)體體的的名名字字,,而而結(jié)結(jié)構(gòu)構(gòu)體體名名可可以以由由設(shè)設(shè)計計者者自自己己選選擇擇,,但但當(dāng)當(dāng)一一個個實(shí)實(shí)體體具具有有多多個個結(jié)結(jié)構(gòu)構(gòu)體體時時,,結(jié)結(jié)構(gòu)構(gòu)體體的的取取名名不不可可相相重重,,結(jié)結(jié)構(gòu)構(gòu)體體的的說說明明語語句句部部分分必必須須放放在在關(guān)關(guān)鍵鍵詞詞ARCHITECTURE和BEGIN之間間,,結(jié)結(jié)構(gòu)構(gòu)體體必必須須以以ENDARCHITECTURE;結(jié)結(jié)構(gòu)構(gòu)體體名名作作為為結(jié)結(jié)束束句句。。第3章章VHDL程序序結(jié)結(jié)構(gòu)構(gòu)2.結(jié)構(gòu)構(gòu)體體說說明明語語句句結(jié)構(gòu)構(gòu)體體中中的的說說明明語語句句是是對對結(jié)結(jié)構(gòu)構(gòu)體體的的功功能能描描述述,,語語句句中中將將要要用用到到的的信信號號(SIGNAL)、數(shù)數(shù)據(jù)據(jù)類類型型(TYPE)、常常數(shù)數(shù)(CONSTANT)、元元件件(COMPONENT)、函函數(shù)數(shù)(FUNCTION)和過過程程(PROCEDURE)等加加以以說說明明。。需需要要注注意意的的是是,,在在一一個個結(jié)結(jié)構(gòu)構(gòu)體體中中說說明明和和定定義義的的數(shù)數(shù)據(jù)據(jù)類類型型、、常常數(shù)數(shù)、、元元件件、、函函數(shù)數(shù)和和過過程程只只能能用用于于這這個個結(jié)結(jié)構(gòu)構(gòu)體體中中。。如如果果希希望望這這些些定定義義也也能能用用于于其其它它的的實(shí)實(shí)體體或或結(jié)結(jié)構(gòu)構(gòu)體體中中,,需需要要將將其其作作為為程程序序包包來來處處理理。。第3章章VHDL程序序結(jié)結(jié)構(gòu)構(gòu)3.功能能描描述述語語句句結(jié)結(jié)構(gòu)構(gòu)如圖圖3-3所示示的的功功能能描描述述語語句句結(jié)結(jié)構(gòu)構(gòu)可可以以含含有有五五種種不不同同類類型型的的以以并并行行方方式式工工作作的的語語句句結(jié)結(jié)構(gòu)構(gòu)。。這這可可以以看看成成是是結(jié)結(jié)構(gòu)構(gòu)體體的的五五個個子子結(jié)結(jié)構(gòu)構(gòu),,而而在在每每一一語語句句結(jié)結(jié)構(gòu)構(gòu)的的內(nèi)內(nèi)部部可可能能含含有有并并行行運(yùn)運(yùn)行行的的邏邏輯輯描描述述語語句句或或順順序序運(yùn)運(yùn)行行的的邏邏輯輯描描述述語語句句。。這這就就是是說說,,這這五五種種語語句句結(jié)結(jié)構(gòu)構(gòu)本本身身是是并并行行語語句句但但它它們們內(nèi)內(nèi)部部所所包包含含的的語語句句并并不不一一定定是是并并行行語語句句,,如如進(jìn)進(jìn)程程語語句句內(nèi)內(nèi)所所包包含含的的是是順順序序語語句句圖圖3-3中的的五五種種語語句句結(jié)結(jié)構(gòu)構(gòu)的的基基本本組組成成和和功功能能分分別別是是::(1)塊語語句句是是由由一一系系列列并并行行執(zhí)執(zhí)行行語語句句構(gòu)構(gòu)成成的的組組合合體體,,它它的的功功能能是是將將結(jié)結(jié)構(gòu)構(gòu)體體中中的的并并行行語語句句組組成成一一個個或或多多個個子子模模塊塊。。(2)進(jìn)程程語語句句定定義義順順序序語語句句模模塊塊,,用用以以將將從從外外部部獲獲得得的的信信號號值值或或內(nèi)內(nèi)部部的的運(yùn)運(yùn)算算數(shù)數(shù)據(jù)據(jù)向向其其它它的的信信號號進(jìn)進(jìn)行行賦賦值值。。(3)信號號賦賦值值語語句句將將設(shè)設(shè)計計實(shí)實(shí)體體內(nèi)內(nèi)的的處處理理結(jié)結(jié)果果向向定定義義的的信信號號或或界界面面端端口口進(jìn)進(jìn)行行賦賦值值。。(4)子程程序序調(diào)調(diào)用用語語句句用用以以調(diào)調(diào)用用過過程程或或函函數(shù)數(shù)并并將將獲獲得得的的結(jié)結(jié)果果賦賦值值于于信信號號。。(5)元件件例例化化語語句句對對其其它它的的設(shè)設(shè)計計實(shí)實(shí)體體作作元元件件調(diào)調(diào)用用說說明明,,并并將將此此元元件件的的端端口口與與其其它它的的元元件件信信號號或或高高層層次次實(shí)實(shí)體體的的界界面面端端口口進(jìn)進(jìn)行行連連接接。。第3章章VHDL程序序結(jié)結(jié)構(gòu)構(gòu)3.3塊語語句句結(jié)結(jié)構(gòu)構(gòu)BLOCKBLOCK是VHDL中具有有的一一種劃劃分機(jī)機(jī)制,,這種種機(jī)制制允許許設(shè)計計者合合理地地將一一個模模塊分分為數(shù)數(shù)個區(qū)區(qū)域。。在每每個塊塊都能對對其局局部信信號,,數(shù)據(jù)據(jù)類型型和常常量加加以描描述和和定義義,,任何何能在在結(jié)構(gòu)構(gòu)體的的說明明部分分進(jìn)行行說明明的對對象都都能在在BLOCK說明部部分中中進(jìn)行行說明明BLOCK語句應(yīng)應(yīng)用只只是一一種將將結(jié)構(gòu)構(gòu)體中中的并并行描描述語語句進(jìn)進(jìn)行組組合的的方法法,它它的主主要目目的是是改善善并行行語句句及其其結(jié)構(gòu)構(gòu)的可可讀性性,或或是利利用BLOCK的保護(hù)護(hù)表達(dá)達(dá)式關(guān)關(guān)閉某某些信信號。。第3章章VHDL程序結(jié)結(jié)構(gòu)1.BLOCK語句的的格式式BLOCK語句的的表達(dá)達(dá)格式式如下下塊標(biāo)號號:BLOCK[(塊保護(hù)護(hù)表達(dá)達(dá)式)]接口說說明類屬說說明BEGIN并行語語句ENDBLOCK塊標(biāo)號號;第3章章VHDL程序結(jié)結(jié)構(gòu)作為一一個BLOCK語句結(jié)結(jié)構(gòu),,在關(guān)關(guān)鍵詞詞BLOCK的前面面必須須設(shè)置置一個個塊標(biāo)標(biāo)號,,并在在結(jié)尾尾語句句ENDBLOCK右側(cè)也也寫上上此標(biāo)標(biāo)號(此處的的塊標(biāo)標(biāo)號不不是必必需的的)。接口說說明部部分有有點(diǎn)類類似于于實(shí)體體的定定義部部分,,它可可包含含由關(guān)關(guān)鍵詞詞PORT、GENERIC、PORTMAP和GENERICMAP引導(dǎo)的的接口口說明明等語語句。。對對BLOCK的接口口設(shè)置置以及及與外外界信信號的的連接接狀況況加以以說明明。塊的類類屬說說明部部分和和接口口說明明部分分的適適用范范圍僅僅限于于當(dāng)前前BLOCK。第3章章VHDL程序結(jié)結(jié)構(gòu)塊的說說明部部分可可以定定義的的項目目主要要有::(1)定義USE語句(2)定義子子程序序(3)定義數(shù)數(shù)據(jù)類類型(4)定義子子類型型(5)定義常常數(shù)(6)定義信信號(7)定義元元件塊中的的并行行語句句部分分可包包含結(jié)結(jié)構(gòu)體體中的的任何何并行行語句句結(jié)構(gòu)構(gòu)。BLOCK語句本本身屬屬并行行語句句,BLOCK語句中所包包含的語句句也是并行行語句。第3章VHDL程序結(jié)構(gòu)2.BLOCK的應(yīng)用BLOCK的應(yīng)用可使使結(jié)構(gòu)體層層次鮮明,,結(jié)構(gòu)明確確。利用用BLOCK語句可以將將結(jié)構(gòu)體中中的并行語語句劃分成成多個并列列方式的BLOCK,每一個BLOCK都像一個獨(dú)獨(dú)立的設(shè)計計實(shí)體,具具有自己的的類屬參數(shù)數(shù)說明和界界面端口,,以及與外外部環(huán)境的的銜接描述述。以下是是兩個使用用BLOCK語句的實(shí)例例。程序3-11給出了BLOCK語句的一個個使用示例例,而程序序3-12描述了一個個具有塊嵌嵌套方式的的BLOCK語句結(jié)構(gòu)。。程序3-11ENTITYgatISGENERIC(l_time:TIME;s_time:TIME);--類屬說明PORT(b1,b2,b3:INOUTBIT);--結(jié)構(gòu)體全局局端口定義義ENDENTITYgat;ARCHITECTUREfuncOFgatISSIGNALa1:BIT;--結(jié)構(gòu)體全局局信號a1定義BEGINBlk1:BLOCK--塊定義塊塊標(biāo)號名是是blk1GENERIC(gb1,gb2:Time);--定義塊中的的局部類屬屬參量GENERICMAP(gb1=>l_time,gb2=>s_time);--局部端口參參量設(shè)定PORT(pb:INBIT;pb2:INOUTBIT);--塊結(jié)構(gòu)中局局部端口定定義PORTMAP(pb1=>b1,pb2=>a1);--塊結(jié)構(gòu)端口口連接說明明CONSTANTdelay:Time:=1ms;--局部常數(shù)定定義SIGNALs1:BIT;--局部信號定定義BEGINs1<=pb1AFTERdelay;pb2<=s1AFTERgb1,b1AFTERgb2;ENDBLOCKblk1;ENDARCHITECTUREfunc;程序3-12...b1:BLOCKSIGNALs1:BIT;BEGINS1<=aANDb;b2:BLOCKSIGNALs2:BIT;BEGINs2<=cANDd;b3:BLOCKBEGINZ<=s2;ENDBLOCKb3;ENDBLOCKb2;y<=s1;ENDBLOCKb1;...第3章VHDL程序結(jié)構(gòu)3.BLOCK語句在綜合合中的地位位與大部分的的VHDL語句不同。。BLOCK語句的應(yīng)用用,包括其其中的類屬屬說明和端端口定義都都不會影響響對原結(jié)構(gòu)構(gòu)體的邏輯輯功能的仿仿真結(jié)果。。如以下的程程序3-13和程序3-14的仿真結(jié)果果是完全相相同的。第3章VHDL程序結(jié)構(gòu)程序3-13a1:out1<='1'after3ns;blk1:BLOCKBEGINA2:out2<='1'AFTER3ns;A3:out3<='0'AFTER2ns;ENDBLOCKblk1;程序3-14a1:out1<='1'AFTER3ns;a2:out2<='1'AFTER3ns;a3:out3<='0'AFTER2ns;第3章章VHDL程序結(jié)結(jié)構(gòu)從綜合合的角角度看看BLOCK語句的的存在在也是是毫無無實(shí)際際意義義的,,因為為無論論是否否存在在BLOCK語句結(jié)結(jié)構(gòu),,對于于同一一設(shè)計計實(shí)體體綜綜合后后的邏邏輯功功能是是不會會有任任何變變化的的。在在綜合合過程程中,,VHDL綜合器器將略略去所所有的的塊語語句。?;谟趯?shí)用用的觀觀點(diǎn)結(jié)結(jié)構(gòu)構(gòu)體中中功能能語句句的劃劃分最最好使使用元元件例例化COMPONENTINSTANTIATION的方式式來完完成。。第3章章VHDL程序結(jié)結(jié)構(gòu)3.4進(jìn)程(PROCESS)PROCESS語句結(jié)結(jié)構(gòu)包包含了了一個個代表表著設(shè)設(shè)計實(shí)實(shí)體中中部分分邏輯輯行為為的、、獨(dú)立立的順順序語語句描描述的的進(jìn)程程。順順序語語句可可以根根據(jù)設(shè)設(shè)計者者的要要求,,利用用順序序可控控的語語句,,完成成逐條條執(zhí)行行的功功能。。語句運(yùn)運(yùn)行的的順序序是同同程序序語句句書寫寫的順順序相相一致致的。。一個結(jié)結(jié)構(gòu)體體中可可以有有多個個并行行運(yùn)行行的進(jìn)進(jìn)程結(jié)結(jié)構(gòu),,而每每一個個進(jìn)程程的內(nèi)內(nèi)部結(jié)結(jié)構(gòu)卻卻是由由一系系列順順序語語句來來構(gòu)成成。第3章章VHDL程序結(jié)結(jié)構(gòu)PROCESS結(jié)構(gòu)中中的順順序語語句,,及其其所謂謂的順順序執(zhí)執(zhí)行過過程只只是相相對于于計算算機(jī)中中的軟軟件行行為仿仿真的的模擬擬過程程而言言的,,這個個過程程與硬硬件結(jié)結(jié)構(gòu)中中實(shí)現(xiàn)現(xiàn)的對對應(yīng)的的邏輯輯行為為是不不相同同的。。PROCESS結(jié)構(gòu)中中既可可以有有時序序邏輯輯的描描述,,也可可以有有組合合邏輯輯的描描述,,它們們都可可以用用順序序語句句來表表達(dá)然然而而,硬硬件中中的組組合邏邏輯具具有最最典型型的并并行邏邏輯功功能而而硬硬件中中的時時序邏邏輯也也并非非都是是以順順序方方式工工作的的。第3章章VHDL程序結(jié)結(jié)構(gòu)1.PROCESS語句格格式PROCESS語句的的表達(dá)達(dá)格式式如下下[進(jìn)程標(biāo)標(biāo)號]PROCESS[(敏感信信號參參數(shù)表表)][IS][進(jìn)程說說明部部分]BEGIN順序描描述語語句ENDPROCESS[進(jìn)程標(biāo)標(biāo)號]每一個個PROCESS語句結(jié)結(jié)構(gòu)可可以賦賦予一一個進(jìn)進(jìn)程標(biāo)標(biāo)號,,但這這個標(biāo)標(biāo)號不不是必必需的的。進(jìn)進(jìn)程說說明部部分定定義該該進(jìn)程程所需需的局局部數(shù)數(shù)據(jù)環(huán)環(huán)境。。第3章章VHDL程序結(jié)結(jié)構(gòu)順序描描述語語句部部分是是一段段順序序執(zhí)行行的語語句,,描述述該進(jìn)進(jìn)程的的行為為。PROCESS中規(guī)定定了每每個進(jìn)進(jìn)程語語句在在當(dāng)它它的某某個敏敏感信信號(由敏感感信號號參量量表列列出)的值改改變時時都必必須立立即完完成某某一功功能行行為。。這個個行為為由進(jìn)進(jìn)程語語句中中的順順序語語句定定義,,行為為的結(jié)結(jié)果可可以賦賦給信信號,,并通通過信信號被被其它它的PROCESS或BLOCK讀取或或賦值值。當(dāng)當(dāng)進(jìn)進(jìn)程中中定義義的任任一敏敏感信信號發(fā)發(fā)生更更新時時,由由順序序語句句定義義的行行為就就要重重復(fù)執(zhí)執(zhí)行一一次,,當(dāng)進(jìn)進(jìn)程中中最后后一個個語句句執(zhí)行行完成成后執(zhí)執(zhí)行過過程將將返回回到進(jìn)進(jìn)程的的第一一個語語句以以等等待下下一次次敏感感信號號變化化,如如此循循環(huán)往往復(fù)以以至無無限但但當(dāng)當(dāng)遇到到WAIT語句時時執(zhí)執(zhí)行過過程將將被有有條件件地終終止,,即所所謂的的掛起起(Suspention)。第3章章VHDL程序結(jié)結(jié)構(gòu)一個結(jié)結(jié)構(gòu)體體中可可以含含有多多個PROCESS結(jié)構(gòu),,每一一PROCESS結(jié)構(gòu)對對于其其敏感感信號號參數(shù)數(shù)表中中定義義的任任一敏敏感參參量的的變化化,每每個進(jìn)進(jìn)程可可以在在任何何時刻刻被激激活或或者稱稱為啟啟動。。而在在一結(jié)結(jié)構(gòu)體體中所所有有被激激活的的進(jìn)程程都是是并行行運(yùn)行行的,,這就就是為為什么么PROCESS結(jié)構(gòu)構(gòu)本本身身是是并并行行語語句句的的道道理理。。PROCESS語句句必必須須以以語語句句ENDPROCESS[進(jìn)程程標(biāo)標(biāo)號號]結(jié)尾尾對對于于目目前前常常用用的的綜綜合合器器來來說說其其中中進(jìn)進(jìn)程程標(biāo)標(biāo)號號不不是是必必須須的的,,敏敏感感表表旁旁的的[IS]也不不是是必必須須的的。。第3章章VHDL程序序結(jié)結(jié)構(gòu)構(gòu)2.PROCESS組成成PROCESS語句句結(jié)結(jié)構(gòu)構(gòu)是是由由三三個個部部分分組組成成的的,,即即進(jìn)進(jìn)程程說說明明部部分分,,順順序序描描述述語語句句部部分分和和敏敏感感信信號號參參數(shù)數(shù)表表。。(1)進(jìn)程程說說明明部部分分主主要要定定義義一一些些局局部部量量可可包包括括數(shù)數(shù)據(jù)據(jù)類類型型、、常常數(shù)數(shù)、、變變量量、、屬屬性性、、子子程程序序等等,,但但需需注注意意,,在在進(jìn)進(jìn)程程說說明明部部分分中中不不允允許許定定義義信信號號和和共共享享變變量量。。第3章章VHDL程序序結(jié)結(jié)構(gòu)構(gòu)(2)順序序描描述述語語句句部部分分可可分分為為賦賦值值語語句句、、進(jìn)進(jìn)程程啟啟動動語語句句、、子子程程序序調(diào)調(diào)用用語語句句、、順順序序描描述述語語句句和和進(jìn)進(jìn)程程跳跳出出語語句句等等,,它它們們包包括括.信號號賦賦值值語語句句即即在在進(jìn)進(jìn)程程中中將將計計算算或或處處理理的的結(jié)結(jié)果果向向信信號號(SIGNAL)賦值值。。.變量量賦賦值值語語句句即即在在進(jìn)進(jìn)程程中中以以變變量量(VARIABLE)的形形式式存存儲儲計計算算的的中中間間值值。。.進(jìn)程程啟啟動動語語句句當(dāng)當(dāng)PROCESS的敏敏感感信信號號參參數(shù)數(shù)表表中中沒沒有有列列出出任任何何敏敏感感量量時時進(jìn)進(jìn)程程的的啟啟動動只只能能通通過過進(jìn)進(jìn)程程啟啟動動語語句句WAIT語句句,,這這時時可可以以利利用用WAIT語句句監(jiān)監(jiān)視視信信號號的的變變化化情情況況以以便便決決定定是是否否啟啟動動進(jìn)進(jìn)程程WAIT語句句可可以以看看成成是是一一種種隱隱式式的的敏敏感感信信號號表表。。.子程程序序調(diào)調(diào)用用語語句句對對已已定定義義的的過過程程和和函函數(shù)數(shù)進(jìn)進(jìn)行行調(diào)調(diào)用用,,并并參參與與計計算算。。.順序描述語語句,包括括IF語句、CASE語句、LOOP語句、NULL語句等。.進(jìn)程跳出語語句,包括括NEXT語句、EXIT語句、用于于控制進(jìn)程程的運(yùn)行方方向。第3章VHDL程序結(jié)構(gòu)(3)敏感信號參參數(shù)表需列列出用于啟啟動本進(jìn)程程可讀入的的信號名(當(dāng)有WAIT語句時例外外)。第3章VHDL程序結(jié)構(gòu)程序3-15ARCHITECUREs_modeOFstatISBEGINp1PROCESSBEGINWAITUNTILclock;--等待clock激活進(jìn)程IF(driver='1')THENCASEoutputISWHENs1=>output<=s2;WHENs2=>output<=s3;WHENs3=>output<=s4;WHENs4=>output<=s1;ENDCASEENDIFENDPROCESSp1ENDARCHITECUREs_mode;第3章VHDL程序結(jié)構(gòu)3.進(jìn)程要點(diǎn)從設(shè)計者的的認(rèn)識角度度看VHDL程序與普通通軟件語言言構(gòu)成的程程序有很大大的不同,普通軟件語語言中的語語句的執(zhí)行行方式和功功能實(shí)現(xiàn)十十分具體和和直觀,編編程中,,幾乎可以以立即作出出判斷,但但VHLD程序,特別別是進(jìn)程結(jié)結(jié)構(gòu),設(shè)計計者應(yīng)當(dāng)從從三個方面面去判斷它它的功能和和執(zhí)行情況況1基于CPU的純軟件的的行為仿真真運(yùn)行方式式。2基于VHDL綜合器的綜綜合結(jié)果所所可能實(shí)現(xiàn)現(xiàn)的運(yùn)行方方式。3基于最終實(shí)實(shí)現(xiàn)的硬件件電路的運(yùn)運(yùn)行方。第3章VHDL程序結(jié)構(gòu)其它語句相相比,進(jìn)程程語句結(jié)構(gòu)構(gòu)具有更多多的特點(diǎn)對對進(jìn)程的的認(rèn)識和進(jìn)進(jìn)行進(jìn)程設(shè)設(shè)計需要注注意以下幾幾方面的問問題:(1)在同一結(jié)構(gòu)構(gòu)體中的任任一進(jìn)程是是一個獨(dú)立立的無限循循環(huán)程序結(jié)結(jié)構(gòu)但進(jìn)進(jìn)程中卻不不必放置諸諸如軟件語語言中的返返回語句。。它的返回回是自動的的,進(jìn)程只只有兩種運(yùn)運(yùn)行狀態(tài),,即執(zhí)行狀狀態(tài)和等待待狀態(tài)進(jìn)進(jìn)程是否進(jìn)進(jìn)入執(zhí)行狀狀態(tài)取決決于是否滿滿足特定的的條件,如如敏感變量量是否發(fā)生生變化如如果滿足條條件即進(jìn)進(jìn)入執(zhí)行狀狀態(tài)當(dāng)遇遇到ENDPROCESS語句后即停停止執(zhí)行自自動返回到到起始語句句PROCESS進(jìn)入等待狀狀態(tài)。第3章VHDL程序結(jié)構(gòu)(2)必須注意PROCESS中的順序語語句的執(zhí)行行方式與通通常的軟件件語言中的的語句的順順序執(zhí)行方方式有很大大的不同,,軟件語言言中每一條條語句的執(zhí)執(zhí)行是按CPU的機(jī)器周期期的節(jié)拍順順序執(zhí)行的的每一條條語句的執(zhí)執(zhí)行的時間間與CPU的工作方式式工作晶晶振的頻率率機(jī)器周周期及指令令周期的長長短有密切切的關(guān)系但但在PROCESS中,一個執(zhí)執(zhí)行狀態(tài)的的運(yùn)行周期期,即從PROCESS的啟動執(zhí)行行到遇到ENDPROCESS為止所花的的時間與任任何外部因因素都無關(guān)關(guān)。從綜合合結(jié)果來看看,甚至與與PROCESS語法結(jié)構(gòu)中中的順序語語句的多少少都沒有關(guān)關(guān)系,其執(zhí)執(zhí)行時間從從行為仿真真的角度看看只有一個個,VHDL模擬器的最最小分辯時時間,即一一個d時間,但從從綜合和硬硬件運(yùn)行的的角度看,,其執(zhí)行時時間是0,這與信號號的傳輸延延時無關(guān)與與被執(zhí)行行的語句的的實(shí)現(xiàn)時間間也無關(guān),,即在同一一PROCESS中10條語句和1000條語句的執(zhí)執(zhí)行時間是是一樣的。。這就是為為什么用進(jìn)進(jìn)程的順序序語句方式式也同樣能能描述全并并行的邏輯輯工作方式式的道理。。第3章VHDL程序結(jié)構(gòu)(3)雖然同一結(jié)結(jié)構(gòu)體中的的不同進(jìn)程程是并行運(yùn)運(yùn)行的,但但同一進(jìn)程程中的邏輯輯描述語句句則是順序序運(yùn)行的,,因而在進(jìn)進(jìn)程中只能能設(shè)置順序序語句。(4)進(jìn)程的激活活必須由敏敏感信號表表中定義的的任一敏感感信號的變變化來啟動動,否則必必須有一個個顯式的WAIT語句來激勵勵。這就是是說,進(jìn)程程既可以通通過敏感信信號的變化化來啟動也也可以由由滿足條件件的WAIT語句而激活活。反之,,在遇到到不滿足條條件的WAIT語句后進(jìn)程程將被掛起起因此進(jìn)進(jìn)程中必必須定義顯顯式或隱式式的敏感信信號。如果果一個進(jìn)程程對一個信信號集合總總是敏感的的那么我我們可以以使用敏感感表來指定定進(jìn)程的敏敏感信號但但是在在一個使用用了敏感表表的進(jìn)程或或者由該該進(jìn)程所調(diào)調(diào)用的子程程序中不不能含有任任何等待語語句。第3章VHDL程序結(jié)構(gòu)(5)結(jié)構(gòu)體中多多個進(jìn)程之之所以能并并行同步運(yùn)運(yùn)行一個個很重要的的原因是進(jìn)進(jìn)程之間的的通信是通通過傳遞信信號和共享享變量值來來實(shí)現(xiàn)的所所以相對對于結(jié)構(gòu)體體來說信信號具有全全局特性它它是進(jìn)程間間進(jìn)行并行行聯(lián)系的重重要途徑因因此在在任一進(jìn)程程的進(jìn)程說說明部分不不允許定義義信號和共共享變量共共享變量量是VHDL’’93增加的內(nèi)容容。(6)進(jìn)程是VHDL重要的建模模工具與與BLOCK語句不同的的一個重要要方面是,,進(jìn)程結(jié)構(gòu)構(gòu)不但為綜綜合器所支支持而且且進(jìn)程的建建模方式將將直接影響響仿真和綜綜合結(jié)果。。第3章VHDL程序結(jié)構(gòu)(7)進(jìn)程有組合合進(jìn)程和時時序進(jìn)程兩兩種類型組組合進(jìn)程程只產(chǎn)生組組合電路時時序進(jìn)程程產(chǎn)生時序序和相配合合的組合電電路。這兩兩種類型的的進(jìn)程設(shè)計計必須密切切注意VHDL語句句應(yīng)應(yīng)用用的的特特殊殊方方面面,,這這在在多多進(jìn)進(jìn)程程的的狀狀態(tài)態(tài)機(jī)機(jī)的的設(shè)設(shè)計計中中,,各各進(jìn)進(jìn)程程有有明明確確分分工工。。設(shè)設(shè)計計中中,,需需要要特特別別注注意意的的是是組組合合進(jìn)進(jìn)程程中中所所有有輸輸入入信信號號,,包包括括賦賦值值符符號號右右邊邊的的所所有有信信號號和和條條件件表表達(dá)達(dá)式式中中的的所所有有信信號號,,都都必必須須包包含含于于此此進(jìn)進(jìn)程程的的敏敏感感信信號號表表中中。。否否則則,,當(dāng)當(dāng)沒沒有有被被包包括括在在敏敏感感信信號號表表中中的的信信號號發(fā)發(fā)生生變變化化時時進(jìn)進(jìn)程程中中的的輸輸出出信信號號不不能能按按照照組組合合邏邏輯輯的的要要求求得得到到即即時時的的新新的的信信號號VHDL綜合合器器將將會會給給出出錯錯誤誤判判斷斷將將誤誤判判為為設(shè)設(shè)計計者者有有存存儲儲數(shù)數(shù)據(jù)據(jù)的的意意圖圖即即判判斷斷為為時時序序電電路路這這時時綜綜合合器器將將會會為為對對應(yīng)應(yīng)的的輸輸出出信信號號引引入入一一個個保保存存原原值值的的鎖鎖存存器器,,這這樣樣就就打打破破了了設(shè)設(shè)計計組組合合進(jìn)進(jìn)程程的的初初衷衷在在實(shí)實(shí)際際電電路路中中這這類類組組合合進(jìn)進(jìn)程程的的運(yùn)運(yùn)行行速速度度邏邏輯輯資資源源效效率率和和工工作作可可靠靠性性都都將將受受到到不不良良影影響響。。第3章章VHDL程程序序結(jié)結(jié)構(gòu)構(gòu)3.5子程程序序(SUBPROGRAM)子程程序序是是一一個個VHDL程序序模模塊塊這這個個模模塊塊是是利利用用順順序序語語句句來來定定義義和和完完成成算算法法的的因因此此,只能能使使用用順順序序語語句句這這一一點(diǎn)點(diǎn)與與進(jìn)進(jìn)程程十十分分相相似似所所不不同同的的是是,,子子程程序序不不能能像像進(jìn)進(jìn)程程那那樣樣可可以以從從本本結(jié)結(jié)構(gòu)構(gòu)體體的的其其它它塊塊或或進(jìn)進(jìn)程程結(jié)結(jié)構(gòu)構(gòu)中中直直接接讀讀取取信信號號值值或或者者向向信信號號賦賦值值。。子子程程序序可可以以在在VHDL程序的3個不同位位置進(jìn)行行定義。。即在程程序包、、結(jié)構(gòu)體體和進(jìn)程程中定義義,但由由于只有有在程序序包中定定義的子子程序可可被幾個個不同的的設(shè)計所所調(diào)用所所以一一般應(yīng)該該將子程程序放在在程序包包中。第3章VHDL程程序結(jié)構(gòu)構(gòu)VHDL子程序具具有可重重載性的的特點(diǎn),,即允許許有許多多重名的的子程序序,但這這些子程程序的參參數(shù)類型型及返回回值數(shù)據(jù)據(jù)類型是是不同的的,子程程序的可可重載性性是一個個非常有有用的特特性。子程序有有兩種類類型,即即過程(PROCEDURE)和函數(shù)(FUNCTION)。過程的調(diào)調(diào)用可通通過其界界面提供供多個返返回值,,或不提提供任何何值而而函數(shù)只只能返回回一個值值。在函數(shù)入入口中,,所有參參數(shù)都是是輸入?yún)?shù),而而過程有有輸入?yún)?shù)、輸輸出參數(shù)數(shù)和雙向向參數(shù)。。過程一般般被看作作一種語語句結(jié)構(gòu)構(gòu)常在在結(jié)構(gòu)體體或進(jìn)程程中以分分散的形形式存在在而函函數(shù)通常常是表達(dá)達(dá)式的一一部分常常在賦賦值語句句或表達(dá)達(dá)式中使使用。第3章VHDL程程序結(jié)構(gòu)構(gòu)在實(shí)用中中必須注注意綜綜合后的的子程序序?qū)⒂成渖溆谀繕?biāo)標(biāo)芯片中中的一個個相應(yīng)的的電路模模塊且且每一次次調(diào)用都都將在硬硬件結(jié)構(gòu)構(gòu)中產(chǎn)生生對應(yīng)于于具有相相同結(jié)構(gòu)構(gòu)的不同同的模塊塊。因此此,在實(shí)實(shí)用中要要密切切關(guān)注和和嚴(yán)格控控制子程程序的調(diào)調(diào)用次數(shù)數(shù)。第3章VHDL程程序結(jié)構(gòu)構(gòu)函數(shù)(FUNCTION)函數(shù)的語語言表達(dá)達(dá)格式如如下FUNCTION函數(shù)名(參數(shù)表)RETURN數(shù)據(jù)類型型--函數(shù)首FUNCTION函數(shù)名(參數(shù)表)RETURN數(shù)據(jù)類型型IS--函數(shù)體[說明部分分]BEGIN順序語句句ENDFUNCTION函數(shù)名;函數(shù)定義義應(yīng)由兩兩部分組組成,即即函數(shù)首首和函數(shù)數(shù)體。在在進(jìn)程或或結(jié)構(gòu)體體中不必必定義函函數(shù)首,,而在程程序包中中必須定定義函數(shù)數(shù)首。第3章VHDL程程序結(jié)構(gòu)構(gòu)1.函函數(shù)首首函數(shù)首是是由函數(shù)數(shù)名、參參數(shù)表和和返回值值的數(shù)據(jù)據(jù)類型三三部分組組成的。。如果將將所定義義的函數(shù)數(shù)組成程程序包入入庫的話話,定義義函數(shù)首首是必需需的,這這時的函函數(shù)首就就相當(dāng)于于一個入入庫貨物物名稱與與貨物位位置表,,入庫的的是函數(shù)數(shù)體。程序3-17PACKAGEpackexpIS--定義程序序包FUNCTIONmax(a,bINSTD_LOGIC_VECTOR)--定義函數(shù)首首RETURNSTD_LOGIC_VECTORFUNCTIONfunc1(a,b,c:REAL)--定義函數(shù)首首RETURNREALFUNCTION"*"(a,b:INTEGER)--定義函數(shù)首首RETURNINTEGERFUNCTIONas2(SIGNALin1,in2:REAL)--定義函數(shù)首首RETURNREALENDPACKAGEBODYpackexpISFUNCTIONmax(a,bINSTD_LOGIC_VECTOR)--定義函數(shù)體體RETURNSTD_LOGIC_VECTORISBEGINIFa>bTHENRETURNa;ELSERETURNb;ENDIF;ENDFUNCTIONmax;--結(jié)束FUNCTION語句END;--結(jié)束PACKAGEBODY語句...USEWORK.packexp.ALLENTITYaxampISPORT(...);END;ARCHITECTUREbhvOFaxampISBEGIN...out1<=max(dat1,dat2);--用在賦值語語句中的并并行函數(shù)調(diào)調(diào)用語句PROCESS(dat3,dat4)BEGINout2<=max(dat3,dat4);--順序函數(shù)調(diào)調(diào)用語句ENDPROCESS;...END;第3章VHDL程序結(jié)構(gòu)構(gòu)2函數(shù)體體函數(shù)體包含含一個對數(shù)數(shù)據(jù)類型常常數(shù)變變量等的局局部說明,,以及用以以完成規(guī)定定算法或轉(zhuǎn)轉(zhuǎn)換的順序序語句部分分。一旦函函數(shù)被調(diào)用用,就將執(zhí)執(zhí)行這部分分語句在函函數(shù)體結(jié)尾尾需以關(guān)鍵鍵詞ENDFUNCTION以及及函數(shù)名結(jié)結(jié)尾。第3章VHDL程序結(jié)構(gòu)構(gòu)重載函數(shù)(OVERLOADEDFUNCTION)VHDL允允許以相相同的函數(shù)數(shù)名定義函函數(shù)。但要要求函數(shù)中中定義的操操作數(shù)具有有不同的數(shù)數(shù)據(jù)類型,,以便調(diào)用用時用以分分辨不同功功能的同名名函數(shù),即即同樣名稱稱的函數(shù)可可以用不同同的數(shù)據(jù)類類型作為此此函數(shù)的參參數(shù)定義多多次,以此此定義的函函數(shù)稱為重重載函數(shù)。。函數(shù)還可可以允許用用任意位矢矢長度來調(diào)調(diào)用。程序3-20LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;PACKAGEpackexpIS--定義程序包包FUNCTIONmax(a,bINSTD_LOGIC_VECTOR)--定義函數(shù)首首RETURNSTD_LOGIC_VECTORFUNCTIONmax(a,bINBIT_VECTOR)--定義函數(shù)首首RETURNBIT_VECTORFUNCTIONmax(a,bININTEGER)--定義函數(shù)首首RETURNINTEGERENDPACKAGEBODYpackexpISFUNCTIONmax(a,bINSTD_LOGIC_VECTOR)--定義函數(shù)體體RETURNSTD_LOGIC_VECTORISBEGINIFa>bTHENRETURNa;ELSERETURNb;ENDIF;ENDFUNCTIONmax;--結(jié)束FUNCTION語句FUNCTIONmax(a,bININTEGER)--定義函數(shù)體體RETURNINTEGERISBEGINIFa>bTHENRETURNa;ELSERETURNb;ENDIF;ENDFUNCTIONmax;--結(jié)束FUNCTION語句FUNCTIONmax(a,bINBIT_VECTOR)--定義函數(shù)體體RETURNBIT_VECTORISBEGINIFa>bTHENRETURNa;ELSERETURNb;ENDIF;ENDFUNCTIONmax;--結(jié)束FUNCTION語句END;--結(jié)束PACKAGEBODY語句--以下是調(diào)用用重載函數(shù)數(shù)max的程序LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEWORK.packexp.ALLENTITYaxampISPORT(a1,b1:INSTD_LOGIC_VECTOR(3DOWNTO0);a2,b2:INBIT_VECTOR(4DOWNTO0);a3,b3:ININTEGER0TO15;c1:OUTSTD_LOGIC_VECTOR(3DOWNTO0);c2:OUTBIT_VECTOR(4DOWNTO0);c3:OUTINTEGER0TO15);END;ARCHITECTUREbhvOFaxampISBEGINc1<=max(a1,b1);--對函數(shù)max(a,bINSTD_LOGIC_VECTOR)的調(diào)用c2<=max(a2,b2);--對函數(shù)max(a,bINBIT_VECTOR)的調(diào)用c3<=max(a3,b3);--對函數(shù)max(a,bININTEGER)的調(diào)用END第3章VHDL程序結(jié)構(gòu)構(gòu)過程(PROCEDURE)VHDL中,子程序序的另外一一種形式是是過程PROCEDURE過程的語句句格式是PROCEDURE過程名參參數(shù)表--過程首PROCEDURE過程名參參數(shù)表IS[說明部分]BIGIN--過程體順序語句ENDPROCEDURE過程名與函數(shù)一樣樣,過程也也由兩部分分組成即即由過程首首和過程體體構(gòu)成。過過程首也不不是必需的的,過程體體可以獨(dú)立立存在和使使用,即在在進(jìn)程或結(jié)結(jié)構(gòu)體中不不必定義過過程首,而而在程序包包中必須定定義過程首首。第3章VHDL程序結(jié)構(gòu)構(gòu)1.過過程首過程首由過過程名和參參數(shù)表組成成。參數(shù)表表可以對常常數(shù)、變量量和信號三三類數(shù)據(jù)對對象目標(biāo)作作出說明,,并用關(guān)關(guān)鍵詞INOUT和INOUT定定義這些參參數(shù)的工作作模式,即即信息的流流向。如果果沒有指定定模式則則默認(rèn)為IN。第3章VHDL程序結(jié)構(gòu)構(gòu)程序3-23PROCEDUREpro1(VARIABLEa,b:INOUTREAL);PROCEDUREpro2CONSTANTa1:ININTEGERVARIABLEb1:OUTINTEGER);PROCEDUREpro3(SIGNALsig:INOUTBIT)第3章VHDL程序結(jié)構(gòu)構(gòu)2.過過程體過程體是由由順序語句句組成的過過程的調(diào)調(diào)用即啟動動了對過程程體的順序序語句的執(zhí)執(zhí)行,與函函數(shù)一樣過過程體中中的說明部部分只是局局部的,其其中的各種種定義只能能適用于過過程體內(nèi)部部。過程體體的順序語語句部分可可以包含任任何順序執(zhí)執(zhí)行的語句句,包括WAIT語句,,但需注意意,如果一一個過程是是在進(jìn)程中中調(diào)用的,,且這個進(jìn)進(jìn)程已列出出了敏感參參量表則則不能在此此過程中使使用WAIT語句句。第3章VHDL程序結(jié)構(gòu)構(gòu)程序3-25PROCEDUREcomp(a,r:INREAL;m:ININTEGER;v1,v2:OUTREAL)ISVARIABLEcnt:INTEGER;BEGINv1:=1.6*a;--賦初始值v2:=1.0;--賦初始值Q1:FORcntIN1TOmLOOPv2:=v2*v1;EXITQ1WHENv2>v1;--當(dāng)v2>v1跳出循環(huán)LOOPENDLOOPQ1ENDPROCEDUREcomp;第3章VHDL程序結(jié)構(gòu)構(gòu)重載過程(OVERLOADEDPROCEDURE)兩個或兩個個以上有相相同的過程程名和互不不相同的參參數(shù)數(shù)量及及數(shù)據(jù)類型型的過程稱稱為重載過過程,對于于重載過程程,也是靠靠參量類型型來辨別究究竟調(diào)用哪哪一個過程程。程序3-26PROCEDUREcalcu(v1,v2:INREAL;SIGNALout1:INOUTINTEGER);PROCEDUREcalcu(v1,v2:ININTEGER;SIGNALout1:INOUTREAL);...calcu(20.15,1.42,signl);--調(diào)用第一一個重載載過程calcucalcu(23320sign2)--調(diào)用第二二個重載載過程calcu第3章VHDL程程序結(jié)構(gòu)構(gòu)3.6庫LIBRARY可以把庫庫看成是是一種用用來存儲儲預(yù)先完完成的程程序包,,數(shù)據(jù)據(jù)集合體體和元件件的倉庫庫。如果要在在一項VHDL設(shè)計中用用到某一一程序包包,就必必須在這這項設(shè)計計中預(yù)先先打開這這個程序序包,使使此設(shè)計計能隨時時使用這這一程序序包中的的內(nèi)容。。在綜合合過程中中,每當(dāng)當(dāng)綜合器器在較高高層次的的VHDL源文件中中遇到庫庫語言,,就將隨隨庫指定定的源文文件讀入入,并參參與綜合合。通常庫庫中放置置不
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 冀少版八年級生物上冊第四單元第二節(jié)運(yùn)動的完成課件
- 第七章燃料及其利用-教案
- 語文S版三年級下冊全冊教案
- 建筑行業(yè)勞務(wù)管理規(guī)范
- A版五年級語文下冊教案(全冊)
- 家具采購最低價評審流程
- 交通運(yùn)輸合同施工承諾書
- 醫(yī)院建設(shè)項目合同協(xié)議書范本
- 園林工程簡易施工合同
- 石油化工委托加工環(huán)保要求
- 大學(xué)新生心理壓力與情緒管理策略與心理調(diào)整與發(fā)展計劃
- 四川省雅安市2023-2024學(xué)年八年級上學(xué)期期末考試語文試題(含答案)
- 職業(yè)打假人投訴、舉報處理規(guī)范
- 系統(tǒng)更換可行性方案
- 煙花爆竹經(jīng)營與使用的消防安全規(guī)范
- 頭療手法培訓(xùn)課件
- 班級中的規(guī)訓(xùn)與懲罰基于班級要素的社會學(xué)分析
- 樹消防意識 創(chuàng)平安校園課件
- 病毒學(xué)-流感病毒的變異與預(yù)防策略教學(xué)教案
- 砂石資源專項整治工作措施
- 醫(yī)院食堂經(jīng)營方案寫
評論
0/150
提交評論