




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、第章 VHDL基本結(jié)構(gòu)5.1 實體說明5.2 結(jié)構(gòu)體 5.3 結(jié)構(gòu)體基本組成部分 5.4 包集合、庫及配置 5.5 實訓(xùn):建立用戶自定義工作庫 習(xí)題 第章 VHDL基本結(jié)構(gòu)VHDL語言主要由實體、結(jié)構(gòu)體、庫、程序包及配置構(gòu)成,如圖5-1所示。圖5-1 VHDL語言設(shè)計電路的基本結(jié)構(gòu)第章 VHDL基本結(jié)構(gòu)5.1 實實 體體 說說 明明圖5-2所示為集成電路芯片74LS138,其管腳A、B、C為地址輸入端,G1、G2AN、G2BN為控制信號端,Y0N、Y1N、Y2N、Y3N、Y4N、Y5N、Y6N、Y7N為譯碼電路輸出端。第章 VHDL基本結(jié)構(gòu)圖5-2 74LS138的芯片管腳第章 VHDL基本結(jié)
2、構(gòu)在VHDL中,實體就是電路模塊或電路系統(tǒng)與外部電路的接口。實體規(guī)定了設(shè)計單元的輸入/輸出接口信號或引腳。就一個設(shè)計實體而言,外界所看到的僅僅是它與外部電路的各種接口。這個電路具體的功能原理是由結(jié)構(gòu)體描述的,對于外界來說,這部分是不可見的。實體是VHDL的基本設(shè)計單元,它可以對一個門電路、一個芯片、一塊電路板及至整個系統(tǒng)進行接口描述。實體說明格式如下:ENTITY實體名IS GENERIC(類屬參數(shù)說明); PORT(端口說明);END實體名;第章 VHDL基本結(jié)構(gòu)在實體說明語句中應(yīng)給出實體名,實體名可以理解為這個電路所對應(yīng)的名稱。實體說明語句中類屬參數(shù)說明必須放在端口說明之前,用于指定參數(shù)。
3、第章 VHDL基本結(jié)構(gòu)【例5-1】ENTITY mux IS GENERIC(m:time:=1 ns); PORT(d0,d1,sel:IN BIT; Q:OUT BIT);其中GENERIC(m:time:=1 ns);就是類屬參數(shù)說明語句,用于定義一個1 ns的時間信號m。如果實體內(nèi)部電路大量使用了m這個時間值,則當(dāng)設(shè)計者需要修改時間值時只需要一次性修改類屬參數(shù)語句“GENERIC(m:time:=某時間常數(shù));”中的常數(shù)即可,從而使設(shè)計電路變得方便快捷。第章 VHDL基本結(jié)構(gòu)端口說明是對設(shè)計實體中輸入和輸出端口的描述,格式如下:PORT(端口名(,端口名):方向 數(shù)據(jù)類型名; 端口名(
4、,端口名):方向 數(shù)據(jù)類型名);端口名是賦予每個系統(tǒng)引腳的名稱,通常用幾個英文字母組成,一般采用代表管腳信號實際意義的英文表示。各個端口名必須是唯一的,不能重復(fù),不能與VHDL的保留字相同。端口方向是引腳信號的方向,指明其是輸入、輸出或其它,詳細的方向類型見表5-1。第章 VHDL基本結(jié)構(gòu)第章 VHDL基本結(jié)構(gòu)IN表示該引腳是輸入方向的,比如3-8譯碼器的A、B、C、G1、G2AN、G2BN這些管腳。OUT表示該引腳是輸出方向的,比如3-8譯碼器的Y0N、Y1N、Y2N 、Y3N 、Y4N、Y5N、Y6N、Y7N。INOUT表示該引腳既可以是輸入方向的也可以是輸出方向的,這有點像單片機中的I/
5、O口,既可以輸入數(shù)據(jù)又可以輸出數(shù)據(jù)。BUFFER方向其實是一個輸出類型,但這個輸出信號可以作為一個反饋信號輸入到電路中。LINKAGE表示這個端口不指定方向,無論哪個方向都可以連接,一般不常用。下面再重點看一下OUT與BUFFER的區(qū)別,例如一個D觸發(fā)器,其電路如圖5-3(a)所示,如果我們想把該D觸發(fā)器構(gòu)成一個T觸發(fā)器,則電路如圖5-3(b)所示。第章 VHDL基本結(jié)構(gòu)對于D觸發(fā)器,Q為輸出端口,但對于T觸發(fā)器,雖然Q這時也是輸出性質(zhì)的,但Q端要反饋到異或門的輸入端,也即電路內(nèi)部又要用到該信號,則其方向為BUFFER類型。如果用VHDL編程,結(jié)構(gòu)體中使用輸出端口信號,則信號的方向就應(yīng)該為BU
6、FFER類型。比如在計數(shù)器的設(shè)計中,對于計數(shù)器的輸出信號方向,計算機在用語句描述時要進行遞增或遞減運算,如果直接由輸出信號做自加或自減運算,則其方向為BUFFER類型。當(dāng)然也可以在結(jié)構(gòu)體中設(shè)計一個中間信號來完成設(shè)計,然后再把該中間信號賦值給輸出信號,這樣輸出信號的方向就可以用“OUT”類型了。第章 VHDL基本結(jié)構(gòu)圖5-3 D觸發(fā)器和T觸發(fā)器(a) D觸發(fā)器;(b) T觸發(fā)器第章 VHDL基本結(jié)構(gòu)端口數(shù)據(jù)類型是指端口信號的取值類型,常用的有BIT、BIT_VECTOR、STD_LOGIC、STD_LOGIC_VECTOR、INTEGER、BOOLEAN等。BIT類型表示二進制輸入只能以二進制位
7、來表示,其取值只有兩種:“0”和“1”。當(dāng)一次要表示多位二進制位輸入或輸出時,則可以用BIT_VECTOR,稱為位矢量。第章 VHDL基本結(jié)構(gòu)【例【例5-2】 PORT(n0, n1, select: IN BIT; q: OUT BIT; bus: OUT BIT_VECTOR(3 DOWNTO 0);本例中,n0、n1、select 是輸入引腳,屬于BIT型;q是輸出引腳,也屬于BIT型;bus是一組8位二進制總線,其取值是按70的順序進行的,也可采用升序的寫法,即“0TO7”,這兩種寫法其對應(yīng)的值的位置是不相同的。第章 VHDL基本結(jié)構(gòu)【例例5-3】bus:OUT BIT_VECTOR(
8、3 DOWNTO 0);abus:OUT BIT_VECTOR(0 TO 3);bus=“1101”;abus=“1101”;第章 VHDL基本結(jié)構(gòu)程序在給bus賦值時,最左邊的值賦最高位,則bus(3)=1,bus(2)= 1,bus(1)= 0,bus(0)= 1。在給abus進行賦值時,最右邊賦給最高位,則abus(0)= 1,abus(1)= 1,abus(2)= 0,abus(3)= 1。我們在書寫二進制數(shù)值時,習(xí)慣把最高位寫在左邊,所以在VHDL編程中,位矢量的書寫一般采用降序。第章 VHDL基本結(jié)構(gòu)STD_LOGIC是工業(yè)標(biāo)準(zhǔn)的邏輯類型,其取值可以是0、1、X、Z等9種取值。ST
9、D_LOGIC_VECTOR是標(biāo)準(zhǔn)邏輯矢量類型,可以取一組標(biāo)準(zhǔn)邏輯類型的數(shù)據(jù),其對應(yīng)的賦值順序可以按降序進行定義,也可以按升序進行定義。INTEGER是整數(shù)類型,在用作端口數(shù)據(jù)類型時一定要指定它的長度。BOOLEAN是布爾類型,其取值為FALSE和TRUE。第章 VHDL基本結(jié)構(gòu)5.2 結(jié)結(jié) 構(gòu)構(gòu) 體體對于一個電路系統(tǒng)而言,實體說明部分主要是對系統(tǒng)外部接口的描述,這一部分如同一個“黑盒子”,描述時并不需要考慮實體內(nèi)部電路工作的具體細節(jié)。結(jié)構(gòu)體定義了該設(shè)計實體的功能,規(guī)定了該設(shè)計實體的數(shù)據(jù)流程,指派了實體中內(nèi)部元件的連接關(guān)系,描述電路的具體工作情況。結(jié)構(gòu)體的描述格式如下:ARCHITECTURE
10、 結(jié)構(gòu)體名 OF 實體名 IS說明語句 BEGIN 功能描述語句END 結(jié)構(gòu)體名;第章 VHDL基本結(jié)構(gòu)結(jié)構(gòu)體名由設(shè)計者自己命名,是結(jié)構(gòu)體的唯一名稱?!癘F”后面的實體名表明該結(jié)構(gòu)體屬于哪個設(shè)計實體,每個實體可以對應(yīng)一個結(jié)構(gòu)體也可對應(yīng)多個結(jié)構(gòu)體。一個實體若對應(yīng)多個結(jié)構(gòu)體,則結(jié)構(gòu)體名不能重復(fù),每個結(jié)構(gòu)體只能對應(yīng)于一個實體。說明語句用于對結(jié)構(gòu)內(nèi)部使用的信號、常量、數(shù)據(jù)類型、函數(shù)等進行定義。結(jié)構(gòu)體的信號定義和實體的端口說明一樣,應(yīng)有信號名稱和數(shù)據(jù)類型定義,但不需要說明信號方向。結(jié)構(gòu)體中定義的參量只能被該結(jié)構(gòu)體所使用,如果希望該參量也能夠被其它實體或結(jié)構(gòu)體使用,則應(yīng)該把這些參量在包集合中定義。第章 V
11、HDL基本結(jié)構(gòu)VHDL的功能描述語句包含五種不同類型的語句,分別為塊語句(BLOCK)、進程語句(PROCESS)、信號賦值語句、子程序調(diào)用語句和元件例化語句,其結(jié)構(gòu)圖如圖5-4所示。其中塊語句(BLOCK)、進程語句(PROCESS)、子程序調(diào)用語句在下節(jié)講述,并行信號賦值語句在6.2節(jié)中講述,元件例化語句在6.3節(jié)講述。例5-4是一個描述1對2 數(shù)據(jù)分配器電路的完整的VHDL程序。第章 VHDL基本結(jié)構(gòu)圖5-4 結(jié)構(gòu)體構(gòu)造圖第章 VHDL基本結(jié)構(gòu)【例例5-4】 ENTITY nax IS -實體定義 PORT(d,s: IN BIT; y0, y1: OUT BIT); END nax;
12、ARCHITECTURE dataflow OF nax IS -結(jié)構(gòu)體定義 BEGIN y0=(not s) and d; y1= s and d; END dataflow;第章 VHDL基本結(jié)構(gòu)5.3 結(jié)構(gòu)體基本組成部分結(jié)構(gòu)體基本組成部分5.3.1 塊語句塊語句塊(BLOCK)的應(yīng)用類似于利用Protel畫一個復(fù)雜的電路原理圖,可以將這個復(fù)雜的原理圖分成多個模塊,則每個模塊就對應(yīng)一部分塊語句。塊語句的使用格式如下:塊標(biāo)號:BLOCK端口說明語句類屬參數(shù)說明語句 BEGIN 并行語句; END BLOCK 塊標(biāo)號;第章 VHDL基本結(jié)構(gòu)端口說明語句對BLOCK的端口設(shè)置以及與外界的連接情況
13、進行說明,塊中的說明語句只適用于當(dāng)前的BLOCK,對于塊的外部來說是不透明的,不適用于外部環(huán)境。塊語句中的語句是并發(fā)執(zhí)行的,用于描述語句的具體邏輯功能,它可以包含結(jié)構(gòu)中的任何并發(fā)描述語句。塊語句其實是把一個系統(tǒng)分成若干個模塊分別進行描述的,所以在綜合時,綜合器只會保留塊語句中的并行語句,而去除其余的語句。第章 VHDL基本結(jié)構(gòu)第章 VHDL基本結(jié)構(gòu)第章 VHDL基本結(jié)構(gòu)在例5-5中包含兩個塊語句,分別完成全加器與全減器的功能。把“adder:BLOCK”及其后的“BEGIN”、“END BLOCK adder”和“subtractor:BLOCK”及其后的“BEGIN”、“END BLOCK
14、subtractor”語句去掉,不影響整個程序的執(zhí)行。塊語句不參與綜合器的綜合,在綜合過程中,VHDL綜合器將略去所有的塊語句。塊語句是并發(fā)執(zhí)行的,當(dāng)程序開始執(zhí)行時,塊語句會被無條件執(zhí)行,但是在某些特殊情況下,設(shè)計人員希望塊語句在某一個條件滿足時才執(zhí)行,為此VHDL提供了帶衛(wèi)式表達式的塊語句來實現(xiàn)此功能。其描述格式為第章 VHDL基本結(jié)構(gòu)塊標(biāo)號:BLOCK 衛(wèi)式表達式 BEGIN 并行語句; END BLOCK 塊標(biāo)號;當(dāng)衛(wèi)式表達式成立時,該塊語句被執(zhí)行,否則該塊語句不執(zhí)行。但是,衛(wèi)式塊語句只能用于仿真,不能用于綜合。第章 VHDL基本結(jié)構(gòu)5.3.2 進程進程在VHDL中,進程語句是使用最頻繁
15、、最廣泛的一種語句。在一個結(jié)構(gòu)體中可以包含多個進程,每個進程都是同步執(zhí)行的,但是進程內(nèi)部的語句順序執(zhí)行。進程語句的描述格式為進程標(biāo)號: PROCESS (敏感信號列表)進程說明語句;BEGIN順序描述語句;END PROCESS 進程標(biāo)號;第章 VHDL基本結(jié)構(gòu)其中,進程標(biāo)號是進程語句的標(biāo)識符,它是一個可選項;敏感信號列表是用來激勵進程啟動的量,當(dāng)敏感信號列表中有一個信號或多個信號發(fā)生變化時,該進程啟動,否則該進程處于掛起狀態(tài),所以進程敏感列表中必須要有一個信號,否則該進程將永遠不會啟動,除非在進程語句中包含“WAIT”語句;進程說明語句定義該進程所需要的局部量,可包括數(shù)據(jù)類型、常量、變量、屬
16、性、子程序等,但要注意,在進程中不允許定義信號。第章 VHDL基本結(jié)構(gòu)進程啟動后,進程中的語句按從上至下的順序執(zhí)行,最后一個語句執(zhí)行完成后,程序返回進程語句的開始,等待下一次敏感信號列表中的敏感信號變化或WAIT語句表達式的滿足。但應(yīng)該注意,雖然進程中的語句是順序執(zhí)行的,但執(zhí)行完進程中的順序語句并不需要時間,只是信號在傳輸時會有延時,這一點與單片機中的順序執(zhí)行語句不同。第章 VHDL基本結(jié)構(gòu)【例例5-6】ARCHITECTURE ART OF STAT IS BEGIN P1:PROCESS -該進程未列出敏感信號,進程需靠WAIT語句來啟動 BEGIN WAIT UNTIL CLOCK; -
17、等待CLOCK激活進程 IF(DRIVER=1)THEN -當(dāng)DRIVER為高電平時進入CASE語句第章 VHDL基本結(jié)構(gòu)第章 VHDL基本結(jié)構(gòu)第章 VHDL基本結(jié)構(gòu)第章 VHDL基本結(jié)構(gòu)該進程設(shè)計了一個2選1電路。在VHDL中,“-”表示后面的語句是注釋語句,不參與檢查編譯。進程之間可以進行通信,進程之間的通信是通過信號進行的。【例例5-8】設(shè)計一個產(chǎn)生“01101101”脈沖序列的信號發(fā)生電路,其中包含兩個進程,分別用來完成計數(shù)電路和數(shù)據(jù)選擇電路,兩個進程之間通過信號“y”進行通信。第章 VHDL基本結(jié)構(gòu)第章 VHDL基本結(jié)構(gòu)第章 VHDL基本結(jié)構(gòu)第章 VHDL基本結(jié)構(gòu)設(shè)計進程需要注意以下
18、幾方面:(1) 在進程中只能設(shè)置順序語句,雖然同一結(jié)構(gòu)體中的進程之間是并行運行的,但同一進程中的邏輯描述語句卻是順序運行的,因此,進程的順序語句具有明顯的順序/并行運行雙重性。第章 VHDL基本結(jié)構(gòu)(2) 進程的激活必須由敏感信號表中定義的任一敏感信號的變化來啟動,否則必須有一個顯式的WAIT語句來激活。這就是說,進程既可以由敏感信號的變化來啟動,也可以由滿足條件的WAIT語句來激活;反之,在遇到不滿足條件的WAIT語句后,進程將被掛起。因此,進程中必須定義顯式或隱式的敏感信號。如果一個進程對一個信號集合總是敏感的,那么,我們可以使用敏感表來指定進程的敏感信號。但是,在一個使用了敏感表的進程(
19、或者由該進程所調(diào)用的子程序)中不能含有任何等待語句。第章 VHDL基本結(jié)構(gòu)(3) 信號是多個進程間的通信線。結(jié)構(gòu)體中多個進程之所以能并行同步運行,一個很重要的原因就是進程之間的通信是通過傳遞信號和共享變量值來實現(xiàn)的。因此,相對于結(jié)構(gòu)體來說,信號具有全局特性,它是進程間進行并行聯(lián)系的重要途徑,故在任一進程的進程說明部分不允許定義信號(共享變量是VHDL 93版中增加的內(nèi)容)。第章 VHDL基本結(jié)構(gòu)(4) 進程是重要的建模工具。進程結(jié)構(gòu)不但為綜合器所支持,而且進程的建模方式將直接影響仿真和綜合結(jié)果。需要注意的是,綜合后對應(yīng)于進程的硬件結(jié)構(gòu)對進程中的所有可讀入信號都是敏感的,而在VHDL行為仿真中并
20、非如此,除非將所有的讀入信號列為敏感信號。第章 VHDL基本結(jié)構(gòu)進程語句是VHDL程序中使用最頻繁和最能體現(xiàn)VHDL特點的一種語句,其原因是它具有并行和順序行為的雙重性,其行為描述風(fēng)格具有一定的特殊性。為了使VHDL的軟件仿真與綜合后的硬件仿真對應(yīng)起來,應(yīng)當(dāng)將進程中的所有輸入信號都列入敏感表中。不難發(fā)現(xiàn),在對應(yīng)的硬件系統(tǒng)中,一個進程和一個并行賦值語句確實有十分相似的對應(yīng)關(guān)系,并行賦值語句就相當(dāng)于一個將所有輸入信號隱性地列入結(jié)構(gòu)體檢測范圍的(即敏感表的)進程語句。綜合后的進程語句所對應(yīng)的硬件邏輯模塊,其工作方式可以是組合邏輯方式的,也可以是時序邏輯方式的。例如在一個進程中,一般的IF語句綜合出的
21、多為組合邏輯電路(一定條件下);若出現(xiàn)WAIT語句,在一定條件下,綜合器將引入時序元件,如觸發(fā)器等。第章 VHDL基本結(jié)構(gòu)5.3.3 子程序子程序(函數(shù)與過程函數(shù)與過程)子程序是一個VHDL程序模塊,其含義與其他高級計算機語言中的子程序相同。子程序可以在程序包、結(jié)構(gòu)體和進程中定義;子程序必須在定義后才能被調(diào)用;主程序和子程序之間通過端口參數(shù)列表位置關(guān)聯(lián)方式進行數(shù)據(jù)傳送;子程序可以被多次調(diào)用完成重復(fù)性的任務(wù)。在子程序中,語句是按順序執(zhí)行的。在VHDL中,子程序有兩種類型:過程(PROCEDURE)和函數(shù)(FUNCTION)。第章 VHDL基本結(jié)構(gòu)1函數(shù)函數(shù)函數(shù)定義中包括函數(shù)首與函數(shù)體。在進程與結(jié)
22、構(gòu)體中不必定義函數(shù)首,僅在程序包中才定義函數(shù)首。函數(shù)首在程序包中被定義時是放在包頭中進行的,用不定義在這個程序包中的函數(shù)的名字與參數(shù)類型。函數(shù)體中含有說明語句,用來對數(shù)據(jù)類型、常數(shù)、變量等進行說明,在該部分說明的量是一個局部量,僅在該函數(shù)中有效。函數(shù)首的定義格式如下:FUNCTION 函數(shù)名(參數(shù)1,參數(shù)2,) RETURN 數(shù)據(jù)類型名;函數(shù)首僅表示定義了一個函數(shù),并不描述函數(shù)的具體功能。第章 VHDL基本結(jié)構(gòu)函數(shù)體的定義格式如下:FUNCTION 函數(shù)名(參數(shù)1,參數(shù)2,) RETURN 數(shù)據(jù)類型名 IS 說明語句BEGIN順序處理語句RETURN 返回值;END 函數(shù)名;第章 VHDL基本
23、結(jié)構(gòu)【例例5-9】定義一個函數(shù)體:FUNCTION min(x,y:INTEGER ) RETURN INTEGER IS -定義函數(shù)BEGIN IF x”等均可以被重載,以賦予新的數(shù)據(jù)類型操作功能,也就是說,通過重新定義運算符的方式,允許被重載的運算符能夠?qū)π碌臄?shù)據(jù)類型進行操作,或者允許不同的數(shù)據(jù)類型之間用此運算符進行運算。第章 VHDL基本結(jié)構(gòu)例5-12和例5-13給出了一個Synopsys 公司的程序包STD_ LOGIC_UNSIGNED中的部分函數(shù)結(jié)構(gòu)。示例沒有把全部內(nèi)容列出。在程序包STD_LOGIC_UNSIGNED的說明部分只列出了四個函數(shù)的函數(shù)首。在程序包體部分只列出了對應(yīng)的
24、部分內(nèi)容,程序包體部分的UNSIGED()函數(shù)是從IEEE.STD_LOGIC_ARITH庫中調(diào)用的。在程序包體中的最大整型數(shù)檢出函數(shù)MAXIUM只有函數(shù)體,沒有函數(shù)首,這是因為它只在程序包體內(nèi)調(diào)用。第章 VHDL基本結(jié)構(gòu)第章 VHDL基本結(jié)構(gòu)第章 VHDL基本結(jié)構(gòu)第章 VHDL基本結(jié)構(gòu)第章 VHDL基本結(jié)構(gòu)通過以上兩例,不但可以從中看到在程序包中完整的函數(shù)置位形式,而且還應(yīng)注意到在函數(shù)首的三個函數(shù)名都是同名的,即都以加法運算符“+”作為函數(shù)名。以這種方式定義函數(shù)即所謂運算符重載。對運算符重載(即對運算符重新定義)的函數(shù)稱為重載函數(shù)。實用中,如果已用“USE”語句打開了程序包 STD_LOGI
25、C _UNSIGNED,這時,如果設(shè)計實體中有一個STD_ LOGIC _VECTOR位矢和一個整數(shù)相加,程序就會自動調(diào)用第一個函數(shù),并返回位矢類型的值。若是一個位矢量與STD_LOGIC數(shù)據(jù)類型的數(shù)相加,則調(diào)用第三個函數(shù),并以位矢類型的值返回。第章 VHDL基本結(jié)構(gòu)與重載函數(shù)一樣,兩個或兩個以上有相同的過程名而參數(shù)數(shù)量及數(shù)據(jù)類型卻不完全相同的過程稱為重載過程。重載過程也是依靠參量類型來辨別究竟調(diào)用哪一個過程的。第章 VHDL基本結(jié)構(gòu)此例中定義了兩個重載過程,它們的過程名、參量數(shù)目及各參量的模式是相同的,但參量的數(shù)據(jù)類型不同。第一個過程中定義的兩個輸入?yún)⒘縱1和v2為實數(shù)型常數(shù),out1為in
26、out模式的整數(shù)信號。而第二個過程中的v1、v2則為整數(shù)常數(shù),out1為實數(shù)信號,所以在調(diào)用過程時將調(diào)用第二個過程。第章 VHDL基本結(jié)構(gòu)5.4 包集合、庫及配置包集合、庫及配置5.4.1 庫庫在利用VHDL進行工程設(shè)計時,為了提高設(shè)計效率以及使設(shè)計遵循某些統(tǒng)一的語言標(biāo)準(zhǔn)或數(shù)據(jù)格式,有必要將一些經(jīng)常使用的信息匯集在一個或幾個庫中以調(diào)用。這些信息可以是預(yù)先定義好的數(shù)據(jù)類型、子程序等設(shè)計單元的集合體(程序包),也可以是預(yù)先定義的各種設(shè)計實體以及構(gòu)造定義和配置定義等。第章 VHDL基本結(jié)構(gòu)在設(shè)計單元內(nèi)的語句可以使用庫中的結(jié)果,因此,設(shè)計者可以共享已經(jīng)編譯的設(shè)計結(jié)果。在VHDL中有多個庫,它們相互獨立
27、。通常庫是以一個子目錄的形式存在的,這些子目錄中存放了不同數(shù)量的程序包(以VHDL格式保存的程序),這些程序包里定義了一些常用的信息。VHDL程序設(shè)計中常用的庫有IEEE庫、SID庫和WORK庫等。第章 VHDL基本結(jié)構(gòu)1IEEE庫庫IEEE庫包含了IEEE標(biāo)準(zhǔn)的程序包和其它一些支持工業(yè)標(biāo)準(zhǔn)的程序包。其中STD_LOGIC_1164、STD_LOGIC _UNSIGNED、STD_LOGIC_SIGNED、STD_LOGIC_ARITH等程序包是目前經(jīng)常使用的程序包。在使用這個庫時必須先用LIBRARY IEEE聲明使用。第章 VHDL基本結(jié)構(gòu)2STD庫庫STD庫是VHDL的標(biāo)準(zhǔn)庫,在該庫中包
28、含STANDARD的程序包及TEXTIO程序包。STANDARD的程序包是VHDL標(biāo)準(zhǔn)的程序包,里面定義了VHDL標(biāo)準(zhǔn)數(shù)據(jù)、邏輯關(guān)系及函數(shù)等,在EDA工具軟件啟動后自動調(diào)用到工作庫中,所以使用STANDARD包中定義的量可以不加聲明。但是若使用TEXTIO包,則需要按照格式進行聲明。第章 VHDL基本結(jié)構(gòu)3WORK庫庫WORK庫是VHDL語言的工作庫,用戶在項目設(shè)計中設(shè)計成功、正在驗證、未仿真的中間部件等都堆放在工作庫WORK中。WORK庫是用戶的臨時倉庫,用戶的成品、半成品模塊、元件及設(shè)計中的參數(shù)都存放在其中。在MAX+plus軟件、Quartus軟件中要求所設(shè)計的程序要存在一個子目錄中,這
29、個子目錄其實就是這個項目設(shè)計的工作庫,用于保存當(dāng)前正在進行的設(shè)計及設(shè)計所產(chǎn)生的一些參數(shù)及部件。當(dāng)需要使用這些部件時,EDA工具軟件會自動把這些部件及參數(shù)加到當(dāng)前工作的庫中,所以不需要再進行說明調(diào)用。在對大型系統(tǒng)進行層次化設(shè)計時,對一些共用的元件和模塊建立一個資源庫,每個工程師在自己的WORK庫中引用這些元件,實現(xiàn)層次化設(shè)計。在調(diào)用這些資料時,應(yīng)該按照格式進行調(diào)用。第章 VHDL基本結(jié)構(gòu)另外還有VITAL庫、用戶自定義工作庫等。調(diào)用VITAL庫中的程序包可以提高VHDL時序模擬的精度,因而只在VHDL仿真器中使用。目前由于FPGA/CPLD生產(chǎn)廠家的EDA工具軟件都能為各自的芯片生成VHDL門級
30、網(wǎng)表,所以在設(shè)計時一般不需要調(diào)用VITAL庫中的程序包。用戶自定義工作庫是指用戶將自己設(shè)計的內(nèi)容或通過交流獲得的程序包、設(shè)計實體等并入這些庫中。第章 VHDL基本結(jié)構(gòu)在使用庫之前,要進行庫說明和程序包說明,庫和程序包的說明總是放在設(shè)計單元的前面。庫語言一般必須與USE語句同用。庫語言關(guān)鍵詞LIBRARY指明所使用的庫名,USE語句指明庫中的程序包。一旦說明了庫和程序包,整個設(shè)計實體就都可以進入訪問或被調(diào)用,但其作用范圍僅限于所說明的設(shè)計實體。 VHDL要求每項含有多個設(shè)計實體的大系統(tǒng), 每一個設(shè)計實體都必須有自己完整的庫的說明語句和USE語句。庫的調(diào)用格式為LIBRARY 庫名;USE ;第章
31、 VHDL基本結(jié)構(gòu)USE語句的使用將使所說明的程序包對本設(shè)計實體全部開放,即是可視的。USE語句的使用有兩種常用格式:USE庫名.程序包名.項目名;USE庫名.程序包名.ALL;第一條語句的作用是向本設(shè)計實體開放指定庫中的特定程序包內(nèi)所選定的項目,第二條語句格式的作用是向本設(shè)計實體開放指定庫中的特定程序包內(nèi)所有的內(nèi)容。第章 VHDL基本結(jié)構(gòu)【例5-15】LIBRARY IEEE; -打開IEEE庫USE IEEE.STD_LOGIC_1164.ALL; -打開IEEE庫中STD_LOGIC_1164程序包的所有內(nèi)容USE IEEE.STD_LOGIC_UNSIGNED.ALL; -打開IEEE
32、庫中STD_LOGIC_UNSIGNED程序包的所有內(nèi)容第章 VHDL基本結(jié)構(gòu)【例例5-16】LIBRARY IEEE;USE IEEE. STD_LOGIC_1164. STD_ULOGIC;USE IEEE. STD_LOGIC_1164.RISING_EDGE;例5-16中向當(dāng)前設(shè)計實體開放了STD_LOGIC_1164程序包中的RISING_EDGE函數(shù)。但由于此函數(shù)須用到數(shù)據(jù)類型STD_ ULOGIC,所以在上一條USE語句中開放了同一程序包中的這一數(shù)據(jù)類型。庫的作用范圍從一個實體說明開始到它所屬的結(jié)構(gòu)體、配置為止。當(dāng)有兩個實體時,第二個實體前要另加庫和包的說明。第章 VHDL基本結(jié)
33、構(gòu)5.4.2 程序包程序包通常在一個實體中對數(shù)據(jù)類型、常量等進行的說明只可以在一個實體中使用,為使這些說明可以在其它實體中使用,VHDL提供了程序包結(jié)構(gòu),包中羅列VHDL中用到的信號定義、常數(shù)定義、數(shù)據(jù)類型定義、元件定義、函數(shù)定義和過程定義等,它是一個可編譯的設(shè)計單元,也是庫結(jié)構(gòu)中的一個層次。通常程序包中的內(nèi)容應(yīng)具很大的適用性和良好的獨立性,以供各種不同的設(shè)計調(diào)用,如STD_LOGIC_1164程序包定義的數(shù)據(jù)類型STD_LOGIC和STD_LOGIC_VECTOR。一旦定義了一個程序包,各種獨立的設(shè)計就能方便地調(diào)用該程序包。第章 VHDL基本結(jié)構(gòu)程序包的定義分為兩個部分:包首和包體。(1)
34、包首的定義格式:PACKAGE 包名 IS 說明語句;END 包名;程序包首的說明部分可收集多個不同的VHDL設(shè)計所需的信息,其中包括數(shù)據(jù)類型說明、信號說明、子程序說明及元件說明等。第章 VHDL基本結(jié)構(gòu)(2) 包體格式:PACKAGE BODY 包名 IS 說明語句END 包名;程序包體包括程序包首中已經(jīng)定義的子程序的子程序體。在程序包集合中,包體并不是必需的,如果僅僅是定義數(shù)據(jù)類型或定義數(shù)據(jù)對象等內(nèi)容,程序包體可以不用,程序包首獨立被使用;但若在程序包中有子程序說明,則必須有對應(yīng)的子程序包體,這時,子程序體必須放在程序包體中。第章 VHDL基本結(jié)構(gòu)【例例5-17】定義包頭:PACKAGE
35、logic IS TYPE three_level_logic IS (0, 1, Z); -數(shù)據(jù)類型項目 CONSTANT unknown_value : three_level_logic := 0;-常數(shù)項目 FUNCTION invert (input: three_level_logic)-函數(shù)項目 RETURN three_level_logic;END logic;第章 VHDL基本結(jié)構(gòu)第章 VHDL基本結(jié)構(gòu)第章 VHDL基本結(jié)構(gòu)該程序調(diào)用了用戶自定義工作庫中的LOGIC程序包中的“three_level_logic”數(shù)值類型及“invert”函數(shù),并在程序中使用了這兩個項目。第
36、章 VHDL基本結(jié)構(gòu)在VHDL程序設(shè)計中經(jīng)常要用到以下一些程序包,這些程序包定義的功能介紹如下。(1) STD_LOGIC_1164程序包。它是IEEE庫中最常用的程序包,是IEEE的標(biāo)準(zhǔn)程序包。其中包含一些數(shù)據(jù)類型、子類型和函數(shù)的定義,這些定義將VHDL擴展為一個能描述多值邏輯(即除“0”和“1”以外其它的邏輯量,如高阻態(tài)“Z”、不定態(tài)“X”等)的硬件描述語言,滿足了實際數(shù)字系統(tǒng)設(shè)計的需求。該程序包中用得最多、最廣的是STD_LOGIC和STD_LOGIC_VECTOR類型,它們非常適用于FPGA/CPLD器件中的多值邏輯設(shè)計結(jié)構(gòu)。第章 VHDL基本結(jié)構(gòu)(2) STD_LOGIC_ARITH
37、程序包。它預(yù)先編譯在IEEE庫中,在STD_LOGIC_1164程序包的基礎(chǔ)上擴展了三個數(shù)據(jù)類型:UNSIGNED、SIGNED和SMALL_INT,并為其定義了相關(guān)的算術(shù)運算符和轉(zhuǎn)換函數(shù)。第章 VHDL基本結(jié)構(gòu)(3) STD_LOGIC_UNSIGNED和STD_LOGIC_SIGNED程序包。它們都預(yù)先編譯在IEEE庫中,重載了可用于INTEGER型、STD_LOGIC和STD_LOGIC_VECTOR型混合運算的運算符,并定義了一個由STD_LOGIC_VECTOR型到INTEGER型的轉(zhuǎn)換函數(shù)。這兩個程序包的區(qū)別是,STD_LOGIC_SIGNED中定義的運算符考慮符號,是有符號數(shù)的運
38、算,而STD_LOGIC_UNSIGNED中的運算符不考慮符號。程序包STD_LOGIC_UNSIGNED、STD_LOGIC_SIGNED和STD_LOGIC_ARITH雖未成為IEEE標(biāo)準(zhǔn),但已經(jīng)成為事實上的工業(yè)標(biāo)準(zhǔn),絕大多數(shù)VHDL綜合器和VHDL仿真器都支持它們。第章 VHDL基本結(jié)構(gòu)(4) STANDARD和TEXTIO程序包。它們是STD庫中的預(yù)編譯程序包。其中STANDARD程序包中定義了許多基本的數(shù)據(jù)類型、子類型和函數(shù),是VHDL標(biāo)準(zhǔn)程序包,實際應(yīng)用中已隱性打開,不必用USE語句另作聲明。TEXTIO程序包定義了支持文本文件操作的許多類型和子程序,在使用它之前,需加USE ST
39、D.TEXTIO.ALL語句。TEXTIO程序包主要供仿真器使用??梢杂梦谋揪庉嬈鹘⒁粋€數(shù)據(jù)文件,文件中包含仿真時需要的數(shù)據(jù),仿真時用其中的子程序存取這些數(shù)據(jù)。綜合器中,此程序包被忽略。第章 VHDL基本結(jié)構(gòu)5.4.3 配置配置一個實體可以對應(yīng)多個構(gòu)造體,比如在設(shè)計RS觸發(fā)器時使用了兩個構(gòu)造體,目的是比較不同描述方式情況下輸出的性能有何不同。第一個結(jié)構(gòu)體采用調(diào)用元件的形式來描述RS觸發(fā)器的工作情況,第二個結(jié)構(gòu)體采用一些門電路來構(gòu)成RS觸發(fā)器。在仿真時通過配置來選擇結(jié)構(gòu)體,通過比較不同的仿真結(jié)果可以得出不同描述方式下結(jié)構(gòu)體仿真結(jié)果有哪些不同。配置語句格式如下:CONFIGURATION 配置名
40、 OF 實體名 IS說明語句END配置名;第章 VHDL基本結(jié)構(gòu)最簡單的配置可以寫成如下形式:CONFIGURATION 配置名 OF 實體名 ISFOR 被選構(gòu)造體名 END FOR; END配置名;第章 VHDL基本結(jié)構(gòu)第章 VHDL基本結(jié)構(gòu)第章 VHDL基本結(jié)構(gòu)第章 VHDL基本結(jié)構(gòu)5.5 實訓(xùn):建立用戶自定義工作庫實訓(xùn):建立用戶自定義工作庫一、實訓(xùn)目的一、實訓(xùn)目的(1) 學(xué)會運用Quartus軟件的VHDL語言輸入功能設(shè)計數(shù)字電路。(2) 掌握用戶自定義工作庫的建立過程。(3) 掌握函數(shù)體、函數(shù)首的用法,掌握枚舉類型的設(shè)置。(4) 掌握包首、包體的用法。第章 VHDL基本結(jié)構(gòu)二、實訓(xùn)原理二、實訓(xùn)原理試編寫一個程序包,該程序包內(nèi)部定義一個枚舉類型與一個函數(shù)。其中,函數(shù)名為max,函數(shù)的功能是對輸入的兩個數(shù)進行大小比較;枚舉類型名為week,其取值可以為sun、mon、tue、wed、thu、fri、sat。設(shè)置一個程序,調(diào)用該程序包,對輸入的兩個數(shù)進行大小比較,并通過數(shù)碼管顯示當(dāng)前的星期數(shù),比如為“mon”則顯示“1”,每隔一秒鐘自動加1,也即運用
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 南通大學(xué)杏林學(xué)院《中學(xué)美術(shù)課程標(biāo)準(zhǔn)與教材研究》2023-2024學(xué)年第二學(xué)期期末試卷
- 遼寧師范大學(xué)《急診醫(yī)學(xué)Ⅰ》2023-2024學(xué)年第二學(xué)期期末試卷
- 漳州職業(yè)技術(shù)學(xué)院《化學(xué)課堂教學(xué)技能訓(xùn)練》2023-2024學(xué)年第二學(xué)期期末試卷
- 江西冶金職業(yè)技術(shù)學(xué)院《建筑快題設(shè)計》2023-2024學(xué)年第二學(xué)期期末試卷
- 沈陽理工大學(xué)《固體廢物處理與處置工程》2023-2024學(xué)年第二學(xué)期期末試卷
- 長春光華學(xué)院《人工智能程序設(shè)計實驗》2023-2024學(xué)年第二學(xué)期期末試卷
- 茂名職業(yè)技術(shù)學(xué)院《臨床流行病學(xué)》2023-2024學(xué)年第二學(xué)期期末試卷
- 昌吉學(xué)院《武術(shù)》2023-2024學(xué)年第二學(xué)期期末試卷
- 天津外國語大學(xué)《機械制圖(二)》2023-2024學(xué)年第二學(xué)期期末試卷
- 浙大寧波理工學(xué)院《數(shù)字電視中心技術(shù)》2023-2024學(xué)年第二學(xué)期期末試卷
- 【MOOC】大學(xué)英語視聽導(dǎo)學(xué)-湖南大學(xué) 中國大學(xué)慕課MOOC答案
- 2024年高考真題-化學(xué)(天津卷) 含解析
- 2024年可行性研究報告投資估算及財務(wù)分析全套計算表格(含附表-帶只更改標(biāo)紅部分-操作簡單)
- 國開2024年《機械設(shè)計基礎(chǔ)》形考任務(wù)1-4答案
- Creo-7.0基礎(chǔ)教程-配套課件
- 中國民主同盟入盟申請表(樣表)
- 畢業(yè)設(shè)計(論文)-軸向柱塞泵設(shè)計(含全套CAD圖紙)
- 公安機關(guān)通用告知書模板
- 山東省初中學(xué)業(yè)水平考試信息技術(shù)學(xué)科命題要求
- 年貼現(xiàn)值系數(shù)表
- 《呼吸機的使用管理》PPT課件.ppt
評論
0/150
提交評論