版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、知識點:VHDL文字規(guī)則1. 數(shù)字型文字由數(shù)字、小數(shù)點和下劃線組成(1)整數(shù)文字 5, 678, 156E2, 45_234_287(=45234287)(2)實數(shù)文字 188.993,88_670_551.453_909(3)以數(shù)制基數(shù)表示的文字格式:數(shù)制#數(shù)值#(指數(shù))例如:10#170# 16#FE#2#1101_0001#8#376# 16#E#E14)物理量文字例如:60 s,100 m2. 字符串文字字符以單引號括起來的數(shù)字、字母和符號(ASCII碼)例如:0,1,A,B,a,b字符串一維的字符數(shù)組,用雙引號括起來。 (1)文字字符串例如:“ABC”,“A BOY.”,“A”, “
2、1011”(2)數(shù)值字符串位矢量格式:數(shù)制基數(shù)符號“數(shù)值字符串”其中: B二進制基數(shù)符號;O八進制基數(shù)符號;X16進制基數(shù)符號;例如:B“111_011_110”;矢量數(shù)組,長度為9O“15”;等效B“001101”,長度為6X“AD0”;等效B“101011010000”, 長度為12 數(shù)值字符串中可添加下劃線,不影響其長度3. 標(biāo)識符是用戶給常量、變量、信號、端口、子程序或參數(shù)定義的名字規(guī)則(87標(biāo)準(zhǔn), 又稱短標(biāo)識符):標(biāo)識符由字母(AZ;az)、數(shù)字和下劃線字符組成任何標(biāo)識符必須以英文字母開頭末字符不能為下劃線不允許出現(xiàn)兩個連續(xù)下劃線標(biāo)識符中不區(qū)分大小寫字母VHDL定義的保留字或稱關(guān)鍵字
3、,不能用作標(biāo)識符VHDL93標(biāo)準(zhǔn)支持?jǐn)U展標(biāo)識符,以反斜杠來定界,允許以數(shù)字開頭,允許使用空格以及兩個以上的下劃號。擴標(biāo)用反斜杠界定。如:multi_screens。允許包含圖形符號、空格符。如:mode A, $100等。反斜杠之間的字符可用保留字。如:buffer, entity等。擴標(biāo)的界定符兩個斜杠之間可以用數(shù)字打頭。如:100$,2chip,4screens等。擴標(biāo)中允許多個下劃線相連。如:Four_screens, TWO_Computer_sharptor等。擴展標(biāo)識符中的一個反斜杠,要用兩個反斜杠來代替擴標(biāo)區(qū)分大小寫。如: EDA 與eda不同。擴標(biāo)與短標(biāo)不同。如:Compute
4、r 與Computer不同。 4.下標(biāo)名數(shù)組用途:用于指示數(shù)組型變量或信號的某一個元素格式:標(biāo)識符(表達(dá)式)例如:b(3);表示數(shù)組型變量或信號b的第3個元素5.段名多個下標(biāo)名的組合用途:用于指示數(shù)組型變量或信號的某一段元素格式:標(biāo)識符(表達(dá)式 方向 表達(dá)式)方向:TO下標(biāo)序號由低到高 DOWNTO下標(biāo)序號由高到低例如:D(7 DOWNTO 0);表示數(shù)據(jù)總線D7D0 D(5 TO 7 );表示數(shù)據(jù)總線D5D76.注釋 VHDL中的注釋由兩個連續(xù)的短線(-)開始,直到行尾。 VHDL數(shù)據(jù)對象存放各種類型數(shù)據(jù)的容器,包括變量、常量、信號和文件 1. 變量(VARIABLE)規(guī)則:只能在進程(PR
5、OCESS)、函數(shù)(FUNCTION)和過程(PROCEDURE)中說明和使用的局域量定義格式:VARIABLE 變量名:數(shù)據(jù)類型(范圍)(:=初始值) 如:VARIABLE a:INTEGER; VARIABLE b:INTEGER :=2; VARIABLE c:INTEGER RANGE 0 TO 7 :=2;變量賦值語句:目標(biāo)變量名:=表達(dá)式例如:VARIABLE x,y:REAL VARIABLE a,b:BIT VECTOR(0 TO 7); x:=100.0; y:=1.5+x; a:=“10101011” a(3 TO 6):=(1,1,0,1); a(0 TO 5):=b(2
6、 TO 7);變量使用要點:變量是一個局部量,只能在進程和子程序中使用,不能將信息帶出對它作出定義的當(dāng)前設(shè)計單元。變量賦值立即發(fā)生,無延時行為。VHDL不支持變量附加延時語句。變量的初值不是必需的,綜合器將略去所有初值。變量常用在實現(xiàn)某種算法的賦值語句中。2. 信號(SIGNAL)規(guī)則:信號是在結(jié)構(gòu)體(ARCHITECTURE)、程序包(PACKAGE)和實體中聲明的全局量。 信號定義格式:SIGNAL 信號名:數(shù)據(jù)類型(范圍)(:=初值)例如:SIGNAL temp:STD LOGIC:=0; SIGNAL flaga,flagb:BIT SIGNAL data:STD LOGIC VECT
7、OR(15 DOWNTO 0); 信號賦值語句: 目標(biāo)信號名=表達(dá)式例如:x=9; y=x; z=x AFTER 5 ns; 注意信號和變量賦值方法的區(qū)別:變量用“:=”號賦值,而信號用“=”賦值;在聲明中對信號和變量賦初值,兩者都用“:=”號。信號使用要點信號類似于連接線。信號可以作為設(shè)計實體中并行語句模塊間的信息交流通道。信號不但可以容納當(dāng)前值,也可以保持歷史值。這一屬性與觸發(fā)器的記憶功能有很好的對應(yīng)關(guān)系。信號的初值不是必需的,而且僅在仿真中有效。信號的賦值允許允許設(shè)定延時,如:T1<=T2 AFTER 20 ns,但僅用于仿真。當(dāng)信號用在順序描述語句中時,其值在相應(yīng)的進程,函數(shù)或過
8、程完成之后才更新。實體中定義的端口默認(rèn)為信號。3. 常量(CONSTANT)規(guī)則:常量在程序前部定義,且一旦被賦值就不能再改變。常量定義格式:CONSTANT 常量名:數(shù)據(jù)類型:=初值;例如:CONSTANT fbus:BIT VECTOR:=“010111”;CONSTANT Vcc:REAL:=5.0;CONSTANT dely:TIME:=25 ns; 常量使用要點:常量設(shè)置使得設(shè)計實體中的常數(shù)易閱讀和修改。如將位矢的寬度定義為一個常量,只要修改這個常量就能改變寬度,從而改變硬件結(jié)構(gòu)。常量是一個恒定不變的值,一旦作了數(shù)據(jù)類型的賦值定義后,在程序中不能再改變,有全局意義。常量與表達(dá)式類型必
9、須一致,只能是標(biāo)量類型或復(fù)合類型。常量的可視性(其使用范圍取決于定義的位置):定義在程序包中的常量,具有最大全局化特征,可以用在調(diào)用此程序包的所有設(shè)計實體中;定義在設(shè)計實體中的常量,其有效范圍為這個實體定義的所有的結(jié)構(gòu)體;定義在設(shè)計實體的某一結(jié)構(gòu)體中的常量,則只能用于此結(jié)構(gòu)體;定義在結(jié)構(gòu)體的某一單元的常量,如一個進程中,則這個常量只能用在這一進程中。4. 文件(FILE)(VHDL 1076-1993標(biāo)準(zhǔn)) 文件是傳輸大量數(shù)據(jù)的客體,包含一些專門數(shù)據(jù)類型的數(shù)值。在仿真測試時,測試的輸入激勵數(shù)據(jù)和仿真結(jié)果的輸出都可用文件來進行。文件的聲明方式為:FILE identifier : file_ty
10、pe OPEN mode IS “file_name”;VHDL數(shù)據(jù)類型VHDL是一種強類型語言,要求設(shè)計實體中的每一個常數(shù)、信號、變量、函數(shù)以及設(shè)定的各種參量都必須具有確定的數(shù)據(jù)類型,并且只有數(shù)據(jù)類型相同的量才能互相傳遞和作用。1. 標(biāo)量型(Scalar Type)單元素的最基本數(shù)據(jù)類型(1)實數(shù)類型(2)整數(shù)類型(3)枚舉類型(4)時間類型2. 復(fù)合類型(Composite Type) (1)數(shù)組型(Array) (2)記錄型(Record) 3. 存取類型(Access Type)為數(shù)據(jù)對象提供存取方式 4.文件類型(Files Type)提供多值存取類型3.2.4 VHDL的預(yù)定義數(shù)據(jù)
11、類型在STD庫中的標(biāo)準(zhǔn)程序包(STANDARD)中預(yù)先定義的數(shù)據(jù)類型。 1. 位(BIT)數(shù)據(jù)類型BIT是一個二值枚舉類型,包括0和1??捎糜诒硎咀兞俊⑿盘柕葦?shù)據(jù)對象的狀態(tài)。定義語句:TYPE BIT IS(0,1) 2. 位矢量(BIT VECTOR)數(shù)據(jù)類型位矢量是由多個BIT組成的數(shù)組,BIT是其元素,形式為用雙引號把多個BIT位括在一起,如“0011”??捎糜诒硎究偩€的狀態(tài)。定義語句:TYPE BIT VECTOR IS ARRAY(NATURAL RANGE)OF BIT;RANGE表示寬度未定,NATURAL表示其寬度的范圍和自然數(shù)的范圍相同規(guī)則:使用位矢量必須注明位寬,例如:SI
12、GNAL a:BIT VECTOR(7 DOWNTO 0);-定義a是一個寬為8位的位矢量,左為a(7)右為a(0);例: SIGNAL a:BIT_VECTOR(7 DOWNTO 0); SIGNAL b:BIT_VECTOR(3 DOWNTO 0); SIGNAL c:BIT; b<=“1110”; b(3)<=1; b<=a(7 DOWNTO 4); a(7 DOWNTO 4)<=a(3 DOWNTO 0); a(3 DOWNTO 0)<= b; a(7)<=C; 3. 布爾(BOOLEAN)數(shù)據(jù)類型BOOLEAN也是一個二值枚舉類型,一個布爾量具有兩
13、種狀態(tài):邏輯“假”(FALSE)和邏輯“真”(TRUE)。布爾量沒有具體數(shù)值的含義,也不能進行算術(shù)運算,但是可以進行邏輯運算,并作為關(guān)系運算的結(jié)果。定義語句:TYPE BOOLEAN IS(FALSE,TRUE);-以枚舉類型定義 4. 字符(CHARACTER)數(shù)據(jù)類型字符是用單引號括起來的ASCII碼字符,如A a 0 9。字符有大小寫區(qū)分,如B不同于b。定義語句:TYPE CHARACTER IS(ASCII碼字符表中的全部字符) 5. 字符串(STRING)數(shù)據(jù)類型字符串是用雙引號括起來的字符序列,也稱字符矢量或字符串?dāng)?shù)組。例如,“A BOY.”,“10100011” 6. 整數(shù)(IN
14、TEGER)數(shù)據(jù)類型整數(shù)包括:正整數(shù)、負(fù)整數(shù)和零范圍:32位帶符號整數(shù),即-(231-1)+(231-1) 即(-2147483647+2147483647) 整數(shù)常量的書寫方式示例如下:2 -十進制整數(shù)10E4 -十進制整數(shù)16#D2# -十六進制整數(shù)2#11011010# -二進制整數(shù)硬件實現(xiàn)時,整數(shù)由不超過32位的二進制數(shù)來表示。 當(dāng)端口類型設(shè)為整數(shù)型時一般應(yīng)對其范圍給予限定,這時端口的寬度為可以表示該整數(shù)的最小寬度;如沒有限定范圍,則綜合后的位寬為32位。 如:SIGNAL s : INTEGER RANGE 0 TO 15; 表示信號 s 的取值范圍是0-15,可用4位二進制數(shù)表示,
15、因此 s 將被綜合成由四條信號線構(gòu)成的信號。7.自然數(shù)(NATURAL)和正整數(shù)(POSITIVE)數(shù)據(jù)類型自然數(shù)和正整數(shù)都是整數(shù)的子集自然數(shù)包括0和正整數(shù)正整數(shù)不包括0的正整數(shù) 其定義如下:定義如下: SUBTYPE NATURAL IS INTEGER RANGE 0 TO INTEGERHIGH; SUBTYPE POSITIVE IS INTEGER RANGE 1 TO INTEGERHIGH;8. 實數(shù)(REAL)數(shù)據(jù)類型VHDL的實數(shù)類型類似于數(shù)學(xué)上的實數(shù),或稱浮點數(shù)。由正負(fù)號、小數(shù)點和數(shù)字組成。范圍:-1.0E+38 TO +1.0E+38 實數(shù)常量的書寫方式舉例如下: 659
16、71.333333 -十進制浮點數(shù) 8#43.6#E+4 -八進制浮點數(shù) 43.6E-4 -十進制浮點數(shù)實數(shù)類型僅能在EDA仿真器中使用,因為其實現(xiàn)相當(dāng)復(fù)雜,EDA綜合器目前尚不支持。9. 時間(TIME)數(shù)據(jù)類型時間是物理量數(shù)據(jù),由整數(shù)數(shù)據(jù)和單位兩部分組成,整數(shù)和單位之間至少留一個空格,如55 ms,20 ns。時間及其他物理量數(shù)據(jù)可以用于仿真,但不可綜合。定義如下:TYPE TIME IS RANGE 2147483647 TO 2147483647UNITSfs;-飛秒(10-15S)VHDL中的最小時間單位ps=1000fs;-皮秒ns=1000ps;-納秒us=1000ns;-微秒m
17、s=1000us;-毫秒sec=1000ms;-秒min=60sec;-分hr=60min;-時END UNITS; 10.錯誤等級(Severity Level)錯誤等級屬于枚舉數(shù)據(jù)類型,用于表征系統(tǒng)的狀態(tài),包括:NOTE(注意),WARNING(警告),ERROR(出錯),F(xiàn)AILURE(失?。?。在仿真過程中,可輸出這4種值來提示被仿真系統(tǒng)當(dāng)前的工作狀態(tài)。其定義如下:TYPE SEVERITY_LEVEL IS(NOTE,WARNING,ERROR,F(xiàn)AILURE);3.2.5 IEEE預(yù)定義的標(biāo)準(zhǔn)邏輯位和矢量在IEEE庫的程序包STD_LOGIC_1164中,定義了兩個非常重要的數(shù)據(jù)類
18、型,即標(biāo)準(zhǔn)邏輯位STD_LOGIC 和標(biāo)準(zhǔn)邏輯矢量STD_LOGIC_VECTOR。 1. 標(biāo)準(zhǔn)邏輯位(STD LOGIC)數(shù)據(jù)類型 TYPE STD LOGIC IS(U,-未初始化的 X,-強未知的 0,-強0 1,-強1 Z,-高阻態(tài) W,-弱未知的 L,-弱0 H,-弱1 -忽略); 兩個或以上數(shù)字邏輯電路的輸出端連接到同一個節(jié)點時,節(jié)點的電平該如何取值?節(jié)點的電平取值取決于:兩者或多方當(dāng)前的輸出電平值;兩者的驅(qū)動能力強弱。驅(qū)動能力強的電路可以將節(jié)點電平強行拉高或拉低,因此需建立多值邏輯系統(tǒng)加以細(xì)分。多個輸出連接到同一個節(jié)點上時,節(jié)點的電平取值:數(shù)值關(guān)系歸納:X或-與其它數(shù)值連接時,最
19、終電平取值均為X;Z與其它數(shù)值連接時,最終電平取值均為其它數(shù)值;強邏輯和弱邏輯連接時,取強邏輯的數(shù)值;W與L/H數(shù)值連接時,最終電平取值均為W;0與1、L與H連接時,最終電平取值分別為X、W;2. 標(biāo)準(zhǔn)邏輯矢量(STD LOGIC VECTOR)數(shù)據(jù)類型標(biāo)準(zhǔn)邏輯矢量在電路中用來表示總線。其定義如下:TYPE STD LOGIC VECTOR IS ARRAY(NATURAL RANGE)OF STD LOGIC ; - RANGE表示寬度未定,NATURAL表示其寬度的范圍和自然數(shù)的范圍相同注意:在程序中使用上述兩種數(shù)據(jù)類型前,需加入下面語句:LIBRARY IEEE;USE IEEE.STD
20、_LOGIC_1164.ALL;對標(biāo)準(zhǔn)邏輯位及標(biāo)準(zhǔn)邏輯位矢量賦值時,H L Z等不能用小寫在9種邏輯值中,只有1 0 和Z可綜合,其他僅用于仿真STD_LOGIC_VECTOR類型數(shù)據(jù)不能直接進行算術(shù)運算SIGNAL a: BIT;SIGNAL b: BIT_VECTOR(7 DOWNTO 0);SIGNAL c: STD_LOGIC;SIGNAL d: STD_LOGIC_VECTOR(7 DOWNTO 0);SIGNAL e: INTEGER RANGE 0 TO 255;例:a<=b(3) 合法 b(2)<=a; c<=d(5); d(0)<=c; a<=c
21、; 非法 d<=b; e<=b; e<=d;1. 枚舉類型(Enumerated)枚舉該類型的所有可能的值。定義格式:TYPE 數(shù)據(jù)類型名 IS (元素,元素.,元素);例如:TYPE week IS (sun,mon,tue,wed,thu, fri,sat); TYPE my_logic IS (1,0,Z);枚舉類型的編碼: 綜合器自動實現(xiàn)枚舉類型元素的編碼,一般將第一個枚舉量(最左邊)編碼為0,以后的依次加1。編碼用位矢量表示 ,位矢量的長度將取所需表達(dá)的所有枚舉元素的最小值。如:TYPE color IS(blue, green, yellow, red); 編碼為
22、: blue=“00”; green=“01”; yellow=“10”; red=“11”;2. 整數(shù)類型和實數(shù)類型定義格式:TYPE 數(shù)據(jù)類型名 IS RANGE 范圍;例如:TYPE num1 IS RANGE 0 TO 100; 3. 數(shù)組類型 數(shù)組是將相同數(shù)據(jù)類型的數(shù)據(jù)集合在一起形成的一種新的數(shù)據(jù)類型。可以是1D、2D或1D*1D,更高維數(shù)的數(shù)組往往是不可綜合的。 數(shù)組的結(jié)構(gòu):VHDL中預(yù)定義的數(shù)據(jù)類型僅包括標(biāo)量類型(單個位)和矢量類型(一維數(shù)組)兩類,并沒有預(yù)定義2D和1D*1D數(shù)組,用戶可以自定義。定義格式:TYPE 數(shù)組名 IS ARRAY (數(shù)據(jù)范圍) OF 數(shù)據(jù)類型;例如:
23、TYPE data_bus IS ARRAY (7 DOWNTO 0) OF STD_LOGIC;-定義數(shù)據(jù)總線,下標(biāo)由高到低,即D7位權(quán)值最高,D0位權(quán)值最低。TYPE data_bus IS ARRAY (0 TO 7) OF STD_LOGIC;-定義數(shù)據(jù)總線,下標(biāo)由低到高,即D0位權(quán)值最高,D7位權(quán)值最低。一種定義1D*1D數(shù)組的方法: TYPE row IS ARRAY (7 DOWNTO 0) OF STD_LOGIC;-1D數(shù)組; TYPE matrix IS ARRAY (0 TO 3) OF row; -1D*1D數(shù)組,矢量數(shù)組; SIGNAL x:matrix; -聲明是1
24、D*1D信號另一種定義1D*1D數(shù)組的方法: TYPE matrix IS ARRAY (0 TO 3) OF STD_LOGIC_VECTOR(7 DOWNTO 0);二維數(shù)組的定義方法: TYPE matrix2D IS ARRAY(0 TO 3,7 DOWNTO 0) OF STD_LOGIC; 數(shù)組的賦值方法:x<=“0001”;對一維數(shù)組賦值x<= (0, 0,0,1,);對一維數(shù)組賦值y<=(0, 0,0,1,),(0, 0,0,1,);對1×1維或二維數(shù)組賦值4. 記錄類型(Record)記錄是一組不同數(shù)據(jù)類型的元素的組合。定義格式:TYPE 記錄類型
25、名 IS RECORD元素名:元素數(shù)據(jù)類型;元素名:元素數(shù)據(jù)類型;:END RECORD 記錄類型名 ;訪問記錄體元素的方式:記錄體名.元素名TYPE a_and_b IS RECORD a : STD_LOGIC_VECTOR(7 DOWNTO 0); b : INTEGER RANGE 0 to 3; END RECORD ; SIGNAL x, y, z : a_and_b ; SIGNAL data : STD_LOGIC_VECTOR(7 DOWNTO 0); SIGNAL num : INTEGER ; . x.a <= “11110000” ; x.b <= 2 ;
26、data <= y.a ; num <= y.b ; z <= x ; 數(shù)據(jù)類型轉(zhuǎn)換 由于VHDL是一種強類型語言,不同類型的數(shù)據(jù)對象必須經(jīng)過類型轉(zhuǎn)換,才能相互操作。常見的實現(xiàn)數(shù)據(jù)類型轉(zhuǎn)換的方法有以下兩種:寫一段專用于數(shù)據(jù)類型轉(zhuǎn)換的VHDL代碼調(diào)用程序包中預(yù)定義的數(shù)據(jù)類型轉(zhuǎn)換函數(shù),如程序包STD_LOGIC_1164。 IEEE庫中提供了若干數(shù)據(jù)類型轉(zhuǎn)換函數(shù): STD_LOGIC_1164程序包定義的轉(zhuǎn)換函數(shù):函數(shù) TO_STDLOGICVECTOR(A)-由位矢量BIT_VECTOR轉(zhuǎn)換為標(biāo)準(zhǔn)邏輯矢量STD_LOGIC_VECTOR函數(shù) TO_BITVECTOR(A) -由
27、標(biāo)準(zhǔn)邏輯矢量STD_LOGIC_VECTOR轉(zhuǎn)換為位矢量BIT_VECTOR函數(shù) TO_STDLOGIC (A) -由BIT轉(zhuǎn)換為STD_LOGIC函數(shù) TO_BIT(A) -由標(biāo)準(zhǔn)邏輯STD_LOGIC轉(zhuǎn)換BITSTD_LOGIC_ARITH程序包定義的轉(zhuǎn)換函數(shù):函數(shù) CONV_STD_LOGIC_VECTOR(A,B)-由INTEGER,SINGED,UNSIGNED或STD_LOGIC轉(zhuǎn)換成位寬為B的STD_LOGIC_VECTOR函數(shù) CONV_INTEGER(A); -由SIGNED,UNSIGNED和STD_LOGIC轉(zhuǎn)換成INTEGER函數(shù) TO_STDLOGIC (A) -由B
28、IT轉(zhuǎn)換為STD_LOGIC例:數(shù)據(jù)類型轉(zhuǎn)換 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_ARITH.ALL; . SIGNAL a: IN INTEGER RANGE 0 TO 15; SIGNAL b: IN INTEGER RANGE 0 TO 15; SIGNAL y: OUT STD_LOGIC_VECTOR(7 DOWNTO 0); . y<=CONV_STD_LOGIC_VECTOR(a+b),8);VHDL操作符VHDL的各種表達(dá)式由操作數(shù)和操作符組成,其中,操作數(shù)是各種運算的對象,而操作符則
29、規(guī)定運算的方式。操作符種類及對應(yīng)的操作數(shù)類型在VHDL中,一般有四類操作符: 邏輯操作符(Logical Operator) 關(guān)系操作符(Relational Operator) 算術(shù)操作符(Arithmetic Operator) 符號操作符(Sign Operator)3.2.8 屬性(ATTRIBUTE)描述與定義語句屬性從指定的客體或?qū)ο笾蝎@取關(guān)心的數(shù)據(jù)或信息。利用屬性可以使VHDL源代碼更加簡明扼要,易于理解;語法: 對象屬性預(yù)定義的屬性:數(shù)值類屬性和信號類屬性數(shù)值類屬性:獲取數(shù)組或一般數(shù)據(jù)的相關(guān)信息。VHDL預(yù)先定義的、可綜合的數(shù)值類屬性: LEFT:索引的左邊界值 RIGHT:索
30、引的右邊界值 HIGH:索引的上限值 LOW:索引的下限值 LENGTH:索引的長度值 RANGE:索引的位寬范圍 REVERSE_RANGE:索引的反向位寬范圍 例: VARIABLE my_vector : BIT_VECTOR (5 DOWNTO 0);各屬性如下: my_vectorLEFT 5 my_vectorRIGHT 0 my_vectorHIGH 5 my_vectorLOW 0 my_vectorLENGTH 6 my_vectorRANGE (5 DOWNTO 0) my_vectorREVERSE_RANGE (0 TO 5)例:TYPE number IS INTEG
31、ER RANGE 9 DOWNTO 0;I:=numberLEFT;-I=9I:=numberRIGTH;-I=0I:=numberHIGH;-I=9I:=numberLOW;-I=0枚舉類型數(shù)值的屬性:通常是不可綜合的 VAL(pos): 指定位置(pos)的值 POS(value):給定數(shù)值的位置序號 LEFTOF(value):給定數(shù)值的左側(cè)值 RIGHTOF(value):給定數(shù)值的右側(cè)值 SUCC(value):返回數(shù)據(jù)類型定義中該數(shù)據(jù)值的 下一個值 PRED(value):返回數(shù)據(jù)類型定義中該數(shù)據(jù)值的前一個值TYPE week IS(monday,tuesday,wednesday
32、,thursday,friday,saturday,sunday);那么根據(jù)上面的屬性函數(shù)定義,不難得出如下的結(jié)果:week'POS(tuesday)=1week'VAL(3)=thursdayweek'SUCC(thursday)=fridayweek'PRED(thursday)=wednesdayweek'LEFTOF(friday)=thursdayweek'RIGHTOF(friday)=Saturday信號類屬性:VHDL預(yù)定義的,對于信號s:EVENT: 如果s值發(fā)生了變化,則返回值為true,否則為false , 常用于于時鐘信號
33、的判定。STABLE:如果s值保持不變,則返回值為true,否則為false。ACTIVE:如果s值被處理,則返回值為true,否則為false。QUIET<time>:如果在指定的time內(nèi)s值保持不變,則返回值為true,否則為false。LAST_EVENT:返回從上一次事件發(fā)生的時間到當(dāng)前時間的時間差。LAST_ACTIVE:最后一次s被處理到當(dāng)前所經(jīng)歷的時間長度值。LAST_VALUE:最后一次變化前s的值; 除EVENT和STABLE屬性是可以綜合的之外,其它的屬性都不可綜合,僅用于仿真。其中以EVENT最為常用。屬性EVENT通常用于確定時鐘信號的邊沿。例如:cloc
34、kEVENT-檢測以clock為屬性測試項目的事件clockEVENT AND clock=1;-檢測clock的上升沿clockEVENT AND clock=0;-檢測clock的下降沿EVENT和ACTIVE有何區(qū)別?事件發(fā)生:信號值的發(fā)生變化,如由0變到1是一個事件,而0變到0則不是一個事件,原因是信號值沒有變。信號活躍:信號值的任何變化,如由0變到1是一個信號活躍,而信號從0變到0也是一個信號活躍。怎么理解這句話?。克械氖录际腔钴S,但并非所有的活躍都是事件改錯:例:“1”計數(shù)器錯誤LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL; ENTITY c
35、ount_one ISPORT (din:IN STD_LOGIC_VECTOR (7 DOWNTO 0);ones:OUT INTEGER RANGE 0 TO 8);END count_one;ARCHITECTURE test OF count_one IS SIGNAL temp: INTEGER RANGE 0 TO 8; BEGIN PROCESS (din)BEGINtemp<=0;FOR i IN 0 TO 7 LOOP IF(din(i)='1') THEN temp<=temp+1; END IF; END LOOP; ones<=temp
36、; END PROCESS;END test;例:“1”計數(shù)器正確LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL; ENTITY count_one ISPORT (din:IN STD_LOGIC_VECTOR (7 DOWNTO 0);ones:OUT INTEGER RANGE 0 TO 8);END count_one;ARCHITECTURE test OF count_one ISBEGIN PROCESS (din) VARIABLE temp: INTEGER RANGE 0 TO 8;BEGINtemp:=0;FOR i IN 0 TO 7
37、LOOP IF(din(i)='1') THEN temp:=temp+1; END IF; END LOOP; ones<=temp; END PROCESS;END test;例:合法與非法的數(shù)組賦值:TYPE row IS ARRAY(7 DOWNTO 0) OF STD_LOGIC;TYPE array1 IS ARRAY(0 TO 3) OF row;TYPE array2 IS ARRAY(0 TO 3) OF STD_LOGIC_VECTOR(7 DOWNTO 0);TYPE array3 IS ARRAY(0 TO 3,7 DOWNTO 0) OF STD
38、_LOGIC; SIGNAL x: row;SIGNAL y: array1;SIGNAL z: array2;SIGNAL u: array3x(1)<=y(1)(3)合法x(1)<=z(2)(3)合法x(2)<=u(2,1)合法y(1)(2)<=z(0)(0); 合法z(0)(3)<=u(3,0);合法x<=z(1);-非法,類型不匹配,x是row類型,而z(1)是STD_LOGIC_VECTOR類型的。x<=u(2); 非法,u必須帶兩個索引值;x<=u(2,2 DOWNTO 0); 非法,x是row類型的,而右側(cè)是STD_LOGIC類型的
39、。z(0)<=u(2,2 DOWNTO 0); -非法,z(0)是STD_LOGIC_VECTOR類型的,右側(cè)是STD_LOGIC類型的,數(shù)據(jù)類型不匹配。u(1,5 DOWNTO 1)<=z(2)(4 DOWNTO 0);-非法,類型不匹配。y(1)(7 DOWNTO 3)<=x(4 DOWNTO 0);-合法。z(1)(7 DOWNTO 3)<= z(2)(4 DOWNTO 0); 合法。u(1,5 DOWNTO 1)<=z(2)(4 DOWNTO 0); 非法,數(shù)據(jù)類型不匹配。代碼:【例3.1】或門的描述LIBRARY IEEE;USE IEEE.STD LO
40、GIC 1164.ALL; ENTITY or1 ISPORT(a,b:IN STD_LOGIC;y:OUT STD LOGIC);END or1;ARCHITECTURE example1 OF or1 ISBEGIN y<=a OR b;END example1;【例3.2】半加器的描述LIBRARY IEEE;USE IEEE.STD LOGIC 1164.ALL ; ENTITY h_adder ISPORT(a,b:IN STD LOGIC;so,co:OUT STD LOGIC);END h_adder ;ARCHITECTURE example2 OF h_adder IS
41、BEGIN so<=a XOR b;co<=a AND b;END example2; 【例3.3】2選1數(shù)據(jù)選擇器的描述LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL; ENTITY mux21 ISPORT ( a, b: IN STD_LOGIC; s: IN STD_LOGIC; y: OUT STD_LOGIC);END mux21;ARCHITECTURE example3 OF mux21 ISBEGIN y<=a WHEN s=0 ELSE b;END ARCHITECTURE example3;【例3.3】2選1數(shù)據(jù)選擇器的
42、描述(另一種編程方法)LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL; ENTITY mux21 ISPORT(a,b:IN STD_LOGIC; s:IN STD_LOGIC; y:OUT STD_LOGIC);END mux21;ARCHITECTURE example3 OF mux21 ISBEGIN y<=(a AND NOT s) OR (b AND s);END ARCHITECTURE example3;【例3.4】鎖存器的描述LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL; ENTITY latch1
43、ISPORT (d:IN STD_LOGIC;ena:IN STD_LOGIC; q:OUT STD_LOGIC);END latch1;ARCHITECTURE example4 OF latch1 ISBEGIN PROCESS (d,ena)BEGINIF ena='1' THENq<=d;END IF; END PROCESS;END example4;例:h_adder合法 mux21,合法 and非法,關(guān)鍵詞不能作為標(biāo)識符_Decoder 非法,起始不能為下劃線3DOP 非法,起始不能為數(shù)字 Large#number 非法, “#”不能成為標(biāo)識符的構(gòu)成符號 D
44、ata_bus 非法,不能有雙下劃線 Copper_非法,最后字符不能為下劃線D-Link非法, “-”不能成為標(biāo)識符的構(gòu)成符號Verilog hdl知識點:4.2.6 操作符 操作符也稱為運算符,是Verilog HDL預(yù)定義的函數(shù)名字,這些函數(shù)對被操作的對象(即操作數(shù))進行規(guī)定的運算,得到一個結(jié)果。 操作符通常由13個字符組成,例如,“+”表示加操作,“= =”(兩個=字符)表示邏輯等操作,“= = =”(3個=字符)表示全等操作。有些操作符的操作數(shù)只有1個,稱為單目操作;有些操作符的操作數(shù)有2個,稱為雙目操作;有些操作符的操作數(shù)有3個,稱為三目操作。 1. 算術(shù)操作符(Arithmeti
45、c operators)常用的算術(shù)操作符: +(加)、-(減)、*(乘)、/(除)、%(求余)、*(求冪)其中%是求余操作符, 在兩個整數(shù)相除的基礎(chǔ)上,取出其余數(shù)。例如,5 % 6的值為5;13 % 5的值是3。算術(shù)操作符的主要性質(zhì):任意操作數(shù)如有一位是x或z,則結(jié)果為x。求余數(shù)操作的結(jié)果符號和第一個操作數(shù)符號相同。整數(shù)除法將截斷小數(shù)部分(沒有四舍五入)。算術(shù)運算結(jié)果的位寬由操作數(shù)中位寬最大者的位寬決定;在賦值語句中,算術(shù)運算的結(jié)果位寬由目標(biāo)變量的位寬決定。2. 邏輯操作符(Logical operators )邏輯操作符包括:&&(邏輯與)、|(邏輯或)、?。ㄟ壿嫹牵┳⒁猓悍?/p>
46、零的位矢量被當(dāng)作1處理。 比如:a=b0010, b=b0001; 則 a&&b=1, a | b=1, !a=0如果操作數(shù)中包含x或z,則結(jié)果視具體情況而定。 比如:b1|bx=1, b1&&bx=x, !x=x 3. 位運算(Bitwise operators)位運算是將兩個操作數(shù)按對應(yīng)位進行邏輯操作。位運算操作符包括:(按位取反)、&(按位與)、|(按位或)、(按位異或)、或(按位同或)。在進行位運算時,當(dāng)兩個操作數(shù)的位寬不同時,計算機會自動將兩個操作數(shù)按右端對齊,位數(shù)少的操作數(shù)會在高位添0補齊。注意: 如操作數(shù)包含x或z的位, 則0&x=
47、0; 1|x=1; 0&z=0; 1|z=1; 其他情況相應(yīng)的位結(jié)果均為x。4. 關(guān)系操作符(Pelational operators)關(guān)系操作符有: <(小于)、<=(小于等于)、>(大于)、>=(大于等于)。其中,<=也是賦值運算的賦值符號。 關(guān)系運算的結(jié)果是1位邏輯值。在進行關(guān)系運算時,如果關(guān)系是真,則計算結(jié)果為1;如果關(guān)系是假,則計算結(jié)果為0;如果某個操作數(shù)的值不定,則計算結(jié)果不定(為x)。 如果兩個操作數(shù)位寬不同,位寬較短的操作數(shù)在高位添0補齊。5. 等式操作符(Equality operators)等值操作符包括:= =(等于)、!=(不等于)
48、、= = =(全等)、!= =(不全等)4種。等值運算的結(jié)果也是1位邏輯值,當(dāng)運算結(jié)果為真時,返回值1;為假則返回值0。相等操作符(= =)與全等操作符(= = =)的區(qū)別是:當(dāng)進行相等運算時,如果某些位是不定或高阻狀態(tài),其相等比較的結(jié)果就會是x;而進行全等運算時,對不定或高阻狀態(tài)位也進行比較,當(dāng)兩個操作數(shù)完全一致時,其結(jié)果的值才為1(真),否則結(jié)果為0(假)。全等和不全等操作符不可綜合 6. 縮減操作符(Reduction operators)縮減操作符包括:&(與)、&(與非)、|(或)、|(或非)、(異或)、或(同或)。 縮減操作運算法則與位運算操作相同,但操作的運算對象
49、只有一個。在進行縮減操作運算時,對操作數(shù)進行與、與非、或、或非、異或、同或等縮減操作運算,產(chǎn)生1位的操作結(jié)果。 例如,A = 8b11010001,則& A = 0,|A = 1??s減操作符的主要性質(zhì):對于縮減與:只要操作數(shù)中有一位是0,結(jié)果為0;如果操作數(shù)所有位都不為0且包含x或z,則結(jié)果為x,否則結(jié)果為1。對于縮減或:只要操作數(shù)中有一位是1,結(jié)果為1;如果操作數(shù)所有位都不為1且包含x或z,則結(jié)果為x,否則結(jié)果為0。對于縮減異或:只要操作數(shù)中有一位是x或z,結(jié)果為x;如果操作數(shù)所有位都不為x或z,則如有偶數(shù)個1,結(jié)果為0,有奇數(shù)個1,則結(jié)果為1??s減與非,縮減或非和縮減異或非的結(jié)果和
50、上述相反。7. 轉(zhuǎn)移操作符(Shift operators)轉(zhuǎn)移操作符包括:>>(邏輯右移)、<<(邏輯左移)、>>>(算術(shù)右移)、<<<(算術(shù)左移)操作數(shù) <<n;/將操作數(shù)的內(nèi)容左移n位,同時從右邊開始用0來填補移出的位數(shù)。操作數(shù) >> n;/將操作數(shù)的內(nèi)容右移n位,同時從左邊開始用0來填補移出的位數(shù)。操作數(shù) <<< n;/將操作數(shù)的內(nèi)容左移n位,同時從右邊開始用0來填補移出的位數(shù)。操作數(shù) >>> n;/將操作數(shù)的內(nèi)容右移n位,同時從左邊開始用0(對無符號數(shù))或符號位(對有符號數(shù))來填補移出的位數(shù)。n總是被視為無符號數(shù)8. 條件操作符(Conditional operators)條件操作符為:?:條件操作符的操作數(shù)有3個,其使用格式為操作數(shù) = 條件 ? 表達(dá)式1:表達(dá)式2;即當(dāng)條件為真(條件結(jié)果值為1)時,操作數(shù) = 表達(dá)式1;為假(條件結(jié)果值為0)時,操作數(shù) = 表達(dá)式2。9. 位并接操作符(Concatenation operators)并接操作符為:并接操作符的使用格式為操作數(shù)1的某些位,操作數(shù)2的某些位,操作數(shù)n的某些位;即將操作數(shù)1的某些位與操作數(shù)2的某些位與與操作數(shù)
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 《營業(yè)稅課件》課件
- 《統(tǒng)計調(diào)查技能模塊》課件
- 《認(rèn)識寶島臺灣》課件
- 《王老吉的市場營銷》課件
- 《網(wǎng)頁設(shè)計與鑒賞》課件
- 2025年中考語文文言文總復(fù)習(xí)-教師版-專題01:文言文閱讀之理解實詞含義(講義)
- 鞋業(yè)生產(chǎn)線采購招標(biāo)合同三篇
- 教育機構(gòu)話務(wù)員工作總結(jié)
- 藥品醫(yī)療器械銷售心得分享
- 兒童感染科護理工作總結(jié)
- 四人合伙投資協(xié)議書范本
- 成都市農(nóng)貿(mào)市場建設(shè)技術(shù)要求(2019年版)(完整版)
- 2024-2030年版中國IPVPN服務(wù)行業(yè)發(fā)展現(xiàn)狀及投資商業(yè)模式分析報告
- 【7歷期末】安徽省蕪湖市弋江區(qū)2023~2024學(xué)年七年級上學(xué)期期末考試歷史試卷(含解析)
- 北京市海淀區(qū)2021-2022學(xué)年第一學(xué)期四年級期末考試語文試卷(含答案)
- 2024-2030年中國企業(yè)大學(xué)行業(yè)運作模式發(fā)展規(guī)劃分析報告
- 房地產(chǎn)激勵培訓(xùn)
- 山東省濟南市2023-2024學(xué)年高二上學(xué)期期末考試地理試題 附答案
- 期末復(fù)習(xí)試題1(試題)-2024-2025學(xué)年二年級上冊數(shù)學(xué)北師大版
- 【MOOC】微型計算機原理與接口技術(shù)-南京郵電大學(xué) 中國大學(xué)慕課MOOC答案
- 安徽省蕪湖市2023-2024學(xué)年高一上學(xué)期期末考試 生物 含解析
評論
0/150
提交評論