




已閱讀5頁,還剩181頁未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
VHDL語言,1,主要內(nèi)容,VHDL的元素VHDL語言程序的結(jié)構(gòu)VHDL的描述語句VHDL語言的描述方式深入掌握與應(yīng)用VHDL語言,VHDL的元素,3,VHDL的元素,(1)VHDL語言的詞法和標(biāo)識(shí)符(2)VHDL語言的對(duì)象(3)VHDL語言的數(shù)據(jù)類型(4)VHDL語言的運(yùn)算符,VHDL語言的詞法和標(biāo)識(shí)符,5,詞法和標(biāo)識(shí)符,短標(biāo)識(shí)符VHDL-93接收了VHDL-87關(guān)于標(biāo)識(shí)符的全部標(biāo)準(zhǔn),VHDL-87標(biāo)準(zhǔn)中的標(biāo)識(shí)符稱為短標(biāo)識(shí)符,VHDL-93標(biāo)準(zhǔn)中的標(biāo)識(shí)符稱為擴(kuò)展標(biāo)識(shí)符。短標(biāo)識(shí)符的組成:英文字母、數(shù)字、下劃線短標(biāo)識(shí)符的開始:必須以英文字母開始短標(biāo)識(shí)符不敏感大小寫短標(biāo)識(shí)符的最后一個(gè)字符不能是下劃線下劃線不能連續(xù)出現(xiàn)不能采用保留字作為短標(biāo)識(shí)符,6,詞法和標(biāo)識(shí)符,擴(kuò)展標(biāo)識(shí)符擴(kuò)展標(biāo)識(shí)符用反斜杠來界定,例如:data_bus擴(kuò)展標(biāo)識(shí)符的兩個(gè)反斜杠之間可以使用保留字。ENTITY擴(kuò)展標(biāo)識(shí)符區(qū)分大小寫擴(kuò)展標(biāo)識(shí)符允許下劃線連續(xù)使用同名的擴(kuò)展標(biāo)識(shí)符和短標(biāo)識(shí)符是不一樣的。例如:data_bus和data_bus不一樣,7,詞法和標(biāo)識(shí)符,注釋以“-”開始直到本行結(jié)束的一段文字注釋不會(huì)被編譯注釋起到對(duì)程序說明和解釋。程序應(yīng)該包括充分的注釋,8,詞法和標(biāo)識(shí)符,數(shù)字VHDL語言中數(shù)字的表示方法:十進(jìn)制/二進(jìn)制/十六進(jìn)制/整數(shù)/實(shí)數(shù)相鄰兩個(gè)數(shù)字之間插入下劃線、在數(shù)字之前添加若干個(gè)0對(duì)數(shù)字無影響,但任何位置插入空格會(huì)改變數(shù)字。例如:123_456等價(jià)與123456001234等價(jià)與1234123456不表示123456,9,詞法和標(biāo)識(shí)符,字符和字符串字符是用單引號(hào)括起來的ASCII碼,VHDL敏感字符的大小寫。例如:A與a是不同的。字符串是用雙引號(hào)括起來的字符序列。字符和字符串不能混為一談?!盿”和a是不同的。,10,詞法和標(biāo)識(shí)符,位串位串是用雙引號(hào)括起來的數(shù)字序列,并在數(shù)字序列前加上一個(gè)基數(shù)說明符。例如:B”00111111”表示二進(jìn)制數(shù),只有二進(jìn)制數(shù)才能將基數(shù)說明符省略。X”3F”表示十六進(jìn)制數(shù)。,VHDL語言的對(duì)象,12,VHDL語言的對(duì)象,在VHDL語言中,凡可被賦予一個(gè)值的客體就是數(shù)據(jù)對(duì)象常量:規(guī)定的常數(shù)信號(hào):對(duì)應(yīng)物理設(shè)計(jì)中的硬件連線變量:局部數(shù)據(jù)的暫時(shí)緩存文件:作為參數(shù)向子函數(shù)傳遞對(duì)象的說明格式對(duì)象類型標(biāo)志符表:類型標(biāo)識(shí):表達(dá)式;例:CONSTANTWIDTH:INTEGER:=8;,13,常量,常量常量(Constant)是指在設(shè)計(jì)實(shí)體中不會(huì)發(fā)生改變的值常量的物理意義:通常代表硬件電路中的電源或地線。常量說明的一般格式:CONSTANT常量名:數(shù)據(jù)類型:=表達(dá)式;例如:CONSTANTpi:REAL:=3.14;CONSTANTVCC:REAL:=3.3;常量說明的位置:程序包、實(shí)體說明、結(jié)構(gòu)體的說明部分、進(jìn)程語句的說明部分。不同的說明部分具有不同的作用范圍。常常賦予的值與類型要一致,否則出錯(cuò)。例如:CONSTANTVCC:REAL:=”0101”;-這是錯(cuò)誤的,14,常量的作用范圍,常量的作用范圍與其定義的區(qū)域有關(guān)在程序包中說明的常量,可以由所含的任何實(shí)體、結(jié)構(gòu)體所引用在實(shí)體中說明的常量,只能被該實(shí)體的結(jié)構(gòu)體所引用在結(jié)構(gòu)體中說明的常量,只能被該結(jié)構(gòu)體內(nèi)部的語句所引用在進(jìn)程說明的常量,只能在本進(jìn)程中進(jìn)行引用,15,常量的應(yīng)用,模擬ROM定義一個(gè)常量型ARRAY給每一個(gè)元素賦值,16,VHDL語言的對(duì)象,信號(hào)(Signal)信號(hào)是內(nèi)部硬件連線的抽象表示,沒有方向說明。信號(hào)的物理意義:它表示硬件電路中的一條硬件連線。信號(hào)說明的一般格式:SIGNAL信號(hào)名,信號(hào)名:數(shù)據(jù)類型:=表達(dá)式;當(dāng)對(duì)信號(hào)進(jìn)行初始賦值時(shí),賦值符號(hào)為“:=”,但是當(dāng)在程序中進(jìn)行信號(hào)賦值時(shí),采用的賦值符號(hào)為“=”。例如:SIGNALaddress_bus:std_logic_vector(7DOWNTO0);SIGNALreset:std_logic:=1;,17,VHDL語言的對(duì)象,信號(hào)(Signal)當(dāng)對(duì)信號(hào)進(jìn)行初始賦值時(shí),賦值符號(hào)為“:=”,但是當(dāng)在程序中進(jìn)行信號(hào)賦值時(shí),采用的賦值符號(hào)為“=”。例如:SIGNALaddress_bus:std_logic_vector(7DOWNTO0);SIGNALreset:std_logic:=1;說明信號(hào)量時(shí)可以賦初值,也可以不賦初值。不賦初值時(shí),信號(hào)默認(rèn)取數(shù)據(jù)類型的最左邊的值或最小值。例如address_bus,沒有賦初值時(shí),其初始值為“UUUUUUUU”,18,VHDL語言的對(duì)象,信號(hào)(Signal)信號(hào)說明的位置:程序包、實(shí)體說明、結(jié)構(gòu)體說明部分信號(hào)可以作為結(jié)構(gòu)體中各進(jìn)程之間通信的手段信號(hào)的賦值被稱為帶入,它可以附加延時(shí)。例如:s1=s2after10ns;信號(hào)的帶入是不是立即發(fā)生的,19,信號(hào)的作用范圍,在程序包中說明的信號(hào),可以由所含的任何實(shí)體、結(jié)構(gòu)體所引用在實(shí)體中說明的信號(hào),只能在本設(shè)計(jì)的實(shí)體中使用在結(jié)構(gòu)體中說明的信號(hào),只能被該結(jié)構(gòu)體內(nèi)部的語句所引用,20,信號(hào)的應(yīng)用,不同設(shè)計(jì)單元之間的通信手段層次化設(shè)計(jì)中層次聯(lián)系的媒介解決設(shè)計(jì)難題的重要幫手!,21,VHDL語言的對(duì)象,變量(Variable)用于對(duì)暫時(shí)的數(shù)據(jù)進(jìn)行局部的存儲(chǔ),是一個(gè)局部變量。變量的物理意義:主要用于局部數(shù)據(jù)的暫時(shí)存儲(chǔ),是一種載體。變量說明的一般格式:VARIABLE變量名:數(shù)據(jù)類型約束條件:=表達(dá)式例如:VARIABLEcnt:integer:=0;VARIABLEcnt:integerRANGE1TO100:=1;,22,VHDL語言的對(duì)象,變量(Variable)變量的說明位置:進(jìn)程語句、函數(shù)語句、子程序語句變量不能用于硬件連線和存儲(chǔ)元件在系統(tǒng)綜合時(shí),變量用于計(jì)算,作為索引載體和數(shù)據(jù)的暫存進(jìn)程中的變量的作用范圍只在進(jìn)程內(nèi),若要將變量作用于進(jìn)程外,則必須將該變量賦給一個(gè)相同類型的信號(hào)。變量的賦值不能附加延時(shí)。,23,信號(hào)和變量的區(qū)別,信號(hào)賦值是有延時(shí)的,而變量的賦值沒有延時(shí)信號(hào)除當(dāng)前值外,還有歷史信息等其他信息;變量只有當(dāng)前信息進(jìn)程只對(duì)信號(hào)敏感,不對(duì)變量敏感信號(hào)可以是多個(gè)進(jìn)程的全局信號(hào),變量只能在一個(gè)進(jìn)程范圍內(nèi)。信號(hào)是硬件連線的抽象描述,變量無實(shí)際的對(duì)應(yīng)關(guān)系,通常用于計(jì)算變量的值可以傳給信號(hào),但信號(hào)不能傳給變量信號(hào)的代入符號(hào)(=)和變量的賦值符號(hào)(:=)不同。,24,信號(hào)和變量的區(qū)別,兩者的操作過程不同:SIGNALA,B,C,D:STD_LOGIC;PROCESS(A,B,C,D)BEGIND=A;X=B+D;D=C;Y=B+D;ENDPROCESS結(jié)果:X=B+C;Y=B+C;,PROCESS(A,B,C)VARIABLE:D:STD_LOGIC_VECTOR(3DOWNTO0);BEGIND:=A;X=B+D;D:=C;Y=B+D;ENDPROCESS結(jié)果:X=B+A;Y=B+C;,25,VHDL語言的對(duì)象,文件文件是一種傳輸大量數(shù)據(jù)的載體文件說明的格式如下所示:FILE文件名,文件名:文件類型is方向路徑;FILE用來聲明一個(gè)文件;文件類型用來指明文件是什么形式的文件;方向是一個(gè)可選項(xiàng),它用來表明文件是輸入文件還是輸出文件,分別用保留字“IN”和“OUT”來表示;路徑表達(dá)式的作用是指明文件的實(shí)際存儲(chǔ)位置。文件類型通常需要事先定義例:P59,VHDL語言的數(shù)據(jù)類型,27,VHDL語言的數(shù)據(jù)類型,VHDL語言要求為各種常量、變量、信號(hào)指定明確的數(shù)據(jù)類型一個(gè)對(duì)象只能具有一種數(shù)據(jù)類型;對(duì)某對(duì)象進(jìn)行操作的類型必須與該對(duì)象的數(shù)據(jù)類型相匹配;具有不同數(shù)據(jù)類型的對(duì)象之間不能直接進(jìn)行賦值操作。,28,VHDL語言的數(shù)據(jù)類型,標(biāo)準(zhǔn)定義的數(shù)據(jù)類型,29,VHDL語言的數(shù)據(jù)類型,常用的標(biāo)準(zhǔn)數(shù)據(jù)類型BIT/BIT_VECTOR布爾量:是一個(gè)二值枚舉類型,它和位類型不同,沒有數(shù)值的含義,不能進(jìn)行算術(shù)運(yùn)算,只能進(jìn)行關(guān)系運(yùn)算。整型范圍與補(bǔ)碼表示不同實(shí)現(xiàn)時(shí)用二進(jìn)制來表示,但不能看作位矢量,即不能對(duì)整型進(jìn)行邏輯運(yùn)算時(shí)間:物理類型的一種;一個(gè)完整的時(shí)間數(shù)據(jù)應(yīng)該包括數(shù)值和單位兩個(gè)部分;預(yù)定義的時(shí)間類型給出了7個(gè)時(shí)間單位:ps、ns、us、ms、sec、min、hr。時(shí)間類型常常用于仿真,而不用于邏輯綜合,30,VHDL語言的數(shù)據(jù)類型,用戶定義的數(shù)據(jù)類型用戶定義數(shù)據(jù)類型的書寫格式為:TYPE數(shù)據(jù)類型名,數(shù)據(jù)類型名,數(shù)據(jù)類型定義;用戶可以定義的數(shù)據(jù)類型有:枚舉類型(Enumeraterd)整數(shù)類型(Integer)實(shí)數(shù)(Real)、浮點(diǎn)(Floating)類型數(shù)組(Array)類型存取(Access)類型文件(Files)類型記錄(Record)類型時(shí)間(Time)類型,31,用戶定義的數(shù)據(jù)類型舉例,Type數(shù)據(jù)類型名is(元素,元素,);Typecoloris(blue,green,yellow,red);(2)Type數(shù)據(jù)類型名is數(shù)據(jù)類型定義范圍;Typesignal_levelisrange-10.00to+10.00;(3)Type數(shù)據(jù)類型名isarray范圍of原數(shù)據(jù)類型;Typewordisarray(31downto0)ofBIT;Type數(shù)據(jù)類型名稱isRecord元素名稱:數(shù)據(jù)類型名稱;元素名稱:數(shù)據(jù)類型名稱;EndRecord;,32,用戶定義的數(shù)據(jù)類型,可枚舉類型TYPE枚舉數(shù)據(jù)類型名IS(枚舉元素,枚舉元素,);對(duì)于有限狀態(tài)的編碼用二進(jìn)制表示時(shí)不直觀,此時(shí)應(yīng)該采用枚舉類型。例如:表示一周之內(nèi)每天的狀態(tài),這時(shí)可以定義一個(gè)名字為week的可枚舉類型,如下所示:TYPEweekIS(monday,tuesday,wednesday,thursday,friday,saturday,sunday);,33,用戶定義的數(shù)據(jù)類型,可枚舉類型可枚舉數(shù)據(jù)類型存在著這樣的順序關(guān)系:最左邊的值低于所有其它的值,最右邊的值大于所有其它的值,每一個(gè)值均大于其左邊數(shù)據(jù)值而低于其右邊數(shù)據(jù)值。例如:SIGNALtoday:week;Result=fridayELSE0;可枚舉類型的應(yīng)用將微處理器的全部指令表示成一個(gè)可枚舉類型對(duì)有限狀態(tài)機(jī)的全部狀態(tài)描述成一個(gè)可枚舉類型,34,用戶定義的數(shù)據(jù)類型,數(shù)組類型TYPE數(shù)組類型名ISARRAY約束范圍OF數(shù)組元素類型;示例:P64P65數(shù)組的賦值對(duì)整個(gè)數(shù)組進(jìn)行一次賦值按照下標(biāo)對(duì)每一個(gè)數(shù)組元素進(jìn)行賦值數(shù)組的引用引用整個(gè)數(shù)組引用數(shù)組元素,35,用戶定義的數(shù)據(jù)類型,子類型:基本類型的子集SUBTYPE子類型名IS基本數(shù)據(jù)類型名范圍限制;基本類型與子類型子類型的范圍要小于或等于基本類型的范圍子類型和基本類型還允許在兩種類型之間進(jìn)行賦值,子類型總可以對(duì)基本類型賦值;基本類型向子類型賦值,要看基本類型對(duì)象的值是否在子類型范圍之內(nèi),如果在范圍之內(nèi),則可以進(jìn)行賦值,否則不可以。TYPE定義的類型是一種全新的類型,36,VHDL語言的數(shù)據(jù)類型,常用的數(shù)據(jù)類型VHDL語言中經(jīng)常使用的數(shù)據(jù)類型是可枚舉類型STD_ULOGIC及其子類型STD_LOGIC。在IEEE1164標(biāo)準(zhǔn)的“STD_LOGIC_1164”程序包中,可枚舉類型STD_ULOGIC的定義格式如下:TYPEstd_ulogicIS(U,-初始態(tài)X,-不定狀態(tài)0,-低電平1,-高電平Z,-高阻W,-弱不定態(tài)L,-弱低電平H,-弱高電平-);-可忽略值,37,VHDL語言的數(shù)據(jù)類型,數(shù)據(jù)類型STD_LOGIC是可枚舉類型STD_ULOGIC的子類型,它的值與STD_ULOGIC的值相同,但它具有一個(gè)決斷函數(shù),稱為resolved。在IEEE1164標(biāo)準(zhǔn)的“STD_LOGIC_1164”程序包中,數(shù)據(jù)類型STD_LOGIC的類型定義如下:SUBTYPEstd_logicISresolvedstd_ulogic;此外,經(jīng)常使用的矢量類型bit_vector、std_ulogic_vector、std_logic_vector,它們?cè)贗EEE1076和IEEE1164標(biāo)準(zhǔn)的程序包中定義。,38,VHDL語言的數(shù)據(jù)類型,數(shù)據(jù)類型的限定有時(shí)候根據(jù)上下文能判斷出某一數(shù)據(jù)的類型,例如:signala:std_logic_vector(7downto0);ayy=”10111111”;,39,數(shù)據(jù)類型轉(zhuǎn)換,為了不同數(shù)據(jù)類型之間的運(yùn)算,必須將它們轉(zhuǎn)換成同一的數(shù)據(jù)類型。VHDL不同的程序包提供了轉(zhuǎn)換函數(shù)。,40,數(shù)據(jù)類型轉(zhuǎn)換舉例,dataout=(大于等于)操作結(jié)果為BOOLEAN型:TRUE或FALSE特別當(dāng)心“4,lpm_widths=2)PORTMAP(data=a,sel=sel,result=y);ENDbehavior;,64,實(shí)體說明(EntityDeclaration),描述一個(gè)設(shè)計(jì)的外貌,即定義對(duì)外的輸入輸出接口以及一些參數(shù)定義格式如下:ENTITY實(shí)體名ISGENERIC(類屬表);PORT(端口表);ENDENTITY實(shí)體名;,65,實(shí)體說明之類屬參數(shù)說明,為設(shè)計(jì)實(shí)體指定參數(shù),如用來定義端口寬度、器件延時(shí)參數(shù)等格式如下:GENERIC(CONSTANT參數(shù)名:數(shù)據(jù)類型:=靜態(tài)表達(dá)式,);例如:GENERIC(delay:time);表示參數(shù)名delay是時(shí)間類型的,在結(jié)構(gòu)體中將delay初始化成不同的數(shù)值從而滿足實(shí)際的需要。例如:GENERIC(n:INTEGER);表示參數(shù)名n是整數(shù)類型的,66,類屬參數(shù)說明實(shí)例,ENTITYex1ISGENERIC(wlength:integer:=8;alength:integer:=3);PORT(clk:INSTD_LOGIC;data:OUTSTD_LOGIC_VECTOR(wlength-1downto0);add:OUTSTD_LOGIC_VECTOR(alength-1downto0);ENDex1;,67,實(shí)體說明之PORT(端口)說明,對(duì)一個(gè)設(shè)計(jì)實(shí)體界面的說明及對(duì)設(shè)計(jì)實(shí)體與外部電路的接口通道的說明,包括對(duì)每一接口的輸入輸出模式和數(shù)據(jù)類型的定義。格式如下:PORT(端口名:端口模式數(shù)據(jù)類型;端口名:端口模式數(shù)據(jù)類型);端口名是設(shè)計(jì)者為實(shí)體的每一個(gè)對(duì)外通道所取的名字端口模式用于定義端口上數(shù)據(jù)的流動(dòng)方向和方式,68,端口模式,IN:IN定義的通道為單向只讀模式,規(guī)定數(shù)據(jù)只能通過此端口被讀入實(shí)體中。OUT:OUT定義的通道為單向輸出模式,規(guī)定數(shù)據(jù)只能通過此端口從實(shí)體向外流出,或者說可以將實(shí)體中的數(shù)據(jù)向此端口賦值。,69,端口模式,INOUT:定義端口為雙向(輸入輸出)即從端口的內(nèi)部看,可以對(duì)此端口進(jìn)行賦值,也可以通過此端口讀入外部的數(shù)據(jù)信息從端口的外部看,信號(hào)既可以從此端口流出,也可以向此端口輸入信號(hào),如RAM的數(shù)據(jù)端口,單片機(jī)的I/O口。在實(shí)際電路描述中,INOUT模式的正確使用還應(yīng)該考慮其它因素。建議少用INOUT模式定義雙向端口占用了更多的硬件資源有些開發(fā)環(huán)境并不支持該模式不要用該模式代替其它模式,70,端口模式,BUFFER:BUFFER的功能與INOUT類似,區(qū)別在于當(dāng)需要輸入數(shù)據(jù)時(shí),只允許內(nèi)部回讀輸出的信號(hào),即允許反饋。如計(jì)數(shù)器的設(shè)計(jì),可將計(jì)數(shù)器輸出的計(jì)數(shù)信號(hào)回讀,以作下一計(jì)數(shù)值的初值。與INOUT模式相比,BUFFER回讀(輸入)的信號(hào)不是由外部輸入的,而是由內(nèi)部產(chǎn)生,向外輸出的信號(hào)。,71,端口模式,LINKAGE:方向未定(即任何方向均可連接使用),72,關(guān)于信號(hào)方向,IN,IN,IN,OUT,BUFFER,INOUT,OUT,73,數(shù)據(jù)類型,VHDL作為一種強(qiáng)類型語言,任何一種數(shù)據(jù)對(duì)象(信號(hào)、變量、常數(shù))必須嚴(yán)格限定其取值范圍,即對(duì)其傳輸或存儲(chǔ)的數(shù)據(jù)類型作明確的界定。常見的數(shù)據(jù)類型主要有STD_LOGIC(標(biāo)準(zhǔn)邏輯位)、STD_LOGIC_vector(標(biāo)準(zhǔn)邏輯位向量)、BIT(邏輯位)、BIT_VECTOR(位向量)。BIT數(shù)據(jù)類型的信號(hào)規(guī)定的取值范圍是邏輯位1和0。在VHDL中,邏輯位0和1的表達(dá)必須加單引號(hào),否則VHDL綜合器將0和1解釋為整數(shù)數(shù)據(jù)類型INTEGER。,74,數(shù)據(jù)類型,BIT數(shù)據(jù)類型可以參與邏輯運(yùn)算或算術(shù)運(yùn)算,其結(jié)果仍是位的數(shù)據(jù)類型。VHDL綜合器用一個(gè)二進(jìn)制位表示BIT。BIT數(shù)據(jù)類型定義在VHDL標(biāo)準(zhǔn)程序包STANDARD中,而程序包STANDARD包含于VHDL標(biāo)準(zhǔn)庫STD中。這是系統(tǒng)默認(rèn)的庫。STD_LOGIC(標(biāo)準(zhǔn)邏輯位)、STD_LOGIC_vector(標(biāo)準(zhǔn)邏輯位向量)數(shù)據(jù)類型的定義包含在IEEE庫的包集合STD_LOGIC_1164中,因此需要用包集合的說明語句說明:USESTD_LOGIC_1164.ALL;,75,實(shí)體說明部分,實(shí)體說明部分放在端口說明部分的下面,主要作用是說明設(shè)計(jì)實(shí)體接口中的公共信息。例如,可以用來定義結(jié)構(gòu)體需要用到的新的數(shù)據(jù)類型、信號(hào)以及常量等。實(shí)體說明部分有時(shí)候還會(huì)包括斷言語句、過程調(diào)用語句和被動(dòng)進(jìn)程語句等并發(fā)語句。但是,這些語句不能包含信號(hào)賦值語句。,76,“實(shí)體說明”的幾點(diǎn)說明,以VHD為后綴名的文件名要求與實(shí)體名一致。端口定義的每一行以“;”結(jié)尾,但最后一行定義完后沒有分號(hào),分號(hào)在括號(hào)的外面。以“-”開始到本行結(jié)束為注釋行,77,“實(shí)體說明”舉例,觸發(fā)器的實(shí)體:ENTITYDFF1ISPORT(CLK:INSTD_LOGIC;D:INSTD_LOGIC;Q:OUTSTD_LOGIC);ENDDFF1;-87標(biāo)準(zhǔn),也可以寫成ENDENTITYDFF1,這是93標(biāo)準(zhǔn),78,“實(shí)體說明”舉例,3-8譯碼器的實(shí)體:ENTITYdecoderISPORT(datain:INSTD_LOGIC_VECTOR(2DOWNTO0);g1,g2a,g2b:INSTD_LOGIC;y:OUTSTD_LOGIC_vector(7downto0);ENDdecoder;,79,“實(shí)體說明”舉例,流水線加法器ENTITYadd_lpisGENERIC(WIDTH:integer:=15;WIDTH1:integer:=7;WIDTH2:integer:=8;ONE:integer:=1);PORT(x,y:INSTD_LOGIC_VECTOR(WIDTH-1DOWNTO0);sum:outSTD_LOGIC_VECTOR(WIDTH-1DOWNTO0);clk:INstd_logic);ENDENTITYadd_lp;,80,結(jié)構(gòu)體(ArchitectureBody),能被仿真的實(shí)體都包含有結(jié)構(gòu)體一個(gè)實(shí)體和其對(duì)應(yīng)的結(jié)構(gòu)體構(gòu)成一個(gè)完整的VHDL設(shè)計(jì),一個(gè)實(shí)體可以有多個(gè)結(jié)構(gòu)體。不同的結(jié)構(gòu)體可以采用不同的描述方式結(jié)構(gòu)體的命名只要符合標(biāo)識(shí)符的規(guī)定就可以。但是結(jié)構(gòu)體一般采用行為/寄存器/結(jié)構(gòu)描述方式,因此按照見名知義的要求,其名字一般為behave/rtl/structure。,81,結(jié)構(gòu)體(ArchitectureBody),結(jié)構(gòu)體一般包括聲明區(qū)(Declarations)和并發(fā)語句區(qū)兩個(gè)部分組成。聲明區(qū)用于聲明該結(jié)構(gòu)體內(nèi)使用的類型、常數(shù)、元件、子程序等。并發(fā)語句區(qū)用來描述結(jié)構(gòu)體的行為和連接關(guān)系。并發(fā)語句的類型主要有塊語句、進(jìn)程語句、信號(hào)賦值、子程序調(diào)用、元件例化語句。結(jié)構(gòu)體部分包含了VHDL的很多元素,掌握好它們是靈活應(yīng)用VHDL的關(guān)鍵。,82,結(jié)構(gòu)體的一般形式,ARCHITECTUREOFIS-聲明區(qū),聲明結(jié)構(gòu)體內(nèi)所用的內(nèi)部信號(hào)及數(shù)據(jù)類型-若使用元件例化,則聲明所用的元件BEGIN-CONCURRENTSIGNALASSIGNMENTS;-PROCESS;-COMPONENTINSTANTIATIONS;END;,83,Tips,實(shí)體和結(jié)構(gòu)體分別是以“ENDENTITYxxx;”和“ENDARCHITECTURExx;”語句結(jié)尾的,這是符合VHDL的IEEESTD1076_1993版的語法要求的。若根據(jù)VHDL87版本,IEEESTD1076_1987的語法要求,這兩條結(jié)尾語句只需寫成“END;”和“ENDxx;”。但考慮到目前絕大多數(shù)常用的EDA工具中的VHDL綜合器都兼容兩種VHDL版本的語法規(guī)則,且許多最新的VHDL方面的資料,仍然使用VHDL87版本語言規(guī)則。,84,結(jié)構(gòu)體舉例十進(jìn)制計(jì)數(shù)器,ARCHITECTUREBEHAVEOFCOUNTERISSIGNALCNTSTD_LOGIC_VECTOR(3DOWNTO0);BEGINPROCESS(CLK)BENGINIF(RISING_EDGE(CLK)IF(CNT=”1001”)THENCNT=”0000”;ELSECNT=CNT+1;ENDIF;ENDIF;ENDPROCESS;ENDBEHAVE;,85,結(jié)構(gòu)體舉例二選一電路,二選一電路mux21a的實(shí)體和結(jié)構(gòu)體如下面的圖所示。,86,結(jié)構(gòu)體舉例二選一電路,ENTITYmux21aISPORT(a,b:INBIT;s:INBIT;y:OUTBIT);ENDENTITYmux21a;ARCHITECTURESTRUCTUREOFmux21aISSIGNALd,e:BIT;BEGINd=aAND(NOTS);eRETURN0;WHENZ=RETURNZ;ENDCASE;ENDinvert;ENDlogic;,90,創(chuàng)建用戶自己的程序包,3.使用程序包用USE語句使得unknown_value和invert對(duì)實(shí)體說明成為可見:USELogic.three_level_logic.unknown_value;USELogic.three_level_logic.invert;或者使用關(guān)鍵字ALL,使得程序包中的所有元素可見:USELogic.ALL;,91,常見的程序包,(1)程序包standard(2)程序包textio(3)程序包std_logic_1164(4)程序包numeric_std(5)程序包numeric_bit(6)std_logic_arith(7)std_logic_unsigned,92,配置(Configuration),描述層與層之間的連接關(guān)系以及實(shí)體與結(jié)構(gòu)體之間的連接關(guān)系格式如下:CONFIGURATION配置名OF實(shí)體名IS語句說明(選配的結(jié)構(gòu)體名)END配置名,VHDL語言的描述語句,94,描述語句的種類,并發(fā)描述語句并發(fā)語句用來描述各模型算法之間的連接關(guān)系根據(jù)信號(hào)發(fā)生變化的順序執(zhí)行順序描述語句語句按照出現(xiàn)的先后順序依次執(zhí)行,95,并發(fā)語句,實(shí)際的數(shù)字電路、數(shù)字系統(tǒng)中,許多操作是并發(fā)執(zhí)行的;VHDL作為一種廣泛使用的硬件描述語言,應(yīng)該能夠描述數(shù)字系統(tǒng)中的各種操作和行為;為了描述數(shù)字系統(tǒng)中的這種并發(fā)操作,VHDL提供了并行語句;VHDL的結(jié)構(gòu)體由一個(gè)或者多個(gè)并行語句構(gòu)成;并行語句的書寫順序不代表它們的執(zhí)行順序;并行語句的執(zhí)行順序由它們的觸發(fā)事件來決定。,96,并發(fā)描述語句,ARCHITECTURE結(jié)構(gòu)體名OF實(shí)體名IS-說明語句BEGIN-并發(fā)語句ENDARCHITECTURE結(jié)構(gòu)體名,97,并發(fā)描述語句,進(jìn)程(Process)語句并發(fā)信號(hào)代入(ConcurrentSignalAssignment)語句條件信號(hào)代入(ConditionalSignalAssignment)語句選擇信號(hào)代入(SelectiveSignalAssignment)語句并發(fā)過程調(diào)用(Concurrent)語句塊(Block)語句Generate語句Component語句,98,進(jìn)程語句,VHDL中最重要、使用最頻繁的結(jié)構(gòu)體描述語句進(jìn)程與進(jìn)程之間是并行關(guān)系;進(jìn)程定義了一組連續(xù)執(zhí)行的順序語句;結(jié)構(gòu)體的進(jìn)程模型:,99,進(jìn)程語句,對(duì)一個(gè)數(shù)字系統(tǒng)進(jìn)行系統(tǒng)建模時(shí),通常將數(shù)字系統(tǒng)描述成一個(gè)并發(fā)執(zhí)行的多個(gè)進(jìn)程所構(gòu)成的網(wǎng)絡(luò)模型;構(gòu)成網(wǎng)絡(luò)模型的各個(gè)進(jìn)程的執(zhí)行是并發(fā)的,而進(jìn)程內(nèi)部的各個(gè)語句則是順序執(zhí)行的;各個(gè)進(jìn)程之間通過信號(hào)或共享變量進(jìn)行通信。,一個(gè)結(jié)構(gòu)體可以有多個(gè)進(jìn)程進(jìn)程之間是并發(fā)執(zhí)行的進(jìn)程之間通過信號(hào)進(jìn)行通信,100,進(jìn)程(Process),進(jìn)程(Process)語句的格式:進(jìn)程名:Process(信號(hào)1,信號(hào)2,)Begin-順序執(zhí)行語句;endprocess進(jìn)程名;,101,進(jìn)程語句,敏感信號(hào)量表敏感信號(hào)是指那些值發(fā)生改變后能夠引起進(jìn)程語句執(zhí)行的信號(hào)??梢允禽斎胄盘?hào)或是信號(hào)量任意敏感信號(hào)發(fā)生改變,PROCESS就會(huì)執(zhí)行一遍進(jìn)程的運(yùn)行依賴于敏感表或WAIT參數(shù)的變化隱含信號(hào)量表PROCESS后括號(hào)中的信號(hào)量表顯式敏感信號(hào)在PROCESS中的WAIT語句一個(gè)進(jìn)程中不能既有敏感表又有WAIT語句,102,進(jìn)程(Process)示例,隱含敏感信號(hào)p1:process(a,b)Beginand2=aandb;endprocessp1;,顯式敏感信號(hào)p1:processBeginand2=aandb;waitona,b;endprocessp1;,103,Entitytest1isport(clk,d,reset:inbit;q:outbit);endtest1;,architecturetest1_bodyoftest1isBeginprocess(clk,d,reset)beginif(reset=1)thenq=0;elsif(clk=1)thenq=d;endif;endprocess;endtest1_body;,進(jìn)程語句示例,104,進(jìn)程語句示例,Entitytest1isport(clk,d,reset:inbit;q:outbit);endtest1;,architecturetest1_bodyoftest1isbeginprocess(clk)beginif(reset=1)thenq=0;elsif(clk=1)thenq=d;endif;endprocess;endtest1_body;,105,進(jìn)程內(nèi)部的語句是順序執(zhí)行的,Process(sel,a,b)Beginf=a;Ifsel=1thenf=b;endif;Endprocess;,Process(sel,a,b)BeginIfsel=1thenf=b;endif;f=a;Endprocess;,結(jié)果f總是等于a,106,并發(fā)信號(hào)代入語句,處于結(jié)構(gòu)體之中但在進(jìn)程語句之外格式:賦值目標(biāo)=表達(dá)式;“=”稱為信號(hào)帶入操作符并發(fā)信號(hào)代入語句是靠事件來驅(qū)動(dòng)的,因此對(duì)于并發(fā)信號(hào)代入語句來說,只有當(dāng)賦值符號(hào)“=”右邊的對(duì)象上有事件發(fā)生時(shí)才會(huì)執(zhí)行該語句。,107,并發(fā)信號(hào)代入語句,例如ARCHITECTUREDEPICTOFMYDESISBEGINSUM=AXORB;CARRIER=AANDB;END,108,條件信號(hào)代入(ConditionalSignalAssignment)語句,條件信號(hào)代入(ConditionalSignalAssignment)語句的格式如下:目的信號(hào)量=表達(dá)式1when條件1else表達(dá)式2when條件2else表達(dá)式n-1when條件n-1else表達(dá)式n;,109,條件信號(hào)代入,Entitytest1isport(in1,in2,in3,in4:inbit;sel1,sel2:inbit;d:outbit);endtest1;architecturetest1_bodyoftest1isbegind=in1whensel1=0andsel2=0elsein2whensel1=0andsel2=1elsein3whensel1=1andsel2=0elsein4;endtest1_body;,110,選擇信號(hào)代入(SelectiveSignalAssignment)語句,With表達(dá)式select目標(biāo)信號(hào)量=表達(dá)式1when條件1,表達(dá)式2when條件2,表達(dá)式nwhen條件n;,111,選擇信號(hào)代入,Entitytest1isport(in1,in2,in3,in4:inbit;sel:ininteger;out1:outbit);endtest1;architecturetest1_bodyoftest1isbeginwithselselectout1=in1when0;in2when1;in3when2;in4when3;endtest1_body;,112,Component語句,如果已經(jīng)在VHDL語言某個(gè)模塊中定義了邏輯電路后,就可以在其他的模塊中調(diào)用該邏輯電路,將此稱之為設(shè)計(jì)元件模塊化。調(diào)用工作庫中不存在的元件的步驟元件的創(chuàng)建引用元件元件說明元件例化,113,元件的創(chuàng)建,創(chuàng)建就是完整的描述一個(gè)電路*.VHD例如:LIBRARYieee;USEieee.std_logic_1164.all;ENTITYhalf_adderISPORT(a,b:INSTD_LOGIC;sum:OUTSTD_LOGIC;c:OUTSTD_LOGIC);ENDENTITYhalf_adder;ARCHITECTUREdepictOFhalf_adderISBEGINsumdin2,c=dout);,118,COMPONENT示例,P103結(jié)構(gòu)體中的元件聲明結(jié)構(gòu)體中的元件例化U1:half_adderPORTMAP(ain,bin,sout1,cout1);U2:half_adderPORTMAP(sout1,cin,sumout,cout2);U3:or_gatePORTMAP(a=cout1,b=cout2,c=cout);,119,順序描述語句,順序語句按照出現(xiàn)的順序依次執(zhí)行出現(xiàn)的位置:進(jìn)程或子結(jié)構(gòu)內(nèi)部順序語句:WAIT語句變量賦值語句信號(hào)代入語句IF語句Case語句Loop語句Next語句Exit語句斷言語句NULL語句,120,WAIT語句,可以顯式地說明敏感信號(hào)(區(qū)別于進(jìn)程隱式地說明敏感信號(hào))WAIT語句可以以多條件的形式出現(xiàn)。其效果等同于各件的“或”,即只要有任何一個(gè)條件滿足,就結(jié)束等待,轉(zhuǎn)而執(zhí)行WAIT語句下面的一條語句。示例:WAITONclk,reset;,121,WAIT語句,122,變量賦值語句,變量只能在進(jìn)程或子結(jié)構(gòu)中使用,其作用域不能到進(jìn)程或子結(jié)構(gòu)之外。變量賦值語句的格式為:目標(biāo)變量:=表達(dá)式;,123,信號(hào)代入語句,信號(hào)代入語句出現(xiàn)在進(jìn)程或子程序中時(shí)是作為順序語句來使用信號(hào)代入語句出現(xiàn)在進(jìn)程外或BLOCK塊內(nèi)作為并發(fā)語句來使用信號(hào)代入語句的格式為:目的信號(hào)量=表達(dá)式;,124,“:=”與“=”的差別,操作對(duì)象的差別:變量/信號(hào)量作用范圍的差別:進(jìn)程/子結(jié)構(gòu)內(nèi)部結(jié)構(gòu)體內(nèi)部、進(jìn)程/子結(jié)構(gòu)之間作用時(shí)效的差別變量一經(jīng)賦值,則馬上有效;信號(hào)代入的執(zhí)行和信號(hào)值的更新之間至少有延遲,只有延遲過后信號(hào)才能得到新值,否則保持原值。示例:P88,125,IF語句,If條件then順序語句;Else順序語句;Endif;,If條件then順序語句;Elsif條件then順序語句;Elsif條件then順序語句;Else順序語句;Endif;,If條件then順序語句;Endif;,126,IF語句,IFTHEN語句經(jīng)常用來描述具有控制端口的硬件電路以及對(duì)時(shí)鐘的邊沿判斷。IFTHENELSE語句經(jīng)常用來描述具有兩條不同功能分支的硬件電路,如二選一電路、三態(tài)門電路等。IFTHENELSIFELSE語句經(jīng)常用來描述具有多控制條件的硬件電路。由于順序語句順序執(zhí)行的特點(diǎn),其條件判斷就形成了前后的優(yōu)先級(jí)。,127,IF語句,單分支示例電平敏感D鎖存器PROCESS(clk,d)BEGINIF(clk=1)THENq=d;ENDIF;ENFPROCESS;,128,IF語句,雙分支示例二選一電路(P89)多分支電路優(yōu)先編碼器(P90)似乎很簡單,接著往下看,129,實(shí)例分析,假設(shè),要描述一個(gè)與門電路:有很多種描述方法。,130,方法1:直接信號(hào)賦值,在結(jié)構(gòu)體內(nèi),很直觀地直接進(jìn)行賦值:ArchitecturebehavofAnd2isBeginy=aandb;Endbehav;,131,方法2:進(jìn)程直接信號(hào)賦值,這種方法直接等效于方法1。注意要將a和b都加入敏感信號(hào)表。ArchitecturebehavofAnd2isBeginprocess(a,b)beginy=aandb;endprocess;Endbehav;,132,方法3:進(jìn)程if條件賦值,經(jīng)過分析發(fā)現(xiàn),只有a和b都為1的時(shí)候,y才會(huì)輸出1,其它情況下y為0。所以描述如下:ArchitecturebehavofAnd2isBeginprocess(a,b)beginif(a=1andb=1)theny=1;endif;endprocess;Endbehav;,這個(gè)描述是錯(cuò)誤的,為什么?,133,方法4:進(jìn)程if條件賦值,經(jīng)過分析發(fā)現(xiàn),a=1時(shí),y會(huì)跟蹤b的變化,即y順序語句;WHENOTHERS=順序語句;ENDCASE;,注意,case的分支必須包含表達(dá)式的所有取值。所以一般最后一個(gè)分支往往用others來包含。,136,CASE語句,所有選擇條件必須被列舉在WHEN語句中不能有相同的選擇項(xiàng)如果CASE語句中的表達(dá)式包含多個(gè)值,可以使用OTHERS來表示所有具有相同操作的選擇。保留字OTHERS必須放在最后面。,137,CASE語句和IF語句的比較,CASE語句和IF語句都可以完成多選擇控制,但是在功能上還是有所區(qū)別的。1、在IF語句中,多條件是有優(yōu)先級(jí)的??偸窍忍幚碜钇鹗嫉臈l件,如果不滿足再依次處理后面的條件;在CASE語句里所有條件是并行處理的,不存在優(yōu)先級(jí)關(guān)系。2、CASE語句應(yīng)將表達(dá)式的所有可能值全部列出來,否則在語法認(rèn)為是錯(cuò)的。CASE語句中的WHENOTHERS,即可以使它包含表達(dá)式的所有缺省值。,138,由于CASE語句和IF的特點(diǎn),它們?cè)谀承﹫?chǎng)合下是可以互換的,例如38譯碼器的例子。但是對(duì)于下面這個(gè)例子就不能使用CASE語句。例:,CASE語句和IF語句的比較,139,上表是一個(gè)優(yōu)先級(jí)編碼器的真值表,4個(gè)輸入之間優(yōu)先級(jí)的大小關(guān)系是b0b1b2b3,即當(dāng)b0、b1同為0時(shí),輸出編碼為00。換言之,當(dāng)b00時(shí),其余3個(gè)輸入任意值該編碼器的輸出均為”00“。因?yàn)镃ASE語句沒有對(duì)輸入為任意的表示法,故不能使用下面的語句:即:WHEN“XX01“=y=“01”是錯(cuò)誤的。所以要正確描述輸入之間的這種優(yōu)先級(jí)關(guān)系就應(yīng)選用IF語句。,CASE語句和IF語句的比較,140,LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYencoderISPORT(input:INSTD_LOGIC_VECTOR(3DOWNTO0);y:OUTSTD_LOGIC_VECTOR(1DOWNTO0);ENDencoder;ARCHITECTURErtlOFencoderISBEGINPROCESS(input)BEGINIF(input(0)=0)theny=“00”;ELSIF(input(1)=0)theny=“01”;ELSIF(input(2)=0)thenytmp:=regaORregb;WHEN“110”=tmp:=NOTrega;WHENOTHERS=NULL;ENDCASE;,145,屬性語句,屬性是指關(guān)于設(shè)計(jì)實(shí)體、結(jié)構(gòu)體、類型、信號(hào)等項(xiàng)目的指定特征。通過屬性描述語句可以得到相關(guān)對(duì)象(Objects)的值、功能、類型和范圍屬性分為數(shù)值、函數(shù)、信號(hào)、數(shù)據(jù)類型和數(shù)據(jù)范圍等幾類綜合器支持的屬性有:LEFT、RIGHT、HIGH、LOW、RANGE、REVERSRANGE、LENGTH、EVENT及STABLE。,146,值類屬性,常用數(shù)據(jù)類型的值類屬性left:返回一個(gè)數(shù)據(jù)類型或子類型最左邊的值;right:返回一個(gè)數(shù)據(jù)類型或子類型最右邊的值;high:返回一個(gè)數(shù)據(jù)類型或子類型的最大值;low:返回一個(gè)數(shù)據(jù)類型或子類型的最小值。數(shù)組的值類屬性length:返回限定性數(shù)組的長度值,即數(shù)組中元素的個(gè)數(shù)。,147,函數(shù)類屬性,信號(hào)屬性函數(shù)(1)信號(hào)event:函數(shù)的返回值為“true”或“false”。信號(hào)事件有無發(fā)生。(2)信號(hào)active:函數(shù)的返回值為“true”或“false。信號(hào)活躍/不活躍。(3)信號(hào)last_event:即返回該信號(hào)從前一個(gè)事件發(fā)生到現(xiàn)在時(shí)刻所經(jīng)歷的時(shí)間值。(4)信號(hào)last_value:返回該信號(hào)在最近一個(gè)事件發(fā)生以前的值。(5)信號(hào)last_active:返回該信號(hào)從前一次信號(hào)活躍到現(xiàn)在時(shí)刻所經(jīng)歷的時(shí)間值。,148,函數(shù)類屬性,上升沿:clkeventANDclk1AND(clklast_value0)if(rising_edge(clk)then下降沿:clkeventANDclk0AND(clklast_value1)if(falling_edge(clk)then,149,信號(hào)類屬性,常用的信號(hào)屬性:delayed(t)stable(t)以下兩語句的功能是一樣的。(NOTclockSTABLEANDclock=1)(clockEVENTANDclock=1),150,數(shù)據(jù)范圍類屬性,數(shù)據(jù)范圍類屬性用來返回?cái)?shù)據(jù)的區(qū)間范圍,要求數(shù)據(jù)類型必須是限定性數(shù)組。數(shù)據(jù)范圍類屬性包括兩種:數(shù)組RANGE(n):得到索引號(hào)為n的區(qū)間范圍;數(shù)組REVERSE_RANGE(n):得到索引號(hào)為n的區(qū)間的逆序范圍。例:.SIGNALrange1:INSTDLOGICVECTOR(0TO7);.FORiINrange1RANGELOOP.,151,總結(jié),并發(fā)/順序語句有各自的應(yīng)用場(chǎng)合,兩者不能混用變量賦值“:=”變量只能出現(xiàn)在進(jìn)程內(nèi)部,故為順序語句信號(hào)賦值“=”在結(jié)構(gòu)體中但在進(jìn)程之外的,則為并發(fā)信號(hào)帶入語句;在進(jìn)程內(nèi)的則為順序信號(hào)帶入語句。,VHDL語言的子結(jié)構(gòu),153,VHDL語言的子結(jié)構(gòu),子結(jié)構(gòu)由若干語句組成,用以完成特定的功能,常常用于計(jì)算數(shù)值或描述算法。子結(jié)構(gòu)不是一個(gè)獨(dú)立的編譯單位,可以放置在實(shí)體或程序包中,以便被不同的對(duì)象引用。常見的子結(jié)構(gòu)塊語句(BLOCK)進(jìn)程語句過程函數(shù)等,154,函數(shù)FUNCTION,簡化在程序編寫過程中經(jīng)常遇到的問題。函數(shù)易于重用和共享,程序結(jié)構(gòu)清楚。函數(shù)定義的語法格式如下:FUNCTION函數(shù)名輸入?yún)?shù)列表RETURN數(shù)據(jù)類型IS函數(shù)聲明部分BEGIN(函數(shù)描述部分)END函數(shù)名;,155,函數(shù)FUNCTION,函數(shù)的輸入?yún)?shù)是任意的函數(shù)的返回值通常只有一個(gè)函數(shù)的使用函數(shù)的創(chuàng)建:可以在直接在結(jié)構(gòu)體中定義,也可以在實(shí)體部分定義,也可以在包集合中定義函數(shù)的調(diào)用:與高級(jí)語言中調(diào)用函數(shù)類似示例:P113P115,156,過程PROCEDURE,過程與函數(shù)類似,主要差別是過程可以返回多個(gè)值,函數(shù)只能返回一個(gè)值。過程的使用包括兩個(gè)步驟過程的定義過程的調(diào)用示例:P113P115,157,VHDL語言中的重載,重載就是指同樣名稱的子程序可以用不同類型的數(shù)據(jù)作為子程序參數(shù)而定義多次。經(jīng)常使用的重載:子程序重載:子程序重載允許子程序使用不同數(shù)據(jù)類型的參數(shù);運(yùn)算符重載:而運(yùn)算符重載允許對(duì)不同類型的數(shù)據(jù)進(jìn)行相同的運(yùn)算操作。,158,子程序重載,子程序調(diào)用由下列條件決定的:子程序調(diào)用過程中參數(shù)的數(shù)據(jù)類型;子程序調(diào)用過程中參數(shù)的數(shù)目;子程序?yàn)楹瘮?shù)時(shí)返回值的類型。子程序參數(shù)類型的重載具有相同名字的子程序的參數(shù)的數(shù)據(jù)類型不同示例:P118P120/庫的定義/重載/數(shù)據(jù)類型子程序參數(shù)數(shù)目的重載具有相同名字的子程序具有不同數(shù)目的參數(shù),159,運(yùn)算符重載,運(yùn)算符重載允許運(yùn)算符函數(shù)對(duì)各種數(shù)據(jù)類型的參數(shù)進(jìn)行操作運(yùn)算符重載是解決不同數(shù)據(jù)類型或多種數(shù)據(jù)類型的信號(hào)操作的有效手段示例:P120P121,VHDL的描述方式,161,VHDL的描述方式,常用的幾種描述方式(1)BEHAVIOR描述方式(2)STRUCTURAL描述方式(3)數(shù)據(jù)流描述方式說明RTL/STRUCTURAL描述方式的VHDL語言能夠進(jìn)行邏輯綜合,而采用BEHAVIOR描述方式的VHDL語言大部分只能用于系統(tǒng)仿真、只有少數(shù)可以進(jìn)行邏輯綜合。,162,BEHAVIOR描述方式,行為描述是高層次描述方式,它只描述輸入與輸出之間的邏輯轉(zhuǎn)換關(guān)系是對(duì)系統(tǒng)數(shù)學(xué)模型的描述,對(duì)設(shè)計(jì)實(shí)體的描述按照算法的路徑來進(jìn)行對(duì)實(shí)體行為的抽象描述,而不是對(duì)具體的器件描述,即定義整體功能把設(shè)計(jì)處理成為一個(gè)或多個(gè)黑盒子,并帶有一組特定的輸入輸出、一組在時(shí)間上依據(jù)輸入條件描述每組輸出行為的函數(shù)。行為描述除了說明功能外還包括接口描述和對(duì)設(shè)計(jì)施加的約束描述。,163,BEHAVIOR描述方式,行為級(jí)的抽象程度比寄存器傳輸級(jí)和結(jié)構(gòu)級(jí)高。程序中大量采用了算術(shù)運(yùn)算、關(guān)系運(yùn)算、慣性延時(shí)、傳輸延時(shí)等難于進(jìn)行邏輯綜合和不能進(jìn)行邏輯綜合的VHDL語句。采用行為描述方式的VHDL語言程序主要用于系統(tǒng)數(shù)學(xué)模型的仿真或系統(tǒng)工作原理的仿真。描述系統(tǒng)行為的方法:電路級(jí)的轉(zhuǎn)移函數(shù)邏輯級(jí)/功能級(jí)的布爾表達(dá)式時(shí)序圖狀態(tài)圖,164,VHDL語言中提供的系統(tǒng)行為描述語句,(a)功能性描述:不對(duì)應(yīng)實(shí)際的電路,只是從功能上描述了系統(tǒng)示例:Architecturebehavioralofeqcomp4isbegincomp:process(a,b)beginifa=bthenequal=1;elseequal=0;endif;endprocesscomp;endbehavioral;,高層次的功能描述,不必考慮在具體電路是怎樣實(shí)現(xiàn)的。,165,VHDL語言中提供的系統(tǒng)行為描述語句,(b)延時(shí)語句延時(shí)分為兩類:慣性延時(shí)和傳輸延時(shí)慣性延時(shí)是指器件或系統(tǒng)的輸出信號(hào)發(fā)生變化時(shí)是必須經(jīng)過一段時(shí)間。慣性延時(shí)的一個(gè)重要特點(diǎn):當(dāng)信號(hào)變化的周期小于慣性延時(shí)的時(shí)候,其輸出將保持不變。慣性延時(shí)只有在行為仿真時(shí)才有意義,邏輯綜合時(shí)被忽略。例如:b=aAFTER10ns;傳輸延時(shí)是指?jìng)鬏數(shù)穆窂窖訒r(shí)。常用于描述總線、連接線以及ASIC芯片的路徑延時(shí)。例如:b=TRANSPORTaAFTER
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 【正版授權(quán)】 IEC TS 62443-6-2:2025 EN Security for industrial automation and control systems - Part 6-2: Security evaluation methodology for IEC 62443-4-2
- 個(gè)人雇傭鐘點(diǎn)工勞務(wù)合同
- 文化創(chuàng)意產(chǎn)業(yè)數(shù)字化升級(jí)投資合同
- 信息安全保障服務(wù)合同
- 個(gè)人收入證明收入證明協(xié)議年
- 設(shè)備材料買賣合同
- 智能車輛研發(fā)合作協(xié)議
- 青島二手房買賣合同的
- 爆破工程承包合同與爆破承包合同
- 裝飾材料購銷合同
- 2025年上半年天津市寧河區(qū)事業(yè)單位招聘12人重點(diǎn)基礎(chǔ)提升(共500題)附帶答案詳解
- 急危重癥患者優(yōu)先處置制度與流程
- 幼兒園家委會(huì)后勤安全工作
- (新版)廣電全媒體運(yùn)營師資格認(rèn)證考試復(fù)習(xí)題庫(含答案)
- 保安員資格考試復(fù)習(xí)題庫及答案(800題)
- 2024年低空智聯(lián)網(wǎng)發(fā)展研究報(bào)告
- 胸腔鏡肺癌根治術(shù)手術(shù)配合
- 初二地理會(huì)考復(fù)習(xí)教案
- 銀行營銷術(shù)語演練
- 工藝品雕刻工國家職業(yè)標(biāo)準(zhǔn)(2024版)
- 胃管的觀察與護(hù)理
評(píng)論
0/150
提交評(píng)論