VHDLandPLD第03章VHDL程序結(jié)構(gòu)(XXXX年9月)_第1頁(yè)
VHDLandPLD第03章VHDL程序結(jié)構(gòu)(XXXX年9月)_第2頁(yè)
VHDLandPLD第03章VHDL程序結(jié)構(gòu)(XXXX年9月)_第3頁(yè)
VHDLandPLD第03章VHDL程序結(jié)構(gòu)(XXXX年9月)_第4頁(yè)
VHDLandPLD第03章VHDL程序結(jié)構(gòu)(XXXX年9月)_第5頁(yè)
已閱讀5頁(yè),還剩84頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、第3章 VHDL程序結(jié)構(gòu)n一個(gè)完整的設(shè)計(jì)實(shí)體的最低要求應(yīng)該能為 VHDL 綜合器所接受 并能作為一個(gè)獨(dú)立設(shè)計(jì)單元 即元件的形式而存在的 VHDL 程序,這里的所謂元件,既可以被高層次的系統(tǒng)所調(diào)用,成為該系統(tǒng)的一部分,也可以作為一個(gè)電路功能塊而獨(dú)立存在和獨(dú)立運(yùn)行。第3章 VHDL程序結(jié)構(gòu) 圖3-1 VHDL程序設(shè)計(jì)基本結(jié)構(gòu)第3章 VHDL程序結(jié)構(gòu)n在 VHDL 程序中 實(shí)體 ENTITY 和結(jié)構(gòu)體 ARCHITECTURE 這兩個(gè)基本結(jié)構(gòu)是必需的 它們可以構(gòu)成最簡(jiǎn)單的 VHDL 程序。通常,最簡(jiǎn)單的 VHDL 程序結(jié)構(gòu)中還應(yīng)包括另一重要的部分,即庫(kù) LIBRARY和程序包 PACKAGE 一個(gè)實(shí)

2、用的 VHDL 程序可以由一個(gè)或多個(gè)設(shè)計(jì)實(shí)體構(gòu)成,可以將一個(gè)設(shè)計(jì)實(shí)體作為一個(gè)完整的系統(tǒng)直接利用,也可以將其作為其它設(shè)計(jì)實(shí)體的一個(gè)低層次的結(jié)構(gòu) 即元件來例化。元件調(diào)用和連接,就是用實(shí)體來說明一個(gè)具體的器件。 圖 3-1 中配置 CONFIGURATION 結(jié)構(gòu)的設(shè)置 常用于行為仿真中,如用于對(duì)特定結(jié)構(gòu)體的選擇控制。第3章 VHDL程序結(jié)構(gòu)n3.1 實(shí)體(ENTITY)n 實(shí)體作為一個(gè)設(shè)計(jì)實(shí)體的組成部分,其功能是對(duì)這個(gè)設(shè)計(jì)實(shí)體與外部電路進(jìn)行接口描述。實(shí)體是設(shè)計(jì)實(shí)體的表層設(shè)計(jì)單元,實(shí)體說明部分規(guī)定了設(shè)計(jì)單元的輸入輸出接口信號(hào)或引腳。它是設(shè)計(jì)實(shí)體對(duì)外的一個(gè)通信界面。就一個(gè)設(shè)計(jì)實(shí)體而言,外界所看到的僅僅

3、是它的界面上的各種接口。設(shè)計(jì)實(shí)體可以擁有一個(gè)或多個(gè)結(jié)構(gòu)體,用于描述此設(shè)計(jì)實(shí)體的邏輯結(jié)構(gòu)和邏輯功能,對(duì)于外界來說 這一部分是不可見的。n 不同邏輯功能的設(shè)計(jì)實(shí)體可以擁有相同的實(shí)體描述。這是因?yàn)閷?shí)體類似于原理圖中的一個(gè)部件符號(hào),而其具體的邏輯功能是由設(shè)計(jì)實(shí)體中結(jié)構(gòu)體的描述確定的。實(shí)體是 VHDL的基本設(shè)計(jì)單元 它可以對(duì)一個(gè)門電路、一個(gè)芯片、一塊電路板乃至整個(gè)系統(tǒng)進(jìn)行接口描述。第3章 VHDL程序結(jié)構(gòu)n1. 實(shí)體語(yǔ)句結(jié)構(gòu)n以下是實(shí)體說明單元的常用語(yǔ)句結(jié)構(gòu):nENTITY 實(shí)體名 ISn GENERIC ( 類屬表 ) ;n PORT ( 端口表 ) ;nEND ENTITY 實(shí)體名;n實(shí)體說明單元必

4、須按照這一結(jié)構(gòu)來編寫 實(shí)體應(yīng)以語(yǔ)句 ENTITY 實(shí)體名 IS 開始,以語(yǔ)句 END ENTITY 實(shí)體名 結(jié)束。其中的實(shí)體名可以由設(shè)計(jì)者自己添加,中間在方括號(hào)內(nèi)的語(yǔ)句描述,在特定的情況下并非是必需的。第3章 VHDL程序結(jié)構(gòu)n2. 實(shí)體名n一個(gè)設(shè)計(jì)實(shí)體無論多大和多復(fù)雜,在實(shí)體中定義的實(shí)體名即為這個(gè)設(shè)計(jì)實(shí)體的名稱在例化。(已有元件的調(diào)用和連接)中, 即可以用此名對(duì)相應(yīng)的設(shè)計(jì)實(shí)體進(jìn)行調(diào)用。nCOMPONENT h_adder - 元件調(diào)用說明n PORT ( a b : IN STD_LOGIC ;n co so : OUT STD_LOGIC );n END COMPONENT;n .n u1

5、 : h_adder PORT MAP ( a =ain b =bin co=d so =e);n . - 這里的符號(hào) = 是端口關(guān)聯(lián)符號(hào)第3章 VHDL程序結(jié)構(gòu)n3. GENERIC類屬說明語(yǔ)句n類屬 GENERIC 參量是一種端口界面常數(shù) 常以一種說明的形式放在實(shí)體或塊結(jié)構(gòu)體前的說明部分,類屬為所說明的環(huán)境提供了一種靜態(tài)信息通道,類屬與常數(shù)不同 常數(shù)只能從設(shè)計(jì)實(shí)體的內(nèi)部得到賦值,且不能再改變 而類屬的值可以由設(shè)計(jì)實(shí)體外部提供。因此,設(shè)計(jì)者可以從外面通過類屬參量的重新設(shè)定而容易地改變一個(gè)設(shè)計(jì)實(shí)體或一個(gè)元件的內(nèi)部電路結(jié)構(gòu)和規(guī)模。n類屬說明的一般書寫格式如下:nGENERIC( 常數(shù)名:數(shù)據(jù)類型

6、 : 設(shè)定值 n 常數(shù)名 :數(shù)據(jù)類型 : 設(shè)定值 ) ;第3章 VHDL程序結(jié)構(gòu)n 程序3-2n ENTITY mcu1 ISn GENERIC (addrwidth : INTEGER := 16);n PORT(n add_bus : OUT STD_LOGIC_VECTOR(addrwidth-1 DOWNTO 0) );第3章 VHDL程序結(jié)構(gòu)n程序3-4nLIBRARY IEEE;n USE IEEE.STD_LOGIC_1164.ALL;nENTITY andn ISn GENERIC ( n : INTEGER );n PORT(a : IN STD_LOGIC_VECTOR(n

7、-1 DOWNTO 0);n c : OUT STD_LOGIC);n END;n ARCHITECTURE behav OF andn ISn BEGINn PROCESS (a)n VARIABLE int : STD_LOGIC;n BEGINn int := 1;n FOR i IN aLENGTH - 1 DOWNTO 0 LOOPn IF a(i)=0 THENn int := 0;n END IF;nEND LOOP;n c 2)n PORT MAP (a(0)=d1,a(1)=d2,c=q1); u2: andn GENERIC MAP (n =5)n PORT MAP (a(

8、0)=d3,a(1)=d4,a(2)=d5,n a(3)=d6,a(4)=d7, c=q2);n END;第3章 VHDL程序結(jié)構(gòu)n4. PORT 端口說明n實(shí)體端口說明的一般書寫格式如下n PORT ( 端口名 : 端口模式 數(shù)據(jù)類型 n 端口名 : 端口模式 數(shù)據(jù)類型 ) ;n其中的端口名是設(shè)計(jì)者為實(shí)體的每一個(gè)對(duì)外通道所取的名字 端口模式是指這些通道上的數(shù)據(jù)流動(dòng)方式 如輸入或輸出等,數(shù)據(jù)類型是指端口上流動(dòng)的數(shù)據(jù)的表達(dá)格式或取值類型,這是由于 VHDL 是一種強(qiáng)類型語(yǔ)言 即對(duì)語(yǔ)句中的所有的端口信號(hào),內(nèi)部信號(hào)和操作數(shù)的數(shù)據(jù)類型有嚴(yán)格的規(guī)定,只有相同數(shù)據(jù)類型的端口信號(hào)和操作數(shù)才能相互作用。n一個(gè)

9、實(shí)體通常有一個(gè)或多個(gè)端口 端口類似于原理圖部件符號(hào)上的管腳 實(shí)體與外界交流的信息必須通過端口通道流入或流出。第3章 VHDL程序結(jié)構(gòu)n端口對(duì)應(yīng)于器件符號(hào)的外部引腳。端口名作為外部引腳的名稱,端口模式用來定義外部引腳的信號(hào)流向。n常用端口模式:nIN 模式:IN 定義的通道確定為輸入端口 并規(guī)定為單向只讀模式 可以通過此端口將變量 Variable 信息或信號(hào) Signal 信息讀入設(shè)計(jì)實(shí)體中。nOUT:模式 OUT 定義的通道確定為輸出端口 并規(guī)定為單向輸出模式 可以通過此端口將信號(hào)輸出設(shè)計(jì)實(shí)體 或者說可以將設(shè)計(jì)實(shí)體中的信號(hào)向此端口賦值。nINOUT:模式 INOUT 定義的通道確定為輸入輸出

10、雙向端口, 即從端口的內(nèi)部看可以對(duì)此端口進(jìn)行賦值,也可以通過此端口讀入外部的數(shù)據(jù)信息。而從端口的外部看,信號(hào)既可以從此端口流出 也可以向此端口輸入信號(hào)。第3章 VHDL程序結(jié)構(gòu)n程序3-7n.nENTITY MCS51 ISn PORT ( - 與8031接口的各端口定義 :n P0 : INOUT STD_LOGIC_VECTOR(7 DOWNTO 0); - 雙向地址/數(shù)據(jù)口n P2 : IN STD_LOGIC_VECTOR(7 DOWNTO 0); - 高8位地址線n RD WR : IN STD_LOGIC; - 讀 寫允許n.nEND MCS51;n.n PROCESS( WR_E

11、NABLE2 )n BEGINn IF (WR_ENABLE2EVENT AND WR_ENABLE2 = 1)n THEN LATCH_OUT2 = P0; END IF; -從P0口讀入外部信息n END PROCESS;n PROCESS( P2,LATCH_ADDRES,READY,RD )n BEGINn IF (LATCH_ADDRES=01111110) AND (P2=10011111)n AND (READY=1) AND (RD=0) THENn P0 = LATCH_IN1 ; - 寄存器中的數(shù)據(jù)輸入 P0口,由P0向外輸出n ELSE P0 = ZZZZZZZZ ;n

12、END IF - 禁止讀數(shù) P0口輸出呈高阻態(tài)n END PROCESS;n。第3章 VHDL程序結(jié)構(gòu)nBUFFER模式:BUFFER定義的通道確定為具有數(shù)據(jù)讀入功能的輸出端口,它與雙向端口的區(qū)別在于只能接受一個(gè)驅(qū)動(dòng)源。BUFFER 模式從本質(zhì)上將仍是 OUT 模式,只是在內(nèi)部結(jié)構(gòu)中具有將輸出至外端口的信號(hào)回讀的功能,即允許內(nèi)部回讀輸出的信號(hào),即允許反饋,如計(jì)數(shù)器的設(shè)計(jì),可將計(jì)數(shù)器輸出的計(jì)數(shù)信號(hào)回讀 以作下一計(jì)數(shù)值的初值 與INOUT 模式相比。顯然 BUFFER 的區(qū)別在于回讀(輸入)的信號(hào)不是由外部輸入的,而是由內(nèi)部產(chǎn)生,向外輸出的信號(hào),有時(shí)往往在時(shí)序上有所差異。第3章 VHDL程序結(jié)構(gòu)n

13、通常實(shí)現(xiàn)內(nèi)部反饋有兩種方式 即利用BUFFER建立一個(gè)緩沖模式的端口 如程序3-8所示,或在結(jié)構(gòu)體內(nèi)定義一個(gè)緩沖節(jié)點(diǎn)信號(hào) SIGNAL 如程序 3-9 所示。它們的邏輯功能和綜合后的電路都是一樣的。第3章 VHDL程序結(jié)構(gòu)n程序3-8nLIBRARY IEEE;nUSE IEEE.STD_LOGIC_1164.ALL ;nENTITY bfexp ISn PORT(n clk,rst,din : IN STD_LOGIC ;n q1 : BUFFER STD_LOGIC ;n q2 : OUT STD_LOGICn ) ;nEND bfexp ;nARCHITECTURE behav1 OF

14、bfexp ISn BEGINn PROCESS(clk,rst)n BEGINn IF rst =0 THENn q1 = 0 ;n q2 = 0 ;n ELSIF clkEVENT AND clk = 1 THENn q2 = din ; -將由din讀入的數(shù)據(jù)向q1輸出n q1 = q1 ; -將向q1輸出的數(shù)據(jù)回讀,并向q2賦值n END IF;n END PROCESS;n END;第3章 VHDL程序結(jié)構(gòu)n程序3-9nLIBRARY IEEE;nUSE IEEE.STD_LOGIC_1164.ALL ;nENTITY bfexp ISn PORT(clk,rst,din : IN

15、STD_LOGIC ;n q1 : OUT STD_LOGIC ;n q2 : OUT STD_LOGIC ) ;nEND bfexp ;nARCHITECTURE behav1 OF bfexp ISn SIGNAL qbuf : STD_LOGIC; -定義數(shù)據(jù)暫存緩沖信號(hào)qbufn BEGINn PROCESS(clk,rst)n BEGINn IF rst =0 THENn qbuf = 0 ;n q2 = 0 ;n ELSIF clkEVENT AND clk = 1 THENn qbuf = din ; -將由din讀入的數(shù)據(jù)暫存于qbufn q2 = qbuf ; -將緩沖信號(hào)q

16、buf中的數(shù)據(jù)向q2賦值n END IF;n q1 l_time,gb2 = s_time) ; - 局部端口參量設(shè)定n PORT (pb : IN BIT; pb2 : INOUT BIT ); - 塊結(jié)構(gòu)中局部端口定義n PORT MAP (pb1 = b1, pb2 = a1 ) ; - 塊結(jié)構(gòu)端口連接說明n CONSTANT delay : Time := 1 ms ; - 局部常數(shù)定義n SIGNAL s1 : BIT ; - 局部信號(hào)定義n BEGINn s1 = pb1 AFTER delay ;n pb2 = s1 AFTER gb1, b1 AFTER gb2 ;n END

17、BLOCK blk1 ;n END ARCHITECTURE func ;n程序3-12n.n b1 : BLOCKn SIGNAL s1: BIT ; n BEGINn S1 = a AND b ; n b2 : BLOCKn SIGNAL s2: BIT ;n BEGINn s2 = c AND d ; n b3 : BLOCKn BEGINn Z = s2 ; n END BLOCK b3 ;n END BLOCK b2 ;n y = s1 ; n END BLOCK b1 ;n.第3章 VHDL程序結(jié)構(gòu)n3. BLOCK語(yǔ)句在綜合中的地位n與大部分的 VHDL 語(yǔ)句不同。BLOCK 語(yǔ)

18、句的應(yīng)用,包括其中的類屬說明和端口定義都不會(huì)影響對(duì)原結(jié)構(gòu)體的邏輯功能的仿真結(jié)果。n如以下的程序 3-13 和程序 3-14 的仿真結(jié)果是完全相同的。第3章 VHDL程序結(jié)構(gòu)n程序3-13na1 : out1 = 1 after 3 ns ;n blk1 : BLOCKn BEGINn A2 : out2 = 1 AFTER 3 ns ;n A3 : out3 = 0 AFTER 2 ns ;n END BLOCK blk1 ;n程序3-14na1 : out1 = 1 AFTER 3 ns ;na2 : out2 = 1 AFTER 3 ns ;na3 : out3 output output

19、 output output b THEN RETURN a;n ELSE RETURN b;n END IF;n END FUNCTION max; -結(jié)束FUNCTION語(yǔ)句n END; -結(jié)束PACKAGE BODY 語(yǔ)句n .n USE WORK. packexp.ALLn ENTITY axamp ISn PORT(.);n END;n ARCHITECTURE bhv OF axamp ISn BEGINn .n out1 = max(dat1,dat2); -用在賦值語(yǔ)句中的并行函數(shù)調(diào)用語(yǔ)句n PROCESS(dat3,dat4)n BEGINn out2 b THEN RETU

20、RN a;n ELSE RETURN b; END IF;n END FUNCTION max; -結(jié)束FUNCTION語(yǔ)句n n FUNCTION max( a,b IN INTEGER) -定義函數(shù)體n RETURN INTEGER ISn BEGINn IF a b THEN RETURN a;n ELSE RETURN b; END IF;n END FUNCTION max; -結(jié)束FUNCTION語(yǔ)句n n FUNCTION max( a,b IN BIT_VECTOR) -定義函數(shù)體n RETURN BIT_VECTOR ISn BEGINn IF a b THEN RETURN

21、 a;n ELSE RETURN b; END IF;n END FUNCTION max; -結(jié)束FUNCTION語(yǔ)句n END; -結(jié)束PACKAGE BODY 語(yǔ)句n- 以下是調(diào)用重載函數(shù)max的程序n LIBRARY IEEE ;n USE IEEE.STD_LOGIC_1164.ALL ;n USE WORK.packexp.ALLn ENTITY axamp ISn PORT(a1,b1 : IN STD_LOGIC_VECTOR(3 DOWNTO 0);n a2,b2 : IN BIT_VECTOR(4 DOWNTO 0);n a3,b3 : IN INTEGER 0 TO 15

22、;n c1 : OUT STD_LOGIC_VECTOR(3 DOWNTO 0);n c2 : OUT BIT_VECTOR(4 DOWNTO 0);n c3 : OUT INTEGER 0 TO 15);n END;n ARCHITECTURE bhv OF axamp ISn BEGINn c1 = max(a1,b1); -對(duì)函數(shù)max( a,b IN STD_LOGIC_VECTOR)的調(diào)用n c2 = max(a2,b2); -對(duì)函數(shù)max( a,b IN BIT_VECTOR) 的調(diào)用n c3 v1; - 當(dāng)v2 v1 跳出循環(huán)LOOPn END LOOP Q1nEND PROCE

23、DURE comp ;第3章 VHDL程序結(jié)構(gòu)n重載過程 (OVERLOADED PROCEDURE)n兩個(gè)或兩個(gè)以上有相同的過程名和互不相同的參數(shù)數(shù)量及數(shù)據(jù)類型的過程稱為重載過程,對(duì)于重載過程,也是靠參量類型來辨別究竟調(diào)用哪一個(gè)過程。n程序3-26nPROCEDURE calcu ( v1, v2 : IN REAL ;n SIGNAL out1 : INOUT INTEGER) ;n PROCEDURE calcu ( v1, v2 : IN INTEGER ;n SIGNAL out1 : INOUT REAL) ;n .n calcu (20.15, 1.42, signl) ; -

24、調(diào)用第一個(gè)重載過程calcun calcu (23 320 sign2 ) - 調(diào)用第二個(gè)重載過程 calcu第3章 VHDL程序結(jié)構(gòu)n3.6 庫(kù) LIBRARYn可以把庫(kù)看成是一種用來存儲(chǔ)預(yù)先完成的程序包 ,數(shù)據(jù)集合體和元件的倉(cāng)庫(kù)。n如果要在一項(xiàng) VHDL 設(shè)計(jì)中用到某一程序包,就必須在這項(xiàng)設(shè)計(jì)中預(yù)先打開這個(gè)程序包,使此設(shè)計(jì)能隨時(shí)使用這一程序包中的內(nèi)容。在綜合過程中,每當(dāng)綜合器在較高層次的 VHDL 源文件中遇到庫(kù)語(yǔ)言,就將隨庫(kù)指定的源文件讀入,并參與綜合。n 通常 庫(kù)中放置不同數(shù)量的程序包 而程序包中又可放置不同數(shù)量的子程序,子程序中又含有函數(shù)、過程、設(shè)計(jì)實(shí)體、元件等基礎(chǔ)設(shè)計(jì)單元。第3章

25、VHDL程序結(jié)構(gòu)nVHDL 語(yǔ)言的庫(kù)分為兩類:n 一類是設(shè)計(jì)庫(kù),如在具體設(shè)計(jì)項(xiàng)目中設(shè)定的目錄所對(duì)應(yīng)的WORK 庫(kù),另一類是資源庫(kù),資源庫(kù)是常規(guī)元件和標(biāo)準(zhǔn)模塊存放的庫(kù),如 IEEE 庫(kù)。 設(shè)計(jì)庫(kù)對(duì)當(dāng)前項(xiàng)目是默認(rèn)可視的,無需用 LIBRARY和 USE等語(yǔ)句以顯式聲明。n庫(kù) LIBRARY 的語(yǔ)句格式如下:nLIBRARY 庫(kù)名;n如語(yǔ)句 LIBRARY IEEE ; 表示打開IEEE庫(kù)。第3章 VHDL程序結(jié)構(gòu)n1. 庫(kù)的種類nVHDL程序設(shè)計(jì)中常用的庫(kù)有以下幾種:(1)IEEE庫(kù)nIEEE 庫(kù)中的標(biāo)準(zhǔn)程序包主要包括 STD_LOGIC_1164,NUMERIC_BIT 和 NUMERIC_ST

26、D 等程序包,其中的 STD_LOGIC_1164 是最重要和最常用的程序包,大部分基于數(shù)字系統(tǒng)設(shè)計(jì)的程序包都是以此程序包中設(shè)定的標(biāo)準(zhǔn)為基礎(chǔ)的。第3章 VHDL程序結(jié)構(gòu)n還有一些程序包雖非 IEEE 標(biāo)準(zhǔn),但由于其已成事實(shí)上的工業(yè)標(biāo)準(zhǔn),也都并入了 IEEE 庫(kù),這些程序包中,最常用的是 Synopsys 公司的 STD_LOGIC_ARITH、STD_LOGIC_SIGNED和STD_LOGIC_UNSIGNED程序包。目前流行于我國(guó)的大多數(shù)EDA工具都支持 Synopsys 公司的程序包,一般基于大規(guī)模可編程邏輯器件的數(shù)字系統(tǒng)設(shè)計(jì)IEEE庫(kù)中的四個(gè)程序包STD_LOGIC_1164、STD_

27、LOGIC_ARITH、STD_LOGIC_SIGNED和 STD_LOGIC_UNSIGNED 已足夠使用。另外需要注意的是,在 IEEE 庫(kù)中符合 IEEEn標(biāo)準(zhǔn)的程序包并非符合 VHDL語(yǔ)言標(biāo)準(zhǔn),如 STD_LOGIC_1164程序包,因此在使用VHDL設(shè)計(jì)實(shí)體的前面必須以顯式表達(dá)出來。第3章 VHDL程序結(jié)構(gòu)n(2) STD庫(kù)nVHDL 語(yǔ)言標(biāo)準(zhǔn)定義了兩個(gè)標(biāo)準(zhǔn)程序包,即 STANDARD 和 TEXTIO 程序包 (文件輸入/輸出程序包)它們都被收入在 STD 庫(kù)中,只要在 VHDL 應(yīng)用環(huán)境中,即可隨時(shí)調(diào)用這兩個(gè)程序包中的所有內(nèi)容,即在編譯和綜合過程中 VHDL 的每一項(xiàng)設(shè)計(jì)都自動(dòng)地

28、將其包含進(jìn)去了。由于 STD 庫(kù)符合 VHDL 語(yǔ)言標(biāo)準(zhǔn) 在應(yīng)用中不必如 IEEE 庫(kù)那樣以顯式表達(dá)出來。第3章 VHDL程序結(jié)構(gòu)n (3) WORK庫(kù)nWORK 庫(kù)是用戶的 VHDL 設(shè)計(jì)的現(xiàn)行工作庫(kù),用于存放用戶設(shè)計(jì)和定義的一些設(shè)計(jì)單元和程序包。因而是用戶的臨時(shí)倉(cāng)庫(kù),用戶設(shè)計(jì)項(xiàng)目的成品、半成品模塊,以及先期已設(shè)計(jì)好的元件都放在其中。WORK 庫(kù)自動(dòng)滿足 VHDL 語(yǔ)言標(biāo)準(zhǔn),在實(shí)際調(diào)用中,也不必以顯式預(yù)先說明。第3章 VHDL程序結(jié)構(gòu)n (4) VITAL庫(kù)n使用 VITAL 庫(kù),可以提高 VHDL 門級(jí)時(shí)序模擬的精度,因而只在 VHDL 仿真器中使用。庫(kù)中包含時(shí)序程序包 VITAL_TIM

29、ING 和 ITAL_PRIMITIVES VITAL 程序包已經(jīng)成為 IEEE 標(biāo)準(zhǔn),在當(dāng)前的 VHDL 仿真器的庫(kù)中 VITAL 庫(kù)中的程序包都已經(jīng)并到 IEEE庫(kù)中。實(shí)際上 由于各 FPGA/CPLD生產(chǎn)廠商的適配工具,都能為各自的芯片生成帶時(shí)序信息的 VHDL 門級(jí)網(wǎng)表。用 VHDL 仿真器仿真該網(wǎng)表可以得到非常精確的時(shí)序仿真結(jié)果 因此,基于實(shí)用的觀點(diǎn),在 FPGA/CPLD 設(shè)計(jì)開發(fā)過程中 一般并不需要VITAL庫(kù)中的程序包。第3章 VHDL程序結(jié)構(gòu)n2 庫(kù)的用法n在 VHDL 語(yǔ)言中,庫(kù)的說明語(yǔ)句總是放在實(shí)體單元前面,這樣,在設(shè)計(jì)實(shí)體內(nèi)的語(yǔ)句就可以使用庫(kù)中的數(shù)據(jù)和文件。由此可見,庫(kù)

30、的用處在于使設(shè)計(jì)者可以共享已經(jīng)編譯過的設(shè)計(jì)成果 VHDL 允許在一個(gè)設(shè)計(jì)實(shí)體中同時(shí)打開多個(gè)不同的庫(kù) 但庫(kù)之間必須是相互獨(dú)立的。n例:n LIBRARY IEEE ;n USE IEEE.STD_LOGIC_1164.ALL ;n USE IEEE.STD_LOGIC_UNSIGNED.ALL ;n表示打開 IEEE 庫(kù),再打開此庫(kù)中的 STD_LOGIC_1164 程序包和 STD_LOGIC_UNSIGNED程序包的所有內(nèi)容。第3章 VHDL程序結(jié)構(gòu)n對(duì)于必須以顯式表達(dá)的庫(kù)及其程序包的語(yǔ)言表達(dá)式應(yīng)放在每一項(xiàng)設(shè)計(jì)實(shí)體最前面成為這項(xiàng)設(shè)計(jì)的最高層次的設(shè)計(jì)單元,庫(kù)語(yǔ)句一般必須與 USE 語(yǔ)句同用,庫(kù)

31、語(yǔ)句關(guān)鍵詞LIBRARY 指明所使用的庫(kù)名,USE 語(yǔ)句指明庫(kù)中的程序包。一旦說明了庫(kù)和程序包,整個(gè)設(shè)計(jì)實(shí)體都可進(jìn)入訪問或調(diào)用,但其作用范圍僅限于所說明的設(shè)計(jì)實(shí)體。VHDL 要求一項(xiàng)含有多個(gè)設(shè)計(jì)實(shí)體的更大的系統(tǒng)中,每一個(gè)設(shè)計(jì)實(shí)體都必須有自己完整的庫(kù)說明語(yǔ)句和USE語(yǔ)句。第3章 VHDL程序結(jié)構(gòu)nUSE語(yǔ)句的使用有兩種常用格式:n USE 庫(kù)名.程序包名.項(xiàng)目名 ;n USE 庫(kù)名.程序包名.ALL;n第一語(yǔ)句格式的作用是,向本設(shè)計(jì)實(shí)體開放指定庫(kù)中的特定程序包內(nèi)所選定的項(xiàng)目。n第二語(yǔ)句格式的作用是,向本設(shè)計(jì)實(shí)體開放指定庫(kù)中的特定程序包內(nèi)所有的內(nèi)容。n例如:USE IEEE.STD_LOGIC_1

32、164.ALL ;n表明打開 IEEE 庫(kù)中的 STD_LOGIC_1164 程序包,并使程序包中所有的公共資源對(duì)于本語(yǔ)句后面的 VHDL 設(shè)計(jì)實(shí)體程序全部開放,即該語(yǔ)句后的程序可任意使用程序包中的公共資源。第3章 VHDL程序結(jié)構(gòu)n3.7 程序包 PACKAGEn已在設(shè)計(jì)實(shí)體中定義的數(shù)據(jù)類型,子程序或數(shù)據(jù)對(duì)象對(duì)于其它設(shè)計(jì)實(shí)體是不可用的或者說是不可見的。為了使已定義的常數(shù)、數(shù)據(jù)類型、元件調(diào)用說明以及子程序能被更多的 VHDL 設(shè)計(jì)實(shí)體方便地訪問和共享,可以將它們收集在一個(gè) VHDL 程序包中。多個(gè)程序包可以并入一個(gè) VHDL 庫(kù)中,使之適用于更一般的訪問和調(diào)用范圍。這一點(diǎn)對(duì)于大系統(tǒng)開發(fā),多個(gè)或

33、多組開發(fā)人員同步并行工作顯得尤為重要。第3章 VHDL程序結(jié)構(gòu)n程序包的內(nèi)容主要由如下四種基本結(jié)構(gòu)組成,因此一個(gè)程序包中至少應(yīng)包含以下結(jié)構(gòu)中的一種。n(1) 常數(shù)說明,在程序包中的常數(shù)說明結(jié)構(gòu)主要用于預(yù)定義系統(tǒng)的寬度,如數(shù)據(jù)總線通道的寬度。n(2) VHDL 數(shù)據(jù)類型說明,主要用于在整個(gè)設(shè)計(jì)中通用的數(shù)據(jù)類型,例如通用的地址總線數(shù)據(jù)類型定義等。n(3) 元件定義,元件定義主要規(guī)定在 VHDL 設(shè)計(jì)中參與文件例化的文件 已完成的設(shè)計(jì)實(shí)體 對(duì)外的接口界面。n(4) 子程序,并入程序包的子程序有利于在設(shè)計(jì)中任一處進(jìn)行方便地調(diào)用。第3章 VHDL程序結(jié)構(gòu)n通常程序包中的內(nèi)容應(yīng)具有更大的適用面和良好的獨(dú)立

34、性,以供各種不同設(shè)計(jì)需求的調(diào)用,如STD_LOGIC_1164程序包定義的數(shù)據(jù)類型STD_LOGIC 和STD_LOGIC_VECTORn一旦定義了一個(gè)程序包,各種獨(dú)立的設(shè)計(jì)就能方便地調(diào)用。第3章 VHDL程序結(jié)構(gòu)n定義程序包的一般語(yǔ)句結(jié)構(gòu)如下n PACKAGE 程序包名 IS - 程序包首n 程序包首說明部分 n END 程序包名;n PACKAGE BODY 程序包名 IS - 程序包體n 程序包體說明部分以及包體內(nèi) n END 程序包名;第3章 VHDL程序結(jié)構(gòu)n1. 程序包首n程序包首的說明部分可收集多個(gè)不同的 VHDL 設(shè)計(jì)所需的公共信息,其中包括數(shù)據(jù)類型說明 信號(hào)說明 子程序說明及

35、元件說明等。所有這些信息雖然也可以在每一個(gè)設(shè)計(jì)實(shí)體中進(jìn)行逐一單獨(dú)的定義和說明,但如果將這些經(jīng)常用到的 并具有一般性的說明定義放在程序包中供隨時(shí)調(diào)用,顯然可以提高設(shè)計(jì)的效率和程序的可讀性。nPACKAGE seven ISn SUBTYPE segments is BIT_VECTOR(0 TO 6) ;n TYPE bcd IS RANGE 0 TO 9 ;n END seven ;n USE WORK.seven.ALL ;n ENTITY decoder ISn PORT (input: bcd; drive : out segments) ;n END decoder ;n ARCHIT

36、ECTURE simple OF decoder ISn BEGINn WITH input SELECTn drive = B1111110 WHEN 0 ,n B0110000 WHEN 1 ,n B1101101 WHEN 2 ,n B1111001 WHEN 3 ,n B0110011 WHEN 4 ,n B1011011 WHEN 5 ,n B1011111 WHEN 6 ,n B1110000 WHEN 7 ,n B1111111 WHEN 8 ,n B1111011 WHEN 9 ,n B0000000 WHEN OTHERS ;n END simple ;第3章 VHDL程序結(jié)構(gòu)n2. 程序包體n程序包體將包括在程序包首中已定義的子程序的子程序體。程序包體說明部分的組成內(nèi)容可以是 USE 語(yǔ)句(允許對(duì)其它程序包的調(diào)用)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論