vhdl基本語(yǔ)法(簡(jiǎn)略共34頁(yè))_第1頁(yè)
vhdl基本語(yǔ)法(簡(jiǎn)略共34頁(yè))_第2頁(yè)
vhdl基本語(yǔ)法(簡(jiǎn)略共34頁(yè))_第3頁(yè)
vhdl基本語(yǔ)法(簡(jiǎn)略共34頁(yè))_第4頁(yè)
vhdl基本語(yǔ)法(簡(jiǎn)略共34頁(yè))_第5頁(yè)
已閱讀5頁(yè),還剩44頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、VHDL硬件描述語(yǔ)言1.1 VHDL概述1.1.1 VHDL的特點(diǎn)VHDL語(yǔ)言作為一種標(biāo)準(zhǔn)的硬件描述語(yǔ)言,具有結(jié)構(gòu)嚴(yán)謹(jǐn)、描述能力強(qiáng)的特點(diǎn),由于VHDL語(yǔ)言來(lái)源于C、 Fortran 等計(jì)算機(jī)高級(jí)語(yǔ)言,在VHDL 語(yǔ)言中保留了部分高級(jí)語(yǔ)言的原語(yǔ)句,如if 語(yǔ)句、子程序和函數(shù)等,便于閱讀和應(yīng)用。具體特點(diǎn)如下:1. 支持從系統(tǒng)級(jí)到門(mén)級(jí)電路的描述,既支持自底向上(bottom-up )的設(shè)計(jì)也支持從頂向下( top-down )的設(shè)計(jì),同時(shí)也支持結(jié)構(gòu)、行為和數(shù)據(jù)流三種形式的混合描述。2. VHDL 的設(shè)計(jì)單元的 基本組成部分是實(shí)體( entity )和結(jié)構(gòu)體( architecture),實(shí)體包含設(shè)計(jì)

2、系統(tǒng)單元的輸入和輸出端口信息,結(jié)構(gòu)體描述設(shè)計(jì)單元的組成和行為,便于各模塊之間數(shù)據(jù)傳送。 利用單元( componet)、塊( block )、過(guò)程( procure)和函數(shù)( function )等語(yǔ)句,用結(jié)構(gòu)化層次化的描述方法,使復(fù)雜電路的設(shè)計(jì)更加簡(jiǎn)便。采用包的概念,便于標(biāo)準(zhǔn)設(shè)計(jì)文檔資料的保存和廣泛使用。3. VHDL 語(yǔ)言有常數(shù)、信號(hào)和變量三種數(shù)據(jù)對(duì)象,每一個(gè)數(shù)據(jù)對(duì)象都要指定數(shù)據(jù)類(lèi)型, VHDL的數(shù)據(jù)類(lèi)型豐富,有數(shù)值數(shù)據(jù)類(lèi)型和邏輯數(shù)據(jù)類(lèi)型,有位型和位向量型。既支持預(yù)定義的數(shù)據(jù)類(lèi)型,又支持自定義的數(shù)據(jù)類(lèi)型,其定義的數(shù)據(jù)類(lèi)型具有明確的物理意義,VHDL是強(qiáng)類(lèi)型語(yǔ)言。4. 數(shù)字系統(tǒng)有組合電路和時(shí)

3、序電路,時(shí)序電路又分為同步和異步,電路的動(dòng)作行為有并行和串行動(dòng)作, VHDL 語(yǔ)言常用語(yǔ)句分為并行語(yǔ)句和順序語(yǔ)句,完全能夠描述復(fù)雜的電路結(jié)構(gòu)和行為狀態(tài)。1.1.2 VHDL語(yǔ)言的基本結(jié)構(gòu)VHDL語(yǔ)言是數(shù)字電路的硬件描述語(yǔ)言,在語(yǔ)句結(jié)構(gòu)上吸取了Fortran 和 C 等計(jì)算機(jī)高級(jí)語(yǔ)言的語(yǔ)句,如IF 語(yǔ)句、循環(huán)語(yǔ)句、函數(shù)和子程序等,只要具備高級(jí)語(yǔ)言的編程技能和數(shù)字邏輯電路的設(shè)計(jì)基礎(chǔ),就可以在較短的時(shí)間內(nèi)學(xué)會(huì)VHDL 語(yǔ)言。但是VHDL畢竟是一種描述數(shù)字電路的工業(yè)標(biāo)準(zhǔn)語(yǔ)言,該種語(yǔ)言的標(biāo)識(shí)符號(hào)、數(shù)據(jù)類(lèi)型、數(shù)據(jù)對(duì)象以及描述各種電路的語(yǔ)句形式和程序結(jié)構(gòu)等方面具有特殊的規(guī)定,如果一開(kāi)始就介紹它的語(yǔ)法規(guī)定,會(huì)

4、使初學(xué)者感到枯燥無(wú)味,不得要領(lǐng)。較好的辦法是選取幾個(gè)具有代表性的VHDL 程序?qū)嵗冉榻B整體的程序結(jié)構(gòu),再逐步介紹程序中的語(yǔ)法概念。一個(gè) VHDL 語(yǔ)言的設(shè)計(jì)程序描述的是一個(gè)電路單元,這個(gè)電路單元可以是一個(gè)門(mén)電路,或者是一個(gè)計(jì)數(shù)器,也可以是一個(gè)CPU。一般情況下,一個(gè)完整的VHDL 語(yǔ)言程序至少要包含程序包、實(shí)體和結(jié)構(gòu)體三個(gè)部分。實(shí)體給出電路單元的外部輸入輸出接口信號(hào)和引腳信息,結(jié)構(gòu)體給出了電路單元的內(nèi)部結(jié)構(gòu)和信號(hào)的行為特點(diǎn), 程序包定義在設(shè)計(jì)結(jié)構(gòu)體和實(shí)體中將用到的常數(shù)、數(shù)據(jù)類(lèi)型、子程序和設(shè)計(jì)好的電路單元等。一位全加器的邏輯表達(dá)式是:S=A B CiCo=AB+ACi+BCi全加器的 VHD

5、L 程序的文件名稱(chēng)是 fulladder.VHD ,其中 VHD 是 VHDL 程序的文件擴(kuò)展名,程序如下:LIBRARY IEEE;-IEEE 標(biāo)準(zhǔn)庫(kù)USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY fulladder IS- fulladder 是實(shí)體名稱(chēng)PORT(A, B, Ci : IN STD_LOGIC; -定義輸入 /輸出信號(hào)Co, S : OUT STD_LOGIC);END fulladder;是結(jié)構(gòu)體名BEGINS = A XOR B

6、 XOR Ci;Co = (A AND B) OR (A AND Ci) OR (B AND Ci);END addstr;從這個(gè)例子中可以看出,一段完整的VHDL代碼主要由以下幾部分組成:第一部分是程序包,程序包是用VHDL 言 寫(xiě)的共享文件,定 在 構(gòu)體和 體中將用到的常數(shù)、數(shù)據(jù) 型、子程序和 好的 路 元等,放在文件目 名稱(chēng) IEEE 的程序包 中。第二部分是程序的 體,定 路 元的 入/ 出引腳信號(hào)。程序的 體名稱(chēng)fulladder是任意取的,但是必 與VHDL 程序的文件名稱(chēng)相同。 體的 符是ENTITY , 體以ENTITY 開(kāi) ,以 END 束。 其中,定 A 、B 、 Ci 是

7、 入信號(hào)引腳,定 Co 和 S 是 出信號(hào)引腳。第三部分是程序的 構(gòu)體,具體描述 路的內(nèi)部 構(gòu)和 功能。 構(gòu)體有三種描述方式,分 是行 ( BEHA VIOR )描述、數(shù)據(jù)流( DATAFLOW )描述方式和 構(gòu) (STRUCTURE)描述方式, 其中數(shù)據(jù)流( DA TAFLOW )描述方式又稱(chēng) 寄存器(RTL )描述方式,例中 構(gòu)體的描述方式屬于數(shù)據(jù)流描述方式。 構(gòu)體以 符ARCHITECTURE開(kāi) ,以 END 結(jié)尾。 構(gòu)體的名稱(chēng) addstr 是任意取的。小提示:VHDL 每條 句是以分號(hào)“; ”作 束符的,并且VHDL 空格是不敏感的,所以符合之 空格的數(shù)目是可以自己 定的??梢园醋约?/p>

8、的 任意添加,增 代 可 性。1.1.3 VHDL 言的 體( ENTITY ) 明 句 體是 VHDL程序 中最基本的 成部分,在 體中定 了 芯片中所需要的 入 / 出信號(hào)引腳。 端口信號(hào)名稱(chēng)表示芯片的 入 / 出信號(hào)的引腳名, 種端口信號(hào)通常被稱(chēng) 外部信號(hào),信號(hào)的 入 / 出狀 被稱(chēng) 端口模式, 在 體中 定 信號(hào)的數(shù)據(jù) 型。 體 明 句的格式 :ENTITY 體名稱(chēng) ISGENERIC (常數(shù)名稱(chēng)1: 型 := 缺省 ;常數(shù)名稱(chēng)2: 型 := 缺省 ;常數(shù)名稱(chēng) N : 型 := 缺省 ;);PORT(端口信號(hào)名稱(chēng)1: 入 / 出狀 數(shù)據(jù) 型;端口信號(hào)名稱(chēng)2: 入 / 出狀 數(shù)據(jù) 型;端

9、口信號(hào)名稱(chēng)N: 入 / 出狀 數(shù)據(jù) 型);END 體名稱(chēng);小提示:VHDL 言具有 87 準(zhǔn)與 93 準(zhǔn)兩種格式,以上 VHDL 的 87 準(zhǔn), 于 93 準(zhǔn) 要使用 END ENTITY 體名稱(chēng); 束 體。 注意 了保 代 的可 合性與通用性,最好采用 87 準(zhǔn)的 VHDL 格式,有些 EDA 工具不一定支持 93 準(zhǔn)的 VHDL 言格式。( Quartus II 支持 VHDL93 、 87 準(zhǔn)) 屬 GENERIC 常用來(lái)定 體端口大小,數(shù)據(jù) 度,元件例化數(shù)目等。一般在 的 中不常用。例 1-1-2 一個(gè)同步十六 制加法 數(shù)器, 有 數(shù)控制、異步清零、和 位 出等功能。 路有三個(gè) 入端和

10、五個(gè) 出端,分 是 脈沖 入端CLK , 數(shù)器狀 控制端 EN ,異步清零控制端Rd,四位 數(shù) 出端 Q0, Q1, Q2, Q3和一個(gè) 位 出端 Co 。當(dāng) 數(shù)器 出0000 1110 , Co=0,只有當(dāng) 數(shù)器 出 1111 , Co=1。 的 體部分如下:ENTITY cntm16 ISPORT(EN : IN STD_LOGIC;Rd : IN STD_LOGIC;CLK : IN STD_LOGIC;Co : OUT STD_LOGIC;Q : BUFFER STD_LOGIC_VECTOR(3 DOWNTO 0);END cntm16;1. 體名稱(chēng)表示所 路的 路名稱(chēng),必 與VHD

11、L 文件名相同, 體名稱(chēng)是“ cntm16 ”,所存的 VHDL文件名必 是 “ cntm16.VHD ”。2. 端口信號(hào)名稱(chēng)表示芯片的 入/ 出信號(hào)的引腳名, 種端口信號(hào)通常被稱(chēng) 外部信號(hào),端口信號(hào)名稱(chēng)可以表示一個(gè)信號(hào),也可以表示一 信號(hào)(BUS ),由數(shù)據(jù) 型定 ,如EN , Rd, CLK , Co 分 表示 數(shù)允 信號(hào),異步清零信號(hào), 入信號(hào)和 位 出信號(hào), Q 是一 出信號(hào),用來(lái)表示四位同步二 制 數(shù)器的四位 數(shù) 出信號(hào)。3. 端口信號(hào)輸入 /輸出狀態(tài)有以下幾種狀態(tài): IN 信號(hào)進(jìn)入電路單元。OUT 信號(hào)從電路單元輸出。INOUT 信號(hào)是雙向的,既可以進(jìn)入電路單元也可以從電路單元輸出

12、。BUFFER信號(hào)從電路單元輸出,同時(shí)在電路單元內(nèi)部可以使用該輸出信號(hào)。小提示:OUT 與 BUFFER 信號(hào)的區(qū)別就在于信號(hào)是否往內(nèi)部有反饋,將輸出端口定義為BUFFER 型,可以省去一個(gè)用于中間運(yùn)算的一個(gè)臨時(shí)信號(hào),但是并不推薦這么做。4. 端口數(shù)據(jù)類(lèi)型( TYPE )定義端口信號(hào)的數(shù)據(jù)類(lèi)型,在 VHDL 中,常用的端口信號(hào)數(shù)據(jù)類(lèi)型如下:( 1) 位( BIT )型:表示一位信號(hào)的值,可以取值 0和 1,放在單引號(hào)里面表示,如 X = 1, Y = 0。( 2) 位向量( BIT_VECTOR )型:表示一組位型信號(hào)值,在使用時(shí)必須標(biāo)明位向量的寬度(個(gè)數(shù))和位向量的排列順序,例如: Q :

13、OUT BIT_VECTOR(3 downto 0),表示Q3, Q2, Q1, Q0 四個(gè)位型信號(hào)。位向量的信號(hào)值放在雙引號(hào)里面表示,例如 Q =“ 0000”;( 3) 標(biāo)準(zhǔn)邏輯位( STD_LOGIC )型: IEEE 標(biāo)準(zhǔn)的邏輯類(lèi)型, 它是 BIT 型數(shù)據(jù)類(lèi)型的擴(kuò)展,可以取值 U, X , 0, 1,Z ,W , L , H, -等。( 4) 標(biāo)準(zhǔn)邏輯位向量( STD_LOGIC_VECTOR )型: IEEE 標(biāo)準(zhǔn)的邏輯向量,表示一組標(biāo)準(zhǔn)邏輯位型信號(hào)值。VHDL是與類(lèi)型高度相關(guān)的語(yǔ)言,不允許將一種數(shù)據(jù)類(lèi)型的信號(hào)賦予另一種數(shù)據(jù)類(lèi)型的信號(hào)。除了上述介紹的數(shù)據(jù)類(lèi)型外,還有其他多種數(shù)據(jù)類(lèi)型用

14、于定義內(nèi)部信號(hào)和變量,請(qǐng)參見(jiàn) 1-2 節(jié)。小提示:相同類(lèi)型(模型相同,數(shù)據(jù)類(lèi)型相同)的端口可以寫(xiě)在同一行,如:ENTITY cntm16 ISPORT(EN, Rd,CLK : IN STD_LOGIC;Co : OUT STD_LOGIC;Q : BUFFER STD_LOGIC_VECTOR(3 DOWNTO 0);END cntm16;此外要注意,最后一個(gè)端口結(jié)尾沒(méi)有分號(hào)!1.1.4 VHDL語(yǔ)言的結(jié)構(gòu)體(ARCHITECTURE)結(jié)構(gòu)體是VHDL程序設(shè)計(jì)中的最主要組成部分,是描述設(shè)計(jì)單元的具體結(jié)構(gòu)和功能,在程序中,結(jié)構(gòu)體放在實(shí)體的后面。每一個(gè)結(jié)構(gòu)體都有名稱(chēng),結(jié)構(gòu)體的名稱(chēng)是由設(shè)計(jì)者任取的

15、,結(jié)構(gòu)體是以標(biāo)識(shí)符ARCHITECTURE開(kāi)頭,以END 結(jié)尾。結(jié)構(gòu)體可以有三種描述方式,分別是行為( BEA VHER )描述方式、數(shù)據(jù)流(DATAFLOW )描述方式和結(jié)構(gòu)(STRUCTURE)描述方式,其中數(shù)據(jù)流(DA TAFLOW )描述方式又稱(chēng)為寄存器(RTL )描述方式。不同的結(jié)構(gòu)體采用不同的描述語(yǔ)句。結(jié)構(gòu)體的一般格式為:ARCHITECTURE結(jié)構(gòu)體名OF 實(shí)體名稱(chēng)IS說(shuō)明語(yǔ)句BEGIN電路描述語(yǔ)句END 結(jié)構(gòu)體名;結(jié)構(gòu)體說(shuō)明語(yǔ)句是對(duì)結(jié)構(gòu)體中用到的數(shù)據(jù)對(duì)象的數(shù)據(jù)類(lèi)型、元件和子程序等加以說(shuō)明。電路描述語(yǔ)句用并行語(yǔ)句 來(lái)描述電路的各種功能,這些并行語(yǔ)句包括并行信號(hào)賦值語(yǔ)句、條件賦值

16、(WHEN-ELSE) 語(yǔ)句、進(jìn)程( PROCESS)語(yǔ)句、 元件例化 (COMPONET MAP) 語(yǔ)句和子程序調(diào)用語(yǔ)句等。小提示:結(jié)構(gòu)體中定義的參數(shù)(信號(hào),變量等)名稱(chēng)不能與其所屬實(shí)體的端口名重名。結(jié)構(gòu)體的結(jié)束語(yǔ)句也可以寫(xiě)成END ARCHITECTURE結(jié)構(gòu)體名 ,或者簡(jiǎn)寫(xiě)為END 。例 1-1-2 設(shè)計(jì)程序的結(jié)構(gòu)體部分如下:ARCHITECTURE counstr OF cntm16 ISBEGINCo = .1.WHEN (Q =” 1111”AND EN =.1.) ELSE .0.;-條件賦值語(yǔ)句PROCESS (CLK, Rd)-PROCESS語(yǔ)句BEGIN語(yǔ)句Q= ” 000

17、0 ” ;ELSIF (CLK. EVENTAND CLK=.1.) THEN-CLK 上升沿計(jì)數(shù)IF(EN=.1.) thenQ = Q+1;END IF;END IF;END PROCESS;END counstr;結(jié)構(gòu)體的名稱(chēng)是counstr,該結(jié)構(gòu)體屬于行為描述方式,采用多種描述語(yǔ)句,如進(jìn)程( PROCRESS)語(yǔ)句,條件賦值語(yǔ)句( WHEN-ELSE ),順序語(yǔ)句( IF-ELSE )等,這些語(yǔ)句的具體用法參見(jiàn) 1-3 節(jié)相關(guān)內(nèi)容。小提示:一個(gè)實(shí)體可以有多個(gè)結(jié)構(gòu)體(反之不成立),多個(gè)結(jié)構(gòu)體代表實(shí)體實(shí)現(xiàn)的多種方式,同一個(gè)實(shí)體的各結(jié)構(gòu)體之間地位等同,可以采用配置語(yǔ)句將特定的某個(gè)結(jié)構(gòu)體關(guān)聯(lián)

18、到實(shí)體,這樣使同一個(gè)實(shí)體可以設(shè)計(jì)為多種實(shí)現(xiàn)功能,但是筆者不推薦使用多個(gè)結(jié)構(gòu)體來(lái)實(shí)現(xiàn)實(shí)體功能,因?yàn)樵诰C合時(shí),配置語(yǔ)句是不可綜合的,所以盡量每個(gè)實(shí)體僅一個(gè)結(jié)構(gòu)體表述完整,這樣比較清晰,整體化。所以就不介紹配置語(yǔ)句了,有興趣的讀者請(qǐng)查閱相關(guān)教材。1.1.5 程序包( PACKAGE )、庫(kù)( LIBRARY )和 USE 語(yǔ)句程序包定義了一組標(biāo)準(zhǔn)的數(shù)據(jù)類(lèi)型說(shuō)明、常量說(shuō)明、元件說(shuō)明、子程序說(shuō)明和函數(shù)說(shuō)明等,它是一個(gè)用 VHDL 語(yǔ)言描寫(xiě)的一段程序,可以供其他設(shè)計(jì)單元調(diào)用。 它如同 C 語(yǔ)言中的 *.H 文件一樣,定義了一些數(shù)據(jù)類(lèi)型說(shuō)明和函數(shù)說(shuō)明。在一個(gè)設(shè)計(jì)單元中,在實(shí)體部分所定義的數(shù)據(jù)類(lèi)型、常數(shù)和子程

19、序在相應(yīng)的結(jié)構(gòu)體中是可以被使用的(可見(jiàn)的),但是在一個(gè)實(shí)體的說(shuō)明部分和結(jié)構(gòu)體部分中定義的數(shù)據(jù)類(lèi)型、常量及子程序卻不能被其它設(shè)計(jì)單元的實(shí)體和結(jié)構(gòu)體使用(不可見(jiàn))。程序包就是為了使一組類(lèi)型說(shuō)明、常量說(shuō)明和子程序說(shuō)明對(duì)多個(gè)設(shè)計(jì)單元都可以使用而提供的一種結(jié)構(gòu)。程序包分為兩大類(lèi),即VHDL 預(yù)定義標(biāo)準(zhǔn)程序包和用戶定義的程序包。VHDL 設(shè)計(jì)中常用的標(biāo)準(zhǔn)程序包的名稱(chēng)和內(nèi)容如見(jiàn)表1-1-3 所列。用戶定義的程序包是設(shè)計(jì)者把預(yù)先設(shè)計(jì)好的電路單元設(shè)計(jì)定義在一個(gè)程序包中,放在指定的庫(kù)中,以供其它設(shè)計(jì)單元調(diào)用,如果在設(shè)計(jì)中要使用某個(gè)程序包中的內(nèi)容時(shí),可以用USE 語(yǔ)句打開(kāi)該程序包。有關(guān)程序包的設(shè)計(jì)方法參見(jiàn) 1-4-

20、5 節(jié)的內(nèi)容。庫(kù)( LIBRARY )是專(zhuān)門(mén)用于存放預(yù)先編譯好的程序包的地方,它實(shí)際上對(duì)應(yīng)一個(gè)文件目錄,程序包的文件就存放在此目錄中。庫(kù)名與目錄名的對(duì)應(yīng)關(guān)系可以在編譯程序中指定,庫(kù)的說(shuō)明總是放在設(shè)計(jì)單元的最前面。例如,對(duì) IEEE 標(biāo)準(zhǔn)庫(kù)的調(diào)用格式為:LIBRARY IEEE;表 1-1-3 IEEE 兩個(gè)標(biāo)準(zhǔn)庫(kù) STD 和 IEEE 中的程序包表 1-1-3 IEEE 兩個(gè)標(biāo)準(zhǔn)庫(kù)程序包名定義的內(nèi)容STD 和 IEEE 中的程序包庫(kù)名STDSTANDARD定義 VHDL 的數(shù)據(jù)類(lèi)型,如TEXTIOBIT , BIT_VECTOR 等TEXT 讀寫(xiě)控制數(shù)據(jù)類(lèi)型和子程序等IEEESTD_LOGIC

21、_1164定義 STD_LOG ,STD_LOGIC_VECTOR 等STD_LOGIC_ARITH定義有符號(hào)與無(wú)符號(hào)數(shù)據(jù)類(lèi)型,基于這些數(shù)據(jù)類(lèi)型的算術(shù)運(yùn)算符,如 “+”,- ”“, ?”“,“ / ” SHL, SHR等STD_LOGIC_SIGNED定義基于 STD_LOGIC 與STD_LOGIC_VECTOR 數(shù)據(jù)類(lèi)型上的有符號(hào)的算術(shù)運(yùn)算STD_LOGIC_UNSIGNED定義基于 STD_LOGIC 與STD_LOGIC_VECTOR 類(lèi)型上的無(wú)符號(hào)的算術(shù)運(yùn)算1. 常用的庫(kù)和包的種類(lèi)VHDL 程序中常用的庫(kù)有 STD 庫(kù)、 IEEE 庫(kù)和 WORK 等。其中 STD 和 IEEE 庫(kù)中

22、的標(biāo)準(zhǔn)程序包是由提供 EDA 工具的廠商提供的,用戶在設(shè)計(jì)程序時(shí)可以用相應(yīng)的語(yǔ)句調(diào)用。( 1)STD 庫(kù)STD 庫(kù)是 VHDL語(yǔ)言標(biāo)準(zhǔn)庫(kù),庫(kù)中定義了STANDARD和 TEXTIO 兩個(gè)標(biāo)準(zhǔn)程序包。STANDARD程序包中定義了VHDL 的基本的數(shù)據(jù)類(lèi)型,如字符(CHARACTER )、整數(shù)( INTEGER )、實(shí)數(shù)( REAL )、位型( BIT )和布爾量( BOOLEAN )等。用戶在程序中可以隨時(shí)調(diào)用 STANDARD 包中的內(nèi)容,不需要任何說(shuō)明。 TEXTIO 程序包中定義了對(duì)文本文件的 和寫(xiě)控制的數(shù)據(jù) 型和子程序。用 在程序中 用TEXTIO包中的內(nèi)容,需要USE 句加以 明。(

23、 2) IEEE 庫(kù)IEEE 準(zhǔn) 是存放用VHDL 言 寫(xiě)的多個(gè) 準(zhǔn)程序包的目 ,IEEE 中的程序包有STD_LOGIC_1164 , STD_LOGIC_ARITH, STD_LOGIC_UNSIGNED和STD_LOGIC_SIGNED等程序包。其中STD_LOGIC_1164 是 IEEE 準(zhǔn)的程序包,定 了STD_LOGIC 和 STD_LOGIC_VECTOR 等多種數(shù)據(jù) 型,以及多種 運(yùn)算符子程序和數(shù)據(jù) 型 子程序等。 STD_LOGIC_ARITH 和 STD_LOGIC_UNSINGED 等程序包是SYNOPSYS 公司提供的,包中定 了SIGNED 和 UNSIGNED數(shù)據(jù)

24、 型以及基于 些數(shù)據(jù) 型的運(yùn)算符子程序。用 使用包中的內(nèi)容,需要用USE 句加以 明。( 3)WORK 庫(kù)WORK 是用 行VHDL 的當(dāng)前目 ,用于存放用 好的 元和程序包。在使用 中的內(nèi)容 不需要 行任何 明。2 、包和USE 句的格式用 在用到 準(zhǔn)程序包中內(nèi)容 ,除了STANDARD程序包以外,都要在 程序中加以 明, 首先用 LIBRARY 句 明程序包所在的 名,再用 USE 句 明具體使用哪一個(gè)程序包和具體的子程序名 。各種 準(zhǔn)程序包中的內(nèi)容太多,初學(xué)者一 之 以全面了解,可以用下面的格式,以免出 不必要的 。 和包的 用格式:LIBRARY IEEE;USE IEEE.STD_L

25、OGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;小提示:以下四個(gè) 句最好寫(xiě)任何模 的 候先加上,以免出 沒(méi)包含全的 。LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;1.2 VHDL的數(shù)據(jù) 型和數(shù)據(jù) 象VHDL 言和其它高 言一 ,除了具有一定的 法 構(gòu)外, 定 了常數(shù)、 量和信號(hào)等三種數(shù)據(jù) 象,每個(gè)數(shù)據(jù) 象要求指定數(shù)據(jù) 型,每一種數(shù)據(jù) 型

26、具有特定的物理意 。由于 VHDL 言是 型 言,不同的 句 型的數(shù)據(jù)之 不能 行運(yùn)算和 ,我 有必要 了解 VHDL 言的數(shù)據(jù) 型和數(shù)據(jù) 象。1.2.1 VHDL的 一個(gè)完整的 VHDL 句可以有下列幾個(gè)部分 成: 符、保留字(界符、常數(shù)、 符號(hào)和注 ( Comments),所有 些 稱(chēng) 。 1. 符Reserved Words)、 符是程序 了 寫(xiě)程序所 定的一些 , 用來(lái)表示常數(shù)、 量、信號(hào)、子程序、 構(gòu)體和 體等名稱(chēng)。 VHDL 基本的 符 成的 如下:( 1) 符由 26 個(gè)英文字母、數(shù)字 0, 1, 2, 9 及下劃 “ _” 成;( 2) 符必 是以英文字母開(kāi) ;( 3) 符中不

27、能有兩個(gè) 的下劃 “_”, 符的最后一個(gè)字符不能是下劃 ;( 4) 符中的英文字母不區(qū)分大小寫(xiě);( 5) 符字符最 可以是32 個(gè)字符。例如:CLK , QO, DAT1 , SX_1, NOT_Q 是合法的 符。3DA , _QD, NA_C, DB-A , DB_ 等是非法的 符。2. 保留字小提示: 93 準(zhǔn)定 了 展表示符,可以以數(shù)字打 ,使用VHDL 保留字等,不 上依然使用87 準(zhǔn)。VHDL中的保留字是具有特殊含 的 符號(hào),只能作 固定的用途,用 不能用保留字作 符。 比如 ENTITY ,ARCHITECTURE, PROCESS, BLOCK ,BEGIN 和 END 等。VH

28、DL保留字如表1-2-1 所列。表 1-2-1 VHDLaccessafteraliasall保留字 absandarchitecturearrayassertattributebeginblockbodybufferbuscasecomponentconfigurationconstantdisconnectdowntoelseelsifendentityexitfileforfunctiongenerategenericgroupguardedifimpureininertialinoutislabellibrarylinkageliteralloopmapmodnandnewnextno

29、rnotnullofonopenorothersoutpackageportpostponedprocedureprocesspurerangerecordregisterrejectremreportreturnrolrorselectseveritysignalsharedslasllsrasrlsubtypethentotransporttypeunaffectedunitsuntilusevariablewaitwhenwhilewithxnorxor3. VHDL中的界符界符是作 VHDL 言中兩個(gè)部分的分隔符用的。如每個(gè)完整的 句均以“;” 尾,用雙減號(hào) “ -”開(kāi) 的部分是注 內(nèi)

30、容, 不參加程序 。信號(hào) 符號(hào)是 “ =”, 量 符號(hào)是“ :=” 等。在 VHDL 中,常用的界符如表 1-2-2 所列表 1-2-2 VHDL 中的界符4. 注 符在 VHDL 中, 了便于理解和 程序,常常加上注 ,注 符用雙減號(hào) “.”表示 。注 句以注 符打 ,到行尾 束。注 可以加在 句 束符“;”之后,也可以加在空行 。1.2.2 VHDL 的數(shù)據(jù) 型在 VHDL 中, 定 了三種數(shù)據(jù) 象,即 信號(hào)、 量和常數(shù),每一個(gè)數(shù)據(jù) 象都必 具有確定的數(shù)據(jù) 型,只有相同的數(shù)據(jù) 型的兩個(gè)數(shù)據(jù) 象才能 行運(yùn)算和 , 此VHDL定 了多種 準(zhǔn)的數(shù)據(jù) 型,而且每一種數(shù)據(jù) 型都具有特定的物理意 。例

31、如, BIT 型、STD_LOGIC 型、 INTEGER 型和 REAL 型等數(shù)據(jù) 型。VHDL 的數(shù)據(jù) 型 多,根據(jù)數(shù)據(jù)用途分 可分 量型、復(fù)合型、存取型和文件型。 量型包括整數(shù) 型、 數(shù) 型、枚 型和 型,其中位(BIT )型和 準(zhǔn) 位( STD_LOGIC )型屬于枚 型。復(fù)合型主要包括數(shù) (ARRAY )型和 ( RECORD )型,存取 型和文件 型提供數(shù)據(jù)和文件的存取方式。 些數(shù)據(jù) 型又可以分 兩大 :即在 VHDL 程序包中 定 的數(shù)據(jù) 型和用 自定 的數(shù)據(jù) 型。 定 的數(shù)據(jù) 型是最基本的數(shù)據(jù) 型, 些數(shù)據(jù) 型都定 在 準(zhǔn)程序包STANARD 、 STD_LOGIC_1164

32、和其它 準(zhǔn)的程序包中, 些程序包放在 EDA 件中 IEEE 和 STD 目 中, 供用 隨 用。在 定 的各種數(shù)據(jù) 型的基 上,用 可以根據(jù) 需要自己定 數(shù)據(jù) 型和子 型,如 量型和數(shù) 型。使用用 定 的數(shù)據(jù) 型和子 型可以使 程序的 句 易于 , 化 路硬件 構(gòu)。 得注意的是,各種 EDA 工具不能完全支持 VHDL 的所有數(shù)據(jù) 型,只支持 VHDL 的子集。1. STANDARD 程序包中 定 的數(shù)據(jù) 型(1) 整數(shù)( INTEGER )數(shù)據(jù) 型整數(shù)數(shù)據(jù) 型與數(shù)學(xué)中整數(shù)的定 是相同的,整數(shù) 型的數(shù)據(jù)代表正整數(shù)、 整數(shù)和零。 VHDL 整數(shù) 型定 格式 :TYPE INTEGER IS R

33、ANGE -2147483648 TO 2147483647 ; 上一個(gè)整數(shù)是由32 位二 制 表示的 符號(hào)數(shù)的范 。正整數(shù)( POSITIVE )和自然數(shù)( NATURAL )是整數(shù)的子 型,定 格式 :SUBTYPE POSITIVE IS INTEGER RANGE 0 TO INTEGER HIGH ;SUBTYPE NA TURE IS INTEGER RANGE 1 TO INTEGER HIGH ;其中 INTEGER.HIGH是數(shù) 屬性,代表整數(shù)上限的數(shù) ,也即2147483647。所以正整數(shù)表示的數(shù) 范 是02147483647,自然數(shù)表示的數(shù) 范 是1 2147483647

34、 。 使用 程中 了 省硬件 件, 常用 RANGER TO限制整數(shù)的范 。例如:SIGNALA :INTEGER;- 信號(hào) A 是整數(shù)數(shù)據(jù) 型VARIABLE B :INTEGER RANGE 0 TO 15;- 量 B 是整數(shù)數(shù)據(jù) 型, 化范 是0 到 15。SIGNAL C :INTEGER RANGE 1 TO 7; -信號(hào) C 是整數(shù)數(shù)據(jù) 型, 化范 是1 到 7。(2) 數(shù)( REAL )數(shù)據(jù) 型VHDL 數(shù)數(shù)據(jù) 型與數(shù)學(xué)上的 數(shù)相似,VHDL 的 數(shù)就是 小數(shù)點(diǎn)的數(shù),分 正數(shù)和小數(shù)。 數(shù)有兩種 寫(xiě)形式即小數(shù)形式和科學(xué) 數(shù)形式,不能寫(xiě)成整數(shù)形式。例如1.0, 1.0E4, -5.2

35、 等實(shí)數(shù)是合法的。實(shí)數(shù)數(shù)據(jù)類(lèi)型的定義格式為:TYPE REAL is range -1.7e38 to 1.7e38;例如: SIGNAL A, B, C :REAL ;A= 5.0;B = 3.5E5;C = -4.5;小提示:整數(shù)與實(shí)數(shù)均可以由下劃線分割,便于閱讀,如: 45_133_134; 124_452_112.113_429; 此外不同進(jìn)制的數(shù)可以由如下格式表達(dá) : 基數(shù) #數(shù)字文字 #E 指數(shù)如: 2#1111_1110# = 254; 16#E#E1 = 14*161 = 224 ;(3) 位( BIT )數(shù)據(jù)類(lèi)型位數(shù)據(jù)類(lèi)型的位值用字符.0.和 .1.表示, 將值放在單引號(hào)中,

36、表示二值邏輯的0 和 1。這里的 0 和 1 與整數(shù)型的 0 和 1 不同, 可以進(jìn)行算術(shù)運(yùn)算和邏輯運(yùn)算,而整數(shù)類(lèi)型只能進(jìn)行算術(shù)運(yùn)算。位數(shù)據(jù)類(lèi)型的定義格式為:TYPE BIT is ( 0, 1 );例如:RESULT : OUT BIT;RESULT= .1.;將 RESULT 引腳設(shè)置為高電平。(4) 位向量( BIT_VECTOR )數(shù)據(jù)類(lèi)型位向量是基于BIT數(shù)據(jù)類(lèi)型的數(shù)組。VHDL位向量的定義格式為:TYPE BIT_VECTOR is array (NATURAL range ) of BIT;使用位向量必須注明位寬,即數(shù)組的個(gè)數(shù)和排列順序,位向量的數(shù)據(jù)要用雙引號(hào)括起來(lái)。例如“ 10

37、10 ”,X“A8 ”。其中 1010 是四位二進(jìn)制數(shù),用X 表示雙引號(hào)里的數(shù)是十六進(jìn)制數(shù)。例如:SIGNAL A :BIT_VECTOR (3 DOWNTO 0 );A B 是關(guān)系運(yùn)算, 如果則 AB 關(guān)系成立,結(jié)果是布爾量TRUE ,否則結(jié)果為FALSE 。VHDL中,布爾數(shù)據(jù)類(lèi)型的定義格式為:A=3 ,B=2 ,TYPE BOOLEAN IS (FALSE, TRUE);(6) 字符(CHARACTER)數(shù)據(jù)類(lèi)型在 STANDARD程序包中預(yù)定義了128 個(gè) ASCII 碼字符類(lèi)型, 字符類(lèi)型用單引號(hào)括起來(lái),如 .A. ,.b.,.1.等,與 VHDL 標(biāo)識(shí)符不區(qū)分大小寫(xiě)不同,字符類(lèi)型中

38、的字符大小寫(xiě)是不同的,如 .B. 和 .b.不同。(7) 字符串( STRING )在STANDARD程序包中,字符串的定義是:TYPE STRING is array (POSITIVE range ) of CHARACTER;字符串?dāng)?shù)據(jù)類(lèi)型是由字符型數(shù)據(jù)組成的數(shù)組,字符串必須用雙引號(hào)括起來(lái)。例如:CONSTANT STR1 :STRING :=“ Hellow world” ;定義常數(shù)ST1 是字符串,初值是“Hellow world”。小提示:與 C 語(yǔ)言類(lèi)似, 字符類(lèi)型用單引號(hào)括起來(lái),而字符串必須用雙引號(hào)括起來(lái),別弄混了。(8) 時(shí)間( TIME )數(shù)據(jù)類(lèi)型表示時(shí)間的數(shù)據(jù)類(lèi)型,一個(gè)完

39、整的時(shí)間類(lèi)型包括整數(shù)表示的數(shù)值部分和時(shí)間單位兩個(gè)部分,數(shù)值和單位之間至少留一個(gè)空格,如1 ms, 20 ns 等。STANDARD程序包中定義時(shí)間格式為:TYPE TIME is range -92233728 to 92233727UNITSfs; - 飛秒ps = 1000 fs; -皮秒ns = 1000 ps; - 納秒us = 1000 ns; - 微秒ms = 1000 us; - 毫秒sec = 1000 ms; - 秒min = 60 sec; -分hr = 60min; -小時(shí)END UNITS;小提示:實(shí)數(shù),時(shí)間類(lèi)型僅用于VHDL仿真,一般綜合器不支持。2. IEEE 預(yù)定

40、義的標(biāo)準(zhǔn)邏輯位和標(biāo)準(zhǔn)邏輯位向量(1) 標(biāo)準(zhǔn)邏輯位( STD_LOGIC )數(shù)據(jù)類(lèi)型STD_LOGIC是位( BIT )數(shù)據(jù)類(lèi)型的擴(kuò)展,是STD_ULOGIC數(shù)據(jù)類(lèi)型的子類(lèi)型。它是一個(gè)邏輯型的數(shù)據(jù)類(lèi)型,其取值取代BIT 數(shù)據(jù)類(lèi)型的取值 0 和 1 兩種數(shù)值,擴(kuò)展定義了九種值,在IEEESTD1164 程序包中, STD_ULOGIC和 STD_LOGIC 數(shù)據(jù)類(lèi)型定義格式為 :TYPE std_ulogic IS (U, - UninitializedX, - Forcing Unknown0, - Forcing 01, - Forcing 1Z, -High ImpedanceW, - We

41、ak UnknownL, -Weak 0H, -Weak 1- - Dont care);FUNCTION resolved ( s : std_ulogic_vector ) RETURN std_ulogic;SUBTYPE std_logic IS resolved std_ulogic;小提示:STD_LOGIC中的數(shù)據(jù)類(lèi)型必須要大寫(xiě),不能使用小寫(xiě)字母代替,在實(shí)際的 IC 集成時(shí),一般只使用.0., .1., .Z., ._. 四種數(shù)據(jù)類(lèi)型, 其余的 .W., .L., .H. 是不可綜合的。STD_LOGIC和 STD_ULOGIC 數(shù)據(jù)類(lèi)型的區(qū)別在于 STD_LOGIC 數(shù)據(jù)類(lèi)型是

42、經(jīng)過(guò)重新定義的,可以用來(lái)描述多路驅(qū)動(dòng)的三態(tài)總線,而STD_ULOGIC數(shù)據(jù)類(lèi)型只能用于描述單路驅(qū)動(dòng)的三態(tài)總線。(2) 標(biāo)準(zhǔn)邏輯位向量( STD_LOGIC_VECTOR)數(shù)據(jù)類(lèi)型STD_LOGIC_VECTOR是基于 STD_LOGIC 數(shù)據(jù)類(lèi)型的標(biāo)準(zhǔn)邏輯一維數(shù)組,和BIT_VECTOR數(shù)組一樣,使用標(biāo)準(zhǔn)邏輯位向量必須注明位寬和排列順序,數(shù)據(jù)要用雙引號(hào)括起來(lái)。例如:SIGNAL SA1 :STD_LOGIC_VECTOR (3 DOWNTO 0 );SA1 =“ 0110 ” ;在 IEEE_STD_1164 程序包中, STD_LOGIC_VECTOR 數(shù)據(jù)類(lèi)型定義格式為:TYPE std_

43、logic_vector IS ARRAY ( NATURAL RANGE ) OF std_logic; 3. 其它預(yù)定義的數(shù)據(jù)類(lèi)型在 STD_LOGIC_ARITH程序包中定義了無(wú)符號(hào)(據(jù)類(lèi)型, 這兩種數(shù)據(jù)類(lèi)型主要用來(lái)進(jìn)行算術(shù)運(yùn)算。UNSIGNED )和帶符號(hào)(定義格式為:SIGNED )數(shù)TYPE UNSIGNED is array (NA TURAL range ) of STD_LOGIC; TYPE SIGNED is array (NATURAL range ) of STD_LOGIC;(1) 無(wú)符號(hào)( UNSIGNED )數(shù)據(jù)類(lèi)型無(wú)符號(hào)數(shù)據(jù)類(lèi)型是由 STD_LOGIC 數(shù)據(jù)類(lèi)

44、型構(gòu)成的一維數(shù)組,它表示一個(gè)自然數(shù) 。在一個(gè)結(jié)構(gòu)體中, 當(dāng)一個(gè)數(shù)據(jù)除了執(zhí)行算術(shù)運(yùn)算之外,還要執(zhí)行邏輯運(yùn)算,就必須定義成 UNSIGNED ,而不能是 SIGNED 或 INTEGER 類(lèi)型。 例如:SIGNAL DAT1 :UNSIGNED(3 DOWNTO 0 ) ;DA T1 =“ 1001 ” ;定義信號(hào)DA T1 是四位二進(jìn)制碼表示的無(wú)符號(hào)數(shù)據(jù),數(shù)值是9。(2) 帶符號(hào)( SIGNED )數(shù)據(jù)類(lèi)型帶符號(hào)( SIGNED )數(shù)據(jù)類(lèi)型表示一個(gè)帶符號(hào)的整數(shù),其最高位用來(lái)表示符號(hào)位,用補(bǔ)碼表示數(shù)值的大小。當(dāng)一個(gè)數(shù)據(jù)的最高位是0 時(shí),這個(gè)數(shù)表示正整數(shù),當(dāng)一個(gè)數(shù)據(jù)的最高位是 1 時(shí),這個(gè)數(shù)表示負(fù)整

45、數(shù)。例如:VARIABLE DB1, DB2 : SIGNED( 3 DOWNTO 0 ) ;DB1 =“ 0110 ” ;DB2 =“ 1001 ” ;定義變量DB1 是 6,變量 DB2 是 -7。4. 用戶自定義的數(shù)據(jù)類(lèi)型在 VHDL 中,用戶可以根據(jù)設(shè)計(jì)需要,自己定義數(shù)據(jù)的類(lèi)型,稱(chēng)為用戶自定義的數(shù)據(jù)類(lèi)型。利用用戶自己定義數(shù)據(jù)類(lèi)型可以使設(shè)計(jì)程序便于閱讀。用戶自定義的數(shù)據(jù)類(lèi)型可以通過(guò)兩種途徑來(lái)實(shí)現(xiàn),一種方法是通過(guò)對(duì)預(yù)定義的數(shù)據(jù)類(lèi)型作一些范圍限定而形成的一種新的數(shù)據(jù)類(lèi)型。這種定義數(shù)據(jù)類(lèi)型的方法有如下幾種格式:TYPE數(shù)據(jù) 型名稱(chēng)IS數(shù)據(jù) 型名RANGE數(shù)據(jù)范 ;例如:TYPE DATA IS

46、 INTEGER RANGER 0 TO 9 ;定 DA TA 是 INTEGER 數(shù)據(jù) 型的子集,數(shù)據(jù)范 是0 9。SUBTYPE數(shù)據(jù) 型名稱(chēng)IS 數(shù)據(jù) 型名RANGE數(shù)據(jù)范 ;例如:SUBTYPE DB IS STD_LOGIC_VECTOR( 7 DOWNTO 0) ;定 DB是STD_LOGIC_VECTOR數(shù)據(jù) 型的子集,位 8 位。另一種方法是在數(shù)據(jù) 型定 中直接列出新的數(shù)據(jù) 型的所有取 ,稱(chēng) 枚 數(shù)據(jù) 型。定 種數(shù)據(jù) 型的格式 :TYPE數(shù)據(jù) 型名稱(chēng)IS(取 1,取 2,);例如:TYPE BIT IS ( .0.,.1.) ;TYPE STATE_M IS (STAT0, STAT1, STA T2, STAT3);定 BIT 數(shù)據(jù) 型,取 0 和 1。定 STATE_M 是數(shù)據(jù) 型,表示狀 量STAT0 , STAT1,STAT2, STAT3。在 VHDL 中, 了便于 程序,可以用符號(hào)名來(lái)代替具體的數(shù) ,前例中 STATE_M 是狀 量,用符號(hào) STAT0, STAT1, STAT2, STA T3 表示四種不同的狀 取 是00, 01, 10, 11。例如定 一個(gè)“ WEEK ” 的數(shù)據(jù) 型用來(lái)表示一個(gè)星期的七天,定 格式 :TYPE WEEK IS (SUN, MON, TUE, WED, THU, FRI, SAT);小提示:使用枚 數(shù)據(jù) 型

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 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)論