VHDL and PLD 第04章 VHDL語言要素(2013年10月)_第1頁
VHDL and PLD 第04章 VHDL語言要素(2013年10月)_第2頁
VHDL and PLD 第04章 VHDL語言要素(2013年10月)_第3頁
VHDL and PLD 第04章 VHDL語言要素(2013年10月)_第4頁
VHDL and PLD 第04章 VHDL語言要素(2013年10月)_第5頁
已閱讀5頁,還剩73頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、第4章 VHDL語言要素nVHDL語言要素是編程語句的基本單元,是VHDL作為硬件描述語言的基本結(jié)構(gòu)元素,反映了 VHDL 重要的語言特征。nVHDL 的語言要素主要有數(shù)據(jù)對象(Data Objects,簡稱 Objects),其中包括變量(Variables)、信號(Signals)和常數(shù)(Constants) 、數(shù)據(jù)類型(Data Types,簡稱Types)和各類操作數(shù)(Operands)及運算操作符(Operators)。第4章 VHDL語言要素n 4.1 VHDL 文字規(guī)則nVHDL 文字(Literal)主要包括數(shù)值和標(biāo)識符,數(shù)值型文字所描述的值主要有數(shù)字型、字符串型、位串型。n(

2、1) 整數(shù)文字:整數(shù)文字都是十進制的數(shù),如n5,678,0,156E2(=15600),45_234_287 (=45234287)n(2) 實數(shù)文字:實數(shù)文字也都是十進制的數(shù),但必須帶有小數(shù)點,如n188.993,88_670_551.453_909(=88670551.453909) 1.0,44.99E-2(=0.4499),1.335,0.0第4章 VHDL語言要素n(3) 以數(shù)制基數(shù)表示的文字:用這種方式表示的數(shù)由五個部分組成。n第一部分 用十進制數(shù)標(biāo)明數(shù)制進位的基數(shù);n第二部分 數(shù)制隔離符號 #;n第三部分 表達的文字;n第四部分 指數(shù)隔離符號 #;n第五部分 用十進制表示的指數(shù)部

3、分,這一部分的數(shù)如果為0可以省去不寫。nSIGNAL d1,d2,d3,d4,d5, : INTEGER RANGE 0 TO 255;nd1 = 10#170# ; - (十進制表示 等于 170)nd2 = 16#FE# ; - (十六進制表示 等于 254)nd3 = 2#1111_1110#; - (二進制表示 等于 254)nd4 = 8#376# ; - (八進制表示 等于 254)nd5 = 16#E#E1 ; - (十六進制表示 等于2#11100000# 等于224)第4章 VHDL語言要素n(4) 物理量文字(VHDL綜合器不接受此類文字) 如60s (60秒)、 100m

4、 (100米) 、177A (177安培)等第4章 VHDL語言要素n2.字符串型文字n字符是用單引號引起來的ASCII字符 可以是數(shù)值 也可以是符號或字母 如nR a * Z U 0 11 - L n字符串則是一維的字符數(shù)組,需放在雙引號中,有兩種類型的字符串,數(shù)位字符串和文字字符串。n(1) 文字字符串n文字字符串是用雙引號引起來的一串文字 如n“ERROR”,“Both S and Q equal to 1”,“X”,BB$CCn(2) 數(shù)位字符串n數(shù)位字符串也稱位矢量,是預(yù)定義的數(shù)據(jù)類型 Bit 的一位數(shù)組。ndata1 = B1_1101_1110 - 二進制數(shù)數(shù)組 位矢數(shù)組長度是9

5、ndata2 = O15 - 八進制數(shù)數(shù)組 位矢數(shù)組長度是6ndata3 = XAD0 - 十六進制數(shù)數(shù)組 位矢數(shù)組長度是12第4章 VHDL語言要素n3 標(biāo)識符n標(biāo)識符是最常用的操作符 標(biāo)識符可以是常數(shù)、變量、信號、端口、子程序或參數(shù)n的名字,VHDL基本標(biāo)識符的書寫遵守如下規(guī)則:n(1)有效的字符:英文字母包括 26 個大小寫字母:az AZ,數(shù)字包括 09 以及下劃線 “_”。n(2)任何標(biāo)識符必須以英文字母開頭。n(3) 必須是單一下劃線 “_” 且其前后都必須有英文字母或數(shù)字。n(4) 標(biāo)識符中的英語字母不分大小寫VHDL93標(biāo)準(zhǔn)還支持?jǐn)U展標(biāo)識符。n(5) 擴展標(biāo)識符以反斜杠來界定,

6、可以以數(shù)字打頭,如74LS373 ,Hello Worldn都是合法的標(biāo)識符。n(6) 允許包含圖形符號(如回車符 換行符等) 也允許包含空格符,如IRDY# nC/BE A or B 等都是合法的標(biāo)識符。n(7) 兩個反斜杠之前允許有多個下劃線相鄰,擴展標(biāo)識符要分大小寫,擴展標(biāo)識符與n短標(biāo)識符不同,擴展標(biāo)識符如果含有一個反斜杠,則用兩個反斜杠來代替它。第4章 VHDL語言要素n4. 下標(biāo)名n下標(biāo)名用于指示數(shù)組型變量或信號的某一元素 。下標(biāo)段名則用于指示數(shù)組型變量或信號的某一段元素 下標(biāo)名的語句格式如下:n 標(biāo)識符(表達式)n標(biāo)識符必須是數(shù)組型的變量或信號的名字,表達式所代表的值必須是數(shù)組下標(biāo)

7、范圍中的一個值,這個值將對應(yīng)數(shù)組中的一個元素。第4章 VHDL語言要素n5 段名n段名即多個下標(biāo)名的組合,段名將對應(yīng)數(shù)組中某一段的元素,段名的表達形式是:n 標(biāo)識符(表達式 方向 表達式)n這里的標(biāo)識符必須是數(shù)組類型的信號名或變量名。每一個表達式的數(shù)值必須在數(shù)組元素下標(biāo)號范圍以內(nèi),并且必須是可計算的(立即數(shù)) 方向用 TO或者 DOWNTO來表示。nTO 表示數(shù)組下標(biāo)序列由低到高,DOWNTO 表示數(shù)組下標(biāo)序列由高到低。段中兩表達式值的方向必須與原數(shù)組一致。第4章 VHDL語言要素nSIGNAL a,z : BIT_VECTOR (0 TO 7) ;nSIGNAL b : STD_LOGIC_

8、VECTOR (4 DOWNTO 0) ;nSIGNAL c : STD_LOGIC_VECTOR (0 TO 4) ;nSIGNAL e : STD_LOGIC_VECTOR (0 TO 3) ;nSIGNAL d : STD_LOGIC ;n.nz(0 TO 3) = a(4 TO 7) ; -賦值對應(yīng) z 0 =a(4),z 1 =a(5) .nz(4 TO 7) = a(0 TO 3) ;nb(2) = 1;nb(3 DOWNTO 0) = “1010”; -賦值對應(yīng) b(3) =1 ,b(2) =0 .nc(0 TO 3) = 0110;nc(2) = d ;nc = b ; -即c

9、(0 TO 4)=b(4 DOWNTO 0) 對應(yīng) c(0) =b(4) ,c(1) =b(3) .ne = c ; -錯誤 雙方位矢長度不等ne = c 0 TO 3 ; -正確n e = c 1 TO 4 ; -正確第4章 VHDL語言要素n 4.2 VHDL 數(shù)據(jù)對象n在 VHDL 中,數(shù)據(jù)對象(Data Objects)類似于一種容器,它接受不同數(shù)據(jù)類型的賦值,數(shù)據(jù)對象有三類 即變量(VARIABLE) 常量(CONSTANT)和信號(SIGNAL)。第4章 VHDL語言要素n變量(VARIABLE)n在 VHDL 語法規(guī)則中,變量是一個局部量,只能在進程和子程序中使用。變量不能將信息

10、帶出對它作出定義的當(dāng)前設(shè)計單元,變量的賦值是一種理想化的數(shù)據(jù)傳輸 是立即發(fā)生,不存在任何延時的行為。n定義變量的語法格式如下nVARIABLE 變量名 數(shù)據(jù)類型 := 初始值 ;n例如變量定義語句nVARIABLE a : INTEGER ;nVARIABLE b, c : INTEGER := 2 ;nVARIABLE d : STD_LOGIC ;第4章 VHDL語言要素n變量作為局部量 其適用范圍僅限于定義了變量的進程或子程序中。仿真過程中惟一的例外是共享變量。變量的值將隨變量賦值語句的運算而改變。變量定義語句中的初始值可以是一個與變量具有相同數(shù)據(jù)類型的常數(shù)值,也可以是一個全局靜態(tài)表達式

11、,這個表達式的數(shù)據(jù)類型必須與所賦值的變量一致。此初始值不是必需的,綜合過程中綜合器將略去所有的初始值。n變量賦值語句的語法格式如下n目標(biāo)變量名 := 表達式;第4章 VHDL語言要素n例程4-1nVARIABLE x y : REAL ;nVARIABLE a b : BIT_VECTOR( 0 TO 7 ) ;nx := 100.0 ; - 實數(shù)賦值 x是實數(shù)變量ny := 1.5+x ; - 運算表達式賦值 y 也是實數(shù)變量na := b ;na := 1010101 ; - 位矢量賦值 a的數(shù)據(jù)類型是位矢量na (3 TO 6) := ( 1,1,0,1) ; - 段賦值 注意賦值格式n

12、a (0 TO 5) := b (2 TO 7) ;n a (7) := 0 ; - 位賦值第4章 VHDL語言要素n信號(SIGNAL)n信號是描述硬件系統(tǒng)的基本數(shù)據(jù)對象,它類似于連接線。信號可以作為設(shè)計實體中并行語句模塊間的信息交流通道(交流來自順序語句結(jié)構(gòu)中的信息)。在 VHDL 中,信號及其相關(guān)的信號賦值語句、決斷函數(shù)、延時語句等很好地描述了硬件系統(tǒng)的許多基本特征。如硬件系統(tǒng)運行的并行性、信號傳輸過程中的慣性延遲特性、多驅(qū)動源的總線行為等。n信號定義格式:nSIGNAL 信號名:數(shù)據(jù)類型信號名:數(shù)據(jù)類型 := 初始值初始值;第4章 VHDL語言要素n信號初始值的設(shè)置不是必需的,而且初始

13、值僅在VHDL 的行為仿真中有效。與變量相比,信號的硬件特征更為明顯。它具有全局性特征,例如,在程序包中定義的信號對于所有調(diào)用此程序包的設(shè)計實體都是可見(可直接調(diào)用的)的,在實體中定義的信號在其對應(yīng)的結(jié)構(gòu)體中都是可見的。第4章 VHDL語言要素n信號的定義示例:nSIGNAL temp : STD_LOGIC := 0 ;nSIGNAL flaga flagb : BIT ;nSIGNAL data : STD_LOGIC_VECTOR(15 DOWNTO 0 ) ;nSIGNAL a : INTEGER RANGE 0 TO 15;n自行定義的信號數(shù)據(jù)類型:nTYPE four IS ( X

14、, 0, 1, Z ); nSIGNAL s1 : four;nSIGNAL s2 : four := X; nSIGNAL s3 : four := 1 ;第4章 VHDL語言要素n需要注意,信號的使用和定義范圍是實體,結(jié)構(gòu)體和程序包。n在進程中,只能將信號列入敏感表,而不能將變量列入敏感表。n信號的賦值語句表達式如下:n目標(biāo)信號名目標(biāo)信號名 = 表達式表達式 ;n例:nx = 9 ;ny = x ;nz = x AFTER 5ns ;第4章 VHDL語言要素n信號的賦值可以出現(xiàn)在一個進程中,也可以直接出現(xiàn)在結(jié)構(gòu)體中的并行語句結(jié)構(gòu)中但它們運行的含義是不一樣的。前者屬順序信號賦值,這時的信號賦

15、值操作要視進程是否已被啟動。后者屬并行信號賦值,其賦值操作是各自獨立并行地發(fā)生的。n在進程中,可以允許同一信號有多個驅(qū)動源(賦值源) 即在同一進程中存在多個同名的信號被賦值。其結(jié)果只有最后的賦值語句被啟動,并進行賦值操作。第4章 VHDL語言要素n.nSIGNAL a b c y z: INTEGER n .nPROCESS (a,b,c)nBEGINn y = a * b ;n z = c x ;n y = b nEND PROCESS ;第4章 VHDL語言要素n常數(shù)(CONSTANT)n常數(shù)的定義和設(shè)置主要是為了使設(shè)計實體中的常數(shù)更容易閱讀和修改。n在程序中,常量是一個恒定不變的值。一旦

16、作了數(shù)據(jù)類型和賦值定義后 在程序中不能再改變 ,因而具有全局性意義。n其形式如下:nCONSTANT 常數(shù)名:數(shù)據(jù)類型 := 表達式;n例如nCONSTANT fbus : BIT_VECTOR := 010115 ;-位矢數(shù)據(jù)類型nCONSTANT Vcc : REAL := 5.0 ; -實數(shù)數(shù)據(jù)類型nCONSTANT dely : TIME := 25ns ; -時間數(shù)據(jù)類型第4章 VHDL語言要素nVHDL 要求所定義的常量數(shù)據(jù)類型必須與表達式的數(shù)據(jù)類型一致。常量的數(shù)據(jù)類型可以是標(biāo)量類型或復(fù)合類型,但不能是文件類型(file)或存取類型(Access)。常量定義語句所允許的設(shè)計單元有實

17、體、結(jié)構(gòu)體、程序包、塊、進程和子程序在程序包中定義的常量可以暫不設(shè)定具體數(shù)值 它可以在程序包體中設(shè)定。n常量的可視性,即常量的使用范圍取決于它被定義的位置。如果在程序包中定義,常量具有最大的全局化特征,可以用在調(diào)用此程序包的所有設(shè)計實體中。常量如果定義在設(shè)計實體中,其有效范圍為這個實體定義的所有的結(jié)構(gòu)體。如果常量定義在設(shè)計實體的某一結(jié)構(gòu)體中,則只能用于此結(jié)構(gòu)體。如果常量定義在結(jié)構(gòu)體的某一單元,如一個進程中,則這個常量只能用在這一進程中。第4章 VHDL語言要素n 4.3 VHDL 數(shù)據(jù)類型n在數(shù)據(jù)對象的定義中,必不可少的一項說明就是設(shè)定所定義的數(shù)據(jù)對象的數(shù)據(jù)類型(TYPES), 并且要求此對象

18、的賦值源也必須是相同的數(shù)據(jù)類型。這是因為 VHDL 是一種強類型語言,對運算關(guān)系與賦值關(guān)系中各量(操作數(shù))的數(shù)據(jù)類型有嚴(yán)格要求。VHDL 要求設(shè)計實體中的每一個常數(shù)、信號、變量、函數(shù)以及設(shè)定的各種參量都必須具有確定的數(shù)據(jù)類型,并且相同數(shù)據(jù)類型的量才能互相傳遞和作用。第4章 VHDL語言要素nVHDL中的數(shù)據(jù)類型可以分成四大類:n1. 標(biāo)量型(Scalar Type)n單元素的最基本的數(shù)據(jù)類型,即不可能再有更細小、更基本的數(shù)據(jù)類型,它們通常用于描述一個單值數(shù)據(jù)對象。n標(biāo)量類型包括:n(1)實數(shù)類型n(2)整數(shù)類型n(3) 枚舉類型n(4) 時間類型第4章 VHDL語言要素n2. 復(fù)合類型(Com

19、posite Type)n復(fù)合類型可以由細小的數(shù)據(jù)類型復(fù)合而成,如可由標(biāo)量型復(fù)合而成。復(fù)合類型主要有數(shù)組型(Array)和記錄型(Record)。n3. 存取類型(Access Type)n為給定數(shù)據(jù)類型的數(shù)據(jù)對象提供存取方式。n4. 文件類型(Files Type)n用于提供多值存取類型。第4章 VHDL語言要素n這四大數(shù)據(jù)類型又可分為從現(xiàn)成程序包中可以隨時獲得的預(yù)定義數(shù)據(jù)類型和用戶自定義數(shù)據(jù)類型兩大類別。盡管 VHDL 仿真器支持所有的數(shù)據(jù)類型,但 VHDL 綜合器并不支持所有的預(yù)定義數(shù)據(jù)類型和用戶定義的數(shù)據(jù)類型,如 REAL TIME、FILE 等數(shù)據(jù)類型。第4章 VHDL語言要素nVH

20、DL的預(yù)定義數(shù)據(jù)類型n1. 布爾(BOOLEAN)數(shù)據(jù)類型nTYPE BOOLEAN IS (FALSE TRUE) ;n布爾數(shù)據(jù)類型實際上是一個二值枚舉型數(shù)據(jù)類型。綜合器將用一個二進制位表示BOOLEAN 型變量或信號。布爾量不屬于數(shù)值,因此不能用于運算,它只能通過關(guān)系運算符獲得。n布爾數(shù)據(jù)與位數(shù)據(jù)類型可以用轉(zhuǎn)換函數(shù)相互轉(zhuǎn)換。第4章 VHDL語言要素n2. 位(BIT)數(shù)據(jù)類型n位數(shù)據(jù)類型也屬于枚舉型 取值只能是1或者 0 位數(shù)據(jù)類型的數(shù)據(jù)對象,如變量信號等,可以參與邏輯運算,運算結(jié)果仍是位的數(shù)據(jù)類型。 VHDL 綜合器用一個二進制位表示BIT。n在程序包STANDARD中定義的源代碼是:n

21、TYPE BIT IS ( 0, 1 ) ;第4章 VHDL語言要素n3 位矢量(BIT_VECTOR)數(shù)據(jù)類型n位矢量只是基于BIT數(shù)據(jù)類型的數(shù)組,在程序包STANDARD中定義的源代碼是:nTYPE BIT_VECTOR IS ARRAY (Natural Range ) OF BIT ;n使用位矢量必須注明位寬 即數(shù)組中的元素個數(shù)和排列 例如:SIGNAL a : BIT_VECTOR(7 TO 0) ;n信號a被定義為一個具有8位位寬的矢量,它的最左位是 a(7) 最右位是a(0)。第4章 VHDL語言要素n4. 字符(CHARACTER)數(shù)據(jù)類型n字符類型通常用單引號引起來,如A。字

22、符類型區(qū)分大小寫,如B不同于b第4章 VHDL語言要素n5. 整數(shù)(INTEGER)數(shù)據(jù)類型n整數(shù)類型的數(shù)代表正整數(shù) 負(fù)整數(shù)和零。可以使用預(yù)定義的運算操作符進行算術(shù)運算。在 VHDL 中整數(shù)的取值范圍是-2147483647+ 2147483647,即可用 32 位有符號的二進制數(shù)表示。在實際應(yīng)用中,VHDL 仿真器通常將 INTEGER 類型作為有符號數(shù)處理,而 VHDL綜合器則將 Integer 作為無符號數(shù)處理。在使用整數(shù)時,VHDL 綜合器要求用 RANGE 子句為所定義的數(shù)限定范圍,然后根據(jù)所限定的范圍來決定表示此信號或變量的二進制數(shù)的位數(shù)。因為VHDL綜合器無法綜合未限定范圍的整數(shù)

23、類型的信號或變量。n如語句:SIGNAL i : INTEGER RANGE 0 TO 15 ;n規(guī)定整數(shù)i的取值范圍是0 15共 16個值,可用 4位二進制數(shù)來表示,因此 i將被綜合成由四條信號線構(gòu)成的總線式信號。第4章 VHDL語言要素n6. 自然數(shù)(NATURAL)和正整數(shù)(POSITIVE)數(shù)據(jù)類型n自然數(shù)是整數(shù)的一個子類型,非負(fù)的整數(shù),即零和正整數(shù)。正整數(shù)也是整數(shù)的一個子類型 它包括整數(shù)中非零和非負(fù)的數(shù)值。n它們在STANDARD程序包中定義的源代碼如下:nSUBTYPE NATURAL IS INTEGER RANGE 0 TO INTEGERHIGH ;nSUBTYPE POSI

24、TIVE IS INTEGER RANGE 1 TO INTEGERHIGH ;第4章 VHDL語言要素n7. 實數(shù)(REAL)數(shù)據(jù)類型n實數(shù)的取值范圍為-1.0E38+1.0E38 通常情況下,實數(shù)類型僅能在 VHDL仿真器中使用 VHDL綜合器則不支持實數(shù)。因為直接的實數(shù)類型的表達和實現(xiàn)相當(dāng)復(fù)雜,目前在電路規(guī)模上難以承受。第4章 VHDL語言要素n8. 字符串(STRING)數(shù)據(jù)類型n字符串?dāng)?shù)據(jù)類型是字符數(shù)據(jù)類型的一個非約束型數(shù)組,或稱為字符串?dāng)?shù)組。字符串必須用雙引號標(biāo)明。n如:nVARIABLE string_var : STRING (1 TO 7 ) ;nstring_var :=

25、“a b c d” ;第4章 VHDL語言要素n9. 時間(TIME)數(shù)據(jù)類型nVHDL 中惟一的預(yù)定義物理類型是時間。完整的時間類型包括整數(shù)和物理量單位兩部分,整數(shù)和單位之間至少留一個空格,如 55 ms,20 ns。第4章 VHDL語言要素n10. 綜合器不支持的數(shù)據(jù)類型n(1) 物理類型:綜合器不支持物理類型的數(shù)據(jù) 如具有量綱型的數(shù)據(jù),包括時間類型,這些類型只能用于仿真過程。n(2) 浮點型:如REAL型。n(3) Aceess型:綜合器不支持存取型結(jié)構(gòu),因為不存在這樣對應(yīng)的硬件結(jié)構(gòu)。n(4) File型:綜合器不支持磁盤文件型,硬件對應(yīng)的文件僅為RAM和 ROM。第4章 VHDL語言要

26、素nIEEE 預(yù)定義標(biāo)準(zhǔn)邏輯位與矢量n在 IEEE 庫程序包 STD_LOGIC_1164 中的數(shù)據(jù)類型。nTYPE STD_LOGIC ISn U , - 未初始化的n X , - 強未知的n 0 , - 強0n 1 , - 強1n Z , - 高阻態(tài)n W , - 弱未知的n L , - 弱0n H , - 弱1n - - 忽略n ) ;第4章 VHDL語言要素n在程序中使用此數(shù)據(jù)類型前,需加入下面的語句:nLIBRARY IEEE;nUSE IEEE.STD_LOIGC_1164.ALL;nSTD_LOGIC是標(biāo)準(zhǔn)BIT數(shù)據(jù)類型的擴展,共定義了九種值。n由于標(biāo)準(zhǔn)邏輯位數(shù)據(jù)類型的多值性,在

27、編程時應(yīng)當(dāng)特別注意, 因為在條件語句中,如果未考慮到STD_LOGIC的所有可能的取值情況,綜合器可能會插入不希望的鎖存器程序包STD_LOGIC_1164中還定義了STD_LOGIC型邏輯運算符 AND、NAND、OR、NOR、XOR 和 NOT 的重載函數(shù),以及兩個轉(zhuǎn)換函數(shù),用于 BIT 與 STD_LOGIC 的相互轉(zhuǎn)換。第4章 VHDL語言要素n2. 標(biāo)準(zhǔn)邏輯矢量(STD_LOGIC_VECTOR)數(shù)據(jù)類型:nSTD_LOGIC_VECTOR類型定義如下nTYPE STD_LOGIC_VECTOR IS ARRAY ( NATURAL RANGE ) OF STD_LOGIC ;nST

28、D_LOGIC_VECTOR是定義在STD_LOGIC_1164程序包中的標(biāo)準(zhǔn)一維數(shù)組,數(shù)組中的每一個元素的數(shù)據(jù)類型都是以上定義的標(biāo)準(zhǔn)邏輯位 STD_LOGIC。n同位寬,同數(shù)據(jù)類型的矢量間才能進行賦值。第4章 VHDL語言要素n.nTYPE t_data IS ARRAY(7 DOWNTO 0) OF STD_LOGIC; -自定義數(shù)組類型n SIGNAL databus memory : t_data ; - 定義信號databus,memorynCPU : PROCESS - CPU工作進程開始nVARIABLE rega : t_data ; - 定義寄存器變量reganBEGINn.

29、ndatabus = rega; - 向8位數(shù)據(jù)總線賦值nEND PROCESS CPU; - CPU 工作進程結(jié)束nMEM : PROCESS - RAM 工作進程開始nBEGINn.ndatabus = memory ;nEND PROCESS MEM;第4章 VHDL語言要素n4.3.3 其它預(yù)定義標(biāo)準(zhǔn)數(shù)據(jù)類型nVHDL綜合工具配帶的擴展程序包中,定義了一些有用的類型。如 Synopsys 公司在IEEE庫中加入的程序包STD_LOGIC_ARITH中定義了如下的數(shù)據(jù)類型:n(1)無符號型(UNSIGNED)n(2)有符號型(SIGNED)n(3)小整型(SMALL_INT)n在程序包S

30、TD_LOGIC_ARITH中的類型定義如下:nTYPE UNSIGNED IS array (NATURAL range ) OF STD_LOGIC ;nTYPE SIGNED IS ARRAY (NATURAL range ) OF STD_LOGIC ;nSUBTYPE SMALL_INT IS INTEGER RANGE 0 TO 1 ;n如果將信號或變量定義為這幾個數(shù)據(jù)類型,就可以使用本程序包中定義的運算符,在使用之前 請注意必須加入下面的語句:nLIBRARY IEEE ;nUSE IEEE.STD_LOIGC_ARITH.ALL ;第4章 VHDL語言要素nUNSIGNED 類

31、型和 SIGNED 類型是用來設(shè)計可綜合的數(shù)學(xué)運算程序的重要類型。nUNSIGNED 用于無符號數(shù)的運算 SIGNED 用于有符號數(shù)的運算。第4章 VHDL語言要素n4.3.4 用戶自定義數(shù)據(jù)類型方式n除了上述一些標(biāo)準(zhǔn)的預(yù)定義數(shù)據(jù)類型外,VHDL 還允許用戶自行定義新的數(shù)據(jù)類型,由用戶定義的數(shù)據(jù)類型可以有多種,如枚舉類型(Enumeration Types)、整數(shù)類型(Interger Types)、數(shù)組類型(Array Types)、記錄類型(Record Types) 時間類型(Time Types)、實數(shù)類型(Real Types)等。用戶自定義數(shù)據(jù)類型是用類型定義語句 TYPE 和子類

32、型定義語句SUBTYPE 實現(xiàn)的。第4章 VHDL語言要素n1. TYPE語句用法nTYPE語句語法結(jié)構(gòu)如下:n TYPE 數(shù)據(jù)類型名 IS 數(shù)據(jù)類型定義 OF 基本數(shù)據(jù)類型;n Type 數(shù)據(jù)類型名 IS 數(shù)據(jù)類型定義;n例如:nTYPE st1 IS ARRAY ( 0 TO 15 ) OF STD_LOGIC ;nTYPE week IS (sun mon tue wed thu fri sat) ;nTYPE byt IS STD_LOGIC(15 TO 0) ;-錯誤第4章 VHDL語言要素n第一句定義的數(shù)據(jù)類型 st1是一個具有16個元素的數(shù)組型數(shù)據(jù)類型,數(shù)組中的每一個元素的數(shù)據(jù)類

33、型都是 STD_LOGIC 型;第二句所定義的數(shù)據(jù)類型是由一組文字表示的,而其中的每一文字都代表一個具體的數(shù)值,如可令 sun = 1010 ; 第三句定義的方式是錯誤的,TYPE 定義的數(shù)據(jù)類型應(yīng)該是一種全新的,即 VHDL 預(yù)定義庫中未被定義過的數(shù)據(jù)類型,這里的 STD_LOGIC已被定義為標(biāo)準(zhǔn)位了。第4章 VHDL語言要素n例:nTYPE byte IS ARRAY(7 DOWNTO 0) of BIT n VARIABLE v1 : byte ; -v1的數(shù)據(jù)類型定義為byten例:nTYPE colour IS (Red Green Yellow Blou Violet);n.na

34、= colour(Red) ; - 將Red 的代碼賦給信號a第4章 VHDL語言要素n2. SUBTYPE 語句用法n子類型 SUBTYPE 只是由 TYPE 所定義的原數(shù)據(jù)類型的一個子集,它滿足原數(shù)據(jù)類型的所有約束條件,原數(shù)據(jù)類型稱為基本數(shù)據(jù)類型。子類型 SUBTYPE的語句格式如下:nSUBTYPE 子類型名 IS 基本數(shù)據(jù)類型 RANGE 約束范圍;第4章 VHDL語言要素n子類型的定義只在基本數(shù)據(jù)類型上作一些約束 并沒有定義新的數(shù)據(jù)類型,這是與TYPE 最大的不同之處。子類型定義中的基本數(shù)據(jù)類型必須在前面已有過 TYPE 定義的類型,包括已在 VHDL預(yù)定義程序包中用 TYPE定義過

35、的類型。例如:n SUBTYPE digits IS INTEGER RANGE 0 to 9 ;n例中 INTEGER 是標(biāo)準(zhǔn)程序包中已定義過的數(shù)據(jù)類型 子類型,digits 只是把INTEGER 約束到只含 10 個值的數(shù)據(jù)類型。nSUBTYPE dig1 IS STD_LOGIC_VECTOR(7 DOWNTO 0) ;nSUBTYPE dig3 IS ARRAY(7 DOWNTO 0) of STD_LOGIC;- 錯誤第4章 VHDL語言要素n由于子類型與其基本數(shù)據(jù)類型屬同一數(shù)據(jù)類型,因此屬于子類型的和屬于基本數(shù)據(jù)類型的數(shù)據(jù)對象間的賦值和被賦值可以直接進行,不必進行數(shù)據(jù)類型的轉(zhuǎn)換。利

36、用子類型定義數(shù)據(jù)對象的好處是,除了使程序提高可讀性和易處理外,還在于有利于提高綜合的優(yōu)化效率。這是因為綜合器可以根據(jù)子類型所設(shè)的約束范圍,有效地預(yù)知參與綜合的寄存器的最合適的數(shù)目。第4章 VHDL語言要素n4.3.5 枚舉類型nVHDL 中的枚舉數(shù)據(jù)類型是一種特殊的數(shù)據(jù)類型 它們是用文字符號來表示一組實際的二進制數(shù),例如,狀態(tài)機的每一狀態(tài)在實際電路中是以一組觸發(fā)器的當(dāng)前二進制數(shù)位的組合來表示的,但設(shè)計者在狀態(tài)機的設(shè)計中,為了更利于閱讀、編譯和 VHDL 綜合器的優(yōu)n化,往往將表征每一狀態(tài)的二進制數(shù)組用文字符號來代表,即狀態(tài)符號化。例如:n TYPE m_state IS ( state1 st

37、ate2 state3 state4 state5 ) ;n SIGNAL present_state,next_state : m_state ;第4章 VHDL語言要素n在綜合過程中,枚舉類型文字元素的編碼通常是自動的,編碼順序是默認(rèn)的,一般將第一個枚舉量(最左邊的量)編碼為 0 以后的依次加 1。綜合器在編碼過程中自動將每一枚舉元素轉(zhuǎn)變成位矢量,位矢的長度將取所需表達的所有枚舉元素的最小值。第4章 VHDL語言要素n4.3.6 整數(shù)類型和實數(shù)類型n由于這兩種非枚舉型的數(shù)據(jù)類型的取值定義范圍太大,綜合器無法進行綜合。因此,定義為整數(shù)或?qū)崝?shù)的數(shù)據(jù)對象的具體的數(shù)據(jù)類型必須由用戶根據(jù)實際的需要重

38、新定義,并限定其取值范圍,以便能為綜合器所接受,從而提高芯片資源的利用率。第4章 VHDL語言要素n實用中 VHDL 仿真器通常將整數(shù)或?qū)崝?shù)類型作為有符號數(shù)處理 VHDL 綜合器對整數(shù)或?qū)崝?shù)的編碼方法是:n對用戶已定義的數(shù)據(jù)類型和子類型中的負(fù)數(shù) 編碼為二進制補碼。n對用戶已定義的數(shù)據(jù)類型和子類型中的正數(shù) 編碼為二進制原碼。第4章 VHDL語言要素n4.3.7 數(shù)組類型n數(shù)組類型屬復(fù)合類型,是將一組具有相同數(shù)據(jù)類型的元素集合在一起,作為一個數(shù)據(jù)對象來處理的數(shù)據(jù)類型。n限定性數(shù)組定義語句格式如下:nTYPE 數(shù)組名IS ARRAY (數(shù)組范圍)OF 數(shù)據(jù)類型;n TYPE stb IS ARRAY

39、 (7 DOWNTO 0) of STD_LOGIC ;n非限制性數(shù)組定義語句格式如下:n TYPE 數(shù)組名IS ARRAY (數(shù)組下標(biāo)名RANGE ) OF 數(shù)據(jù)類型;n例1:nTYPE Bit_Vector IS Array (Natural Range ) OF BIT; nVARIABLE va:Bit_Vector (1 to 6); - 將數(shù)組取值范圍定在 16n例2:nTYPE x is (low high) ;nTYPE data_bus IS ARRAY (0 TO 7,x) of BIT ;第4章 VHDL語言要素n例1: n TYPE Real_Matrix IS ARR

40、AY (POSITIVE RANGE ) of RAEL ;n VARIABLE Real_Matrix_Object : Real_Matrix (1 TO 8) ; -限定范圍n例2:n TYPE Log_4_Vector IS ARRAY (NATURAL RANGE ,POSITIVE RANGE) OF Log_4 ;n VARIABLE L4_Object : Log_4_Vector (0 TO 7,1 TO 2) ;-限定范圍第4章 VHDL語言要素n4.3.8 記錄類型n記錄類型與數(shù)組類型都屬數(shù)組,由相同數(shù)據(jù)類型的對象元素構(gòu)成的數(shù)組稱為數(shù)組類型的對象,由不同數(shù)據(jù)類型的對象元素

41、構(gòu)成的數(shù)組稱為記錄類型的對象。記錄是一種異構(gòu)復(fù)合類型, 也就是說,記錄中的元素可以是不同的類型。第4章 VHDL語言要素n定義記錄類型的語句格式如下:nTYPE 記錄類型名 IS RECORDn 元素名 : 元素數(shù)據(jù)類型 ;n 元素名 : 元素數(shù)據(jù)類型 ;n .nEND RECORD 記錄類型名;n例:n TYPE GlitchDataType IS RECORD - 將GlitchDataType定義為四元素記錄類型nSchedTime : TIME ; - 將元素SchedTime 定義為時間類型n GlitchTime : TIME ; - 將元素GlitchTime定義為時間類型n S

42、chedValue : STD_LOGIC ; - 將元素SchedValue定義為標(biāo)準(zhǔn)位類型n CurrentValue : STD_LOGIC ; - 將元素CurrentValue 定義為標(biāo)準(zhǔn)位類型n END RECORD ;n對于記錄類型的數(shù)據(jù)對象賦值的方式可以是整體賦值或?qū)ζ渲械膯蝹€元素進行賦值。第4章 VHDL語言要素n例:nTYPE RegName IS (AX BX CX DX) ;n TYPE Operation IS RECORDn Mnemonic : STRING (1 TO 10) ;n OpCode : BIT_VECTOR(3 DOWNTO 0) ;n Op1 O

43、p2 Res : RegName ;n END record ;n VARIABLE Instr1 Instr2: Operation ;n .n Instr1 := (ADD AX BX 0001 AX BX AX) ;n Instr2 := (ADD AX BX 0010 others = BX) ;n VARIABLE Instr3 : Operation ;n n Instr3.Mnemonic := MUL AX BX ;n Instr3.Op1 := AX ;n記錄類型中的每一個元素僅為標(biāo)量型數(shù)據(jù)類型構(gòu)成稱為線性記錄類型;否則為非線性n記錄類型。只有線性記錄類型的數(shù)據(jù)對象才是可綜合

44、的。第4章 VHDL語言要素n4.3.9 數(shù)據(jù)類型轉(zhuǎn)換n由于 VHDL 是一種強類型語言,這就意味著即使對于非常接近的數(shù)據(jù)類型的數(shù)據(jù)對象,在相互操作時,也需要進行數(shù)據(jù)類型轉(zhuǎn)換。第4章 VHDL語言要素n4.4 VHDL 操作符n4.4.1 操作符種類n在VHDL中 有四類操作符:n邏輯操作符(Logical Operator);n關(guān)系操作符(Relational Operator); n算術(shù)操作符(Arithmetic Operator)和符號操作符(Sign Operator) ;n重載操作符(Overloading Operator); 第4章 VHDL語言要素n4.4.2 邏輯操作符nV

45、HDL共有七種基本邏輯操作符,它們是AND(與)、OR(或)、NAND(與非)、NOR(或非) XOR(異或)、XNOR(同或)和NOT(取反)。信號或變量在這些操作符的直接作用下,可構(gòu)成組合電路。邏輯操作符所要求的操作數(shù)(如變量或信號)的基本數(shù)據(jù)類型有三種,即BIT、BOOLEAN和STD_LOGIC。n操作數(shù)的數(shù)據(jù)類型也可以是一維數(shù)組,其數(shù)據(jù)類型則必須為 BIT_VECTOR 或STD_LOGIC_VECTOR。在所有的操作符中,除 NOT 外,邏輯操作符的優(yōu)先級別是最低的。n通常,在一個表達式中有兩個以上的算符時,需要使用括號將這些運算分組,如果一串運算中的算符相同,且是 AND OR

46、XOR 這三個算符中的一種,則不需使用括號,如果一串運算中的算符不同或有除這三種算符之外的算符,則必須使用括號。第4章 VHDL語言要素n對于VHDL中的操作符與操作數(shù)間的運算有兩點需要特別注意:n 嚴(yán)格遵循在基本操作符間操作數(shù)是同數(shù)據(jù)類型的規(guī)則。n 嚴(yán)格遵循操作數(shù)的數(shù)據(jù)類型必須與操作符所要求的數(shù)據(jù)類型完全一致。第4章 VHDL語言要素nSIGNAL a,b,c : STD_LOGIC_VECTOR (3 DOWNTO 0) n SIGNAL d,e,f,g : STD_LOGIC_VECTOR (1 DOWNTO 0) n SIGNAL h,I,j,k : STD_LOGIC n SIGNA

47、L l,m,n,o,p : BOOLEAN n .n a=b AND c ; - b c 相與后向a賦值 a b cn - 的數(shù)據(jù)類型同屬4位長的位矢量n d=e OR f OR g ; - 兩個操作符OR相同 不需括號n h=(i NAND j) NAND k - NAND不屬上述三種算符中的一種 必須加括號n l=(m XOR n)AND(o XOR p); - 操作符不同 必須加括號n h=i AND j AND k ; - 兩個操作符都是AND 不必加括號n h=i AND j OR k ; - 兩個操作符不同 未加括號 表達錯誤n a=b AND e ; - 操作數(shù)b 與 e的位矢長

48、度不一致 表達錯誤n h=i OR l ; - i 的數(shù)據(jù)類型是位STD_LOGIC 而l的數(shù)據(jù)類型是n . - 布爾量BOOLEAN 因而不能相互作用 表達錯誤第4章 VHDL語言要素n4.4.3 關(guān)系操作符n關(guān)系操作符的作用是將相同數(shù)據(jù)類型的數(shù)據(jù)對象進行數(shù)值比較或關(guān)系排序判斷,并將結(jié)果以布爾類型(BOOLEAN)的數(shù)據(jù)表示出來 即 TRUE 或 FALSE 兩種。nVHDL 規(guī)定,等于和不等于操作符的操作對象可以是 VHDL 中的任何數(shù)據(jù)類型構(gòu)成的操作數(shù)。第4章 VHDL語言要素n余下的關(guān)系操作符 和 = 稱為排序操作符,它們的操作對象的數(shù)據(jù)類型有一定限制。允許的數(shù)據(jù)類型包括所有枚舉數(shù)據(jù)類型、整數(shù)數(shù)據(jù)類型以及由枚舉型或整數(shù)型數(shù)據(jù)類型元素構(gòu)成的一維數(shù)組。不同長度的數(shù)組也可進行排序。VHDL 的排序判斷規(guī)則是,整數(shù)值的大小排序坐標(biāo)是從正無限到負(fù)無限,枚舉型數(shù)據(jù)的大小排序方式與它們的定義方式一致,如n 1 0 ; TRUE FALSE; a b (若 a=1 ,b=0)。n

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論