版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
第二章VHDL語言的基本要素及基本結(jié)構(gòu)1.第二章VHDL語言的基本要素及基本結(jié)構(gòu)1.第二章VHDL的語言要素及基本結(jié)構(gòu)要求:1.掌握:VHDL的命名規(guī)則:基本標(biāo)示符、下標(biāo)名、段名及注釋;VHDL對(duì)象(客體)分類定義及其性質(zhì);VHDL語言的數(shù)據(jù)類型:位、位矢量、整形數(shù);枚舉類型;IEEE標(biāo)準(zhǔn)的STD_LOGIC、STD_LOGIC_VECTOR;運(yùn)算操作符;VHDL程序的組成VHDL語言設(shè)計(jì)的基本單元及其構(gòu)成VHDL構(gòu)造體描述的幾種方法庫及IEEE庫中包集合的使用2.熟悉:VHDL語言的其它數(shù)據(jù)類型、子程序、包集合及配置3.了解:標(biāo)示符:擴(kuò)展標(biāo)識(shí)符;數(shù)據(jù)類型轉(zhuǎn)換
2.2022/11/26第二章VHDL的語言要素及基本結(jié)構(gòu)要求:2.2022/11VHDL語言程序通常包含5部分:實(shí)體說明:entity:描述所設(shè)計(jì)系統(tǒng)的外部接口信號(hào),是可見的。構(gòu)造體:architecture描述所設(shè)計(jì)系統(tǒng)的內(nèi)部的結(jié)構(gòu)和行為,是不可見的。配置:configuration選取所需單元組成系統(tǒng)的不同版本包集合:package存放各設(shè)計(jì)模塊都能共享的數(shù)據(jù)類型、常數(shù)、子程序和函數(shù)。庫:library存放已經(jīng)編譯好的實(shí)體、構(gòu)造體、包集合和配置VHDL語言程序最基本組成是實(shí)體說明和構(gòu)造體3.2022/11/26VHDL語言程序通常包含5部分:實(shí)體說明:entity:描述VHDL的語言要素VHDL的語言要素包含客體(或?qū)ο螅?shù)據(jù)類型操作數(shù)運(yùn)算操作符VHDL規(guī)定:(1)不區(qū)分大小寫(“”和‘’內(nèi)的字符除外);(2)每條語句以一個(gè)分號(hào);結(jié)束;(3)不是所有語句前都可以加標(biāo)號(hào);(4)一條語句后可以加注釋,在注釋內(nèi)容前加兩個(gè)短劃線。
4.2022/11/26VHDL的語言要素VHDL的語言要素包含客體(或?qū)ο螅?shù)據(jù)類§2.1VHDL語言的命名規(guī)則2.1.1數(shù)字型文字(1)整數(shù)文字 (2)實(shí)數(shù)文字(3)以數(shù)制基數(shù)表示的文字 格式:數(shù)制#數(shù)值#[指數(shù)值]
例如:10#170#E1---------十進(jìn)制1700 16#FE#------------十進(jìn)制254 2#1101_0001#--十進(jìn)制209 8#376#------------十進(jìn)制25416#E#E1---------(十六進(jìn)制數(shù)表示,14*161等于224)(4)物理量文字(VHDL綜合器不接受此類文字)。60s(60秒),100m(100米),kΩ(千歐姆),177A(177安培)5.2022/11/26§2.1VHDL語言的命名規(guī)則2.1.1數(shù)字型文字5.22.1.2字符串型文字字符串型文字包含文字字符串、數(shù)位字符串?dāng)?shù)位字符串:位矢量,由數(shù)據(jù)類型為BIT的元素組成的一維數(shù)組書寫格式:基數(shù)符“數(shù)值”基數(shù)符:B—二進(jìn)制數(shù);O—八進(jìn)制數(shù);X—十六進(jìn)制數(shù)例如:data1<=B“1_1101_1110”;data2<=O“15”;data3<=X“AD0”;data4<=B“101_010_101_010”;data5<=“101_010_101_010”;--表達(dá)錯(cuò)誤,缺B;data5<=“101010101010”;--表達(dá)正確,沒有“_”默 認(rèn)為二進(jìn)制數(shù);data6<=“0AD0”;--表達(dá)錯(cuò)誤,缺X
6.2022/11/262.1.2字符串型文字字符串型文字包含文字字符串、數(shù)位字2.1.3標(biāo)識(shí)符用來定義實(shí)體、結(jié)構(gòu)體、對(duì)象(常數(shù)、變量、信號(hào))、端口、子程序、語句標(biāo)號(hào)或參數(shù)的名字。VHDL的基本標(biāo)識(shí)符書寫遵循規(guī)則:由26個(gè)大小寫英文字母、數(shù)字0~9以及下劃線“_”組成;以英文字母開頭;不連續(xù)使用下劃線“_”,不以下劃線“_”結(jié)尾的;標(biāo)識(shí)符中的英語字母不分大小寫;VHDL的保留字(或關(guān)鍵字)不能作為標(biāo)識(shí)符使用。VHDL’93標(biāo)準(zhǔn)還支持?jǐn)U展標(biāo)識(shí)符,但是目前仍有許多VHDL工具不支持?jǐn)U展標(biāo)識(shí)符。由一對(duì)反斜杠之間的任何字符序列組成,取消了標(biāo)準(zhǔn)標(biāo)示符的所有限制。合法標(biāo)示符:Decoder_1,FFT,Sig_N,Not_Ack,State0,Idle
非法標(biāo)識(shí)符:
_Decoder_1,
2FFT,Sig_#N,Not-Ack,RyY_RST_,data__BUS,return7.2022/11/262.1.3標(biāo)識(shí)符用來定義實(shí)體、結(jié)構(gòu)體、對(duì)象(常數(shù)、變量、2.1.4下標(biāo)名下標(biāo)名指的是數(shù)組型變量或信號(hào)的某一個(gè)元素。格式:標(biāo)示符(表達(dá)式)標(biāo)識(shí)符必須是數(shù)組型的變量或信號(hào)的名字,表達(dá)式所代表的值必須是數(shù)組下標(biāo)范圍中的一個(gè)值,這個(gè)值將對(duì)應(yīng)數(shù)組中的一個(gè)元素。例如:SIGNALa,b:BIT_VECTOR(0TO3);
SIGNALm:INTEGERRANGE0TO3;
SIGNALy,z:BIT;
y<=a(m);--
不可計(jì)算型下標(biāo)表示
z<=b(3);--可計(jì)算型下標(biāo)表示8.2022/11/262.1.4下標(biāo)名下標(biāo)名指的是數(shù)組型變量或信號(hào)的某一個(gè)元素2.1.5段名段名是多個(gè)下標(biāo)名的組合,對(duì)應(yīng)數(shù)組中某一段的元素格式:標(biāo)示符(表達(dá)式方向表達(dá)式)方向:TO
或DOWNTOSIGNAL
a,z:BIT_VECTOR(0TO7)
;
Signal
b:bit_vector(4
downto
0);
z(0TO
3)<=a(4TO7);--z(0)<=a(4)、z(1)<=a(5)…9.2022/11/262.1.5段名段名是多個(gè)下標(biāo)名的組合,對(duì)應(yīng)數(shù)組中某一段的§2.2VHDL的數(shù)據(jù)類型及運(yùn)算操作符VHDL語言同其它語言一樣有多種數(shù)據(jù)類型和運(yùn)算符,且它們的定義也大多相同。VHDL語言的特點(diǎn)是用戶可以自己定義數(shù)據(jù)類型。如:typecountisintegerRANGE0to10;10.2022/11/26§2.2VHDL的數(shù)據(jù)類型及運(yùn)算操作符VHDL語言同其它語2.2.1VHDL客體(對(duì)象)及其分類客體(對(duì)象):可以賦予一個(gè)值的對(duì)象或者是數(shù)據(jù)類型所定義的對(duì)象??腕w主要包括3類信號(hào):變量:常數(shù):代表元件間的硬件連接線—全局變量代表暫存某一值的載體—局部變量數(shù)字電路中的電源和地等—全局變量物理意義11.2022/11/262.2.1VHDL客體(對(duì)象)及其分類客體(對(duì)象):可1、VHDL語言對(duì)象(客體)—常數(shù)一般某一值在程序中多處用到,為了增加程序的可讀性、可修改性,給該常數(shù)定義一個(gè)常數(shù)名,在書寫程序時(shí)用定義的常數(shù)名代替該常數(shù)。可以在實(shí)體、結(jié)構(gòu)體、程序包、塊、進(jìn)程和子程序中定義(說明)。在包集合中定義的常量可以暫不設(shè)具體數(shù)值,它可以在包體中設(shè)定。常量的使用范圍取決于它被定義的位置程序包:實(shí)體:構(gòu)造體:塊:由調(diào)用該程序包中的任何實(shí)體、構(gòu)造體引用僅作用于該實(shí)體僅作用于該構(gòu)造體僅作用于該塊進(jìn)程:僅作用于該進(jìn)程子程序:僅作用于該子程序12.2022/11/261、VHDL語言對(duì)象(客體)—常數(shù)一般某一值在程序中多處用到1、VHDL語言對(duì)象(客體)—常數(shù)常數(shù)說明的一般格式:CONSTANT常量名:數(shù)據(jù)類型﹕=表達(dá)式;如:CONSTANTFBUS﹕BIT_VECTOR﹕=“0101”;CONSTANT
VCC﹕REAL﹕=5.0;CONSTANTDELY﹕TIME﹕=25ns;注意:常數(shù)被賦值的類型一定要和定義的數(shù)據(jù)類型一致,如第二條語句中的5.0若變?yōu)?則不正確。13.2022/11/261、VHDL語言對(duì)象(客體)—常數(shù)常數(shù)說明的一般格式:13.2、VHDL語言客體—變量是一個(gè)局部量,只能在進(jìn)程和子程序(過程和函數(shù))中定義和使用。變量不能將信息帶出對(duì)它作出定義的當(dāng)前設(shè)計(jì)單元。變量在硬件中沒有明確的對(duì)應(yīng)物,只是對(duì)數(shù)據(jù)暫存。變量的賦值是立即發(fā)生,不存在任何延時(shí)的行為。常用在實(shí)現(xiàn)某種算法的賦值語句中,賦值符號(hào)為“:=”變量說明語句格式:
variable變量名1[,變量名2,···]:數(shù)據(jù)類型
[約束條件:=表達(dá)式];注意:1、語句中用[]括起部分可有可無2、表達(dá)式:給變量賦初值3、變量賦值符號(hào)為“:=”4、變量賦值立即生效,因此變量賦值不能夠加延時(shí)條件5、邏輯綜合時(shí)初值無效6、多個(gè)變量具有相同的數(shù)據(jù)類型和約束條件時(shí)可以在同一條變量定義語句中定義14.2022/11/262、VHDL語言客體—變量是一個(gè)局部量,只能在進(jìn)程和子程序(變量定義賦值舉例Variablex,y:integer;Variablex:integerrange0to255:=10;Variabletemp1,temp2:integer;變量賦值語句:變量定義語句:Temp1:=temp2;Temp1:=temp2after10ns;此語句對(duì)嗎?15.2022/11/26變量定義賦值舉例Variablex,y:integer;V3、VHDL語言客體—信號(hào)信號(hào)可以作為模塊間的信息交流通道,與硬件中互連元件端口的的連線相對(duì)應(yīng);信號(hào)及其相關(guān)的語句描述了硬件系統(tǒng)的基本特征;如硬件系統(tǒng)運(yùn)行的并行性;信號(hào)傳輸過程中的慣性延時(shí)特性;多驅(qū)動(dòng)源的總線行為等。信號(hào)賦值不立即生效信號(hào)的定義格式如下:SIGNAL信號(hào)名:數(shù)據(jù)類型約束條件﹕=初始值;初始值僅在VHDL的行為仿真中有效,邏輯綜合無效信號(hào)代入符號(hào)為“<=”,但是賦初值符號(hào)為“:=”信號(hào)賦值不立即生效,因此信號(hào)代入能夠加延時(shí)條件多個(gè)信號(hào)具有相同的數(shù)據(jù)類型和約束條件時(shí)可以在同一條信號(hào)定義語句中定義具有全局性特性,可以在以下區(qū)域定義和使用:實(shí)體:作用于該實(shí)體中所有的結(jié)構(gòu)體結(jié)構(gòu)體:作用于整個(gè)結(jié)構(gòu)體包集合:作用于調(diào)用此包集合的所有實(shí)體除了沒有方向說明以外,信號(hào)與實(shí)體的端口(PORT)概念是一致的。16.2022/11/263、VHDL語言客體—信號(hào)信號(hào)可以作為模塊間的信息交流通道,VHDL語言客體—信號(hào)SIGNALSys_clk:bit﹕=‘0’;--定義了一個(gè)位BIT的信號(hào)S1,初始值為低電平SIGNALground:BIT=‘0’;--定義了一個(gè)位BIT的信號(hào)ground,初始值為低電平以上兩條信號(hào)定義語句可以改寫成一條信號(hào)定義語句:SignalSys_clk,ground:STD_LOGIC﹕=‘0’;SIGNALS4:STD_LOGIC_VECTOR(15DOWNTO0);--定義了一個(gè)標(biāo)準(zhǔn)邏輯位矢量(數(shù)組、總線)信號(hào),共有16個(gè)元素SIGNALS5:integerrange0to9;;--定義了一整型數(shù)據(jù)類型的信號(hào)s5,其取值只能是0到9的整數(shù)信號(hào)賦值可以加延時(shí)條件:SIGNALS1﹕bit;SIGNALs2:bit;S2<=s1after10ns;17.2022/11/26VHDL語言客體—信號(hào)SIGNALSys_clk:bit﹕4、信號(hào)、變量、常量的比較從硬件電路系統(tǒng)來看常量相當(dāng)于電路中的恒定電平,如GND或VCC接口變量和信號(hào)則相當(dāng)于組合電路系統(tǒng)中門與門間的連接及其連線上的信號(hào)值。從行為仿真和VHDL語句功能上看信號(hào)可以設(shè)置延時(shí)量,而變量則不能;變量只能作為局部的信息載體,而信號(hào)則可作為模塊間的信息載體。變量的設(shè)置有時(shí)只是一種過渡,最后的信息傳輸和界面間的通信都靠信號(hào)來完成。18.2022/11/264、信號(hào)、變量、常量的比較從硬件電路系統(tǒng)來看18.2022/信號(hào)、變量、常量的比較從綜合后所對(duì)應(yīng)的硬件電路結(jié)構(gòu)來看信號(hào)將對(duì)應(yīng)更多的硬件結(jié)構(gòu),變量在硬件上一般沒有對(duì)應(yīng)實(shí)物。VHDL綜合器并不理會(huì)它們?cè)诮邮苜x值時(shí)存在的延時(shí)特性。VHDL仿真器允許變量和信號(hào)設(shè)置初始值,但在實(shí)際應(yīng)用中,VHDL綜合器并不會(huì)把這些信息綜合進(jìn)去。因?yàn)閷?shí)際的FPGA/CPLD芯片在上電后,并不能確保其初始狀態(tài)的取向。因此,對(duì)于時(shí)序仿真來說,設(shè)置的初始值在綜合時(shí)是沒有實(shí)際意義的。19.2022/11/26信號(hào)、變量、常量的比較從綜合后所對(duì)應(yīng)的硬件電路結(jié)構(gòu)來看19.D觸發(fā)器的四種不同描述Entitydff1isport(clk,d:inbit;q:outbit);Enddff1;Architecturebhvofdff1isBeginD1:process(clk)variableqq:bit;Beginifclk’eventandclk=‘1’thenqq:=d;q<=qq;endif;Endprocess;Endbhv;Entitydff2isport(clk,d:inbit;q:outbit);Enddff2;Architecturebhvofdff2issignalqq:bit;BeginD1:process(clk)Beginifclk’eventandclk=‘1’thenqq<=d;endif;Endprocess;q<=qq;Endbhv;dclkqDff1dclkqDff2dff1綜合后的結(jié)果dff2綜合后的結(jié)果20.2022/11/26D觸發(fā)器的四種不同描述Entitydff1isEntitD觸發(fā)器的四種不同描述Entitydff3isport(clk,d:inbit;q:outbit);Enddff3;Architecturebhvofdff3isBeginD1:process(clk)variablea,b:bit;Beginifclk’eventandclk=‘1’thena<=d;b:=a;q<=b;endif;Endprocess;Endbhv;dclkqDff3Dff4Entitydff4isport(clk,d:inbit;q:outbit);Enddff4;Architecturebhvofdff4issignala,b:bit;BeginD1:process(clk)Beginifclk’eventandclk=‘1’thena<=d;b<=a;q<=b;endif;Endprocess;Endbhv;dclkqdclkqdclkqabDff3綜合后結(jié)果Dff4綜合后結(jié)果21.2022/11/26D觸發(fā)器的四種不同描述Entitydff3isdclkq5、信號(hào)和變量使用的區(qū)別賦值(代入)語句的符號(hào)不同::=變量賦值符號(hào)<=信號(hào)代入符號(hào)操作過程不同:變量在上一條語句賦值,下一條語句即可使用。變量不能列入進(jìn)程語句的敏感表。信號(hào)代入語句的處理和代入過程是分開進(jìn)行的。信號(hào)語句即使被處理也不會(huì)立即發(fā)生代入,下一條語句用到該信號(hào),仍使用原來的信號(hào)值。在進(jìn)程語句中,當(dāng)進(jìn)程結(jié)束或遇到wait語句時(shí),信號(hào)代入過程才被執(zhí)行。信號(hào)可以列入進(jìn)程的敏感表22.2022/11/265、信號(hào)和變量使用的區(qū)別賦值(代入)語句的符號(hào)不同::=例2-5Process(A,B,C,D)Begin D<=A;
X<=B+D; D<=C;
Y<=B+D;Endprocess;Process(A,B,C)VariableD:std_logic_vector(3downto0);Begin D:=A; X<=B+D; D:=C; Y<=B+DEndprocess;例1結(jié)果:X=B+C;
Y=B+C;例2結(jié)果:X=B+A;
Y=B+C;WAITFOR10nsWAITFOR10ns注意:在同一個(gè)進(jìn)程中,同一信號(hào)賦值目標(biāo)有多個(gè)賦值源時(shí),只獲得最后一個(gè)賦值源的賦值。
加入WAIT語句后,信號(hào)賦值立即生效。結(jié)果同例2結(jié)果。23.2022/11/26例2-5Process(A,B,C,D)Proce2.2.2VHDL中的數(shù)據(jù)類型1、VHDL語言的數(shù)據(jù)類型的載體:常數(shù)、變量、信號(hào)VHDL是一種強(qiáng)類型語言,要求設(shè)計(jì)實(shí)體中的每一個(gè)常數(shù)、信號(hào)、變量等都必須具有確定的數(shù)據(jù)類型,并且相同數(shù)據(jù)類型及量才能互相傳遞和作用。VHDL作為強(qiáng)類型語言的好處是使VHDL編譯或綜合工具很容易地找出設(shè)計(jì)中的各種常見錯(cuò)誤。VHDL中的數(shù)據(jù)類型可以分成三大類。(不同書分類方法不完全一致)三類標(biāo)準(zhǔn)數(shù)據(jù)類型:10種用戶自定義數(shù)據(jù)類型:8種IEEE預(yù)定義標(biāo)準(zhǔn)邏輯位與矢量24.2022/11/262.2.2VHDL中的數(shù)據(jù)類型1、VHDL語言的數(shù)據(jù)類型的1、標(biāo)準(zhǔn)數(shù)據(jù)類型標(biāo)準(zhǔn)數(shù)據(jù)類型是最基本的數(shù)據(jù)類型,包括:實(shí)數(shù)類型、整數(shù)類型、位類型、字符類型和時(shí)間類型等,共10種。重點(diǎn):整數(shù)類型和位類型這些數(shù)據(jù)類型都已在VHDL的標(biāo)準(zhǔn)程序包standard和std_logic_1164及其他的標(biāo)準(zhǔn)程序包中作了定義,并可在設(shè)計(jì)中隨時(shí)調(diào)用。25.2022/11/261、標(biāo)準(zhǔn)數(shù)據(jù)類型標(biāo)準(zhǔn)數(shù)據(jù)類型是最基本的數(shù)據(jù)類型,包括:實(shí)數(shù)類1)標(biāo)準(zhǔn)數(shù)據(jù)類型——整數(shù)(INTEGER)型取值范圍是-21473647~+21473647范圍:–(231–1)~
(231–1)32位對(duì)于VHDL仿真器,整數(shù)作為有符號(hào)數(shù);對(duì)于VHDL綜合器,整數(shù)作為無符號(hào)數(shù)處理;要求用RANGE子句為所定義的數(shù)限定范圍,然后據(jù)此決定表示此信號(hào)或變量的二進(jìn)制數(shù)的位數(shù)。如語句“SIGNALA﹕INTEGERRANGE0TO15;”規(guī)定信號(hào)A的取值范圍是0~15共16個(gè)整數(shù)值,可用4位二進(jìn)制數(shù)來表示,因此A將被綜合成由四條信號(hào)線構(gòu)成的信號(hào)。整數(shù)常量的書寫方式:2--十進(jìn)制整數(shù)10E4--十進(jìn)制整數(shù)16#D2#--十六進(jìn)制整數(shù)2#11011010#--二進(jìn)制整數(shù)26.2022/11/261)標(biāo)準(zhǔn)數(shù)據(jù)類型——整數(shù)(INTEGER)型取值范圍是-212)標(biāo)準(zhǔn)數(shù)據(jù)類型——實(shí)數(shù)(REAL)型類似于數(shù)學(xué)上的實(shí)數(shù),或稱浮點(diǎn)數(shù)。取值范圍為-1.0E38~+1.0E38。通常情況下,僅能在VHDL仿真器中使用VHDL綜合器不支持實(shí)數(shù),因?yàn)閷?shí)數(shù)類型的實(shí)現(xiàn)相當(dāng)復(fù)雜,目前在電路規(guī)模上難以承受。實(shí)數(shù)常量的書寫方式舉例如下:65971.333333--十進(jìn)制浮點(diǎn)數(shù)43.6E-4--十進(jìn)制浮點(diǎn)數(shù)27.2022/11/262)標(biāo)準(zhǔn)數(shù)據(jù)類型——實(shí)數(shù)(REAL)型類似于數(shù)學(xué)上的實(shí)數(shù),3)標(biāo)準(zhǔn)數(shù)據(jù)類型——位(BIT)型取值只能是1或0;位值的表示方法是:‘0’或‘1’;位數(shù)據(jù)類型的數(shù)據(jù)對(duì)象,如變量、信號(hào)等,可以參與邏輯運(yùn)算,運(yùn)算結(jié)果仍是位的數(shù)據(jù)類型。VHDL綜合器用一個(gè)二進(jìn)制位表示BIT。28.2022/11/263)標(biāo)準(zhǔn)數(shù)據(jù)類型——位(BIT)型取值只能是1或0;28.24)標(biāo)準(zhǔn)數(shù)據(jù)類型——位矢量(BIT_VECTOR)型位矢量是基于BIT數(shù)據(jù)類型的數(shù)組STANDARD程序包中BIT_VETOR類型定義如下:TYPE
BIT_VETOR
IS
ARRAY(NATURALRANGE<>)OF
BIT;使用位矢量必須注明位寬----數(shù)組中的元素個(gè)數(shù)和排列方向;例如:SIGNALA﹕BIT_VECTOR(7DOWNTO
0);信號(hào)A被定義為一個(gè)具有8位位寬的矢量,它的最左位是A(7),最右位是A(0)。例如:SIGNALA﹕BIT_VECTOR(0TO
7);信號(hào)A被定義為一個(gè)具有8位位寬的矢量,它的最左位是A(0),最右位是A(7)。位矢量的表示方法是:雙引號(hào)括起來的一組位數(shù)據(jù),如:“01100”或x“00bb”十六進(jìn)制表示前加x。29.2022/11/264)標(biāo)準(zhǔn)數(shù)據(jù)類型——位矢量(BIT_VECTOR)型位矢量是5)標(biāo)準(zhǔn)數(shù)據(jù)類型——布爾(BOOLEAN)型定義布爾數(shù)據(jù)類型的源代碼如下:TYPEBOOLEANIS(FALSE,TRUE);取值有FALSE和TRUE兩種。綜合器將用一個(gè)二進(jìn)制位表示BOOLEAN型變量或信號(hào)。例如,當(dāng)A大于B時(shí),在IF語句中的關(guān)系運(yùn)算表達(dá)式(A>B)的結(jié)果是布爾量TRUE,反之為FALSE。綜合器將其變?yōu)?或0信號(hào)值,對(duì)應(yīng)于硬件系統(tǒng)中的一根線布爾類型的變量或信號(hào)只可以進(jìn)行關(guān)系運(yùn)算。例如:SIGNALflag:boolean;flag<=false;30.2022/11/265)標(biāo)準(zhǔn)數(shù)據(jù)類型——布爾(BOOLEAN)型定義布爾數(shù)據(jù)類型6)標(biāo)準(zhǔn)數(shù)據(jù)類型——字符(CHARACTER)型字符類型通常用單引號(hào)引起來如‘A’字符類型區(qū)分大小寫如‘B’不同于‘b’用于仿真,不能被邏輯綜合。31.2022/11/266)標(biāo)準(zhǔn)數(shù)據(jù)類型——字符(CHARACTER)型字符類型通常7)標(biāo)準(zhǔn)數(shù)據(jù)類型——字符串(STRING)型字符串?dāng)?shù)據(jù)類型是字符數(shù)據(jù)類型的一個(gè)非約束型數(shù)組,或稱為字符串?dāng)?shù)組。用于仿真,不能被邏輯綜合。字符串必須用雙引號(hào)標(biāo)明。如:VARIABLESTRING_VAR﹕STRING(1TO7);…STRING_VAR:=“ABCD”;此數(shù)組中各元素的值:STRING_VAR(1)=‘A’;STRING_VAR(2)=‘’;STRING_VAR(3)=‘B’;STRING_VAR(4)=‘’;STRING_VAR(5)=‘C’;STRING_VAR(6)=‘’;STRING_VAR(7)=‘D’;32.2022/11/267)標(biāo)準(zhǔn)數(shù)據(jù)類型——字符串(STRING)型字符串?dāng)?shù)據(jù)類型9)標(biāo)準(zhǔn)數(shù)據(jù)類型——自然數(shù)(NATURAL)和正整數(shù)(POSITIVE)自然數(shù)整數(shù)的一個(gè)子類型,非負(fù)的整數(shù),即零和正整數(shù)。STANDARD程序包中NATURAL類型定義如下:SUBTYPENATURALISINTEGERRANGE0TOINTEGER'HIGH;正整數(shù)是整數(shù)的一個(gè)子類型,它包括整數(shù)中非零和非負(fù)的數(shù)值。STANDARD程序包中NATURAL類型定義如下:SUBTYPEPOSITIVEISINTEGERRANGE1TOINTEGER‘HIGH;33.2022/11/269)標(biāo)準(zhǔn)數(shù)據(jù)類型——自然數(shù)(NATURAL)和正整數(shù)(POS8)標(biāo)準(zhǔn)數(shù)據(jù)類型——時(shí)間(TIME)型VHDL中惟一的預(yù)定義物理類型。用于仿真系統(tǒng),實(shí)際運(yùn)行情況不能被邏輯綜合。完整的時(shí)間類型包括整數(shù)和物理量單位兩部分,整數(shù)和單位之間至少留一個(gè)空格。55ms,20ns如無空格,有的仿真器給出警告。34.2022/11/268)標(biāo)準(zhǔn)數(shù)據(jù)類型——時(shí)間(TIME)型VHDL中惟一的預(yù)定標(biāo)準(zhǔn)數(shù)據(jù)類型——時(shí)間(TIME)型STANDARD程序包中時(shí)間類型定義如下:TYPETIMEISRANGE-2147483647TO2147483647unitsfs;--飛秒,VHDL中的最小時(shí)間單位
ps=1000fs;--皮秒
ns=1000ps;--納秒
us=1000ns;--微秒
ms=1000us;--毫秒
sec=1000ms;--秒
min=60sec;--分
hr=60min;--時(shí)enduntis;35.2022/11/26標(biāo)準(zhǔn)數(shù)據(jù)類型——時(shí)間(TIME)型STANDARD程序包10)標(biāo)準(zhǔn)數(shù)據(jù)類型——錯(cuò)誤等級(jí)(SEVERITY_LEVEL)在VHDL仿真器中,錯(cuò)誤等級(jí)用來指示設(shè)計(jì)系統(tǒng)的工作狀態(tài),共有四種可能的狀態(tài)值:note(注意)、warning(警告)、error(出錯(cuò))、failure(失敗)。在仿真過程中,可輸出這四種值來提示被仿真系統(tǒng)當(dāng)前的工作情況。不能被邏輯綜合。36.2022/11/2610)標(biāo)準(zhǔn)數(shù)據(jù)類型——錯(cuò)誤等級(jí)(SEVERITY_LEVEL可以由用戶自定義的數(shù)據(jù)類型有8種。枚舉類型整數(shù)類型實(shí)數(shù)類型數(shù)組類型記錄類型時(shí)間類型存取類型文件類型
用戶自定義的數(shù)據(jù)類型以及子類型,其基本元素一般仍屬VHDL的標(biāo)準(zhǔn)(預(yù)定義)數(shù)據(jù)類型。
VHDL仿真器支持所有的數(shù)據(jù)類型,但VHDL綜合器并不支持所有的標(biāo)準(zhǔn)(預(yù)定義)數(shù)據(jù)類型和用戶自定義數(shù)據(jù)類型。如real、time、file、access等數(shù)據(jù)類型。在綜合中,它們將被忽略或宣布為不支持。枚舉類型、整數(shù)類型、一維數(shù)組肯定能被邏輯綜合。2、用戶定義的數(shù)據(jù)類型37.2022/11/26可以由用戶自定義的數(shù)據(jù)類型有8種。枚舉類型整數(shù)類型實(shí)數(shù)類型數(shù)自定義數(shù)據(jù)類型的書寫格式type
數(shù)據(jù)類型名
is
數(shù)據(jù)類型定義[of基本數(shù)據(jù)類型];設(shè)計(jì)者自定,可以是任一標(biāo)示符描述所定義的數(shù)據(jù)類型的表達(dá)方式和表達(dá)內(nèi)容可有可無指數(shù)據(jù)類型定義中所定義的元素的基本數(shù)據(jù)類型,一般都是取已有的預(yù)定義數(shù)據(jù)類型,如bit、std_logic或integer等38.2022/11/26自定義數(shù)據(jù)類型的書寫格式type數(shù)據(jù)類型名is數(shù)據(jù)1)用戶自定義類型——枚舉類型枚舉:將變量的值一一列舉出來,變量的值只限于列舉出來的值的范圍。VHDL中的枚舉數(shù)據(jù)類型是用文字符號(hào)來表示一組實(shí)際的二進(jìn)制數(shù)的類型(若直接用數(shù)值來定義,則必須使用單引號(hào))。type
M_state
is
(state1,state2,state3,state4,state5);signalcurrent_state,next_state:M_state;枚舉類型數(shù)據(jù)的定義格式如下:Type
數(shù)據(jù)類型名
is(元素1,元素2,……);信號(hào)current_state和next_state的數(shù)據(jù)類型定義為M_state,從state1~state5共5個(gè)取值。例如:39.2022/11/261)用戶自定義類型——枚舉類型枚舉:將變量的值一一列舉出來,用戶自定義類型——枚舉類型在綜合過程中自動(dòng)編碼一般將第一個(gè)枚舉量(最左邊的量)編碼為0,以后的依次加1。在編碼過程中自動(dòng)將枚舉元素轉(zhuǎn)變成位矢量位矢的長度將取能夠表達(dá)的所有枚舉元素的最小值用于表達(dá)5個(gè)狀態(tài)的位矢量長度應(yīng)該為3位,編碼默認(rèn)值為如下方式:state1=‘000’;state2=‘001’;state3=‘010’;state4=‘011’;state5=‘100’;為了某些特殊的需要,編碼順序也可以人為設(shè)置40.2022/11/26用戶自定義類型——枚舉類型在綜合過程中自動(dòng)編碼40.2022例如ArchitecturebehaveofmenuisType
weekis(sun,sat,fir,thu,wed,tue,mon);Typebreakfastis(porridge,milk,egg,noodle,bread, milk,egg);Signal
today:week;Signal
eatable:breakfast;Beginprocess(pin)begincasepiniswhen“000”=>today<=sun;when“001”=>today<=sat;
:
when“111”=>today<=mon;endcase;
Casetodayiswhen”sun”=>eatable<=porridge;when”sat”=>eatable<=milk;
: :
when”mon”=>eatable<=egg;endcase; ∶Endprocess;Endbehave;41.2022/11/26例如Architecturebehaveofmenu2)用戶自定義類型——整數(shù)類型和實(shí)數(shù)類型目的:標(biāo)準(zhǔn)的程序包中的定義取值定義范圍太大,綜合器綜合結(jié)果占有資源太多。用戶根據(jù)實(shí)際的需要限定其取值范圍,以便能使綜合器更好的綜合。定義格式:TYPE數(shù)據(jù)類型名IS數(shù)據(jù)類型定義約束范圍;約束范圍:range(數(shù)據(jù)范圍)如:TYPEdigitISINTEGERRANGE0TO9;如:TYPEcurrentISREALRANGE-1E4TO1E4;42.2022/11/262)用戶自定義類型——整數(shù)類型和實(shí)數(shù)類型目的:42.20223)用戶自定義類型——數(shù)組類型數(shù)組:是將一組具有相同數(shù)據(jù)類型的元素集合在一起,作為一個(gè)數(shù)據(jù)對(duì)象來處理的數(shù)據(jù)類型??梢允且痪S(每個(gè)元素只有一個(gè)下標(biāo))或多維(每個(gè)元素有多個(gè)下標(biāo))。VHDL仿真器都支持,但VHDL綜合器只支持一維數(shù)組。VHDL允許定義兩種不同類型的數(shù)組:限定性數(shù)組和非限定性數(shù)組限定性數(shù)組:下標(biāo)的取值范圍在數(shù)組定義時(shí)就被確定;非限定性數(shù)組:下標(biāo)的取值范圍需留待隨后根據(jù)具體數(shù)據(jù)對(duì)象再確定。43.2022/11/263)用戶自定義類型——數(shù)組類型數(shù)組:43.2022/11/2限定性數(shù)組定義語句格式如下:type數(shù)據(jù)類型名isarray
范圍of
原數(shù)據(jù)類型;如:TYPEwordISARRAY(1TO8)OFSTD_LOGIC;數(shù)據(jù)類型名稱是word,8個(gè)元素,下標(biāo)排序是1,2,3,4,5,6,7,8,各元素的排序是word(1),word(2),…,word(7),word(8)。每個(gè)元素的數(shù)據(jù)類型為std_logic。注意:若范圍一項(xiàng)的數(shù)據(jù)類型沒有,則默認(rèn)integer類型若用其它數(shù)據(jù)類型指定范圍,應(yīng)在指定范圍前加數(shù)據(jù)類型名新定義的限定性數(shù)組類型的名稱,可以是任何標(biāo)識(shí)符;指出數(shù)組元素?cái)?shù)量和排序方式,一般用整數(shù)來表示其范圍;指數(shù)組各元素的數(shù)據(jù)類型用戶自定義類型——數(shù)組類型:限定性數(shù)組44.2022/11/26限定性數(shù)組定義語句格式如下:type數(shù)據(jù)類型名isa用戶自定義類型——數(shù)組類型:限定性數(shù)組用其它的數(shù)據(jù)類型指定范圍舉例:TYPEinstructionIS(ADD,SUB,INC,SRL,SRF,LDA,LDB,XFR);SUBTYPEdigitISINTEGERrange0TO9;TYPEinsflagISARRAY(instructionADDTOSRF)OFdigit;這數(shù)組有五個(gè)元素,元素的下標(biāo)是ADD到SRF,每個(gè)元素?cái)?shù)據(jù)類型是digit。數(shù)組常在總線、ROM和RAM中使用。例如:設(shè)計(jì)一個(gè)256×8的ROM存儲(chǔ)器Subtypewordis
std_logic_vector(7dowmto0);Typememoryisarray(0to255)
ofword;Varaiblerom:memory;45.2022/11/26用戶自定義類型——數(shù)組類型:限定性數(shù)組用其它的數(shù)據(jù)類型指定范用戶自定義類型——數(shù)組類型:非限制性數(shù)組格式:TYPE數(shù)組名ISARRAY(數(shù)組下標(biāo)類型RANGE<>) OF數(shù)據(jù)類型;TYPESTD_LOGIC_VECTORISARRAY(NATURAL RANGE<>)OFSTD_LOGIC;VARABLEVA:STD_LOGIC_VECTOR(0TO6);(具體數(shù)據(jù)對(duì)象)46.2022/11/26用戶自定義類型——數(shù)組類型:非限制性數(shù)組格式:TYPE數(shù)組二維數(shù)組定義格式:Type
數(shù)據(jù)類型名isarray(行范圍,列范圍)
of
原數(shù)據(jù)類型;例如:TYPEmemoryISARRAY(0TO5,7DOWNTO0)OFSTD_LOGIC;CONSTANTromdata:memory:= ((‘0’,‘0’,‘0’,‘0’,‘0’,‘0’,‘0’,‘0’), (‘0’,‘1’,‘1’,‘1’,‘0’,‘0’,‘0’,‘1’), (‘0’,‘0’,‘0’,‘0’,‘0’,‘1’,‘0’,‘1’), (‘1’,‘0’,‘1’,‘0’,‘1’,‘0’,‘1’,‘0’), (‘1’,‘1’,‘0’,‘1’,‘1’,‘1’,‘0’,‘0’) (‘1’,‘1’,‘1’,‘1’,‘1’,‘1’,‘1’,‘1’));Signaldata_bit:STD_LOGIC;Data_bit<=romdata(3,7);47.2022/11/26二維數(shù)組定義格式:47.2022/11/254)用戶自定義類型——記錄類型由已定義的、數(shù)據(jù)類型不同的對(duì)象元素構(gòu)成的數(shù)組語句格式:TYPE記錄類型名ISRECORD
元素名:元素?cái)?shù)據(jù)類型;元素名:元素?cái)?shù)據(jù)類型;
…ENDRECORD[記錄類型名];48.2022/11/264)用戶自定義類型——記錄類型由已定義的、數(shù)據(jù)類型不同的對(duì)象用戶自定義類型——記錄類型舉例TYPEbankISRECORD--將bank定義為四元素記錄類型
addr0﹕STD_LOGIC_VECTOR(7DOWNTO0);
addr1﹕STD_LOGIC_VECTOR(7DOWNTO0);
r0﹕INTEGER; inst﹕instruction;(假設(shè)是以前定義好的枚舉數(shù)據(jù)類型)ENDRECORD;SIGNALaddbus1,addbus2:STD_LOGIC_VECTOR(7 DOWNTO0);SIGNALresult:INTEGER;SIGNALalu_code:instruction;SIGNALr_bank:bank:=(“00000000”,”00000000”,0,ADD);…addbus1<=r_bank.addr1;r_bank.inst<=alu_code;49.2022/11/26用戶自定義類型——記錄類型舉例TYPEbankISRE3、用戶定義的子類型子類型是由用戶對(duì)已定義的原數(shù)據(jù)類型做一些范圍限制而形成的一種新的數(shù)據(jù)類型。子類型SUBTYPE的語句格式如下:Subtype
子類型名
is
基本數(shù)據(jù)類型名[范圍];例如:subtypeabus
is
std_logic_vector(7downto0);
signal
aio:std_logic_vector(7downto0);
signalbio:std_logic_vector(15downto0);
signalcio:abus;
aio<=cio;
bio<=cio; 對(duì)嗎?50.2022/11/263、用戶定義的子類型子類型是由用戶對(duì)已定義的原數(shù)據(jù)類型做一些5、數(shù)據(jù)類型的限定數(shù)據(jù)類型可以根據(jù)所描述的文字的上下關(guān)系來判斷SIGNALa:STD_LOGIC_VECTOR(7DOWNTO0);a<=“01101010”;--STD_LOGIC_VECTOR有時(shí)判斷不出來CASE(a&b&c)IS--無法斷定(a&b&c)的類型WHEN“001”=>Y<=“01111111”;WHEN“010”=>Y<=“10111111”;…ENDCASE;限定方法SUBTYPESTD3BITISSTD_LOGIC_VECTOR(0TO2);CASESTD3BIT’(a&b&c)IS--限定(a&b&c)的類型為STD3BIT--限定方法:數(shù)據(jù)類型名’對(duì)象名51.2022/11/265、數(shù)據(jù)類型的限定數(shù)據(jù)類型可以根據(jù)所描述的文字的上下關(guān)系來判6、IEEE標(biāo)準(zhǔn)STD_LOGIC和STD_LOGIC_VECTOR在IEEE庫的程序包STD_LOGIC_1164中,定義了兩個(gè)非常重要的數(shù)據(jù)類型,即標(biāo)準(zhǔn)邏輯位STD_LOGIC
和標(biāo)準(zhǔn)邏輯矢量STD_LOGIC_VECTOR。它們是對(duì)bit和bit_vector兩種數(shù)據(jù)類型的補(bǔ)充。Bit
只有‘0’和‘1’兩種狀態(tài)。標(biāo)準(zhǔn)邏輯位STD_LOGIC在STD_LOGIC_1164包集合中的定義的語句如下:TYPESTD_LOGICIS(‘U’,‘X’,‘0’,‘1’,‘Z’,‘W’,‘L’,‘H’,‘-’);‘U’--未初始化的,‘X’--強(qiáng)不定態(tài),‘0’--強(qiáng)0,‘1’--強(qiáng)1,‘Z’--高阻態(tài),‘W’--弱不定態(tài),'L'--弱0,'H'--弱1,'-'--忽略標(biāo)準(zhǔn)邏輯矢量STD_LOGIC_VECTOR(二進(jìn)制)他是由一組STD_LOGIC元素組成的一維數(shù)組;在STD_LOGIC_1164包集合中的定義的語句如下:TYPESTD_LOGIC_VECTORISARRAY(NATURALRANGE<>)OFSTD_LOGIC;52.2022/11/266、IEEE標(biāo)準(zhǔn)STD_LOGIC和STD_LOGIC_VE注意:(1)Bit_vector:可以是二進(jìn)制數(shù),也可以是十六進(jìn)制數(shù)或八進(jìn)制;還可使用“_”將二進(jìn)制數(shù)隔開。(2)Std_logic_vector:只能是二進(jìn)制數(shù)。(3)在使用時(shí),必須在程序的開頭說明包含著兩種數(shù)據(jù)類型的包集合和包集合所在的庫。Libraryieee; UseIEEE.std_logic_1164.all;53.2022/11/26注意:(1)Bit_vector:可以是二進(jìn)制數(shù),也可以是十4、數(shù)據(jù)類型的轉(zhuǎn)換VHDL是一種強(qiáng)類型語言即使對(duì)于數(shù)據(jù)類型非常接近的數(shù)據(jù)對(duì)象,在相互操作時(shí),也需要進(jìn)行數(shù)據(jù)類型轉(zhuǎn)換。類型轉(zhuǎn)換函數(shù)通常由VHDL語言包集合提供54.2022/11/264、數(shù)據(jù)類型的轉(zhuǎn)換VHDL是一種強(qiáng)類型語言54.2022/1STD_LOGIC_1164包集合
中定義的數(shù)據(jù)類型轉(zhuǎn)換函數(shù)及對(duì)應(yīng)的數(shù)據(jù)類型轉(zhuǎn)換如下:to_stdlogicvector(A)to_bitvector(A)to_stdlogic(A)to_bit(A)
由bit_vector轉(zhuǎn)換成std_logic_vector由std_logic_vector轉(zhuǎn)換成bit_vector由bit轉(zhuǎn)換成std_logic由std_logic轉(zhuǎn)換成bit
變換函數(shù)通常由三個(gè)包集合提供:在VHDL語言中,不同類型的數(shù)據(jù)是不能進(jìn)行運(yùn)算和代入的,要實(shí)現(xiàn)這些操作必須進(jìn)行數(shù)據(jù)類型的轉(zhuǎn)換。4、數(shù)據(jù)類型的轉(zhuǎn)換(續(xù))55.2022/11/26STD_LOGIC_1164包集合中定義的數(shù)據(jù)類型轉(zhuǎn)換函數(shù)STD_LOGIC_ARITH包集合中定義的數(shù)據(jù)類型轉(zhuǎn)換函數(shù)集對(duì)應(yīng)的數(shù)據(jù)類型轉(zhuǎn)換如下:conv_std_logic_vector(A,位長)conv_integer(A)
由integer,unsigned和signed轉(zhuǎn)換成std_logic_vector由unsigned和signed轉(zhuǎn)換成integer
STD_LOGIC_UNSIGNED包集合定義的數(shù)據(jù)類型轉(zhuǎn)換函數(shù)集對(duì)應(yīng)的數(shù)據(jù)類型轉(zhuǎn)換如下:conv_integer(A)
由std_logic_vector轉(zhuǎn)換成integer4、數(shù)據(jù)類型的轉(zhuǎn)換(續(xù))56.2022/11/26STD_LOGIC_ARITH包集合中定義的數(shù)據(jù)類型轉(zhuǎn)換函數(shù)數(shù)據(jù)類型轉(zhuǎn)換舉例LIBRARY
IEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYadd5ISPORT(num:INSTD_LOGIC_VECTOR(2DOWNTO0);
…ENDadd5;ARCHITECTURErtlOFadd5ISSIGNALin_num:INTEGERRANGE0TO7;
…BEGIN
In_num<=CONV_INTEGER(num);ENDrtl;
57.2022/11/26數(shù)據(jù)類型轉(zhuǎn)換舉例LIBRARYIEEE;57.2022/12.2.3VHDL語言的運(yùn)算操作符算術(shù)運(yùn)算符:REM,MOD,/,*,-(取負(fù)),+(取正),-,+, **,ABSVHDL的各種表達(dá)式由操作數(shù)和操作符組成,其中操作數(shù)是各種運(yùn)算的對(duì)象,而操作符則規(guī)定運(yùn)算的方式VHDL語言的運(yùn)算操作符分為4類:邏輯運(yùn)算符:NOT,XOR,NOR,NAND,OR,AND關(guān)系運(yùn)算符:>=,<=,>,<,/=,=并置運(yùn)算符:&六種移位操作符號(hào)SLL、SRL、SLA、SRA、ROL和ROR是VHDL‘93標(biāo)準(zhǔn)新增的運(yùn)算符。省略賦值操作符:(OTHERS=〉X)58.2022/11/262.2.3VHDL語言的運(yùn)算操作符算術(shù)運(yùn)算符:REM,MO運(yùn)算符的優(yōu)先級(jí)書P43頁表2-5中運(yùn)算符一項(xiàng)中每一行的優(yōu)先級(jí)相同。六種移位操作符號(hào)SLL、SRL、SLA、SRA、ROL和ROR優(yōu)先級(jí)高于一般的關(guān)系運(yùn)算符。59.2022/11/26運(yùn)算符的優(yōu)先級(jí)書P43頁表2-5中運(yùn)算符一項(xiàng)中每一行的優(yōu)1、邏輯運(yùn)算符注意:(1)只可以對(duì)std_logic,std_logic_vector,bit,bit_vector,boolean型數(shù)據(jù)進(jìn)行邏輯運(yùn)算。(2)運(yùn)算符的左右及代入的信號(hào)數(shù)據(jù)類型必須相同。(3)在一個(gè)語句中,若有兩個(gè)以上的邏輯表達(dá)式時(shí),有時(shí)需在相應(yīng)的表達(dá)式中加括號(hào)。例如:X<=(aandb)or(notcandd);(4)如果一個(gè)邏輯表達(dá)式中只有AND,OR,XOR運(yùn)算符,括號(hào)可省略。其他不行。例如:A<=((bnandc)nandd)nande;
1011A<=bnand(cnand(dnande));因?yàn)槌齆OT優(yōu)先級(jí)最高外,其余優(yōu)先級(jí)相同。同一個(gè)表達(dá)式中,具有多個(gè)優(yōu)先級(jí)相同的邏輯運(yùn)算符時(shí),先完成括號(hào)內(nèi)運(yùn)算,否則它們的先后順序是隨機(jī)的。60.2022/11/261、邏輯運(yùn)算符注意:(1)只可以對(duì)std_logic,std2、算術(shù)運(yùn)算符REM,MOD,/,*,-(取負(fù)),+(取正),-,+,**,ABS-,+(負(fù)、正):一元運(yùn)算操作符,操作數(shù)可以是任何數(shù)值類型在實(shí)際使用中,取負(fù)操作數(shù)需加括號(hào)。如:Z:=X*(-Y);-,+(加、減):操作數(shù)可以是任何數(shù)值類型,操作數(shù)的類型原則上必須一致。*,/:數(shù)據(jù)類型是整數(shù)和實(shí)數(shù)。對(duì)物理類型的數(shù)據(jù)對(duì)象也可以運(yùn)算操作(1)乘法和除法運(yùn)算是可綜合的,但從優(yōu)化綜合、節(jié)省芯片資源的角度出發(fā),最好不要輕易使用乘除操作符。注意:(2)只有分母操作數(shù)為2乘方的常數(shù)時(shí),才可以綜合。只有在左邊為實(shí)數(shù)時(shí),其右邊才可以為負(fù)數(shù)。一般地,VHDL綜合器要求乘方操作符作用的操作數(shù)的底數(shù)必須是2**:左邊可以是整數(shù)或?qū)崝?shù),但右邊必須為整數(shù)。ABS:無限制MOD,REM:操作數(shù)數(shù)據(jù)類型只能是整數(shù),運(yùn)算操作結(jié)果也是整數(shù)只有分母操作數(shù)為2乘方的常數(shù)時(shí),才可以綜合。61.2022/11/262、算術(shù)運(yùn)算符REM,MOD,/,*,-(取負(fù)),+3、關(guān)系運(yùn)算符關(guān)系運(yùn)算符:>=,<=,>,<,/=,=不同的關(guān)系運(yùn)算符對(duì)兩邊的操作數(shù)的數(shù)據(jù)類型有不同的要求,但結(jié)果都是BOOLEAN型。
>=,<=,>,<:整數(shù)、實(shí)數(shù)、std_logic、bit及,bit_vector,std_logic_vector注意: (1)操作數(shù)的數(shù)據(jù)類型必須一致(2)位長可以不同。但可能出錯(cuò)。 (3)位矢量數(shù)據(jù)比較從左到右按位比較,當(dāng)比較其中一位不等,則給 出結(jié)果,不再繼續(xù)下一位的比較。例如:Signala:std_logic_vector(3downto0);Signalb:std_logic_vector(2downto0);若要進(jìn)行位長不同的位矢量的關(guān)系運(yùn)算必須加入語句
Libraryieee; useieee.std_logic_unsigned.all例如:a<=”1010”;b<=”111”;If(a>b)then62.2022/11/263、關(guān)系運(yùn)算符關(guān)系運(yùn)算符:>=,<=,>,<,/=,=例如:4、并置(連接)運(yùn)算符&并置運(yùn)算符&完成一維數(shù)組的連接;其操作過程是將右操作數(shù)連接在左操作數(shù)的后邊,形成一個(gè)新的一維數(shù)組;常用于位或位矢量類型對(duì)象的連接。圖2-3所示:
y(0)=b(0)anden y(1)=b(1)anden y(2)=b(2)anden y(3)=b(3)anden y(4)=a(0) y(5)=a(1) y(6)=a(2) y(7)=a(3)
從左邊可以看出a,b是四位長度的矢量,而y的位長是8位,上述情況可以表示成:
tmp_b<=bAND(en&en&en&en);
y<=a&tmp_b;
注意:(1)位連接也可以用集合體的方法,將并置符“&”換成“,”即可(2)集合體的方法,不適應(yīng)于有位矢量的連接。63.2022/11/264、并置(連接)運(yùn)算符&并置運(yùn)算符&完成一維數(shù)組的連接;圖2并置(連接)運(yùn)算符舉例例如:tmp_b<=bAND(en,en,en,en);
y<=(a,tmp_b);
對(duì)嗎?集合體可以用指定位的腳標(biāo)表示:
signaltmp_c:std_logic_vector(3downto0); tmp_c<=(3=>en,2=>en,1=>en,0=>en);或 tmp_c<=(2=>’0’,others=>en);如果用此方法,others項(xiàng)必放最后?;?tmp_c<=(others=>en);或 tmp_c<=(3downto0=>en);64.2022/11/26并置(連接)運(yùn)算符舉例例如:tmp_b<=bAND(en5、省略賦值操作符(聚合賦值符)格式:others=>’X’例如:Signald1:STD_LOGIC_VECTOR(7DOWNTO0);d1<=(others=>’0’);一般用于較多位的位矢量賦值中有多位值相同時(shí),做省略化的賦值。65.2022/11/265、省略賦值操作符(聚合賦值符)一般用于較多位的位矢量賦值中習(xí)題1、定義一個(gè)常數(shù),數(shù)據(jù)類型為實(shí)數(shù),數(shù)值任意。2、定義一個(gè)變量,數(shù)據(jù)類型為16位標(biāo)準(zhǔn)邏輯位矢量,然后將二進(jìn)制數(shù)1111101100110000對(duì)其賦值。3、定義一個(gè)變量,數(shù)據(jù)類型為位類型且給初始值0。4、定義一個(gè)信號(hào),數(shù)據(jù)類型為0到255的所有整數(shù)。5、定義枚舉類型,類型名為state,包含元素為S1,S2,S3,S4,S5五個(gè)元素,然后用該數(shù)據(jù)類型定義信號(hào)now_state和next_state。6、改正下面標(biāo)示符中錯(cuò)誤:
#state,temp-1,signal,2apple,state__1,*Vcc,GND_7、signalA,B,C:BIT;signalD:bit_vector(0to2);signalE:bit_vector(0to5);將A、B、C連接起來賦值給D;將A、B、C、D連接起來賦值給E;66.2022/11/26習(xí)題1、定義一個(gè)常數(shù),數(shù)據(jù)類型為實(shí)數(shù),數(shù)值任意。將A、B、C習(xí)題續(xù)8、設(shè)計(jì)一個(gè)系統(tǒng),它有3個(gè)輸入端口,它們的數(shù)據(jù)類型為std_logic;
一個(gè)輸出端口,類型為std_logic_vector(0to3)。試寫出該系統(tǒng)設(shè)計(jì)實(shí)體VHDL程序框架結(jié)構(gòu)。要求結(jié)構(gòu)體中說明信號(hào)A、B,它們?yōu)閟td_logic類型。功能描述用一個(gè)process語句,其中需說明變量c,為std_logic類型。所有信號(hào)均為process語句的敏感信號(hào)。67.2022/11/26習(xí)題續(xù)8、設(shè)計(jì)一個(gè)系統(tǒng),它有3個(gè)輸入端口,它們的數(shù)據(jù)類型為sVHDL語言程序通常包含5部分:實(shí)體說明、構(gòu)造體、配置、包集合、庫實(shí)體說明構(gòu)造體配置包集合和庫68.2022/11/26VHDL語言程序通常包含5部分:實(shí)體說明、構(gòu)造體、配置、包集2.3VHDL語言設(shè)計(jì)的基本單元及其構(gòu)成VHDL語言設(shè)計(jì)的基本單元就是一個(gè)設(shè)計(jì)實(shí)體。庫、程序包調(diào)用說明ENTITY(實(shí)體)說明ARCHITECTURE(結(jié)構(gòu)體)說明注意:庫、程序包調(diào)用說明語句不是必須的,需要?jiǎng)t有;另外兩部分是必須有的。VHDL語言描述設(shè)計(jì)實(shí)體的一般格式:69.2022/11/262.3VHDL語言設(shè)計(jì)的基本單元及其構(gòu)成VHDL語言設(shè)VHDL語言一般結(jié)構(gòu)舉例Libraryieee;Useieee.std_logic_1164.all;EntityfredividerisPort(clock:instd_logic; clkout:outstd_logic);Endfredivider;Architecturebehavioroffredivideris signalclk:std_logic;BeginProcess(clock)Begin if(clock’eventandclock=‘1’)then clk<=notclk;endif;Endprocess;clkout<=clk;Endbehavior;庫包集合使用說明實(shí)體說明構(gòu)造體說明70.2022/11/26VHDL語言一般結(jié)構(gòu)舉例Libraryieee;庫包集合使VHDL語言基本單元組成:實(shí)體說明+構(gòu)造體說明例2-11:二選一電路設(shè)計(jì)單元的VHDL描述:
ENTITYmuxIS
generic(m:time:=1ns);
PORT(d0,d1,sel:inbit;q:outbit);ENDmux;Architecturedataflow
ofmuxisBegin
process(d0,d1,sel)
variabletmp1,tmp2,tmp3:bit;
begintmp1:=d0andsel;tmp2:=d1and(notsel);tmp3:=tmp1ortmp2; q<=tmp3afterm;
endprocess;End
dataflow;d0d1selq&&≥1qd0d1sel實(shí)體說明構(gòu)造體說明71.2022/11/26VHDL語言基本單元組成:實(shí)體說明+構(gòu)造體說明例2-11:二2.3.1實(shí)體說明
實(shí)體說明是一個(gè)設(shè)計(jì)實(shí)體的表層設(shè)計(jì)單元,描述設(shè)計(jì)實(shí)體與外部電路的接口部分;規(guī)定設(shè)計(jì)單元的輸入輸出接口信號(hào)或引腳,是設(shè)計(jì)實(shí)體經(jīng)封裝后對(duì)外的一個(gè)通信界面。實(shí)體說明用于定義電路的輸入輸出引腳,但并不描述電路的具體構(gòu)造和實(shí)現(xiàn)的功能。ENTITYFredeviderisport(clock:instd_logic;clkout:outstd_logic);end;clockclkoutFredevider輸入輸出72.2022/11/262.3.1實(shí)體說明實(shí)體說明是一個(gè)設(shè)計(jì)實(shí)體的表1、實(shí)體說明格式(語句結(jié)構(gòu))實(shí)體說明的常用語句結(jié)構(gòu)如下:
ENTITY
實(shí)體名IS[GENERIC(類屬表);][PORT(端口表);]END【實(shí)體名】;中間在方括號(hào)內(nèi)的語句描述,在特定的情況下并非是必須的。例如:構(gòu)建一個(gè)VHDL仿真測(cè)試基準(zhǔn)等情況中可以省去方括號(hào)中的語句。73.2022/11/261、實(shí)體說明格式(語句結(jié)構(gòu))實(shí)體說明的常用語句結(jié)構(gòu)如下:中間實(shí)體聲明格式具體說明(續(xù))1)實(shí)體名實(shí)體名必須與文件名相同,否則編譯時(shí)會(huì)出錯(cuò)。74.2022/11/26實(shí)體聲明格式具體說明(續(xù))1)實(shí)體名74.2022/11/2
2)類屬參數(shù)
可選項(xiàng)。類屬(GENERIC)參數(shù)是一種端口界面常數(shù),常以一種說明的形式放在實(shí)體說明部分。是一些信息,默認(rèn)的參數(shù)值。如端口大小、總線寬度、時(shí)間等。類屬參數(shù)說明的一般書寫格式如下:
GENERIC(類屬參數(shù)名1,(類屬參數(shù)名2):數(shù)據(jù)類型[:=設(shè)定值] [;常數(shù)名n:數(shù)據(jù)類型[:設(shè)定值]]);75.2022/11/26
2)類屬參數(shù)
可選項(xiàng)。類屬(GENERIC)參數(shù)是
2)類屬參數(shù)(續(xù))
例如:
ENTITYMCKIS
GENERIC(WIDTH:INTEGER:=16;
RISEW:TIME:=1ns;
FALLW:TIME:=1ns);
PORT(ADD_BUS:OUTSTD_LOGIC_VECTOR(WIDTH-1DOWNTO0));ENDMCK;注意:(1)類屬參數(shù)值可以為本實(shí)體所屬的結(jié)構(gòu)體使用。(2)
類屬參數(shù)作為常量使用,在定義它的實(shí)體內(nèi)使用時(shí)不能修改。(3)該模塊被調(diào)用時(shí)從外部傳入?yún)?shù)值。76.2022/11/26
2)類屬參數(shù)(續(xù))
例如:注意:76.2022/11/253)端口說明端口說明是對(duì)于一個(gè)設(shè)計(jì)實(shí)體與外部接口的描述?;蛘哒f:是CPLD/FPGA器件外部引腳信號(hào)的名稱、數(shù)據(jù)類型和傳輸方向的描述。端口說明書寫格式如下:Port
(端口名1:方向數(shù)據(jù)類型;--每個(gè)端口說明用分號(hào)隔開;端口名2{,端口名3}:方向數(shù)據(jù)類型;--每個(gè)端口說明可以 --說明多個(gè)端口
…
端口名n:方向數(shù)據(jù)類型);--最后一個(gè)端口說明不用分號(hào)a)端口名:是設(shè)計(jì)者為實(shí)體的每一個(gè)對(duì)外通道所取的名字;即實(shí)現(xiàn)該設(shè)計(jì)程序的器件外部引腳的名稱——標(biāo)示符77.2022/11/263)端口說明端口說明是對(duì)于一個(gè)設(shè)計(jì)實(shí)體與外部接口的描述。Pob)端口方向(端口模式)端口模式符號(hào)含義IN輸入OUT輸出(結(jié)構(gòu)體內(nèi)部不能讀?。㊣NOUT雙向(輸入輸出)BUFFER輸出(結(jié)構(gòu)體內(nèi)部可讀?。┒丝谀J剑菏侵高@些端口上的數(shù)據(jù)流動(dòng)方式,如輸入或輸出 等;省略為輸入(IN)。
注意:端口均為信號(hào),不能作為變量和常量使用。端口模式符號(hào)及其含義如下表:INOUTBUFFERINOUT78.2022/11/26b)端口方向(端口模式)端口模式符號(hào)含義IN輸入OUT輸出c)端口數(shù)據(jù)類型標(biāo)準(zhǔn)類型:BIT和BIT_VICTOR(integer不提倡用)擴(kuò)展類型:STD_LOGIC和STD_LOGIC_VECTOR擴(kuò)展類型需要庫和程序包的支持,并且需要在程序中指明:libararyieee;Useieee.std_logic_1164.all;注意:端口信號(hào)與類屬參數(shù)的數(shù)據(jù)類型不能在entity中定義,必須在程序包package中預(yù)先定義。79.2022/11/26c)端口數(shù)據(jù)類型標(biāo)準(zhǔn)類型:BIT和BIT_VICTOR(in4)實(shí)體聲明格式注意事項(xiàng)EntityfredividerisPort (clock:instd_logic; clkout:outstd_logic );Endfredivider;實(shí)體名與保存的文件名必須相同最后一個(gè)端口聲明后無分號(hào)端口名端口模式(方向)端口數(shù)據(jù)類型80.2022/11/264)實(shí)體聲明格式注意事項(xiàng)Entityfredivider5)實(shí)體說明舉例RS觸發(fā)器VHDL描述中的實(shí)體說明部分說明如下:
ENTITYrsffISPORT(set,reset:INBIT;q,qb:BUFFERBIT);ENDrsff;練習(xí):寫出下面3-8譯碼器的實(shí)體說明部分。(En為一位控制端)RS觸發(fā)器元件圖RS觸
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年個(gè)人商品購銷協(xié)議樣式
- 高等教育教材設(shè)計(jì)與實(shí)施路徑
- 2024年股權(quán)轉(zhuǎn)讓化協(xié)議范本
- 2024建筑材料鋼筋采購協(xié)議例文
- 鋼構(gòu)安裝項(xiàng)目2024年承攬協(xié)議模板
- 城市綠化樹木買賣協(xié)議規(guī)范化文檔
- 2024年人社部勞動(dòng)協(xié)議模板專業(yè)
- 建設(shè)項(xiàng)目環(huán)境影響評(píng)價(jià)資質(zhì)證書登記表
- 2024年化彩鋼板房搭建服務(wù)協(xié)議
- 企業(yè)投資合同范本
- DB23T 3676.4-2023 室內(nèi)運(yùn)動(dòng)冰場(chǎng)制冰要求 第4部分 冰盤
- 食堂員工安全知識(shí)培訓(xùn)
- 金融產(chǎn)品培訓(xùn)課件
- 小兒社區(qū)獲得性肺炎查房課件
- 國家臨床版3.0手術(shù)操作編碼(ICD-9-CM3)
- 降低危重患者早期腸內(nèi)營養(yǎng)的不耐受性品管圈課件
- 新型冠狀病毒檢測(cè)技術(shù)規(guī)范:污水樣本病毒富集濃縮和檢測(cè)
- 智能制造的戰(zhàn)略和決策支持
- 2024年臨床醫(yī)學(xué)培訓(xùn)的人才需求與培養(yǎng)
- 婦產(chǎn)科學(xué)課件:盆腔炎性疾病
- 醫(yī)療文書管理規(guī)定醫(yī)療管理辦法
評(píng)論
0/150
提交評(píng)論