EDA技術(shù)-第二章-VHDL語言_第1頁
EDA技術(shù)-第二章-VHDL語言_第2頁
EDA技術(shù)-第二章-VHDL語言_第3頁
EDA技術(shù)-第二章-VHDL語言_第4頁
EDA技術(shù)-第二章-VHDL語言_第5頁
已閱讀5頁,還剩107頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第二章VHDL語言的基本要素及基本結(jié)構(gòu)2023/10/52第二章VHDL的語言要素及基本結(jié)構(gòu)要求:1.掌握:VHDL的命名規(guī)則:基本標(biāo)示符、下標(biāo)名、段名及注釋;VHDL對象(客體)分類定義及其性質(zhì);VHDL語言的數(shù)據(jù)類型:位、位矢量、整形數(shù);枚舉類型;IEEE標(biāo)準(zhǔn)的STD_LOGIC、STD_LOGIC_VECTOR;運算操作符;VHDL程序的組成VHDL語言設(shè)計的基本單元及其構(gòu)成VHDL構(gòu)造體描述的幾種方法庫及IEEE庫中包集合的使用2.熟悉:VHDL語言的其它數(shù)據(jù)類型、子程序、包集合及配置3.了解:標(biāo)示符:擴(kuò)展標(biāo)識符;數(shù)據(jù)類型轉(zhuǎn)換

2023/10/53VHDL語言程序通常包含5部分:實體說明:entity:描述所設(shè)計系統(tǒng)的外部接口信號,是可見的。構(gòu)造體:architecture描述所設(shè)計系統(tǒng)的內(nèi)部的結(jié)構(gòu)和行為,是不可見的。配置:configuration選取所需單元組成系統(tǒng)的不同版本包集合:package存放各設(shè)計模塊都能共享的數(shù)據(jù)類型、常數(shù)、子程序和函數(shù)。庫:library存放已經(jīng)編譯好的實體、構(gòu)造體、包集合和配置VHDL語言程序最基本組成是實體說明和構(gòu)造體2023/10/54VHDL的語言要素VHDL的語言要素包含客體(或?qū)ο螅?shù)據(jù)類型操作數(shù)運算操作符VHDL規(guī)定:(1)不區(qū)分大小寫(“”和‘’內(nèi)的字符除外);(2)每條語句以一個分號;結(jié)束;(3)不是所有語句前都可以加標(biāo)號;(4)一條語句后可以加注釋,在注釋內(nèi)容前加兩個短劃線。

2023/10/55§2.1VHDL語言的命名規(guī)則2.1.1數(shù)字型文字(1)整數(shù)文字 (2)實數(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安培)2023/10/562.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á)錯誤,缺B;data5<=“101010101010”;--表達(dá)正確,沒有“_”默 認(rèn)為二進(jìn)制數(shù);data6<=“0AD0”;--表達(dá)錯誤,缺X

2023/10/572.1.3標(biāo)識符用來定義實體、結(jié)構(gòu)體、對象(常數(shù)、變量、信號)、端口、子程序、語句標(biāo)號或參數(shù)的名字。VHDL的基本標(biāo)識符書寫遵循規(guī)則:由26個大小寫英文字母、數(shù)字0~9以及下劃線“_”組成;以英文字母開頭;不連續(xù)使用下劃線“_”,不以下劃線“_”結(jié)尾的;標(biāo)識符中的英語字母不分大小寫;VHDL的保留字(或關(guān)鍵字)不能作為標(biāo)識符使用。VHDL’93標(biāo)準(zhǔn)還支持?jǐn)U展標(biāo)識符,但是目前仍有許多VHDL工具不支持?jǐn)U展標(biāo)識符。由一對反斜杠之間的任何字符序列組成,取消了標(biāo)準(zhǔn)標(biāo)示符的所有限制。合法標(biāo)示符:Decoder_1,FFT,Sig_N,Not_Ack,State0,Idle

非法標(biāo)識符:

_Decoder_1,

2FFT,Sig_#N,Not-Ack,RyY_RST_,data__BUS,return2023/10/582.1.4下標(biāo)名下標(biāo)名指的是數(shù)組型變量或信號的某一個元素。格式:標(biāo)示符(表達(dá)式)標(biāo)識符必須是數(shù)組型的變量或信號的名字,表達(dá)式所代表的值必須是數(shù)組下標(biāo)范圍中的一個值,這個值將對應(yīng)數(shù)組中的一個元素。例如:SIGNALa,b:BIT_VECTOR(0TO3);

SIGNALm:INTEGERRANGE0TO3;

SIGNALy,z:BIT;

y<=a(m);--

不可計算型下標(biāo)表示

z<=b(3);--可計算型下標(biāo)表示2023/10/592.1.5段名段名是多個下標(biāo)名的組合,對應(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)…2023/10/510§2.2VHDL的數(shù)據(jù)類型及運算操作符VHDL語言同其它語言一樣有多種數(shù)據(jù)類型和運算符,且它們的定義也大多相同。VHDL語言的特點是用戶可以自己定義數(shù)據(jù)類型。如:typecountisintegerRANGE0to10;2023/10/5112.2.1VHDL客體(對象)及其分類客體(對象):可以賦予一個值的對象或者是數(shù)據(jù)類型所定義的對象。客體主要包括3類信號:變量:常數(shù):代表元件間的硬件連接線—全局變量代表暫存某一值的載體—局部變量數(shù)字電路中的電源和地等—全局變量物理意義2023/10/5121、VHDL語言對象(客體)—常數(shù)一般某一值在程序中多處用到,為了增加程序的可讀性、可修改性,給該常數(shù)定義一個常數(shù)名,在書寫程序時用定義的常數(shù)名代替該常數(shù)??梢栽趯嶓w、結(jié)構(gòu)體、程序包、塊、進(jìn)程和子程序中定義(說明)。在包集合中定義的常量可以暫不設(shè)具體數(shù)值,它可以在包體中設(shè)定。常量的使用范圍取決于它被定義的位置程序包:實體:構(gòu)造體:塊:由調(diào)用該程序包中的任何實體、構(gòu)造體引用僅作用于該實體僅作用于該構(gòu)造體僅作用于該塊進(jìn)程:僅作用于該進(jìn)程子程序:僅作用于該子程序2023/10/5131、VHDL語言對象(客體)—常數(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)?則不正確。2023/10/5142、VHDL語言客體—變量是一個局部量,只能在進(jìn)程和子程序(過程和函數(shù))中定義和使用。變量不能將信息帶出對它作出定義的當(dāng)前設(shè)計單元。變量在硬件中沒有明確的對應(yīng)物,只是對數(shù)據(jù)暫存。變量的賦值是立即發(fā)生,不存在任何延時的行為。常用在實現(xiàn)某種算法的賦值語句中,賦值符號為“:=”變量說明語句格式:

variable變量名1[,變量名2,···]:數(shù)據(jù)類型

[約束條件:=表達(dá)式];注意:1、語句中用[]括起部分可有可無2、表達(dá)式:給變量賦初值3、變量賦值符號為“:=”4、變量賦值立即生效,因此變量賦值不能夠加延時條件5、邏輯綜合時初值無效6、多個變量具有相同的數(shù)據(jù)類型和約束條件時可以在同一條變量定義語句中定義2023/10/515變量定義賦值舉例Variablex,y:integer;Variablex:integerrange0to255:=10;Variabletemp1,temp2:integer;變量賦值語句:變量定義語句:Temp1:=temp2;Temp1:=temp2after10ns;此語句對嗎?2023/10/5163、VHDL語言客體—信號信號可以作為模塊間的信息交流通道,與硬件中互連元件端口的的連線相對應(yīng);信號及其相關(guān)的語句描述了硬件系統(tǒng)的基本特征;如硬件系統(tǒng)運行的并行性;信號傳輸過程中的慣性延時特性;多驅(qū)動源的總線行為等。信號賦值不立即生效信號的定義格式如下:SIGNAL信號名:數(shù)據(jù)類型約束條件﹕=初始值;初始值僅在VHDL的行為仿真中有效,邏輯綜合無效信號代入符號為“<=”,但是賦初值符號為“:=”信號賦值不立即生效,因此信號代入能夠加延時條件多個信號具有相同的數(shù)據(jù)類型和約束條件時可以在同一條信號定義語句中定義具有全局性特性,可以在以下區(qū)域定義和使用:實體:作用于該實體中所有的結(jié)構(gòu)體結(jié)構(gòu)體:作用于整個結(jié)構(gòu)體包集合:作用于調(diào)用此包集合的所有實體除了沒有方向說明以外,信號與實體的端口(PORT)概念是一致的。2023/10/517VHDL語言客體—信號SIGNALSys_clk:bit﹕=‘0’;--定義了一個位BIT的信號S1,初始值為低電平SIGNALground:BIT=‘0’;--定義了一個位BIT的信號ground,初始值為低電平以上兩條信號定義語句可以改寫成一條信號定義語句:SignalSys_clk,ground:STD_LOGIC﹕=‘0’;SIGNALS4:STD_LOGIC_VECTOR(15DOWNTO0);--定義了一個標(biāo)準(zhǔn)邏輯位矢量(數(shù)組、總線)信號,共有16個元素SIGNALS5:integerrange0to9;;--定義了一整型數(shù)據(jù)類型的信號s5,其取值只能是0到9的整數(shù)信號賦值可以加延時條件:SIGNALS1﹕bit;SIGNALs2:bit;S2<=s1after10ns;2023/10/5184、信號、變量、常量的比較從硬件電路系統(tǒng)來看常量相當(dāng)于電路中的恒定電平,如GND或VCC接口變量和信號則相當(dāng)于組合電路系統(tǒng)中門與門間的連接及其連線上的信號值。從行為仿真和VHDL語句功能上看信號可以設(shè)置延時量,而變量則不能;變量只能作為局部的信息載體,而信號則可作為模塊間的信息載體。變量的設(shè)置有時只是一種過渡,最后的信息傳輸和界面間的通信都靠信號來完成。2023/10/519信號、變量、常量的比較從綜合后所對應(yīng)的硬件電路結(jié)構(gòu)來看信號將對應(yīng)更多的硬件結(jié)構(gòu),變量在硬件上一般沒有對應(yīng)實物。VHDL綜合器并不理會它們在接受賦值時存在的延時特性。VHDL仿真器允許變量和信號設(shè)置初始值,但在實際應(yīng)用中,VHDL綜合器并不會把這些信息綜合進(jìn)去。因為實際的FPGA/CPLD芯片在上電后,并不能確保其初始狀態(tài)的取向。因此,對于時序仿真來說,設(shè)置的初始值在綜合時是沒有實際意義的。2023/10/520D觸發(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é)果2023/10/521D觸發(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é)果2023/10/5225、信號和變量使用的區(qū)別賦值(代入)語句的符號不同::=變量賦值符號<=信號代入符號操作過程不同:變量在上一條語句賦值,下一條語句即可使用。變量不能列入進(jìn)程語句的敏感表。信號代入語句的處理和代入過程是分開進(jìn)行的。信號語句即使被處理也不會立即發(fā)生代入,下一條語句用到該信號,仍使用原來的信號值。在進(jìn)程語句中,當(dāng)進(jìn)程結(jié)束或遇到wait語句時,信號代入過程才被執(zhí)行。信號可以列入進(jìn)程的敏感表2023/10/523例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注意:在同一個進(jìn)程中,同一信號賦值目標(biāo)有多個賦值源時,只獲得最后一個賦值源的賦值。

加入WAIT語句后,信號賦值立即生效。結(jié)果同例2結(jié)果。2023/10/5242.2.2VHDL中的數(shù)據(jù)類型1、VHDL語言的數(shù)據(jù)類型的載體:常數(shù)、變量、信號VHDL是一種強(qiáng)類型語言,要求設(shè)計實體中的每一個常數(shù)、信號、變量等都必須具有確定的數(shù)據(jù)類型,并且相同數(shù)據(jù)類型及量才能互相傳遞和作用。VHDL作為強(qiáng)類型語言的好處是使VHDL編譯或綜合工具很容易地找出設(shè)計中的各種常見錯誤。VHDL中的數(shù)據(jù)類型可以分成三大類。(不同書分類方法不完全一致)三類標(biāo)準(zhǔn)數(shù)據(jù)類型:10種用戶自定義數(shù)據(jù)類型:8種IEEE預(yù)定義標(biāo)準(zhǔn)邏輯位與矢量2023/10/5251、標(biāo)準(zhǔn)數(shù)據(jù)類型標(biāo)準(zhǔn)數(shù)據(jù)類型是最基本的數(shù)據(jù)類型,包括:實數(shù)類型、整數(shù)類型、位類型、字符類型和時間類型等,共10種。重點:整數(shù)類型和位類型這些數(shù)據(jù)類型都已在VHDL的標(biāo)準(zhǔn)程序包standard和std_logic_1164及其他的標(biāo)準(zhǔn)程序包中作了定義,并可在設(shè)計中隨時調(diào)用。2023/10/5261)標(biāo)準(zhǔn)數(shù)據(jù)類型——整數(shù)(INTEGER)型取值范圍是-21473647~+21473647范圍:–(231–1)~

(231–1)32位對于VHDL仿真器,整數(shù)作為有符號數(shù);對于VHDL綜合器,整數(shù)作為無符號數(shù)處理;要求用RANGE子句為所定義的數(shù)限定范圍,然后據(jù)此決定表示此信號或變量的二進(jìn)制數(shù)的位數(shù)。如語句“SIGNALA﹕INTEGERRANGE0TO15;”規(guī)定信號A的取值范圍是0~15共16個整數(shù)值,可用4位二進(jìn)制數(shù)來表示,因此A將被綜合成由四條信號線構(gòu)成的信號。整數(shù)常量的書寫方式:2--十進(jìn)制整數(shù)10E4--十進(jìn)制整數(shù)16#D2#--十六進(jìn)制整數(shù)2#11011010#--二進(jìn)制整數(shù)2023/10/5272)標(biāo)準(zhǔn)數(shù)據(jù)類型——實數(shù)(REAL)型類似于數(shù)學(xué)上的實數(shù),或稱浮點數(shù)。取值范圍為-1.0E38~+1.0E38。通常情況下,僅能在VHDL仿真器中使用VHDL綜合器不支持實數(shù),因為實數(shù)類型的實現(xiàn)相當(dāng)復(fù)雜,目前在電路規(guī)模上難以承受。實數(shù)常量的書寫方式舉例如下:65971.333333--十進(jìn)制浮點數(shù)43.6E-4--十進(jìn)制浮點數(shù)2023/10/5283)標(biāo)準(zhǔn)數(shù)據(jù)類型——位(BIT)型取值只能是1或0;位值的表示方法是:‘0’或‘1’;位數(shù)據(jù)類型的數(shù)據(jù)對象,如變量、信號等,可以參與邏輯運算,運算結(jié)果仍是位的數(shù)據(jù)類型。VHDL綜合器用一個二進(jìn)制位表示BIT。2023/10/5294)標(biāo)準(zhǔn)數(shù)據(jù)類型——位矢量(BIT_VECTOR)型位矢量是基于BIT數(shù)據(jù)類型的數(shù)組STANDARD程序包中BIT_VETOR類型定義如下:TYPE

BIT_VETOR

IS

ARRAY(NATURALRANGE<>)OF

BIT;使用位矢量必須注明位寬----數(shù)組中的元素個數(shù)和排列方向;例如:SIGNALA﹕BIT_VECTOR(7DOWNTO

0);信號A被定義為一個具有8位位寬的矢量,它的最左位是A(7),最右位是A(0)。例如:SIGNALA﹕BIT_VECTOR(0TO

7);信號A被定義為一個具有8位位寬的矢量,它的最左位是A(0),最右位是A(7)。位矢量的表示方法是:雙引號括起來的一組位數(shù)據(jù),如:“01100”或x“00bb”十六進(jìn)制表示前加x。2023/10/5305)標(biāo)準(zhǔn)數(shù)據(jù)類型——布爾(BOOLEAN)型定義布爾數(shù)據(jù)類型的源代碼如下:TYPEBOOLEANIS(FALSE,TRUE);取值有FALSE和TRUE兩種。綜合器將用一個二進(jìn)制位表示BOOLEAN型變量或信號。例如,當(dāng)A大于B時,在IF語句中的關(guān)系運算表達(dá)式(A>B)的結(jié)果是布爾量TRUE,反之為FALSE。綜合器將其變?yōu)?或0信號值,對應(yīng)于硬件系統(tǒng)中的一根線布爾類型的變量或信號只可以進(jìn)行關(guān)系運算。例如:SIGNALflag:boolean;flag<=false;2023/10/5316)標(biāo)準(zhǔn)數(shù)據(jù)類型——字符(CHARACTER)型字符類型通常用單引號引起來如‘A’字符類型區(qū)分大小寫如‘B’不同于‘b’用于仿真,不能被邏輯綜合。2023/10/5327)標(biāo)準(zhǔn)數(shù)據(jù)類型——字符串(STRING)型字符串?dāng)?shù)據(jù)類型是字符數(shù)據(jù)類型的一個非約束型數(shù)組,或稱為字符串?dāng)?shù)組。用于仿真,不能被邏輯綜合。字符串必須用雙引號標(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’;2023/10/5339)標(biāo)準(zhǔn)數(shù)據(jù)類型——自然數(shù)(NATURAL)和正整數(shù)(POSITIVE)自然數(shù)整數(shù)的一個子類型,非負(fù)的整數(shù),即零和正整數(shù)。STANDARD程序包中NATURAL類型定義如下:SUBTYPENATURALISINTEGERRANGE0TOINTEGER'HIGH;正整數(shù)是整數(shù)的一個子類型,它包括整數(shù)中非零和非負(fù)的數(shù)值。STANDARD程序包中NATURAL類型定義如下:SUBTYPEPOSITIVEISINTEGERRANGE1TOINTEGER‘HIGH;2023/10/5348)標(biāo)準(zhǔn)數(shù)據(jù)類型——時間(TIME)型VHDL中惟一的預(yù)定義物理類型。用于仿真系統(tǒng),實際運行情況不能被邏輯綜合。完整的時間類型包括整數(shù)和物理量單位兩部分,整數(shù)和單位之間至少留一個空格。55ms,20ns如無空格,有的仿真器給出警告。2023/10/535標(biāo)準(zhǔn)數(shù)據(jù)類型——時間(TIME)型STANDARD程序包中時間類型定義如下:TYPETIMEISRANGE-2147483647TO2147483647unitsfs;--飛秒,VHDL中的最小時間單位

ps=1000fs;--皮秒

ns=1000ps;--納秒

us=1000ns;--微秒

ms=1000us;--毫秒

sec=1000ms;--秒

min=60sec;--分

hr=60min;--時enduntis;2023/10/53610)標(biāo)準(zhǔn)數(shù)據(jù)類型——錯誤等級(SEVERITY_LEVEL)在VHDL仿真器中,錯誤等級用來指示設(shè)計系統(tǒng)的工作狀態(tài),共有四種可能的狀態(tài)值:note(注意)、warning(警告)、error(出錯)、failure(失敗)。在仿真過程中,可輸出這四種值來提示被仿真系統(tǒng)當(dāng)前的工作情況。不能被邏輯綜合。2023/10/537可以由用戶自定義的數(shù)據(jù)類型有8種。枚舉類型整數(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ù)類型2023/10/538自定義數(shù)據(jù)類型的書寫格式type

數(shù)據(jù)類型名

is

數(shù)據(jù)類型定義[of基本數(shù)據(jù)類型];設(shè)計者自定,可以是任一標(biāo)示符描述所定義的數(shù)據(jù)類型的表達(dá)方式和表達(dá)內(nèi)容可有可無指數(shù)據(jù)類型定義中所定義的元素的基本數(shù)據(jù)類型,一般都是取已有的預(yù)定義數(shù)據(jù)類型,如bit、std_logic或integer等2023/10/5391)用戶自定義類型——枚舉類型枚舉:將變量的值一一列舉出來,變量的值只限于列舉出來的值的范圍。VHDL中的枚舉數(shù)據(jù)類型是用文字符號來表示一組實際的二進(jìn)制數(shù)的類型(若直接用數(shù)值來定義,則必須使用單引號)。type

M_state

is

(state1,state2,state3,state4,state5);signalcurrent_state,next_state:M_state;枚舉類型數(shù)據(jù)的定義格式如下:Type

數(shù)據(jù)類型名

is(元素1,元素2,……);信號current_state和next_state的數(shù)據(jù)類型定義為M_state,從state1~state5共5個取值。例如:2023/10/540用戶自定義類型——枚舉類型在綜合過程中自動編碼一般將第一個枚舉量(最左邊的量)編碼為0,以后的依次加1。在編碼過程中自動將枚舉元素轉(zhuǎn)變成位矢量位矢的長度將取能夠表達(dá)的所有枚舉元素的最小值用于表達(dá)5個狀態(tài)的位矢量長度應(yīng)該為3位,編碼默認(rèn)值為如下方式:state1=‘000’;state2=‘001’;state3=‘010’;state4=‘011’;state5=‘100’;為了某些特殊的需要,編碼順序也可以人為設(shè)置2023/10/541例如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;2023/10/5422)用戶自定義類型——整數(shù)類型和實數(shù)類型目的:標(biāo)準(zhǔn)的程序包中的定義取值定義范圍太大,綜合器綜合結(jié)果占有資源太多。用戶根據(jù)實際的需要限定其取值范圍,以便能使綜合器更好的綜合。定義格式:TYPE數(shù)據(jù)類型名IS數(shù)據(jù)類型定義約束范圍;約束范圍:range(數(shù)據(jù)范圍)如:TYPEdigitISINTEGERRANGE0TO9;如:TYPEcurrentISREALRANGE-1E4TO1E4;2023/10/5433)用戶自定義類型——數(shù)組類型數(shù)組:是將一組具有相同數(shù)據(jù)類型的元素集合在一起,作為一個數(shù)據(jù)對象來處理的數(shù)據(jù)類型??梢允且痪S(每個元素只有一個下標(biāo))或多維(每個元素有多個下標(biāo))。VHDL仿真器都支持,但VHDL綜合器只支持一維數(shù)組。VHDL允許定義兩種不同類型的數(shù)組:限定性數(shù)組和非限定性數(shù)組限定性數(shù)組:下標(biāo)的取值范圍在數(shù)組定義時就被確定;非限定性數(shù)組:下標(biāo)的取值范圍需留待隨后根據(jù)具體數(shù)據(jù)對象再確定。2023/10/544限定性數(shù)組定義語句格式如下:type數(shù)據(jù)類型名isarray

范圍of

原數(shù)據(jù)類型;如:TYPEwordISARRAY(1TO8)OFSTD_LOGIC;數(shù)據(jù)類型名稱是word,8個元素,下標(biāo)排序是1,2,3,4,5,6,7,8,各元素的排序是word(1),word(2),…,word(7),word(8)。每個元素的數(shù)據(jù)類型為std_logic。注意:若范圍一項的數(shù)據(jù)類型沒有,則默認(rèn)integer類型若用其它數(shù)據(jù)類型指定范圍,應(yīng)在指定范圍前加數(shù)據(jù)類型名新定義的限定性數(shù)組類型的名稱,可以是任何標(biāo)識符;指出數(shù)組元素數(shù)量和排序方式,一般用整數(shù)來表示其范圍;指數(shù)組各元素的數(shù)據(jù)類型用戶自定義類型——數(shù)組類型:限定性數(shù)組2023/10/545用戶自定義類型——數(shù)組類型:限定性數(shù)組用其它的數(shù)據(jù)類型指定范圍舉例:TYPEinstructionIS(ADD,SUB,INC,SRL,SRF,LDA,LDB,XFR);SUBTYPEdigitISINTEGERrange0TO9;TYPEinsflagISARRAY(instructionADDTOSRF)OFdigit;這數(shù)組有五個元素,元素的下標(biāo)是ADD到SRF,每個元素數(shù)據(jù)類型是digit。數(shù)組常在總線、ROM和RAM中使用。例如:設(shè)計一個256×8的ROM存儲器Subtypewordis

std_logic_vector(7dowmto0);Typememoryisarray(0to255)

ofword;Varaiblerom:memory;2023/10/546用戶自定義類型——數(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ù)對象)2023/10/547二維數(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);2023/10/5484)用戶自定義類型——記錄類型由已定義的、數(shù)據(jù)類型不同的對象元素構(gòu)成的數(shù)組語句格式:TYPE記錄類型名ISRECORD

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

…ENDRECORD[記錄類型名];2023/10/549用戶自定義類型——記錄類型舉例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;2023/10/5503、用戶定義的子類型子類型是由用戶對已定義的原數(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; 對嗎?2023/10/5515、數(shù)據(jù)類型的限定數(shù)據(jù)類型可以根據(jù)所描述的文字的上下關(guān)系來判斷SIGNALa:STD_LOGIC_VECTOR(7DOWNTO0);a<=“01101010”;--STD_LOGIC_VECTOR有時判斷不出來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ù)類型名’對象名2023/10/5526、IEEE標(biāo)準(zhǔn)STD_LOGIC和STD_LOGIC_VECTOR在IEEE庫的程序包STD_LOGIC_1164中,定義了兩個非常重要的數(shù)據(jù)類型,即標(biāo)準(zhǔn)邏輯位STD_LOGIC

和標(biāo)準(zhǔn)邏輯矢量STD_LOGIC_VECTOR。它們是對bit和bit_vector兩種數(shù)據(jù)類型的補充。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;2023/10/553注意:(1)Bit_vector:可以是二進(jìn)制數(shù),也可以是十六進(jìn)制數(shù)或八進(jìn)制;還可使用“_”將二進(jìn)制數(shù)隔開。(2)Std_logic_vector:只能是二進(jìn)制數(shù)。(3)在使用時,必須在程序的開頭說明包含著兩種數(shù)據(jù)類型的包集合和包集合所在的庫。Libraryieee; UseIEEE.std_logic_1164.all;2023/10/5544、數(shù)據(jù)類型的轉(zhuǎn)換VHDL是一種強(qiáng)類型語言即使對于數(shù)據(jù)類型非常接近的數(shù)據(jù)對象,在相互操作時,也需要進(jìn)行數(shù)據(jù)類型轉(zhuǎn)換。類型轉(zhuǎn)換函數(shù)通常由VHDL語言包集合提供2023/10/555STD_LOGIC_1164包集合

中定義的數(shù)據(jù)類型轉(zhuǎn)換函數(shù)及對應(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ù)通常由三個包集合提供:在VHDL語言中,不同類型的數(shù)據(jù)是不能進(jìn)行運算和代入的,要實現(xiàn)這些操作必須進(jìn)行數(shù)據(jù)類型的轉(zhuǎn)換。4、數(shù)據(jù)類型的轉(zhuǎn)換(續(xù))2023/10/556STD_LOGIC_ARITH包集合中定義的數(shù)據(jù)類型轉(zhuǎn)換函數(shù)集對應(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ù)集對應(yīng)的數(shù)據(jù)類型轉(zhuǎn)換如下:conv_integer(A)

由std_logic_vector轉(zhuǎn)換成integer4、數(shù)據(jù)類型的轉(zhuǎn)換(續(xù))2023/10/557數(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;

2023/10/5582.2.3VHDL語言的運算操作符算術(shù)運算符:REM,MOD,/,*,-(取負(fù)),+(取正),-,+, **,ABSVHDL的各種表達(dá)式由操作數(shù)和操作符組成,其中操作數(shù)是各種運算的對象,而操作符則規(guī)定運算的方式VHDL語言的運算操作符分為4類:邏輯運算符:NOT,XOR,NOR,NAND,OR,AND關(guān)系運算符:>=,<=,>,<,/=,=并置運算符:&六種移位操作符號SLL、SRL、SLA、SRA、ROL和ROR是VHDL‘93標(biāo)準(zhǔn)新增的運算符。省略賦值操作符:(OTHERS=〉X)2023/10/559運算符的優(yōu)先級書P43頁表2-5中運算符一項中每一行的優(yōu)先級相同。六種移位操作符號SLL、SRL、SLA、SRA、ROL和ROR優(yōu)先級高于一般的關(guān)系運算符。2023/10/5601、邏輯運算符注意:(1)只可以對std_logic,std_logic_vector,bit,bit_vector,boolean型數(shù)據(jù)進(jìn)行邏輯運算。(2)運算符的左右及代入的信號數(shù)據(jù)類型必須相同。(3)在一個語句中,若有兩個以上的邏輯表達(dá)式時,有時需在相應(yīng)的表達(dá)式中加括號。例如:X<=(aandb)or(notcandd);(4)如果一個邏輯表達(dá)式中只有AND,OR,XOR運算符,括號可省略。其他不行。例如:A<=((bnandc)nandd)nande;

1011A<=bnand(cnand(dnande));因為除NOT優(yōu)先級最高外,其余優(yōu)先級相同。同一個表達(dá)式中,具有多個優(yōu)先級相同的邏輯運算符時,先完成括號內(nèi)運算,否則它們的先后順序是隨機(jī)的。2023/10/5612、算術(shù)運算符REM,MOD,/,*,-(取負(fù)),+(取正),-,+,**,ABS-,+(負(fù)、正):一元運算操作符,操作數(shù)可以是任何數(shù)值類型在實際使用中,取負(fù)操作數(shù)需加括號。如:Z:=X*(-Y);-,+(加、減):操作數(shù)可以是任何數(shù)值類型,操作數(shù)的類型原則上必須一致。*,/:數(shù)據(jù)類型是整數(shù)和實數(shù)。對物理類型的數(shù)據(jù)對象也可以運算操作(1)乘法和除法運算是可綜合的,但從優(yōu)化綜合、節(jié)省芯片資源的角度出發(fā),最好不要輕易使用乘除操作符。注意:(2)只有分母操作數(shù)為2乘方的常數(shù)時,才可以綜合。只有在左邊為實數(shù)時,其右邊才可以為負(fù)數(shù)。一般地,VHDL綜合器要求乘方操作符作用的操作數(shù)的底數(shù)必須是2**:左邊可以是整數(shù)或?qū)崝?shù),但右邊必須為整數(shù)。ABS:無限制MOD,REM:操作數(shù)數(shù)據(jù)類型只能是整數(shù),運算操作結(jié)果也是整數(shù)只有分母操作數(shù)為2乘方的常數(shù)時,才可以綜合。2023/10/5623、關(guān)系運算符關(guān)系運算符:>=,<=,>,<,/=,=不同的關(guān)系運算符對兩邊的操作數(shù)的數(shù)據(jù)類型有不同的要求,但結(jié)果都是BOOLEAN型。

>=,<=,>,<:整數(shù)、實數(shù)、std_logic、bit及,bit_vector,std_logic_vector注意: (1)操作數(shù)的數(shù)據(jù)類型必須一致(2)位長可以不同。但可能出錯。 (3)位矢量數(shù)據(jù)比較從左到右按位比較,當(dāng)比較其中一位不等,則給 出結(jié)果,不再繼續(xù)下一位的比較。例如:Signala:std_logic_vector(3downto0);Signalb:std_logic_vector(2downto0);若要進(jìn)行位長不同的位矢量的關(guān)系運算必須加入語句

Libraryieee; useieee.std_logic_unsigned.all例如:a<=”1010”;b<=”111”;If(a>b)then2023/10/5634、并置(連接)運算符&并置運算符&完成一維數(shù)組的連接;其操作過程是將右操作數(shù)連接在左操作數(shù)的后邊,形成一個新的一維數(shù)組;常用于位或位矢量類型對象的連接。圖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)于有位矢量的連接。2023/10/564并置(連接)運算符舉例例如:tmp_b<=bAND(en,en,en,en);

y<=(a,tmp_b);

對嗎?集合體可以用指定位的腳標(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項必放最后?;?tmp_c<=(others=>en);或 tmp_c<=(3downto0=>en);2023/10/5655、省略賦值操作符(聚合賦值符)格式:others=>’X’例如:Signald1:STD_LOGIC_VECTOR(7DOWNTO0);d1<=(others=>’0’);一般用于較多位的位矢量賦值中有多位值相同時,做省略化的賦值。2023/10/566習(xí)題1、定義一個常數(shù),數(shù)據(jù)類型為實數(shù),數(shù)值任意。2、定義一個變量,數(shù)據(jù)類型為16位標(biāo)準(zhǔn)邏輯位矢量,然后將二進(jìn)制數(shù)1111101100110000對其賦值。3、定義一個變量,數(shù)據(jù)類型為位類型且給初始值0。4、定義一個信號,數(shù)據(jù)類型為0到255的所有整數(shù)。5、定義枚舉類型,類型名為state,包含元素為S1,S2,S3,S4,S5五個元素,然后用該數(shù)據(jù)類型定義信號now_state和next_state。6、改正下面標(biāo)示符中錯誤:

#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;2023/10/567習(xí)題續(xù)8、設(shè)計一個系統(tǒng),它有3個輸入端口,它們的數(shù)據(jù)類型為std_logic;

一個輸出端口,類型為std_logic_vector(0to3)。試寫出該系統(tǒng)設(shè)計實體VHDL程序框架結(jié)構(gòu)。要求結(jié)構(gòu)體中說明信號A、B,它們?yōu)閟td_logic類型。功能描述用一個process語句,其中需說明變量c,為std_logic類型。所有信號均為process語句的敏感信號。2023/10/568VHDL語言程序通常包含5部分:實體說明、構(gòu)造體、配置、包集合、庫實體說明構(gòu)造體配置包集合和庫2023/10/5692.3VHDL語言設(shè)計的基本單元及其構(gòu)成VHDL語言設(shè)計的基本單元就是一個設(shè)計實體。庫、程序包調(diào)用說明ENTITY(實體)說明ARCHITECTURE(結(jié)構(gòu)體)說明注意:庫、程序包調(diào)用說明語句不是必須的,需要則有;另外兩部分是必須有的。VHDL語言描述設(shè)計實體的一般格式:2023/10/570VHDL語言一般結(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;庫包集合使用說明實體說明構(gòu)造體說明2023/10/571VHDL語言基本單元組成:實體說明+構(gòu)造體說明例2-11:二選一電路設(shè)計單元的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實體說明構(gòu)造體說明2023/10/5722.3.1實體說明

實體說明是一個設(shè)計實體的表層設(shè)計單元,描述設(shè)計實體與外部電路的接口部分;規(guī)定設(shè)計單元的輸入輸出接口信號或引腳,是設(shè)計實體經(jīng)封裝后對外的一個通信界面。實體說明用于定義電路的輸入輸出引腳,但并不描述電路的具體構(gòu)造和實現(xiàn)的功能。ENTITYFredeviderisport(clock:instd_logic;clkout:outstd_logic);end;clockclkoutFredevider輸入輸出2023/10/5731、實體說明格式(語句結(jié)構(gòu))實體說明的常用語句結(jié)構(gòu)如下:

ENTITY

實體名IS[GENERIC(類屬表);][PORT(端口表);]END【實體名】;中間在方括號內(nèi)的語句描述,在特定的情況下并非是必須的。例如:構(gòu)建一個VHDL仿真測試基準(zhǔn)等情況中可以省去方括號中的語句。2023/10/574實體聲明格式具體說明(續(xù))1)實體名實體名必須與文件名相同,否則編譯時會出錯。2023/10/575

2)類屬參數(shù)

可選項。類屬(GENERIC)參數(shù)是一種端口界面常數(shù),常以一種說明的形式放在實體說明部分。是一些信息,默認(rèn)的參數(shù)值。如端口大小、總線寬度、時間等。類屬參數(shù)說明的一般書寫格式如下:

GENERIC(類屬參數(shù)名1,(類屬參數(shù)名2):數(shù)據(jù)類型[:=設(shè)定值] [;常數(shù)名n:數(shù)據(jù)類型[:設(shè)定值]]);2023/10/576

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ù)值可以為本實體所屬的結(jié)構(gòu)體使用。(2)

類屬參數(shù)作為常量使用,在定義它的實體內(nèi)使用時不能修改。(3)該模塊被調(diào)用時從外部傳入?yún)?shù)值。2023/10/5773)端口說明端口說明是對于一個設(shè)計實體與外部接口的描述?;蛘哒f:是CPLD/FPGA器件外部引腳信號的名稱、數(shù)據(jù)類型和傳輸方向的描述。端口說明書寫格式如下:Port

(端口名1:方向數(shù)據(jù)類型;--每個端口說明用分號隔開;端口名2{,端口名3}:方向數(shù)據(jù)類型;--每個端口說明可以 --說明多個端口

端口名n:方向數(shù)據(jù)類型);--最后一個端口說明不用分號a)端口名:是設(shè)計者為實體的每一個對外通道所取的名字;即實現(xiàn)該設(shè)計程序的器件外部引腳的名稱——標(biāo)示符2023/10/578b)端口方向(端口模式)端口模式符號含義IN輸入OUT輸出(結(jié)構(gòu)體內(nèi)部不能讀?。㊣NOUT雙向(輸入輸出)BUFFER輸出(結(jié)構(gòu)體內(nèi)部可讀?。┒丝谀J剑菏侵高@些端口上的數(shù)據(jù)流動方式,如輸入或輸出 等;省略為輸入(IN)。

注意:端口均為信號,不能作為變量和常量使用。端口模式符號及其含義如下表:INOUTBUFFERINOUT2023/10/579c)端口數(shù)據(jù)類型標(biāo)準(zhǔn)類型:BIT和BIT_VICTOR(integer不提倡用)擴(kuò)展類型:STD_LOGIC和STD_LOGIC_VECTOR擴(kuò)展類型需要庫和程序包的支持,并且需要在程序中指明:libararyieee;Useieee.std_logic_1164.all;注意:端口信號與類屬參數(shù)的數(shù)據(jù)類型不能在entity中定義,必須在程序包package中預(yù)先定義。2023/10/5804)實體聲明格式注意事項EntityfredividerisPort (clock:instd_logic; clkout:outstd_logic );Endfredivider;實體名與保存的文件名必須相同最后一個端口聲明后無分號端口名端口模式(方向)端口數(shù)據(jù)類型2023/10/5815)實體說明舉例RS觸發(fā)器VHDL描述中的實體說明部分說明如下:

ENTITYrsffISPORT(set,reset:INBIT;q,qb:BUFFERBIT);ENDrsff;練習(xí):寫出下面3-8譯碼器的實體說明部分。(En為一位控制端)RS觸發(fā)器元件圖RS觸發(fā)器結(jié)構(gòu)圖endiny2023/10/5822.3.2構(gòu)造體(結(jié)構(gòu)體)ARCHITCTURE構(gòu)造體的描述方法:行為級描述、RTL(數(shù)據(jù)流)級描述、結(jié)構(gòu)描述(邏輯元件連接)構(gòu)造體是用于描述設(shè)計實體的實現(xiàn)方案描述,包括內(nèi)部結(jié)構(gòu)(元件內(nèi)部的連接關(guān)系)以及實體端口間的邏輯關(guān)系(實體的行為)。注意:構(gòu)造體一定要跟在實體說明的后面。2023/10/5831、構(gòu)造體的特點1個實體可對應(yīng)若干個構(gòu)造體,每個構(gòu)造體分別代表該實體功能的不同實現(xiàn)方案或不同描述方式。同一時刻,只有一個構(gòu)造體起作用,可以通過配置來決定使用哪一個構(gòu)造體進(jìn)行仿真或綜合。同一構(gòu)造體不能為不同的實體所擁有。2023/10/5842、構(gòu)造體的語法格式實體名必須是所在設(shè)計實體的名字,結(jié)構(gòu)體名由設(shè)計者定義,但當(dāng)一個實體具有多個結(jié)構(gòu)體時,結(jié)構(gòu)體的取名不可重復(fù)。構(gòu)造體的語句格式如下:

ARCHITECTURE

構(gòu)造體名OF

實體名

IS[定義語句];

BEGIN

并行處理語句;

END

構(gòu)造體名;注意:實體名必須是所在設(shè)計實體的名字,而構(gòu)造體名可以由設(shè)計者自己選擇,但當(dāng)一個實體具有多個結(jié)構(gòu)體時,構(gòu)造體的取名不可重復(fù)。通常用Behavioral(行為)、dataflow(數(shù)據(jù)流描述)或structural(結(jié)構(gòu)描述)對數(shù)據(jù)類型、常數(shù)、信號、子程序和元件等元素的說明。不是必須的。以各種不同的描述風(fēng)格描述實體邏輯行為的語句。2023/10/5852、構(gòu)造體的語法格式說明在一個構(gòu)造體中說明和定義的數(shù)據(jù)類型、常數(shù)、元件、函數(shù)和過程只能用于這個構(gòu)造體中;若希望其能用于其他的實體或構(gòu)造體中,則需要將其作為程序包來處理。一個構(gòu)造體內(nèi)可以包含多條并行描述語句,它們不以書寫的先后順序為執(zhí)行順序??偸峭瑫r在執(zhí)行。共有8條并發(fā)描述語句。2023/10/5863、構(gòu)造體的語法格式總結(jié)構(gòu)造體構(gòu)造體定義構(gòu)造體功能描述塊語句進(jìn)程語句信號賦值語句過程調(diào)用語句元件例化語句生成語句數(shù)據(jù)類型定義常數(shù)定義信號定義例化元件說明子程序定義2023/10/5872.4Vhdl構(gòu)造體描述的幾種方法構(gòu)造體的語句格式如下:

ARCHITECTURE

結(jié)構(gòu)體名OF

實體名

IS[定義語句;]

BEGIN

并行處理語句;

END

構(gòu)造體名;對數(shù)據(jù)類型、常數(shù)、信號、子程序和元件等元素的說明。不是必須的。以各種不同的描述風(fēng)格描述實體邏輯行為的語句。通常用Behavioral(行為)、dataflow(數(shù)據(jù)流描述)或structural(結(jié)構(gòu)描述)2023/10/588

2.4.1行為級描述:例2-15:二選一數(shù)據(jù)選擇器ENTITY

muxIS PORT(d0,d1:INBIT; sel:INBIT;Q:OUTBIT);

ENDmux;ARCHITECTUREbehaveOFmux

IS

BEGIN

PROCESS(d0,d1,sel) BEGIN IFsel=’0’THEN q<=d0; ELSE q<=d1; ENDIF; ENDPROCESS;ENDbehave;只表示輸入和輸出間轉(zhuǎn)換的行為,它不包含任何結(jié)構(gòu)的信息(硬件特性、連線方式、邏輯行為方式)。

2023/10/5892.4.2RTL級描述(數(shù)據(jù)流描述方式):例2-16二選一數(shù)據(jù)選擇器ENTITY

muxIS PORT(d0,d1:INBIT; sel:INBIT;q:OUTBIT);

ENDmux;ARCHITECTUREbehaveOFmux

IS SIGNALtmp1,tmp2,tmp3,nsel:BIT;

BEGIN cale:PROCESS(d0,d1,sel) BEGIN Nsel<=NOTsel; tmp1<=d0ANDsel; tmp2<=d1ANDnsel; tmp3<=tmp1ORtmp2; q<=tmp3; ENDPROCESS;

ENDbehave;以規(guī)定設(shè)計中的各種寄存器形式為特征,然后在寄存器之間插入組合邏輯。數(shù)據(jù)流描述方式能比較直觀地表達(dá)底層邏輯行為。

2023/10/5902.4.3結(jié)構(gòu)描述:是表示元件之間的互聯(lián),高層次的設(shè)計實體可以調(diào)用低層次設(shè)計實體。最接近實際的硬件電路結(jié)構(gòu)。使用元件說明語句和元件例化語句2023/10/591例2-17結(jié)構(gòu)描述實現(xiàn)二選一數(shù)據(jù)選擇器:ARCHITECTUREstru

OF

mux

IS

BEGIN

ENDstructral;SIGNALtmp1,tmp2,tmp3,nsel:BIT;COMPONENTand2 PORT(a,b:INBIT;

c:OUTBIT);ENDCOMPONENT;COMPONENTinv PORT(a:INBIT;

c:OUTBIT);ENDCOMPONENT;COMPONENTor2 PORT(a,b:INBIT;

c:OUTBIT);ENDCOMPONENT;定義信號tmp1,tmp2,tmp3,nsel說明元件inv定義語句U1:invPORTMAP(a=>sel,c=>nsel);U2:and2PORTMAP

溫馨提示

  • 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論