數字電路基礎課件_第1頁
數字電路基礎課件_第2頁
數字電路基礎課件_第3頁
數字電路基礎課件_第4頁
數字電路基礎課件_第5頁
已閱讀5頁,還剩77頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

第四章VHDL語言元素

4.1VHDL語言的客體4.2VHDL語言的數據類型4.3VHDL數據類型轉換

4.4VHDL詞法規(guī)則與標識符

第四章VHDL語言元素4.1VH14.1VHDL語言的客體

VHDL語言中,可以賦予一個質的對象就稱為客體??腕w主要包括以下三種:變量(VARIABLE)、常量(CONSTANT)、信號(SIGNAL)。4.1.1常量(CONSTANT)(常數)定義一個常數主要是為了使設計實體中的某些量易于閱讀和修改。常數說明就是對某一常數名賦予一個固定的值。通常在程序開始前進行賦值,該值的數據類型在說明語句中說明。常數說明語句格式為:CONSTANT常數名:數據類型:=表達式;

4.1VHDL語言的客體VHDL語言中,可以2例如:CONSTANTVcc:REAL:=5.0;CONSTANTFbus:BIT_VECTOR:=“1011”;CONSTANTDelay:TIME:=10ns;注:常量是一個恒定不變的值,一旦做了數據類型和賦值定義,它在程序中就不能再改變。例如:注:常量是一個恒定不變的值,一旦做了數據類型和賦值定義34.1.2變量(VARIABLE)變量只能在進程和子程序中用,是一個局部量,不能將信息帶出對它做出定義的當前設計單元。與信號不同,變量的賦值是理想化數據傳輸,其賦值是立即生效的,不存在任何的延時行為。變量定義語句的格式為:VARIABLE變量名:數據類型:約束條件:=初始值;例如:VARIABLE

n:INTEGERRANGE0TO15

:=

2;VARIABLEa:INTEGER;

4.1.2變量(VARIABLE)4變量賦值語句的格式為:目標變量名

:=

表達式;賦值語句“:=”右邊的表達式必須與目標變量具有相同的數據類型,這個表達式可以是一個運算表達式也可以是一個數值。變量賦值語句左邊的目標變量可以是單值變量,也可以是變量的集合。變量賦值語句的格式為:5例如定義變量:VARIABLEx,y:REAL;VARIABLEa,b:BIT_VECTOR(0TO7);x:=100.0y:=1.5+xa:=b;a:=“1010101”;a(3to6):=(‘1’,’1’,’0’,’1’);a(0to5):=b(2to7);a(7):=‘0’;例如定義變量:64.1.3信號(SIGNAL)信號是電子電路內部硬件連接的抽象。它可以作為設計實體中的并行語句模塊間交流信息的通道。信號及其相關的延時語句明顯地體現了硬件系統的特征。信號定義語句的格式為:SIGNAL信號名:數據類型:約束條件:=初始值;

例如:SIGNALgnd:BIT:=‘0’;SIGNALdata:STD_LOGIC_VECTOR(7DOWNTO0);

4.1.3信號(SIGNAL)7信號賦值語句表達式為:目標信號名<=表達式;符號“<=”表示賦值操作,即將數據信息傳入。數據信息傳入時可以設置延時過程,這與器件的實際傳播延時十分接近。因此信號值的代入采用“<=”代入符,而不是像變量賦值時那樣用“:=”。但信號定義時初始賦值符號“:=”,即仿真的時間坐標是從賦初始值開始的。信號賦值語句舉例:x<=y;a<=‘1’;s1<=s2AFTER10ns;注意:變量和信號都必須先定義,后賦值。注意賦值符“<=”和“:=”的差別。信號賦值語句表達式為:注意:變量和信號都必須先定義,后賦值。8信號與變量的區(qū)別:信號和變量是VHDL中重要的客體,他們之間的主要區(qū)別有:·信號賦值至少要有δ延時;而變量賦值沒有?!ば盘柍斍爸低庥性S多相關的信息,如歷史信息和投影波形;而變量只有當前值?!みM程對信號敏感而不對變量敏感?!ば盘柨梢允嵌鄠€進程的全局信號;而變量只在定義他們的順序域可見(共享變量除外)?!ば盘柺怯布羞B線的抽象描述,他們的功能是保存變化的數據值和連接子元件,信號在元件的端口連接元件。變量在硬件中沒有類似的對應關系,他們用于硬件特性的高層次建模所需要的計算中。信號與變量的區(qū)別:94.2VHDL語言的數據類型在對VHDL的客體進行定義時,都要指定其數據類型。VHDL有多種標準的數據類型,并且允許用戶自定義數據類型。在VHDL語言語義約束中,對類型的要求反映在賦值語句的目標與源的一致,表達式中操作的一致,子類型中約束與類型的一致等許多方面。4.2.1VHDL中預定義的數據類型(編程者可直接使用)預定義類型在VHDL標準程序包STANDARD中定義,在應用中自動包含進VHDL的源文件,不需要USE語句顯示調用。數據類型說明如下。

4.2VHDL語言的數據類型101.整數(INTEGER)

整數與數學中整數的定義相似,可以使用預定義運算操作符,如加“+”、減“-”、乘“×”、除“÷”進行算術運算。在VHDL語言中,整數的表示范圍為-2147483647~2147483647,即從-(231-1)到(231-1)。2.實數(REAL)在進行算法研究或實驗時,作為對硬件方案的抽象手段,常常采用實數四則運算。實數的定義值范圍為-1.0E+38~+1.0E+38。實數有正負數,書寫時一定要有小數點。例如:-1.0,+2.5,-1.0E+38

1.整數(INTEGER)2.實數(REAL)113.位(BIT)用來表示數字系統中的信號值。位值用字符‘0’或者‘1’(將值放在引號中)表示。與整數中的1和0不同,‘1’和‘0’僅僅表示一個位的兩種取值。位數據可以用來描述數字系統中總線的值。位數據不同于布爾數據,可以用轉換函數進行轉換。4.位矢量(BIT_VECTOR)位矢量是用雙引號括起來的一組數據。例如:“001100”,X“00bb”。在這里位矢量前面的X表示是十六進制。用位矢量數據表示總線狀態(tài)最形象也最方便,在VHDL程序中將會經常遇到。使用位矢量時必須注明位寬,即數組中元素個數和排列,例如:SIGNALs1:BIT_VECTOR(15DOWNTO0);3.位(BIT)4.位矢量(BIT_VECTOR)125.布爾量(BOOLEAN)一個布爾量具有兩種狀態(tài),“真”或者“假”。雖然布爾量也是二值枚舉量,但它和位不同沒有數值的含義,也不能進行算術運算。它能進行關系運算。例如,它可以在if語句中被測試,測試結果產生一個布爾量TRUE或者FALSE。

6.字符(CHARACTER)

字符也是一種數據類型,所定義的字符量通常用單引號括起來,如‘a’。一般情況下VHDL對大小寫不敏感,但對字符量中的大小寫則認為是不一樣的。例如,‘B’不同于‘b’。字符量中的字符可以是從a到z中的任一個字母,從0到9中的任一個數以及空格或者特殊字符,如$,@,%等等。包集合standard中給出了預定義的128個ASCⅡ碼字符,不能打印的用標識符給出。字符‘1’與整數1和實數1.0都是不相同的,當要明確指出1的字符數據時,則可寫為:CHARACTER(‘

1’)。5.布爾量(BOOLEAN)6.字符(CHARACTER)137.字符串(STRING)字符串是由雙引號括起來的一個字符序列,也稱字符矢量或字符串組。字符串常用于程序的提示和說明。字符串舉例如下:VATIABLEstring_1:STRING(0TO3);┇string_1:=

“abcd”;8.時間(TIME)時間是一個物理量數據。完整的時間量數據應包含整數和單位兩部分,而且整數和單位之間至少應留一個空格的位置。例如55sec,2min等。在包集合STANDARD中給出了時間的預定義,其單位為fs,ps,ns,μs,ms,sec,min和hr。例如:20μs,100ns,3sec。在系統仿真時,時間數據特別有用,用它可以表示信號延時,從而使模型系統能更逼近實際系統的運行環(huán)境。7.字符串(STRING)8.時間(TIME)149.錯誤等級(SEVERITYLEVEL)錯誤等級類型數據用來表征系統的狀態(tài),共有4種:note(注意),warning(警告),error(出錯),failure(失?。?。在系統仿真過程中可以用這4種狀態(tài)來提示系統當前的工作情況,從而使設計人員隨時了解當前系統工作的情況,并根據系統的不同狀態(tài)采取相應的對策。10.大于等于零的整數(自然數)(NATURAL),正整數(POSITIVE)這兩種數據是整數的子類,NATURAL類數據為取0和0以上的正整數;而POSITIVE則只能為正整數。9.錯誤等級(SEVERITYLEVEL)10.大于等于15

上述10種數據類型是VHDL語言中標準的數據類型,在編程時可以直接引用。如果用戶需使用這10種以外的數據類型,則必須進行自定義。但大多數的CAD廠商已在包集合中對標準數據類型進行了擴展。例如,數組型數據等,請同學們注意。上述10種數據類型是VHDL語言中標準164.2.2用戶自定義的數據類型

可以由用戶定義的數據類型有:·枚舉(ENUMERATED)類型;·整數(INTEGER)類型;·實數(REAL)、浮點數(FLOATING)類型;·數組(ARRAY)類型;·存取(ACCESS)類型;·文件(FILE)類型;·記錄(RECORDE)類型;·時間(TIME)類型(物理類型)。4.2.2用戶自定義的數據類174.2.3IEEE預定義標準

1.標準邏輯位STD_LOGIC數據類型IEEE‘93增加了多值邏輯包STD_LOGIC_1164,使得“STD_LOGIC”數據具有9種不同的值。其定義如下所示:TYPESTD_LOGICIS(‘U’,--初始值‘X’,--不定‘0’,--0‘1’,--1‘Z’,--高阻‘W’,--弱信號不定‘L’,--弱信號0‘H’,--弱信號1‘—’--不可能情況);

4.2.3IEEE預定義標準1182.標準邏輯矢量STD_LOGIC_VECTOR數據類型在使用中,標準邏輯矢量數據類型的數據對象賦值時,必須考慮位矢的寬度.同位寬、同數據類型的矢量才能進行賦值。例:….TYPEt_dateISARRAY(7DOWNTO0)OFSTD_LOGIC;SIGNALdatabus,memory:t_date;VARIABLErega:t_date;…..datebus<=rega;….datebus<=memory;….2.標準邏輯矢量STD_LOGIC_VECTOR數據類型在使194.2.4枚舉類型枚舉類型用特殊的字符來表示一組實際的二進制數.例如:TYPEm_stateIS(state1,state1,state1,state1)SIGNALpresent_state,next_state:m_state;默認state1為’00’state2為’01’;…4.2.4枚舉類型枚舉類型用特殊的字符來表示一組實際的二進204.2.5數組類型數組可以是一維,也可以是多維.但是VHDL只支持一維數組.數組的元素可以是任意數據類型.TYPE數組名ISARRY(數組范圍)OF數據類型例1:TYPEdata_bus1IS(7DOWNTO0)OFREAL;TYPEdata_bus2IS(7DOWNTO0)OFSTD_LOGIC;TYPEdata_bus3IS(7DOWNTO0,X)OFSTD_LOGIC;TYPE數組名ISARRY(NATURALRANGE<>)OF數據類型;例2:TYPEdateISARRY(NATURALRANGE<>))OFBIT;VARIABLEva:date(1TO6);4.2.5數組類型數組可以是一維,也可以是多維.但是VHD21

4.3VHDL數據類型轉換

在VHDL程序設計中不同的數據類型的對象之間不能代入和運算。實現他們之間數據類型的轉換有3種方法:·類型標記法;·函數轉換法;·常數轉換法。4.3.1用函數進行類型轉換VHDL語言中,程序包中提供了變換函數,這些程序包有3種,每個程序包中的變換函數不一樣?,F列表如下。4.3VHDL數據類型轉換在V22·STD_LOGIC_1164包集合函數函數TO_STDLOGICVECTOR(A)由BIT_VECTOR轉換為STD_LOGIC_VECTOR函數TO_BITVECTOR(A)由STD_LOGIC_VECTOR轉換為BIT_VECTOR函數TO_STDLOGIC(A)由BIT轉換為STD_LOGIC

函數TO_BIT(A)由STD_LOGIC轉換為BIT.STD_LOGIC_ARITH包集合函數函數:CONV_STD_LOGIC_VECTOR(A,位長)

由UNSINGED,SINGED轉換為INTEGERSTD_LOGIC_UNSINGED包集合函數:CONV_INTEGER(A)

由STD_LOGIC_VECTOR轉換為INTEGER·STD_LOGIC_UNSINGED包集合

函數:CONV_INTEGER(A)由INTEGER,UNSINGED,SINGED轉換為STD_LOGIC_VECTOR·STD_LOGIC_1164包集合函數23LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYqijianISPORT(input:INSTD_LOGIC_VECTOR(2DOWNTO0);output:outSTD_LOGIC_VECTOR(7DOWNTO0));ENDqijian;ARCHITECTUREaOFqijianISBEGINPROCESS(input)BEGINOutput<=(others=>’0’);Output(CONV_INTEGER(input))<=‘1’;ENDPROCESS;ENDa;LIBRARYIEEE;244.3.2類型標記法實現類型轉換類型標記就是類型的名稱。類型標記法適合那些關系密切的標量類型之間的類型轉換,即整數和實數的類型轉換。例如:VARIABLEI:INTEGER;VARIABLER:REAL;I:=INTEGER(R);R:=REAL(I);

4.3.2類型標記法實現類型轉換25

4.4VHDL操作符

與其他程序設計語言相似,VHDL中的表達式也是由運算符將基本元素連接起來形成。這里的基本元素包括對象名、文字、函數調用及用括號括起來的表達式。在VHDL語言中共有4類操作符,可以分別進行邏輯運算(LOGICAL)、關系運算(RELATIONAL)、算術運算(ARITHMETIC)和并置運算(CONCATENATION)。需要指出的是操作符操作的對象是操作數,且操作數的類型應該和操作符所要求的類型相一致。另外,運算操作符是有優(yōu)先級的,例如,邏輯運算符not,在所有操作符中優(yōu)先級最高。4.4VHDL操作符與其他程序設計語261.邏輯運算符在VHDL語言中,共有6種邏輯運算符,他們分別是:NOT

取反;AND

與;OR

或;NAND

與非;NOR

或非;

XOR

異或。

這6種邏輯運算符可以對“STD_LOGIC”和“BIT”等邏輯型數據、“STD_LOGIC_VECTOR”邏輯型數組及布爾數據進行邏輯運算。必須注意,運算符的左邊和右邊,以及代入的信號的數據類型必須是相同的。

1.邏輯運算符這6種邏輯運算符可以對“STD_LOGIC”27例:LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYyuISPORT(a,b:INSTD_LOGIC_VECTOR(0TO3);output:outSTD_LOGIC_VECTOR(0TO3));ENDyu;ARCHITECTUREaOFyuISbeginOUTPUT<=aandb;enda;例:282.算術運算符VHDL語言中有5類算術運算符,他們分別是:·求和操作符:+(加)、-(減)·求積操作符:*(乘)、/(除)、MOD(求模)、REM(取余)·符號操作符:+(正)、-(負)·混合操作符:**(指數)、ABS(取絕對值)·移位操作符:SLL(邏輯左移)、SRL(邏輯右移)、SLA(算術左移)、SRA(算術右移)、ROL(邏輯循環(huán)左移)、ROR邏輯循環(huán)右移)2.算術運算符29例:利用移位操作符設計譯碼器LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYyimaqiISPORT(input:INSTD_LOGIC_VECTOR(2DOWNTO0);output:outbit_VECTOR(7DOWNTO0));ENDyimaqi;ARCHITECTUREaOFyimaqiISbeginOUTPUT<="00000001"SLLCONV_INTEGER(INPUT)enda;例:利用移位操作符設計譯碼器303.關系運算符VHDL語言中有6種關系運算符,他們分別是:=

等于;

/=

不等于;

<

小于;

<=

小于等于;>

大于;

>=

大于等于;3.關系運算符314.并置運算符&

連接SIGNALg,h,i:STD_LOGIC;SIGNALc,d,e:STD_LOGIC_VECTOR(1TO0);┇

d<=i&NOTh;--元素與元素并置,形成長度為2的數組

a<=c&d;--數組與數組并置,形成長度為4的數組

4.并置運算符SIGNALg,h,i:STD_LOGIC;325.VHDL操作符的優(yōu)先順序

運算符優(yōu)先級NOT,ABS,**最高優(yōu)先級

*,/,MOD,REM+(正號),-(負號)+,-,&SLL,SLA,SRL,SRA,ROL,ROR=,/=,<,>,<=,>=AND,OR,NAND,NOR,XOR,XNOR最低優(yōu)先級

5.VHDL操作符的優(yōu)先順序運算符334.5VHDL詞法規(guī)則與標識符

4.5.1詞法規(guī)則1.注釋

為了提高VHDL源程序的可讀性,在VHDL中可以寫入注釋。注釋以--開頭直到本行末尾的一段文字。在MUX+PLUSⅡ中可以看見,敲入--之后,后面字體的顏色就發(fā)生改變。注釋不是VHDL設計描述的一部分,編譯后存入數據庫中的信息不包含注釋。注釋舉例:Q:OUTSTD_LOGIC_VECTOR(11DOWNTO0);--A/D轉換數據輸出顯示(行注釋)--SRAM數據寫入控制狀態(tài)機(段注釋)WRIT_STATE:PROCESS(clk,rst)--SRAM寫入控制狀態(tài)機時序電路進程4.5VHDL詞法規(guī)則與標識符4.5.1詞法規(guī)則注釋342.數字數字型文字可以有多種表達方式:可以是十進制數,也可以表示為二進制、八進制或十六進制等為基的數,可以是整數,也可以是含有小數點的浮點數。現舉例如下?!なM制整數表示法:如012578_456(=78456)2E6在相鄰數字之間插入下劃線,對十進制數值不產生影響,僅僅是為了提高文字的可讀性。允許在數字之前冠以若干個0,但不允許在數字之間存在空格。·以基表示的數:用這種方式表示的數由五個部分組成。第一部分,用十進制數標明數值進位的基數;第二部分,數值隔離符號“#”;第三部分,表達的文字;第四部分,指數隔離符號“#”;第五部分,用十進制表示的指數部分,這一部分的數如果為0可以省去不寫。如2#111_1011#8#1473#16#A8#E1016#F.01#E+4對以基表示的數而言,相鄰數字間插入下劃線不影響數值?;淖钚禐?,最大數為16,以基表示的數中允許出現A至F的字母,大小寫字母意義無區(qū)別。

2.數字35·實數:實數必須帶有小數點。如12.00.03.146_741_113.66652.6E-2·物理量文字:綜合器不支持物理量文字的綜合。如60s(秒)100m(米)177A(安培)

3.字符和字符串字符是用單引號引起來的ASCⅡ字符,可以是數值,也可以是符號或字母,如‘E’,‘e’,‘$’,‘23’,‘A’…

字符串是一維的字符數組,需放在雙引號中。有兩種類型的字符串:文字字符串和位矢量字符串。文字字符串是用雙引號引起來的一串文字。如“FALSE”,“X”,“THISISEND”

·實數:實數必須帶有小數點。如3.字符和字符串36位矢量字符串是被雙引號引起來的擴展的數字序列,數字序列前冠以基數說明符?;鶖捣小癇”、“O”、“X”,他們的含義如下。B:二進制基數符號,表示二進制位0或1,在字符串中每一個位表示一個BIT。O:八進制基數符號,在字符串中每一個數代表一個八進制數,即代表一個3位(BIT)的二進制數。X:十六進制基數符號,代表一個十六進制數,即代表一個4位二進制數。例如:B“1011_1111”,O“152”,X“F821”

位矢量字符串是被雙引號引起來的擴展的數字序列,數字序列前冠以374.下標名下標名用于指示數組型變量或信號的某一元素。SIGNALa,b:BIT_VECTOR(0TO3);SIGNALs:INTEGERRANGE0TO2;SIGNALx,y:BIT;x<=a(s);y<=b(3);上例中,a(s)為一下標語句,s是不可計算的下標名,只能在特定情況下進行綜合;b(3)的下標為3,可以進行綜合。4.下標名38

4.5.2標識符標識符是最常用的操作符,可以是常數、變量、信號、端口、子程序或參數的名字。標識符規(guī)則是VHDL語言中符號書寫的一般規(guī)則,為EDA工具提供了標準的書寫規(guī)范。VHDL’93對VHDL’87版本的標識符語法規(guī)則進行了擴展,通常稱VHDL’87版本標識符為短標識符,VHDL’93版標識符為擴展標識符。1.短標識符VHDL短標識符需遵守以下規(guī)則:(1)必須以英文字母開頭;(2)英文字母、數字(0~9)和下劃線都是有效的字符;(3)短標識符不區(qū)分大小寫;(4)下劃線(_)的前后都必須有英文字母或數字。

39一般的,在書寫程序時,應將VHDL的保留字大寫或黑體,設計者自己定義的字符小寫,以使得程序便于閱讀和檢查。盡管VHDL仿真綜合時不區(qū)分大小寫,但一個優(yōu)秀的硬件程序設計師應該養(yǎng)成良好的習慣。例:一些合法的標識符:S_MACHINE,present_state,sig3不合法的標識符:present-state,3states,cons_,_now

一般的,在書寫程序時,應將VHDL的保留字大寫或黑體,設計者402.擴展標識符擴展標識符的識別和書寫有下面的規(guī)則:(1)用反斜杠來界定擴展標識符,如\control_machine\,\s_block\等都是合法的擴展標識符;(2)擴展標識符允許包含圖形符號和空格,如\s&33\,\legal$state\是合法的擴展標識符;(3)兩個反斜杠之間的字可以和保留字相同,如\SIGNAL\,\ENTITY\是合法的標識符,與SIGNAL、ENTITY是不同的;(4)兩個反斜杠之間的標識符可以用數字開頭,如\15BIT\,\5ns\是合法的;(5)擴展標識符是區(qū)分大小寫的,如\a\與\A\是不同的標識符;(6)擴展標識符允許多個下劃線相鄰,如\our__entity\是合法的擴展標識符(不推薦這種方式);(7)擴展標識符的名字中如果含有一個反斜杠,則用相鄰的兩個反斜杠來代表它,如\te\\xe\表示該擴展標識符的名字為te\xe(共5個字符);2.擴展標識符41

第四章VHDL語言元素

4.1VHDL語言的客體4.2VHDL語言的數據類型4.3VHDL數據類型轉換

4.4VHDL詞法規(guī)則與標識符

第四章VHDL語言元素4.1VH424.1VHDL語言的客體

VHDL語言中,可以賦予一個質的對象就稱為客體??腕w主要包括以下三種:變量(VARIABLE)、常量(CONSTANT)、信號(SIGNAL)。4.1.1常量(CONSTANT)(常數)定義一個常數主要是為了使設計實體中的某些量易于閱讀和修改。常數說明就是對某一常數名賦予一個固定的值。通常在程序開始前進行賦值,該值的數據類型在說明語句中說明。常數說明語句格式為:CONSTANT常數名:數據類型:=表達式;

4.1VHDL語言的客體VHDL語言中,可以43例如:CONSTANTVcc:REAL:=5.0;CONSTANTFbus:BIT_VECTOR:=“1011”;CONSTANTDelay:TIME:=10ns;注:常量是一個恒定不變的值,一旦做了數據類型和賦值定義,它在程序中就不能再改變。例如:注:常量是一個恒定不變的值,一旦做了數據類型和賦值定義444.1.2變量(VARIABLE)變量只能在進程和子程序中用,是一個局部量,不能將信息帶出對它做出定義的當前設計單元。與信號不同,變量的賦值是理想化數據傳輸,其賦值是立即生效的,不存在任何的延時行為。變量定義語句的格式為:VARIABLE變量名:數據類型:約束條件:=初始值;例如:VARIABLE

n:INTEGERRANGE0TO15

:=

2;VARIABLEa:INTEGER;

4.1.2變量(VARIABLE)45變量賦值語句的格式為:目標變量名

:=

表達式;賦值語句“:=”右邊的表達式必須與目標變量具有相同的數據類型,這個表達式可以是一個運算表達式也可以是一個數值。變量賦值語句左邊的目標變量可以是單值變量,也可以是變量的集合。變量賦值語句的格式為:46例如定義變量:VARIABLEx,y:REAL;VARIABLEa,b:BIT_VECTOR(0TO7);x:=100.0y:=1.5+xa:=b;a:=“1010101”;a(3to6):=(‘1’,’1’,’0’,’1’);a(0to5):=b(2to7);a(7):=‘0’;例如定義變量:474.1.3信號(SIGNAL)信號是電子電路內部硬件連接的抽象。它可以作為設計實體中的并行語句模塊間交流信息的通道。信號及其相關的延時語句明顯地體現了硬件系統的特征。信號定義語句的格式為:SIGNAL信號名:數據類型:約束條件:=初始值;

例如:SIGNALgnd:BIT:=‘0’;SIGNALdata:STD_LOGIC_VECTOR(7DOWNTO0);

4.1.3信號(SIGNAL)48信號賦值語句表達式為:目標信號名<=表達式;符號“<=”表示賦值操作,即將數據信息傳入。數據信息傳入時可以設置延時過程,這與器件的實際傳播延時十分接近。因此信號值的代入采用“<=”代入符,而不是像變量賦值時那樣用“:=”。但信號定義時初始賦值符號“:=”,即仿真的時間坐標是從賦初始值開始的。信號賦值語句舉例:x<=y;a<=‘1’;s1<=s2AFTER10ns;注意:變量和信號都必須先定義,后賦值。注意賦值符“<=”和“:=”的差別。信號賦值語句表達式為:注意:變量和信號都必須先定義,后賦值。49信號與變量的區(qū)別:信號和變量是VHDL中重要的客體,他們之間的主要區(qū)別有:·信號賦值至少要有δ延時;而變量賦值沒有?!ば盘柍斍爸低庥性S多相關的信息,如歷史信息和投影波形;而變量只有當前值?!みM程對信號敏感而不對變量敏感?!ば盘柨梢允嵌鄠€進程的全局信號;而變量只在定義他們的順序域可見(共享變量除外)。·信號是硬件中連線的抽象描述,他們的功能是保存變化的數據值和連接子元件,信號在元件的端口連接元件。變量在硬件中沒有類似的對應關系,他們用于硬件特性的高層次建模所需要的計算中。信號與變量的區(qū)別:504.2VHDL語言的數據類型在對VHDL的客體進行定義時,都要指定其數據類型。VHDL有多種標準的數據類型,并且允許用戶自定義數據類型。在VHDL語言語義約束中,對類型的要求反映在賦值語句的目標與源的一致,表達式中操作的一致,子類型中約束與類型的一致等許多方面。4.2.1VHDL中預定義的數據類型(編程者可直接使用)預定義類型在VHDL標準程序包STANDARD中定義,在應用中自動包含進VHDL的源文件,不需要USE語句顯示調用。數據類型說明如下。

4.2VHDL語言的數據類型511.整數(INTEGER)

整數與數學中整數的定義相似,可以使用預定義運算操作符,如加“+”、減“-”、乘“×”、除“÷”進行算術運算。在VHDL語言中,整數的表示范圍為-2147483647~2147483647,即從-(231-1)到(231-1)。2.實數(REAL)在進行算法研究或實驗時,作為對硬件方案的抽象手段,常常采用實數四則運算。實數的定義值范圍為-1.0E+38~+1.0E+38。實數有正負數,書寫時一定要有小數點。例如:-1.0,+2.5,-1.0E+38

1.整數(INTEGER)2.實數(REAL)523.位(BIT)用來表示數字系統中的信號值。位值用字符‘0’或者‘1’(將值放在引號中)表示。與整數中的1和0不同,‘1’和‘0’僅僅表示一個位的兩種取值。位數據可以用來描述數字系統中總線的值。位數據不同于布爾數據,可以用轉換函數進行轉換。4.位矢量(BIT_VECTOR)位矢量是用雙引號括起來的一組數據。例如:“001100”,X“00bb”。在這里位矢量前面的X表示是十六進制。用位矢量數據表示總線狀態(tài)最形象也最方便,在VHDL程序中將會經常遇到。使用位矢量時必須注明位寬,即數組中元素個數和排列,例如:SIGNALs1:BIT_VECTOR(15DOWNTO0);3.位(BIT)4.位矢量(BIT_VECTOR)535.布爾量(BOOLEAN)一個布爾量具有兩種狀態(tài),“真”或者“假”。雖然布爾量也是二值枚舉量,但它和位不同沒有數值的含義,也不能進行算術運算。它能進行關系運算。例如,它可以在if語句中被測試,測試結果產生一個布爾量TRUE或者FALSE。

6.字符(CHARACTER)

字符也是一種數據類型,所定義的字符量通常用單引號括起來,如‘a’。一般情況下VHDL對大小寫不敏感,但對字符量中的大小寫則認為是不一樣的。例如,‘B’不同于‘b’。字符量中的字符可以是從a到z中的任一個字母,從0到9中的任一個數以及空格或者特殊字符,如$,@,%等等。包集合standard中給出了預定義的128個ASCⅡ碼字符,不能打印的用標識符給出。字符‘1’與整數1和實數1.0都是不相同的,當要明確指出1的字符數據時,則可寫為:CHARACTER(‘

1’)。5.布爾量(BOOLEAN)6.字符(CHARACTER)547.字符串(STRING)字符串是由雙引號括起來的一個字符序列,也稱字符矢量或字符串組。字符串常用于程序的提示和說明。字符串舉例如下:VATIABLEstring_1:STRING(0TO3);┇string_1:=

“abcd”;8.時間(TIME)時間是一個物理量數據。完整的時間量數據應包含整數和單位兩部分,而且整數和單位之間至少應留一個空格的位置。例如55sec,2min等。在包集合STANDARD中給出了時間的預定義,其單位為fs,ps,ns,μs,ms,sec,min和hr。例如:20μs,100ns,3sec。在系統仿真時,時間數據特別有用,用它可以表示信號延時,從而使模型系統能更逼近實際系統的運行環(huán)境。7.字符串(STRING)8.時間(TIME)559.錯誤等級(SEVERITYLEVEL)錯誤等級類型數據用來表征系統的狀態(tài),共有4種:note(注意),warning(警告),error(出錯),failure(失敗)。在系統仿真過程中可以用這4種狀態(tài)來提示系統當前的工作情況,從而使設計人員隨時了解當前系統工作的情況,并根據系統的不同狀態(tài)采取相應的對策。10.大于等于零的整數(自然數)(NATURAL),正整數(POSITIVE)這兩種數據是整數的子類,NATURAL類數據為取0和0以上的正整數;而POSITIVE則只能為正整數。9.錯誤等級(SEVERITYLEVEL)10.大于等于56

上述10種數據類型是VHDL語言中標準的數據類型,在編程時可以直接引用。如果用戶需使用這10種以外的數據類型,則必須進行自定義。但大多數的CAD廠商已在包集合中對標準數據類型進行了擴展。例如,數組型數據等,請同學們注意。上述10種數據類型是VHDL語言中標準574.2.2用戶自定義的數據類型

可以由用戶定義的數據類型有:·枚舉(ENUMERATED)類型;·整數(INTEGER)類型;·實數(REAL)、浮點數(FLOATING)類型;·數組(ARRAY)類型;·存?。ˋCCESS)類型;·文件(FILE)類型;·記錄(RECORDE)類型;·時間(TIME)類型(物理類型)。4.2.2用戶自定義的數據類584.2.3IEEE預定義標準

1.標準邏輯位STD_LOGIC數據類型IEEE‘93增加了多值邏輯包STD_LOGIC_1164,使得“STD_LOGIC”數據具有9種不同的值。其定義如下所示:TYPESTD_LOGICIS(‘U’,--初始值‘X’,--不定‘0’,--0‘1’,--1‘Z’,--高阻‘W’,--弱信號不定‘L’,--弱信號0‘H’,--弱信號1‘—’--不可能情況);

4.2.3IEEE預定義標準1592.標準邏輯矢量STD_LOGIC_VECTOR數據類型在使用中,標準邏輯矢量數據類型的數據對象賦值時,必須考慮位矢的寬度.同位寬、同數據類型的矢量才能進行賦值。例:….TYPEt_dateISARRAY(7DOWNTO0)OFSTD_LOGIC;SIGNALdatabus,memory:t_date;VARIABLErega:t_date;…..datebus<=rega;….datebus<=memory;….2.標準邏輯矢量STD_LOGIC_VECTOR數據類型在使604.2.4枚舉類型枚舉類型用特殊的字符來表示一組實際的二進制數.例如:TYPEm_stateIS(state1,state1,state1,state1)SIGNALpresent_state,next_state:m_state;默認state1為’00’state2為’01’;…4.2.4枚舉類型枚舉類型用特殊的字符來表示一組實際的二進614.2.5數組類型數組可以是一維,也可以是多維.但是VHDL只支持一維數組.數組的元素可以是任意數據類型.TYPE數組名ISARRY(數組范圍)OF數據類型例1:TYPEdata_bus1IS(7DOWNTO0)OFREAL;TYPEdata_bus2IS(7DOWNTO0)OFSTD_LOGIC;TYPEdata_bus3IS(7DOWNTO0,X)OFSTD_LOGIC;TYPE數組名ISARRY(NATURALRANGE<>)OF數據類型;例2:TYPEdateISARRY(NATURALRANGE<>))OFBIT;VARIABLEva:date(1TO6);4.2.5數組類型數組可以是一維,也可以是多維.但是VHD62

4.3VHDL數據類型轉換

在VHDL程序設計中不同的數據類型的對象之間不能代入和運算。實現他們之間數據類型的轉換有3種方法:·類型標記法;·函數轉換法;·常數轉換法。4.3.1用函數進行類型轉換VHDL語言中,程序包中提供了變換函數,這些程序包有3種,每個程序包中的變換函數不一樣?,F列表如下。4.3VHDL數據類型轉換在V63·STD_LOGIC_1164包集合函數函數TO_STDLOGICVECTOR(A)由BIT_VECTOR轉換為STD_LOGIC_VECTOR函數TO_BITVECTOR(A)由STD_LOGIC_VECTOR轉換為BIT_VECTOR函數TO_STDLOGIC(A)由BIT轉換為STD_LOGIC

函數TO_BIT(A)由STD_LOGIC轉換為BIT.STD_LOGIC_ARITH包集合函數函數:CONV_STD_LOGIC_VECTOR(A,位長)

由UNSINGED,SINGED轉換為INTEGERSTD_LOGIC_UNSINGED包集合函數:CONV_INTEGER(A)

由STD_LOGIC_VECTOR轉換為INTEGER·STD_LOGIC_UNSINGED包集合

函數:CONV_INTEGER(A)由INTEGER,UNSINGED,SINGED轉換為STD_LOGIC_VECTOR·STD_LOGIC_1164包集合函數64LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYqijianISPORT(input:INSTD_LOGIC_VECTOR(2DOWNTO0);output:outSTD_LOGIC_VECTOR(7DOWNTO0));ENDqijian;ARCHITECTUREaOFqijianISBEGINPROCESS(input)BEGINOutput<=(others=>’0’);Output(CONV_INTEGER(input))<=‘1’;ENDPROCESS;ENDa;LIBRARYIEEE;654.3.2類型標記法實現類型轉換類型標記就是類型的名稱。類型標記法適合那些關系密切的標量類型之間的類型轉換,即整數和實數的類型轉換。例如:VARIABLEI:INTEGER;VARIABLER:REAL;I:=INTEGER(R);R:=REAL(I);

4.3.2類型標記法實現類型轉換66

4.4VHDL操作符

與其他程序設計語言相似,VHDL中的表達式也是由運算符將基本元素連接起來形成。這里的基本元素包括對象名、文字、函數調用及用括號括起來的表達式。在VHDL語言中共有4類操作符,可以分別進行邏輯運算(LOGICAL)、關系運算(RELATIONAL)、算術運算(ARITHMETIC)和并置運算(CONCATENATION)。需要指出的是操作符操作的對象是操作數,且操作數的類型應該和操作符所要求的類型相一致。另外,運算操作符是有優(yōu)先級的,例如,邏輯運算符not,在所有操作符中優(yōu)先級最高。4.4VHDL操作符與其他程序設計語671.邏輯運算符在VHDL語言中,共有6種邏輯運算符,他們分別是:NOT

取反;AND

與;OR

或;NAND

與非;NOR

或非;

XOR

異或。

這6種邏輯運算符可以對“STD_LOGIC”和“BIT”等邏輯型數據、“STD_LOGIC_VECTOR”邏輯型數組及布爾數據進行邏輯運算。必須注意,運算符的左邊和右邊,以及代入的信號的數據類型必須是相同的。

1.邏輯運算符這6種邏輯運算符可以對“STD_LOGIC”68例:LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYyuISPORT(a,b:INSTD_LOGIC_VECTOR(0TO3);output:outSTD_LOGIC_VECTOR(0TO3));ENDyu;ARCHITECTUREaOFyuISbeginOUTPUT<=aandb;enda;例:692.算術運算符VHDL語言中有5類算術運算符,他們分別是:·求和操作符:+(加)、-(減)·求積操作符:*(乘)、/(除)、MOD(求模)、REM(取余)·符號操作符:+(正)、-(負)·混合操作符:**(指數)、ABS(取絕對值)·移位操作符:SLL(邏輯左移)、SRL(邏輯右移)、SLA(算術左移)、SRA(算術右移)、ROL(邏輯循環(huán)左移)、ROR邏輯循環(huán)右移)2.算術運算符70例:利用移位操作符設計譯碼器LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYyimaqiISPORT(input:INSTD_LOGIC_VECTOR(2DOWNTO0);output:outbit_VECTOR(7DOWNTO0));ENDyimaqi;ARCHITECTUREaOFyimaqiISbeginOUTPUT<="00000001"SLLCONV_INTEGER(INPUT)enda;例:利用移位操作符設計譯碼器713.關系運算符VHDL語言中有6種關系運算符,他們分別是:=

等于;

/=

不等于;

<

小于;

<=

小于等于;>

大于;

>=

大于等于;3.關系運算符724.并置運算符&

連接SIGNALg,h,i:STD_LOGIC;SIGNALc,d,e:STD_LOGIC_VECTOR(1TO0);┇

d<=i&NOTh;--元素與元素并置,形成長度為2的數組

a<=c&d;--數組與數組并置,形成長度為4的數組

4.并置運算符SIGNALg,h,i:STD_LOGIC;735.VHDL操作符的優(yōu)先順序

運算符優(yōu)先級NOT,ABS,**最高優(yōu)先級

*,/,MOD,REM+(正號),-(負號)+,-,&SLL,SLA,SRL,SRA,ROL,ROR=,/=,<,>,<=,>=AND,OR,NAND,NOR,XOR,XNOR最低優(yōu)先級

5.VHDL操作符的優(yōu)先順序運算符744.5VHDL詞法規(guī)則與標識符

4.5.1詞法規(guī)則1.注釋

為了提高VHDL源程序的可讀性,在VHDL中可以寫入注釋。注釋以--開頭直到本行末尾的一段文字。在MUX+PLUSⅡ中可以看見,敲入--之后,后面字體的顏色就發(fā)生改變。注釋不是VHDL設計描述的一部分,編譯后存入數據庫中的信息不包含注釋。注釋舉例:Q:OUTSTD_LOGIC_VECTOR(11DOWNTO0);--A/D轉換數據輸出顯示(行注釋)--SRAM數據寫入控制狀態(tài)機(段注釋)WRIT_STATE:PROCESS(clk,rst)--SRAM寫入控制狀態(tài)機時序電路進程4.5VHDL詞法規(guī)則與標識

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論