第2章 VHDL語言程序的元素_第1頁
第2章 VHDL語言程序的元素_第2頁
第2章 VHDL語言程序的元素_第3頁
第2章 VHDL語言程序的元素_第4頁
第2章 VHDL語言程序的元素_第5頁
已閱讀5頁,還剩53頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

VHDL硬件描述語言電子科學(xué)與技術(shù)系程鴻亮第二章VHDL詞法基礎(chǔ)2.1VHDL的詞法一個(gè)VHDL描述文本通常包括一個(gè)或若干個(gè)設(shè)計(jì)文件。其文本是由字符組成的詞法元素序列。我們可以把分以下幾部分學(xué)習(xí):1.標(biāo)識符2.抽象字面量3.基數(shù)字面量4.字符字面量5.字符串字面量6.位串字面量7.注釋8.保留字2.1VHDL的詞法2.1.1標(biāo)識符是用戶編程時(shí)使用的名字。我們指定某個(gè)東西、人,都要用到它,他或她的名字;在數(shù)學(xué)中解方程時(shí),我們也常常用到這樣或那樣的變量名或函數(shù)名。同樣的道理,在電腦語言中,對于變量,常量,函數(shù),語句塊也有名字,我們統(tǒng)統(tǒng)稱之為標(biāo)識符。我們在給人起名字時(shí)有一定的規(guī)矩,比如,頭一個(gè)字為父親或母親的姓氏,后面一般為一個(gè)或兩個(gè)字。短(基本)標(biāo)識符(87版)和擴(kuò)展標(biāo)識符(93版)2.1VHDL的詞法短(基本)標(biāo)識符(1)短標(biāo)識符必須由英文字母、數(shù)字以及下劃線組成;(2)短標(biāo)識符必須以英文字母開頭;(3)短標(biāo)識符不區(qū)分大小寫;(4)短標(biāo)識符最后一個(gè)字符不能是下劃線;(5)短標(biāo)識符中不能含有兩個(gè)連續(xù)的下劃線;(6)VHDL語言中的保留字不能作為短標(biāo)識符來使用。2.1VHDL的詞法擴(kuò)展標(biāo)識符(1)擴(kuò)展標(biāo)識符用反斜杠來界定,例如:\data_bus\;(2)擴(kuò)展標(biāo)識符中可以包含圖形符號和空格等,例如:\data&_bus\;(3)擴(kuò)展標(biāo)識符的兩個(gè)反斜杠之間可以使用保留字,例如:\ENTITY\;(4)擴(kuò)展標(biāo)識符的兩個(gè)反斜杠之間可以用數(shù)字開頭,例如:\8_data_bus\;(5)擴(kuò)展標(biāo)識符中允許多個(gè)下劃線相連,例如:\data__bus\;(6)同名的擴(kuò)展標(biāo)識符和短標(biāo)識符是不同的,例如:\data_bus\和data_bus不同;(7)擴(kuò)展標(biāo)識符中如果含有一個(gè)反斜杠,這時(shí)則應(yīng)該用兩個(gè)相鄰的反斜杠來代替,例如:如果擴(kuò)展標(biāo)識符的名稱為data\bus,那么此時(shí)的擴(kuò)展標(biāo)識符應(yīng)該表示為\data\\bus\;(8)與短標(biāo)識符不同,擴(kuò)展標(biāo)識符是區(qū)分大小寫的,例如:\a\和\A\是不同的標(biāo)識符。2.1VHDL的詞法2.1.2抽象字面量十進(jìn)制字面量十進(jìn)制字面量是以常規(guī)十進(jìn)制法表示的抽象字面量(即基數(shù)隱含為10)在相鄰十進(jìn)制字面量數(shù)字間插入下劃線并不影響此抽象字面量的值,但小數(shù)點(diǎn)或E符號左右不可插入下劃線。10.9910.9_92E1_92_4E2--正確10._9910_.992E_1924_E2--錯(cuò)誤1201e61E6123_456--整型字面量12.00.00.3453.141_59--實(shí)型字面量1.34E-121.0E+66.434E+24--帶指數(shù)的實(shí)型字面量2.1VHDL的詞法基數(shù)字面量基數(shù)字面量是以顯示的方式規(guī)定數(shù)據(jù)基數(shù)的抽象字面量?;鶖?shù)至少為2,至多為16.格式:基數(shù)#數(shù)值#【E指數(shù)】示例:2#1111_1111#2#110011#16#afF#16#Fa01#16#ac#E+22#1001#E3基數(shù)和指數(shù)(如果有的話)都被編譯器理解為10進(jìn)制數(shù)。2.1VHDL的詞法2.1.3字符字面量字符字面量通過在兩個(gè)單引號之間擴(kuò)入單個(gè)字符而形成。如:‘A’‘*’‘’(空格字符)注:不能標(biāo)示‘’(空字符),編譯會出錯(cuò)2.1VHDL的詞法2.1.4字符串字面量字符串字面量通過在兩個(gè)引號之間擴(kuò)入一個(gè)字符串序列(也可能是空字符串)而形成。如:“ABCDEabcde01234”如果希望字符串包含引號“,則需要連續(xù)標(biāo)示出兩個(gè)引號””,編譯器對此將理解為一個(gè)引號字符,如:“abc””123”編譯器將此理解為值=abc”123的字符串“abc””””123”編譯器將此理解為值=abc””123的字符串“abc”””123”編譯器報(bào)錯(cuò)2.1VHDL的詞法2.1.5位串字面量通過在兩個(gè)引號之間裝入一序列數(shù)字形成位串字面量,而引號是作為位串括號出現(xiàn)的,之前是一個(gè)基數(shù)規(guī)定符B、O、X。如:B”1001”b”10001110”--2進(jìn)制位串o”2476”O(jiān)”712”--8進(jìn)制位串x”fAad”X”23d9”--16進(jìn)制位串2.1VHDL的詞法2.1.6注釋VHDL采用連減號“--”作為注釋的起始,擴(kuò)展到本行的結(jié)束。如:a:=10;--awillgetthenumber102.1.7保留字作為程序編寫的關(guān)鍵字,不能和變量名、信號名等相沖突。如:andxorbeginotherstypeintegerrealsignal2.2VHDL語言的對象2.2VHDL語言的對象名詞:對象(object)和類型(type)對象:對象是具有某種類型值的命名實(shí)體。在計(jì)算機(jī)程序設(shè)計(jì)當(dāng)中,對象是要被分配存儲空間的,在VHDL程序中,對象是編譯器所能夠識別的數(shù)據(jù)實(shí)體。在VHDL語言中,有四類對象:常量(CONSTANT)信號(SIGNAL)變量(VARIABLE)文件(FILE)2.2VHDL語言的對象類型:編譯器在識別VHDL文件中對象的時(shí)候,一定要知道這個(gè)對象是屬于什么數(shù)據(jù)類型的,才能夠?qū)ζ溥M(jìn)行合法的編譯,所以說對于每一個(gè)對象來說,它都需要具有自己的類型。如:位類型bit布爾類型boolean整型integer實(shí)數(shù)類型real等2.2VHDL語言的對象2.2.1常量CONSTANT定義常量的格式如下所示:CONSTANT常量名[,常量名…]:數(shù)據(jù)類型:=表達(dá)式;常量的賦值:=只能賦值一次若干常量名將同時(shí)獲得表達(dá)式的值。CONSTANTa,b,c:integer:=10;--a,b,c都被賦值為10定義常量的位置(暫略)實(shí)體、結(jié)構(gòu)體、程序包、過程、函數(shù)的說明位置對于常量說明有一點(diǎn)要注意,常量所賦的值應(yīng)該與定義的數(shù)據(jù)類型一致,否則將出現(xiàn)錯(cuò)誤,這一點(diǎn)應(yīng)該避免。例如:CONSTANTdelay:time:=10.0; 常量delay定義的數(shù)據(jù)類型是時(shí)間類型time,而所賦的值卻是一個(gè)實(shí)數(shù)10.0,顯然這是一個(gè)錯(cuò)誤的常量說明。2.2VHDL語言的對象2.2.2信號signal定義信號的格式如下所示:SIGNAL信號名[,信號名…]:數(shù)據(jù)類型[:=表達(dá)式];若干信號名將同時(shí)獲得表達(dá)式的值。SIGNALa,b,c:integer:=10;--a,b,c都被賦值為10信號的賦值<=、有延遲信號定義的位置(暫略)結(jié)構(gòu)體、實(shí)體、程序包的說明部分2.2VHDL語言的對象2.2.3變量variable定義變量的格式如下所示:VARIABLE變量名[,變量名…]:數(shù)據(jù)類型[:=表達(dá)式];若干變量名將同時(shí)獲得表達(dá)式的值。VARIABLEa,b,c:integer:=10;--a,b,c都被賦值為10變量的賦值:=、無延遲(硬件上有時(shí)不能實(shí)現(xiàn))變量定義的位置(暫略)進(jìn)程、過程、函數(shù)的說明部分2.2VHDL語言的對象2.2.4文件fileVHDL-93新標(biāo)準(zhǔn):VHDL-93標(biāo)準(zhǔn)中新通過的一個(gè)對象定義聲明格式:TYPE文件類型名ISFILEOF數(shù)據(jù)類型;FILE文件名[,文件名…]:文件類型名IS[方向]路徑表達(dá)式;2.2VHDL語言的對象四種對象的特點(diǎn)、區(qū)別:定義、訪問的位置和方式不同常量一旦定義,不可更改,變量、信號以及文件是可以實(shí)時(shí)改變的。常量的賦值沒有延遲,而信號的賦值有延遲信號一般對應(yīng)了硬件實(shí)體,而常量有可能有實(shí)際的硬件對應(yīng),有可能沒有實(shí)際的硬件對應(yīng)。這個(gè)軟件的綜合方式以及VHDL程序本身有關(guān)。2.2VHDL語言的對象常用的關(guān)于文件對象操作的過程和函數(shù):(暫略)(1)PROCEDUREreadline(f:INtext;l:OUTline);過程readline的功能是從指定的文本文件中讀出某一行數(shù)據(jù)送到指定的行變量中,其中text表示文件類型為文本類型。(2)PROCEDUREwriteline(f:OUTtext;l:INline);過程writeline的功能是將某一行變量中存放的一行數(shù)據(jù)寫到文件變量所指定的文本文件中去。(3)PROCEDUREread(l:INOUTline;value:OUTstd_logic);過程read的功能是從某一行變量中存放的一行數(shù)據(jù)中取出第一個(gè)數(shù)據(jù),然后放到指定的變量或信號中。(4)PROCEDUREwrite(l:INOUTline;value:INstd_logic;justified:INside:=right;field:INwidth:=0);過程write的功能是將某一個(gè)數(shù)據(jù)寫到某一個(gè)指定行中的某一特定位置上去。這里,變量justified表示把行的哪一邊作為起始位置,有“right”和“l(fā)eft”兩種選擇;變量field表示數(shù)據(jù)寫入的指定位置與起始位置之間的距離。(5)FUNCTIONendfile(f:text)RETURN

boolean;函數(shù)endfile的功能是檢查指定文本文件是否結(jié)束,如果檢出文件結(jié)束標(biāo)志,則返回“true”值;如果沒有檢出文件結(jié)束標(biāo)志,則返回“false”值。2.3數(shù)據(jù)類型2.3數(shù)據(jù)類型VHDL是強(qiáng)類型語言,表現(xiàn)在不同數(shù)據(jù)類型數(shù)據(jù)不能夠相互賦值。比如C語言中的inta=2.4;在VHDL中會由于類型不符無法通過編譯的,即variablea:integer:=2.4;會產(chǎn)生類型不符的編譯錯(cuò)誤。標(biāo)準(zhǔn)數(shù)據(jù)類型和用戶定義數(shù)據(jù)類型標(biāo)準(zhǔn)數(shù)據(jù)類型:VHDL規(guī)范定義好的數(shù)據(jù)類型,如:integerbooleanbitreal等用戶定義數(shù)據(jù)類型:通過用戶需要進(jìn)行定義產(chǎn)生的數(shù)據(jù)類型,如數(shù)組方式、枚舉方式的自定義類型。2.3數(shù)據(jù)類型2.3.1標(biāo)準(zhǔn)數(shù)據(jù)類型1.bitandbit_vector例:signalclk:bit;signaldata:bit_vector(7downto0);值域:bit:取‘0’或‘1’,必須用單引號。只代表兩個(gè)狀態(tài),和數(shù)字0、1是完全不同的兩個(gè)類型。bit_vector:位的數(shù)組類型,取值為“XXXXX…XX”,必須用雙引號。X只能取0或1.2.3數(shù)據(jù)類型2.boolean例:signallock:boolean;lock<=true;只有兩個(gè)取值true或false2.3數(shù)據(jù)類型3.charactercharacter:用單引號括起來,取值范圍為ASCII碼的128個(gè)字符,書寫時(shí)要求用單引號括起來,并且.要區(qū)分大小寫,如:signalab:character:=‘a(chǎn)’;此時(shí)ca通過硬件輸出后將被綜合成8位數(shù)據(jù)線,輸出‘a(chǎn)’的ASCII碼。2.3數(shù)據(jù)類型4.string例:ab:bufferstring(1to4);……

ab<="abcd";用雙引號括起來,string類型本質(zhì)是字符數(shù)組2.3數(shù)據(jù)類型5.integerVHDL語言的最小指定范圍:從-2147483647到+2147483647,即從-(231)到+(231-1)負(fù)數(shù)采用補(bǔ)碼輸出補(bǔ)碼:當(dāng)x>=0時(shí),x的補(bǔ)碼=x

當(dāng)x<0時(shí),x的補(bǔ)碼=2n-x,其中n時(shí)硬件描述x的位數(shù)

=-x的反碼+1數(shù)據(jù)范圍限定:例:variablecount:integerrange0to255;signaldata:integer;硬件綜合為8位二進(jìn)制數(shù)據(jù)硬件綜合為32位二進(jìn)制數(shù)據(jù)2.3數(shù)據(jù)類型6naturalandpositivenatural:integer的子集,>=0positive:integer的子集,>07.real取值范圍-1038~1038,所以是單精度數(shù)據(jù)實(shí)數(shù)的字面量一定要有小數(shù)點(diǎn)。real類型一般不能夠被綜合成硬件,所以很少使用。2.3數(shù)據(jù)類型8.time例:process(clk,rst)variablet:time:=23ns;beginif(rst='0')thendata<=3aftert;elsif(clk'eventandclk='1')thendata<=data*2aftert;endif;endprocess;延遲設(shè)定,最終被硬件綜合而忽略quartusII不需要有空格單位有:ps、ns、us、mssec、min、hr2.3數(shù)據(jù)類型9.錯(cuò)誤等級SEVERITYnote、warning、error、faillure此類型只能夠在仿真過程使用,是無法綜合的。例:process(clk,rst)variablet:time:=23ns;beginif(rst='0')thendata<=3aftert;elsif(clk'eventandclk='1')thendata<=data*2aftert;if(data>100)thenreport"biggerthan100"severitywarning;endif;endif;endprocess;此語句可以通過仿真軟件輸出,而無法用硬件實(shí)現(xiàn)2.3數(shù)據(jù)類型2.3.2用戶定義數(shù)據(jù)類型(自定義數(shù)據(jù)類型)1.枚舉類型格式:type類型名is(枚舉元素列表);例:packagemypaistypeweektypeis(mon,tue,wed,thu,fri,sat,sun);endpackagemypa;signalw:weektype:=mon;……process(clk,rst)beginif(rst='0')thendata<=thu;elsif(clk'eventandclk='1'andwed>tue)thendata<=sat;endif;endprocess;2.3數(shù)據(jù)類型枚舉類型可以直接比較大小,比較結(jié)果為boolean類型packagemypaistypeweektypeis(mon,tue,wed,thu,fri,sat,sun);endpackagemypa;……process(clk,rst)variablew:weektype:=mon;beginif(rst='0')thendata<=thu;elsif(clk'eventandclk='1'andwed>tue)thendata<=sat;endif;endprocess;2.3數(shù)據(jù)類型2.物理類型用物理類型可以方便的描述現(xiàn)實(shí)世界中的物理量,增強(qiáng)程序的可讀性,提高程序質(zhì)量。定義格式:TYPE物理數(shù)據(jù)類型名

IS約束范圍UNITS

基本單位;

單位條目;ENDUNITS;2.3數(shù)據(jù)類型例:TYPEcurrentISRANGE0TO1000000000UNITS

na;

ua=1000na;ma=1000ua;a=1000ma;ENDUNITS;指定按基本單位標(biāo)示時(shí)的取值范圍基本單位2.3數(shù)據(jù)類型packagemypaisTYPEcurrentISRANGE0TO1000000000UNITS

na;

ua=1000na;ma=1000ua;a=1000ma;ENDUNITS;endpackagemypa;process(clk,rst)beginif(rst='0')thendata<=12na;elsif(clk'eventandclk='1')thendata<=1a;endif;endprocess;2.3數(shù)據(jù)類型3.數(shù)組類型ARRARYVHDL支持?jǐn)?shù)組類型,但在定義一個(gè)數(shù)組之前一定要先定義好數(shù)組類型,其格式為:TYPE數(shù)組類型名ISARRAY約束范圍OF數(shù)組元素類型;例:TYPEwordISARRAY(15DOWNTO0)OFbit;TYPEdata_busISARRAY(7DOWNTO0)OFstd_logic;TYPElwordISARRAY(naturalRANGE<>)OFbit;注:以上3行代碼不是在定義數(shù)組,而是在定義數(shù)組類型。使用以上的數(shù)組類型:variabledata:word:=x”ff00”;--被編譯器解釋為“1111111100000000”variabledata:data_bus:=x”fa”;--被編譯器解釋為“11111010”variabledata:lword(3downto0):=“1010”;定義變量時(shí)限定數(shù)組下標(biāo)定義類型時(shí)限定數(shù)組下標(biāo)2.3數(shù)據(jù)類型多維數(shù)組:例:typematrixisarray(0to7,0to7)ofbit;--定義類型constantrom:matrix:=((‘0’,’0’,’1’,’0’,’0’,’0’,’0’,’0’),(‘1’,’0’,’1’,’1’,’0’,’0’,’1’,’0’),(‘0’,’0’,’1’,’0’,’0’,’0’,’1’,’0’),(‘0’,’0’,’1’,’1’,’0’,’1’,’1’,’0’),(‘1’,’0’,’0’,’0’,’1’,’1’,’1’,’0’),(‘0’,’1’,’0’,’0’,’1’,’0’,’1’,’0’),(‘0’,’0’,’1’,’0’,’0’,’1’,’0’,’0’),(‘1’,’1’,’1’,’1’,’1’,’0’,’0’,’1’));通過多維數(shù)組建立真值表,可以方便完成特定的邏輯運(yùn)算,如:2.3數(shù)據(jù)類型為了完成Y=AB+CD的邏輯運(yùn)算,可以建立數(shù)組:typelogic_tableisarray(0to3,0to3)ofstd_logic;constantY_table:logic_table:=((‘0’,’0’,’0’,’1’),(‘0’,’0’,’0’,’1’),(‘0’,’0’,’0’,’1’),(‘1’,’1’,’1’,’1’));2.3數(shù)據(jù)類型數(shù)組的賦值:對整個(gè)一維數(shù)組進(jìn)行一次性賦值,如:a<=“10111010”;按照下標(biāo)對每個(gè)數(shù)組的元素賦值,如:a(3,6)<=‘0’;數(shù)組的引用:引用數(shù)組元素c<=a(1,2);d<=m(10);引用整個(gè)數(shù)組a<=b;2.3數(shù)據(jù)類型4.記錄類型RECORD和C語言中的struct類似,記錄類型實(shí)現(xiàn)了數(shù)據(jù)集合的封裝。其中的數(shù)據(jù)可以是任意類型的。定義格式:TYPE記錄類型名

ISRECORD

記錄元素名1:數(shù)據(jù)類型名;

記錄元素名2:數(shù)據(jù)類型名;……ENDRECORD;例:(一個(gè)封裝了日歷數(shù)據(jù)的記錄類型)TYPEcalendar_timeISRECORDyear:integerRANGE0TO3000;month:integerRANGE1TO12;date:integerRANGE1TO31;hour:integerRANGE0TO23;minute:integerRANGE0TO59;second:integerRANGE0TO59;enable:bit;data:std_logic_vector(15DOWNTO0);ENDRECORD;2.3數(shù)據(jù)類型記錄類型的賦值:對記錄元素進(jìn)行賦值,如:number.year<=2003;number.month<=10;number.date<=30;number.hour<=20;number.minute<=15;對記錄類型的對象進(jìn)行整體賦值,如:number<=(2003,10,30,20,15,45,’1’,data_in);按記錄中元素的順序用元素列表進(jìn)行賦值2.3數(shù)據(jù)類型number<=(month=>10,date=>30,year=>2003,hour=>20,minute=>15,second=>45,enable=>’1’,data=>data_in);使用名字關(guān)聯(lián)的方法來進(jìn)行賦值:記錄類型對象名<=或:=(記錄類型元素名1=>元素值1,記錄類型元素名2=>元素值2,

……);

名字關(guān)聯(lián)符號=>2.3數(shù)據(jù)類型注:當(dāng)記錄類型中只包含一個(gè)元素的時(shí)候,只能夠采用元素賦值方式或名字關(guān)聯(lián)列表賦值方式。如:TYPEexampleISRECORDnum:integer;ENDRECORD;SIGNALb:example;

b.num<=1;--正確

b<=(num=>1);--正確

b<=(1);--錯(cuò)誤

b<=1;--錯(cuò)誤后兩行的錯(cuò)誤是由于編譯器將認(rèn)為用戶在把基本數(shù)據(jù)類型數(shù)據(jù)“1”賦值給一個(gè)記錄類型對象,類型不符,導(dǎo)致錯(cuò)誤。2.3數(shù)據(jù)類型5.子類型子類型是從其他數(shù)據(jù)類型中派生出來的,其區(qū)別是子類型的取值范圍是原數(shù)據(jù)類型的子集,采用這種方式可以使程序結(jié)果更加精簡,消耗更小的硬件資源。子類型的定義方式:SUBTYPE子類型名

IS基本數(shù)據(jù)類型名[范圍限制];例:SUBTYPEnaturalISintegerRANGE0TO+2147483647;SUBTYPEpositiveISintegerRANGE1TO+2147483647;SUBTYPEdata_typeISintegerRANGE0TO255;第3個(gè)子類型定義的數(shù)據(jù)類型data_type只會消耗8位數(shù)據(jù)線的資源。如果沒有RANGE0TO255這一范圍限制,就會消耗32位數(shù)據(jù)線資源。2.3數(shù)據(jù)類型注:不能用array定義新的子類型,array只能定義類型。例:SUBTYPEbyteISARRAY(7DOWNTO0)OFstd_logic;--錯(cuò)誤希望定義一個(gè)8位的std_logic邏輯矢量,應(yīng)該如下定義:TYPEbyteISARRAY(7DOWNTO0)OFstd_logic;--或SUBTYPEbyteISstd_logic_vector(7DOWNTO0);子類型和原類型之間的賦值: 賦值內(nèi)容必須是兩類型取值范圍的交集,否則賦值過程報(bào)錯(cuò)。用type定義的類型是一個(gè)全新的類型,之間不能夠直接進(jìn)行賦值,如TYPEbyteISarray(7downto0)ofstd_logic;TYPEcharISarray(7downto0)ofstd_logic;用類型byte和類型char定義產(chǎn)生的對象之間不能直接賦值,它們屬于完全不同的類型。已有的數(shù)據(jù)類型:std_logic_vector2.4常用數(shù)據(jù)類型和類型轉(zhuǎn)換std_logic、std_logic_vector定義位置:PACKAGEstd_logic_1164(‘U’,--Uninitialized,未初始化狀態(tài),或狀態(tài)未建立(最強(qiáng)的狀態(tài))

‘X’,--ForcingUnknown,強(qiáng)未知

‘0’,--Forcing0,強(qiáng)0

‘1’,--Forcing1,強(qiáng)1

‘Z’,--HighImpedence,高阻(最弱的狀態(tài))

‘W’,--WeakUnknown,弱未知

‘L’,--Weak0,弱0

‘H’,--Weak1,弱1

‘-’);--Don‘tCare,被忽略狀態(tài)

*常用狀態(tài):'1','0','Z'使用前不要忘記寫:libraryieee;useieee.std_logic_1164.all;2.4常用數(shù)據(jù)類型和類型轉(zhuǎn)換std_logic、std_logic_vector的使用格式:例:variableirq:std_logic:=‘1’;signaldata:std_logic_vector(31downto0);signaldata:std_logic_vector(7downto0):=x”80”;使用前不要忘記寫:libraryieee;useieee.std_logic_1164.all;2.4常用數(shù)據(jù)類型和類型轉(zhuǎn)換Integer到std_logic_vector的類型轉(zhuǎn)換例程:conv_std_logic_vectorInteger類型std_logic_vector類型請牢記轉(zhuǎn)換函數(shù):conv_std_logic_vector(A,位長);注意使用:useieee.std_logic_arith.all;2.4常用數(shù)據(jù)類型和類型轉(zhuǎn)換std_logic_vector

到integer的類型轉(zhuǎn)換例程:conv_integerInteger類型std_logic_vector類型請牢記轉(zhuǎn)換函數(shù):conv_integer(A);注意使用:useieee.std_logic_unsigned.all;或useieee.std_logic_signed.all;useieee.std_logic_unsigned.all;和useieee.std_logic_signed.all;的不同體現(xiàn)在對向量類型的有無符號的理解??梢酝ㄟ^大小比較例程來說明…2.4VHDL語言的運(yùn)算符4種運(yùn)算符:邏輯運(yùn)算符算術(shù)運(yùn)算符關(guān)系運(yùn)算符并置運(yùn)算符2.4.1邏輯運(yùn)算符AND———與;OR———或;NAND———與非;NOR———或非;XOR———異或;XNOR———異或非;NOT———非;2.4VHDL語言的運(yùn)算符使用邏輯運(yùn)算符的注意事項(xiàng):操作數(shù)的類型:bit、boolean和std_logic以及它們構(gòu)成的數(shù)組類型優(yōu)先級次序:NOT的優(yōu)先級最高,而其他6種運(yùn)算符則具有相同的優(yōu)先級VHDL沒有左右優(yōu)先級運(yùn)算規(guī)則,必須用括號解決同級優(yōu)先級的運(yùn)算次序。如:q<=aANDbORNOTcANDd;--編譯出錯(cuò)q<=(aANDb)OR(NOTcANDd);--編譯正確notorandnandxornorxnor高優(yōu)先級2.4VHDL語言的運(yùn)算符如果同優(yōu)先級運(yùn)算時(shí),交換操作順序不影響運(yùn)算結(jié)果,可以不采用括號限定運(yùn)算順序,如:q<=(aANDb)AND(cANDd);q<=aORbORcORd;q<=aXORbXORcXORd;2.4VHDL語言的運(yùn)算符2.4.216種算術(shù)運(yùn)算符如下所示:+———加;-———減;*———乘;/———除;MOD———取模;REM———取余;**———乘方;ABS———取絕對值;+———正號;-———負(fù)號;SLL———邏輯左移;SRL———邏輯右移;SLA———算術(shù)左移;SRA———算術(shù)右移;ROL———邏輯循環(huán)左移;ROR———

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論