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

下載本文檔

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

文檔簡介

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

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

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

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

5、L 程序的文件名稱是 fulladder.VHD ,其中 VHD 是 VHDL 程序的文件擴展名,程序如下:LIBRARY IEEE;-IEEE 標(biāo)準庫USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY fulladder IS- fulladder 是實體名稱PORT(A, B, Ci : IN STD_LOGIC; -定義輸入 /輸出信號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;從這個例子中可以看出,一段完整的VHDL代碼主要由以下幾部分組成:第一部分是程序包,程序包是用VHDL 言 寫的共享文件,定 在 構(gòu)體和 體中將用到的常數(shù)、數(shù)據(jù) 型、子程序和 好的 路 元等,放在文件目 名稱 IEEE 的程序包 中。第二部分是程序的 體,定 路 元的 入/ 出引腳信號。程序的 體名稱fulladder是任意取的,但是必 與VHDL 程序的文件名稱相同。 體的 符是ENTITY , 體以ENTITY 開 ,以 END 束。 其中,定 A 、B 、 Ci 是

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

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

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

10、五個 出端,分 是 脈沖 入端CLK , 數(shù)器狀 控制端 EN ,異步清零控制端Rd,四位 數(shù) 出端 Q0, Q1, Q2, Q3和一個 位 出端 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. 體名稱表示所 路的 路名稱,必 與VHD

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

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

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

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

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

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

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

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

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

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

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

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

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

24、 型以及基于 些數(shù)據(jù) 型的運算符子程序。用 使用包中的內(nèi)容,需要用USE 句加以 明。( 3)WORK 庫WORK 是用 行VHDL 的當(dāng)前目 ,用于存放用 好的 元和程序包。在使用 中的內(nèi)容 不需要 行任何 明。2 、包和USE 句的格式用 在用到 準程序包中內(nèi)容 ,除了STANDARD程序包以外,都要在 程序中加以 明, 首先用 LIBRARY 句 明程序包所在的 名,再用 USE 句 明具體使用哪一個程序包和具體的子程序名 。各種 準程序包中的內(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;小提示:以下四個 句最好寫任何模 的 候先加上,以免出 沒包含全的 。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ù)、 量和信號等三種數(shù)據(jù) 象,每個數(shù)據(jù) 象要求指定數(shù)據(jù) 型,每一種數(shù)據(jù) 型

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

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

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

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

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

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

32、和其它 準的程序包中, 些程序包放在 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 ; 上一個整數(shù)是由32 位二 制 表示的 符號數(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;- 信號 A 是整數(shù)數(shù)據(jù) 型VARIABLE B :INTEGER RANGE 0 TO 15;- 量 B 是整數(shù)數(shù)據(jù) 型, 化范 是0 到 15。SIGNAL C :INTEGER RANGE 1 TO 7; -信號 C 是整數(shù)數(shù)據(jù) 型, 化范 是1 到 7。(2) 數(shù)( REAL )數(shù)據(jù) 型VHDL 數(shù)數(shù)據(jù) 型與數(shù)學(xué)上的 數(shù)相似,VHDL 的 數(shù)就是 小數(shù)點的數(shù),分 正數(shù)和小數(shù)。 數(shù)有兩種 寫形式即小數(shù)形式和科學(xué) 數(shù)形式,不能寫成整數(shù)形式。例如1.0, 1.0E4, -5.2

35、 等實數(shù)是合法的。實數(shù)數(shù)據(jù)類型的定義格式為: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ù)均可以由下劃線分割,便于閱讀,如: 45_133_134; 124_452_112.113_429; 此外不同進制的數(shù)可以由如下格式表達 : 基數(shù) #數(shù)字文字 #E 指數(shù)如: 2#1111_1110# = 254; 16#E#E1 = 14*161 = 224 ;(3) 位( BIT )數(shù)據(jù)類型位數(shù)據(jù)類型的位值用字符.0.和 .1.表示, 將值放在單引號中,

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

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

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

39、整的時間類型包括整數(shù)表示的數(shù)值部分和時間單位兩個部分,數(shù)值和單位之間至少留一個空格,如1 ms, 20 ns 等。STANDARD程序包中定義時間格式為: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; -小時END UNITS;小提示:實數(shù),時間類型僅用于VHDL仿真,一般綜合器不支持。2. IEEE 預(yù)定

40、義的標(biāo)準邏輯位和標(biāo)準邏輯位向量(1) 標(biāo)準邏輯位( STD_LOGIC )數(shù)據(jù)類型STD_LOGIC是位( BIT )數(shù)據(jù)類型的擴展,是STD_ULOGIC數(shù)據(jù)類型的子類型。它是一個邏輯型的數(shù)據(jù)類型,其取值取代BIT 數(shù)據(jù)類型的取值 0 和 1 兩種數(shù)值,擴展定義了九種值,在IEEESTD1164 程序包中, STD_ULOGIC和 STD_LOGIC 數(shù)據(jù)類型定義格式為 :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ù)類型必須要大寫,不能使用小寫字母代替,在實際的 IC 集成時,一般只使用.0., .1., .Z., ._. 四種數(shù)據(jù)類型, 其余的 .W., .L., .H. 是不可綜合的。STD_LOGIC和 STD_ULOGIC 數(shù)據(jù)類型的區(qū)別在于 STD_LOGIC 數(shù)據(jù)類型是

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

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

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

45、數(shù)。例如:VARIABLE DB1, DB2 : SIGNED( 3 DOWNTO 0 ) ;DB1 =“ 0110 ” ;DB2 =“ 1001 ” ;定義變量DB1 是 6,變量 DB2 是 -7。4. 用戶自定義的數(shù)據(jù)類型在 VHDL 中,用戶可以根據(jù)設(shè)計需要,自己定義數(shù)據(jù)的類型,稱為用戶自定義的數(shù)據(jù)類型。利用用戶自己定義數(shù)據(jù)類型可以使設(shè)計程序便于閱讀。用戶自定義的數(shù)據(jù)類型可以通過兩種途徑來實現(xiàn),一種方法是通過對預(yù)定義的數(shù)據(jù)類型作一些范圍限定而形成的一種新的數(shù)據(jù)類型。這種定義數(shù)據(jù)類型的方法有如下幾種格式:TYPE數(shù)據(jù) 型名稱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ù) 型名稱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ù) 型的所有取 ,稱 枚 數(shù)據(jù) 型。定 種數(shù)據(jù) 型的格式 :TYPE數(shù)據(jù) 型名稱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 中, 了便于 程序,可以用符號名來代替具體的數(shù) ,前例中 STATE_M 是狀 量,用符號 STAT0, STAT1, STAT2, STA T3 表示四種不同的狀 取 是00, 01, 10, 11。例如定 一個“ WEEK ” 的數(shù)據(jù) 型用來表示一個星期的七天,定 格式 :TYPE WEEK IS (SUN, MON, TUE, WED, THU, FRI, SAT);小提示:使用枚 數(shù)據(jù) 型

溫馨提示

  • 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)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論