




已閱讀5頁,還剩181頁未讀, 繼續(xù)免費閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領
文檔簡介
VHDL語言,1,主要內(nèi)容,VHDL的元素VHDL語言程序的結(jié)構(gòu)VHDL的描述語句VHDL語言的描述方式深入掌握與應用VHDL語言,VHDL的元素,3,VHDL的元素,(1)VHDL語言的詞法和標識符(2)VHDL語言的對象(3)VHDL語言的數(shù)據(jù)類型(4)VHDL語言的運算符,VHDL語言的詞法和標識符,5,詞法和標識符,短標識符VHDL-93接收了VHDL-87關(guān)于標識符的全部標準,VHDL-87標準中的標識符稱為短標識符,VHDL-93標準中的標識符稱為擴展標識符。短標識符的組成:英文字母、數(shù)字、下劃線短標識符的開始:必須以英文字母開始短標識符不敏感大小寫短標識符的最后一個字符不能是下劃線下劃線不能連續(xù)出現(xiàn)不能采用保留字作為短標識符,6,詞法和標識符,擴展標識符擴展標識符用反斜杠來界定,例如:data_bus擴展標識符的兩個反斜杠之間可以使用保留字。ENTITY擴展標識符區(qū)分大小寫擴展標識符允許下劃線連續(xù)使用同名的擴展標識符和短標識符是不一樣的。例如:data_bus和data_bus不一樣,7,詞法和標識符,注釋以“-”開始直到本行結(jié)束的一段文字注釋不會被編譯注釋起到對程序說明和解釋。程序應該包括充分的注釋,8,詞法和標識符,數(shù)字VHDL語言中數(shù)字的表示方法:十進制/二進制/十六進制/整數(shù)/實數(shù)相鄰兩個數(shù)字之間插入下劃線、在數(shù)字之前添加若干個0對數(shù)字無影響,但任何位置插入空格會改變數(shù)字。例如:123_456等價與123456001234等價與1234123456不表示123456,9,詞法和標識符,字符和字符串字符是用單引號括起來的ASCII碼,VHDL敏感字符的大小寫。例如:A與a是不同的。字符串是用雙引號括起來的字符序列。字符和字符串不能混為一談?!盿”和a是不同的。,10,詞法和標識符,位串位串是用雙引號括起來的數(shù)字序列,并在數(shù)字序列前加上一個基數(shù)說明符。例如:B”00111111”表示二進制數(shù),只有二進制數(shù)才能將基數(shù)說明符省略。X”3F”表示十六進制數(shù)。,VHDL語言的對象,12,VHDL語言的對象,在VHDL語言中,凡可被賦予一個值的客體就是數(shù)據(jù)對象常量:規(guī)定的常數(shù)信號:對應物理設計中的硬件連線變量:局部數(shù)據(jù)的暫時緩存文件:作為參數(shù)向子函數(shù)傳遞對象的說明格式對象類型標志符表:類型標識:表達式;例:CONSTANTWIDTH:INTEGER:=8;,13,常量,常量常量(Constant)是指在設計實體中不會發(fā)生改變的值常量的物理意義:通常代表硬件電路中的電源或地線。常量說明的一般格式:CONSTANT常量名:數(shù)據(jù)類型:=表達式;例如:CONSTANTpi:REAL:=3.14;CONSTANTVCC:REAL:=3.3;常量說明的位置:程序包、實體說明、結(jié)構(gòu)體的說明部分、進程語句的說明部分。不同的說明部分具有不同的作用范圍。常常賦予的值與類型要一致,否則出錯。例如:CONSTANTVCC:REAL:=”0101”;-這是錯誤的,14,常量的作用范圍,常量的作用范圍與其定義的區(qū)域有關(guān)在程序包中說明的常量,可以由所含的任何實體、結(jié)構(gòu)體所引用在實體中說明的常量,只能被該實體的結(jié)構(gòu)體所引用在結(jié)構(gòu)體中說明的常量,只能被該結(jié)構(gòu)體內(nèi)部的語句所引用在進程說明的常量,只能在本進程中進行引用,15,常量的應用,模擬ROM定義一個常量型ARRAY給每一個元素賦值,16,VHDL語言的對象,信號(Signal)信號是內(nèi)部硬件連線的抽象表示,沒有方向說明。信號的物理意義:它表示硬件電路中的一條硬件連線。信號說明的一般格式:SIGNAL信號名,信號名:數(shù)據(jù)類型:=表達式;當對信號進行初始賦值時,賦值符號為“:=”,但是當在程序中進行信號賦值時,采用的賦值符號為“=”。例如:SIGNALaddress_bus:std_logic_vector(7DOWNTO0);SIGNALreset:std_logic:=1;,17,VHDL語言的對象,信號(Signal)當對信號進行初始賦值時,賦值符號為“:=”,但是當在程序中進行信號賦值時,采用的賦值符號為“=”。例如:SIGNALaddress_bus:std_logic_vector(7DOWNTO0);SIGNALreset:std_logic:=1;說明信號量時可以賦初值,也可以不賦初值。不賦初值時,信號默認取數(shù)據(jù)類型的最左邊的值或最小值。例如address_bus,沒有賦初值時,其初始值為“UUUUUUUU”,18,VHDL語言的對象,信號(Signal)信號說明的位置:程序包、實體說明、結(jié)構(gòu)體說明部分信號可以作為結(jié)構(gòu)體中各進程之間通信的手段信號的賦值被稱為帶入,它可以附加延時。例如:s1=s2after10ns;信號的帶入是不是立即發(fā)生的,19,信號的作用范圍,在程序包中說明的信號,可以由所含的任何實體、結(jié)構(gòu)體所引用在實體中說明的信號,只能在本設計的實體中使用在結(jié)構(gòu)體中說明的信號,只能被該結(jié)構(gòu)體內(nèi)部的語句所引用,20,信號的應用,不同設計單元之間的通信手段層次化設計中層次聯(lián)系的媒介解決設計難題的重要幫手!,21,VHDL語言的對象,變量(Variable)用于對暫時的數(shù)據(jù)進行局部的存儲,是一個局部變量。變量的物理意義:主要用于局部數(shù)據(jù)的暫時存儲,是一種載體。變量說明的一般格式:VARIABLE變量名:數(shù)據(jù)類型約束條件:=表達式例如:VARIABLEcnt:integer:=0;VARIABLEcnt:integerRANGE1TO100:=1;,22,VHDL語言的對象,變量(Variable)變量的說明位置:進程語句、函數(shù)語句、子程序語句變量不能用于硬件連線和存儲元件在系統(tǒng)綜合時,變量用于計算,作為索引載體和數(shù)據(jù)的暫存進程中的變量的作用范圍只在進程內(nèi),若要將變量作用于進程外,則必須將該變量賦給一個相同類型的信號。變量的賦值不能附加延時。,23,信號和變量的區(qū)別,信號賦值是有延時的,而變量的賦值沒有延時信號除當前值外,還有歷史信息等其他信息;變量只有當前信息進程只對信號敏感,不對變量敏感信號可以是多個進程的全局信號,變量只能在一個進程范圍內(nèi)。信號是硬件連線的抽象描述,變量無實際的對應關(guān)系,通常用于計算變量的值可以傳給信號,但信號不能傳給變量信號的代入符號(=)和變量的賦值符號(:=)不同。,24,信號和變量的區(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語言的對象,文件文件是一種傳輸大量數(shù)據(jù)的載體文件說明的格式如下所示:FILE文件名,文件名:文件類型is方向路徑;FILE用來聲明一個文件;文件類型用來指明文件是什么形式的文件;方向是一個可選項,它用來表明文件是輸入文件還是輸出文件,分別用保留字“IN”和“OUT”來表示;路徑表達式的作用是指明文件的實際存儲位置。文件類型通常需要事先定義例:P59,VHDL語言的數(shù)據(jù)類型,27,VHDL語言的數(shù)據(jù)類型,VHDL語言要求為各種常量、變量、信號指定明確的數(shù)據(jù)類型一個對象只能具有一種數(shù)據(jù)類型;對某對象進行操作的類型必須與該對象的數(shù)據(jù)類型相匹配;具有不同數(shù)據(jù)類型的對象之間不能直接進行賦值操作。,28,VHDL語言的數(shù)據(jù)類型,標準定義的數(shù)據(jù)類型,29,VHDL語言的數(shù)據(jù)類型,常用的標準數(shù)據(jù)類型BIT/BIT_VECTOR布爾量:是一個二值枚舉類型,它和位類型不同,沒有數(shù)值的含義,不能進行算術(shù)運算,只能進行關(guān)系運算。整型范圍與補碼表示不同實現(xiàn)時用二進制來表示,但不能看作位矢量,即不能對整型進行邏輯運算時間:物理類型的一種;一個完整的時間數(shù)據(jù)應該包括數(shù)值和單位兩個部分;預定義的時間類型給出了7個時間單位:ps、ns、us、ms、sec、min、hr。時間類型常常用于仿真,而不用于邏輯綜合,30,VHDL語言的數(shù)據(jù)類型,用戶定義的數(shù)據(jù)類型用戶定義數(shù)據(jù)類型的書寫格式為:TYPE數(shù)據(jù)類型名,數(shù)據(jù)類型名,數(shù)據(jù)類型定義;用戶可以定義的數(shù)據(jù)類型有:枚舉類型(Enumeraterd)整數(shù)類型(Integer)實數(shù)(Real)、浮點(Floating)類型數(shù)組(Array)類型存取(Access)類型文件(Files)類型記錄(Record)類型時間(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(枚舉元素,枚舉元素,);對于有限狀態(tài)的編碼用二進制表示時不直觀,此時應該采用枚舉類型。例如:表示一周之內(nèi)每天的狀態(tài),這時可以定義一個名字為week的可枚舉類型,如下所示:TYPEweekIS(monday,tuesday,wednesday,thursday,friday,saturday,sunday);,33,用戶定義的數(shù)據(jù)類型,可枚舉類型可枚舉數(shù)據(jù)類型存在著這樣的順序關(guān)系:最左邊的值低于所有其它的值,最右邊的值大于所有其它的值,每一個值均大于其左邊數(shù)據(jù)值而低于其右邊數(shù)據(jù)值。例如:SIGNALtoday:week;Result=fridayELSE0;可枚舉類型的應用將微處理器的全部指令表示成一個可枚舉類型對有限狀態(tài)機的全部狀態(tài)描述成一個可枚舉類型,34,用戶定義的數(shù)據(jù)類型,數(shù)組類型TYPE數(shù)組類型名ISARRAY約束范圍OF數(shù)組元素類型;示例:P64P65數(shù)組的賦值對整個數(shù)組進行一次賦值按照下標對每一個數(shù)組元素進行賦值數(shù)組的引用引用整個數(shù)組引用數(shù)組元素,35,用戶定義的數(shù)據(jù)類型,子類型:基本類型的子集SUBTYPE子類型名IS基本數(shù)據(jù)類型名范圍限制;基本類型與子類型子類型的范圍要小于或等于基本類型的范圍子類型和基本類型還允許在兩種類型之間進行賦值,子類型總可以對基本類型賦值;基本類型向子類型賦值,要看基本類型對象的值是否在子類型范圍之內(nèi),如果在范圍之內(nèi),則可以進行賦值,否則不可以。TYPE定義的類型是一種全新的類型,36,VHDL語言的數(shù)據(jù)類型,常用的數(shù)據(jù)類型VHDL語言中經(jīng)常使用的數(shù)據(jù)類型是可枚舉類型STD_ULOGIC及其子類型STD_LOGIC。在IEEE1164標準的“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的值相同,但它具有一個決斷函數(shù),稱為resolved。在IEEE1164標準的“STD_LOGIC_1164”程序包中,數(shù)據(jù)類型STD_LOGIC的類型定義如下:SUBTYPEstd_logicISresolvedstd_ulogic;此外,經(jīng)常使用的矢量類型bit_vector、std_ulogic_vector、std_logic_vector,它們在IEEE1076和IEEE1164標準的程序包中定義。,38,VHDL語言的數(shù)據(jù)類型,數(shù)據(jù)類型的限定有時候根據(jù)上下文能判斷出某一數(shù)據(jù)的類型,例如:signala:std_logic_vector(7downto0);ayy=”10111111”;,39,數(shù)據(jù)類型轉(zhuǎn)換,為了不同數(shù)據(jù)類型之間的運算,必須將它們轉(zhuǎn)換成同一的數(shù)據(jù)類型。VHDL不同的程序包提供了轉(zhuǎn)換函數(shù)。,40,數(shù)據(jù)類型轉(zhuǎn)換舉例,dataout=(大于等于)操作結(jié)果為BOOLEAN型:TRUE或FALSE特別當心“4,lpm_widths=2)PORTMAP(data=a,sel=sel,result=y);ENDbehavior;,64,實體說明(EntityDeclaration),描述一個設計的外貌,即定義對外的輸入輸出接口以及一些參數(shù)定義格式如下:ENTITY實體名ISGENERIC(類屬表);PORT(端口表);ENDENTITY實體名;,65,實體說明之類屬參數(shù)說明,為設計實體指定參數(shù),如用來定義端口寬度、器件延時參數(shù)等格式如下:GENERIC(CONSTANT參數(shù)名:數(shù)據(jù)類型:=靜態(tài)表達式,);例如:GENERIC(delay:time);表示參數(shù)名delay是時間類型的,在結(jié)構(gòu)體中將delay初始化成不同的數(shù)值從而滿足實際的需要。例如:GENERIC(n:INTEGER);表示參數(shù)名n是整數(shù)類型的,66,類屬參數(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,實體說明之PORT(端口)說明,對一個設計實體界面的說明及對設計實體與外部電路的接口通道的說明,包括對每一接口的輸入輸出模式和數(shù)據(jù)類型的定義。格式如下:PORT(端口名:端口模式數(shù)據(jù)類型;端口名:端口模式數(shù)據(jù)類型);端口名是設計者為實體的每一個對外通道所取的名字端口模式用于定義端口上數(shù)據(jù)的流動方向和方式,68,端口模式,IN:IN定義的通道為單向只讀模式,規(guī)定數(shù)據(jù)只能通過此端口被讀入實體中。OUT:OUT定義的通道為單向輸出模式,規(guī)定數(shù)據(jù)只能通過此端口從實體向外流出,或者說可以將實體中的數(shù)據(jù)向此端口賦值。,69,端口模式,INOUT:定義端口為雙向(輸入輸出)即從端口的內(nèi)部看,可以對此端口進行賦值,也可以通過此端口讀入外部的數(shù)據(jù)信息從端口的外部看,信號既可以從此端口流出,也可以向此端口輸入信號,如RAM的數(shù)據(jù)端口,單片機的I/O口。在實際電路描述中,INOUT模式的正確使用還應該考慮其它因素。建議少用INOUT模式定義雙向端口占用了更多的硬件資源有些開發(fā)環(huán)境并不支持該模式不要用該模式代替其它模式,70,端口模式,BUFFER:BUFFER的功能與INOUT類似,區(qū)別在于當需要輸入數(shù)據(jù)時,只允許內(nèi)部回讀輸出的信號,即允許反饋。如計數(shù)器的設計,可將計數(shù)器輸出的計數(shù)信號回讀,以作下一計數(shù)值的初值。與INOUT模式相比,BUFFER回讀(輸入)的信號不是由外部輸入的,而是由內(nèi)部產(chǎn)生,向外輸出的信號。,71,端口模式,LINKAGE:方向未定(即任何方向均可連接使用),72,關(guān)于信號方向,IN,IN,IN,OUT,BUFFER,INOUT,OUT,73,數(shù)據(jù)類型,VHDL作為一種強類型語言,任何一種數(shù)據(jù)對象(信號、變量、常數(shù))必須嚴格限定其取值范圍,即對其傳輸或存儲的數(shù)據(jù)類型作明確的界定。常見的數(shù)據(jù)類型主要有STD_LOGIC(標準邏輯位)、STD_LOGIC_vector(標準邏輯位向量)、BIT(邏輯位)、BIT_VECTOR(位向量)。BIT數(shù)據(jù)類型的信號規(guī)定的取值范圍是邏輯位1和0。在VHDL中,邏輯位0和1的表達必須加單引號,否則VHDL綜合器將0和1解釋為整數(shù)數(shù)據(jù)類型INTEGER。,74,數(shù)據(jù)類型,BIT數(shù)據(jù)類型可以參與邏輯運算或算術(shù)運算,其結(jié)果仍是位的數(shù)據(jù)類型。VHDL綜合器用一個二進制位表示BIT。BIT數(shù)據(jù)類型定義在VHDL標準程序包STANDARD中,而程序包STANDARD包含于VHDL標準庫STD中。這是系統(tǒng)默認的庫。STD_LOGIC(標準邏輯位)、STD_LOGIC_vector(標準邏輯位向量)數(shù)據(jù)類型的定義包含在IEEE庫的包集合STD_LOGIC_1164中,因此需要用包集合的說明語句說明:USESTD_LOGIC_1164.ALL;,75,實體說明部分,實體說明部分放在端口說明部分的下面,主要作用是說明設計實體接口中的公共信息。例如,可以用來定義結(jié)構(gòu)體需要用到的新的數(shù)據(jù)類型、信號以及常量等。實體說明部分有時候還會包括斷言語句、過程調(diào)用語句和被動進程語句等并發(fā)語句。但是,這些語句不能包含信號賦值語句。,76,“實體說明”的幾點說明,以VHD為后綴名的文件名要求與實體名一致。端口定義的每一行以“;”結(jié)尾,但最后一行定義完后沒有分號,分號在括號的外面。以“-”開始到本行結(jié)束為注釋行,77,“實體說明”舉例,觸發(fā)器的實體:ENTITYDFF1ISPORT(CLK:INSTD_LOGIC;D:INSTD_LOGIC;Q:OUTSTD_LOGIC);ENDDFF1;-87標準,也可以寫成ENDENTITYDFF1,這是93標準,78,“實體說明”舉例,3-8譯碼器的實體:ENTITYdecoderISPORT(datain:INSTD_LOGIC_VECTOR(2DOWNTO0);g1,g2a,g2b:INSTD_LOGIC;y:OUTSTD_LOGIC_vector(7downto0);ENDdecoder;,79,“實體說明”舉例,流水線加法器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),能被仿真的實體都包含有結(jié)構(gòu)體一個實體和其對應的結(jié)構(gòu)體構(gòu)成一個完整的VHDL設計,一個實體可以有多個結(jié)構(gòu)體。不同的結(jié)構(gòu)體可以采用不同的描述方式結(jié)構(gòu)體的命名只要符合標識符的規(guī)定就可以。但是結(jié)構(gòu)體一般采用行為/寄存器/結(jié)構(gòu)描述方式,因此按照見名知義的要求,其名字一般為behave/rtl/structure。,81,結(jié)構(gòu)體(ArchitectureBody),結(jié)構(gòu)體一般包括聲明區(qū)(Declarations)和并發(fā)語句區(qū)兩個部分組成。聲明區(qū)用于聲明該結(jié)構(gòu)體內(nèi)使用的類型、常數(shù)、元件、子程序等。并發(fā)語句區(qū)用來描述結(jié)構(gòu)體的行為和連接關(guān)系。并發(fā)語句的類型主要有塊語句、進程語句、信號賦值、子程序調(diào)用、元件例化語句。結(jié)構(gòu)體部分包含了VHDL的很多元素,掌握好它們是靈活應用VHDL的關(guān)鍵。,82,結(jié)構(gòu)體的一般形式,ARCHITECTUREOFIS-聲明區(qū),聲明結(jié)構(gòu)體內(nèi)所用的內(nèi)部信號及數(shù)據(jù)類型-若使用元件例化,則聲明所用的元件BEGIN-CONCURRENTSIGNALASSIGNMENTS;-PROCESS;-COMPONENTINSTANTIATIONS;END;,83,Tips,實體和結(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)體舉例十進制計數(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的實體和結(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對實體說明成為可見: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)系以及實體與結(jié)構(gòu)體之間的連接關(guān)系格式如下:CONFIGURATION配置名OF實體名IS語句說明(選配的結(jié)構(gòu)體名)END配置名,VHDL語言的描述語句,94,描述語句的種類,并發(fā)描述語句并發(fā)語句用來描述各模型算法之間的連接關(guān)系根據(jù)信號發(fā)生變化的順序執(zhí)行順序描述語句語句按照出現(xiàn)的先后順序依次執(zhí)行,95,并發(fā)語句,實際的數(shù)字電路、數(shù)字系統(tǒng)中,許多操作是并發(fā)執(zhí)行的;VHDL作為一種廣泛使用的硬件描述語言,應該能夠描述數(shù)字系統(tǒng)中的各種操作和行為;為了描述數(shù)字系統(tǒng)中的這種并發(fā)操作,VHDL提供了并行語句;VHDL的結(jié)構(gòu)體由一個或者多個并行語句構(gòu)成;并行語句的書寫順序不代表它們的執(zhí)行順序;并行語句的執(zhí)行順序由它們的觸發(fā)事件來決定。,96,并發(fā)描述語句,ARCHITECTURE結(jié)構(gòu)體名OF實體名IS-說明語句BEGIN-并發(fā)語句ENDARCHITECTURE結(jié)構(gòu)體名,97,并發(fā)描述語句,進程(Process)語句并發(fā)信號代入(ConcurrentSignalAssignment)語句條件信號代入(ConditionalSignalAssignment)語句選擇信號代入(SelectiveSignalAssignment)語句并發(fā)過程調(diào)用(Concurrent)語句塊(Block)語句Generate語句Component語句,98,進程語句,VHDL中最重要、使用最頻繁的結(jié)構(gòu)體描述語句進程與進程之間是并行關(guān)系;進程定義了一組連續(xù)執(zhí)行的順序語句;結(jié)構(gòu)體的進程模型:,99,進程語句,對一個數(shù)字系統(tǒng)進行系統(tǒng)建模時,通常將數(shù)字系統(tǒng)描述成一個并發(fā)執(zhí)行的多個進程所構(gòu)成的網(wǎng)絡模型;構(gòu)成網(wǎng)絡模型的各個進程的執(zhí)行是并發(fā)的,而進程內(nèi)部的各個語句則是順序執(zhí)行的;各個進程之間通過信號或共享變量進行通信。,一個結(jié)構(gòu)體可以有多個進程進程之間是并發(fā)執(zhí)行的進程之間通過信號進行通信,100,進程(Process),進程(Process)語句的格式:進程名:Process(信號1,信號2,)Begin-順序執(zhí)行語句;endprocess進程名;,101,進程語句,敏感信號量表敏感信號是指那些值發(fā)生改變后能夠引起進程語句執(zhí)行的信號??梢允禽斎胄盘柣蚴切盘柫咳我饷舾行盘柊l(fā)生改變,PROCESS就會執(zhí)行一遍進程的運行依賴于敏感表或WAIT參數(shù)的變化隱含信號量表PROCESS后括號中的信號量表顯式敏感信號在PROCESS中的WAIT語句一個進程中不能既有敏感表又有WAIT語句,102,進程(Process)示例,隱含敏感信號p1:process(a,b)Beginand2=aandb;endprocessp1;,顯式敏感信號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;,進程語句示例,104,進程語句示例,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,進程內(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ā)信號代入語句,處于結(jié)構(gòu)體之中但在進程語句之外格式:賦值目標=表達式;“=”稱為信號帶入操作符并發(fā)信號代入語句是靠事件來驅(qū)動的,因此對于并發(fā)信號代入語句來說,只有當賦值符號“=”右邊的對象上有事件發(fā)生時才會執(zhí)行該語句。,107,并發(fā)信號代入語句,例如ARCHITECTUREDEPICTOFMYDESISBEGINSUM=AXORB;CARRIER=AANDB;END,108,條件信號代入(ConditionalSignalAssignment)語句,條件信號代入(ConditionalSignalAssignment)語句的格式如下:目的信號量=表達式1when條件1else表達式2when條件2else表達式n-1when條件n-1else表達式n;,109,條件信號代入,Entitytest1isport(in1,in2,in3,in4:inbit;sel1,sel2:inbit;d:outbit);endtest1;architecturetest1_bodyoftest1isbegind=in1whensel1=0andsel2=0elsein2whensel1=0andsel2=1elsein3whensel1=1andsel2=0elsein4;endtest1_body;,110,選擇信號代入(SelectiveSignalAssignment)語句,With表達式select目標信號量=表達式1when條件1,表達式2when條件2,表達式nwhen條件n;,111,選擇信號代入,Entitytest1isport(in1,in2,in3,in4:inbit;sel:ininteger;out1:outbit);endtest1;architecturetest1_bodyoftest1isbeginwithselselectout1=in1when0;in2when1;in3when2;in4when3;endtest1_body;,112,Component語句,如果已經(jīng)在VHDL語言某個模塊中定義了邏輯電路后,就可以在其他的模塊中調(diào)用該邏輯電路,將此稱之為設計元件模塊化。調(diào)用工作庫中不存在的元件的步驟元件的創(chuàng)建引用元件元件說明元件例化,113,元件的創(chuàng)建,創(chuàng)建就是完整的描述一個電路*.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)的位置:進程或子結(jié)構(gòu)內(nèi)部順序語句:WAIT語句變量賦值語句信號代入語句IF語句Case語句Loop語句Next語句Exit語句斷言語句NULL語句,120,WAIT語句,可以顯式地說明敏感信號(區(qū)別于進程隱式地說明敏感信號)WAIT語句可以以多條件的形式出現(xiàn)。其效果等同于各件的“或”,即只要有任何一個條件滿足,就結(jié)束等待,轉(zhuǎn)而執(zhí)行WAIT語句下面的一條語句。示例:WAITONclk,reset;,121,WAIT語句,122,變量賦值語句,變量只能在進程或子結(jié)構(gòu)中使用,其作用域不能到進程或子結(jié)構(gòu)之外。變量賦值語句的格式為:目標變量:=表達式;,123,信號代入語句,信號代入語句出現(xiàn)在進程或子程序中時是作為順序語句來使用信號代入語句出現(xiàn)在進程外或BLOCK塊內(nèi)作為并發(fā)語句來使用信號代入語句的格式為:目的信號量=表達式;,124,“:=”與“=”的差別,操作對象的差別:變量/信號量作用范圍的差別:進程/子結(jié)構(gòu)內(nèi)部結(jié)構(gòu)體內(nèi)部、進程/子結(jié)構(gòu)之間作用時效的差別變量一經(jīng)賦值,則馬上有效;信號代入的執(zhí)行和信號值的更新之間至少有延遲,只有延遲過后信號才能得到新值,否則保持原值。示例:P88,125,IF語句,If條件then順序語句;Else順序語句;Endif;,If條件then順序語句;Elsif條件then順序語句;Elsif條件then順序語句;Else順序語句;Endif;,If條件then順序語句;Endif;,126,IF語句,IFTHEN語句經(jīng)常用來描述具有控制端口的硬件電路以及對時鐘的邊沿判斷。IFTHENELSE語句經(jīng)常用來描述具有兩條不同功能分支的硬件電路,如二選一電路、三態(tài)門電路等。IFTHENELSIFELSE語句經(jīng)常用來描述具有多控制條件的硬件電路。由于順序語句順序執(zhí)行的特點,其條件判斷就形成了前后的優(yōu)先級。,127,IF語句,單分支示例電平敏感D鎖存器PROCESS(clk,d)BEGINIF(clk=1)THENq=d;ENDIF;ENFPROCESS;,128,IF語句,雙分支示例二選一電路(P89)多分支電路優(yōu)先編碼器(P90)似乎很簡單,接著往下看,129,實例分析,假設,要描述一個與門電路:有很多種描述方法。,130,方法1:直接信號賦值,在結(jié)構(gòu)體內(nèi),很直觀地直接進行賦值:ArchitecturebehavofAnd2isBeginy=aandb;Endbehav;,131,方法2:進程直接信號賦值,這種方法直接等效于方法1。注意要將a和b都加入敏感信號表。ArchitecturebehavofAnd2isBeginprocess(a,b)beginy=aandb;endprocess;Endbehav;,132,方法3:進程if條件賦值,經(jīng)過分析發(fā)現(xiàn),只有a和b都為1的時候,y才會輸出1,其它情況下y為0。所以描述如下:ArchitecturebehavofAnd2isBeginprocess(a,b)beginif(a=1andb=1)theny=1;endif;endprocess;Endbehav;,這個描述是錯誤的,為什么?,133,方法4:進程if條件賦值,經(jīng)過分析發(fā)現(xiàn),a=1時,y會跟蹤b的變化,即y順序語句;WHENOTHERS=順序語句;ENDCASE;,注意,case的分支必須包含表達式的所有取值。所以一般最后一個分支往往用others來包含。,136,CASE語句,所有選擇條件必須被列舉在WHEN語句中不能有相同的選擇項如果CASE語句中的表達式包含多個值,可以使用OTHERS來表示所有具有相同操作的選擇。保留字OTHERS必須放在最后面。,137,CASE語句和IF語句的比較,CASE語句和IF語句都可以完成多選擇控制,但是在功能上還是有所區(qū)別的。1、在IF語句中,多條件是有優(yōu)先級的??偸窍忍幚碜钇鹗嫉臈l件,如果不滿足再依次處理后面的條件;在CASE語句里所有條件是并行處理的,不存在優(yōu)先級關(guān)系。2、CASE語句應將表達式的所有可能值全部列出來,否則在語法認為是錯的。CASE語句中的WHENOTHERS,即可以使它包含表達式的所有缺省值。,138,由于CASE語句和IF的特點,它們在某些場合下是可以互換的,例如38譯碼器的例子。但是對于下面這個例子就不能使用CASE語句。例:,CASE語句和IF語句的比較,139,上表是一個優(yōu)先級編碼器的真值表,4個輸入之間優(yōu)先級的大小關(guān)系是b0b1b2b3,即當b0、b1同為0時,輸出編碼為00。換言之,當b00時,其余3個輸入任意值該編碼器的輸出均為”00“。因為CASE語句沒有對輸入為任意的表示法,故不能使用下面的語句:即:WHEN“XX01“=y=“01”是錯誤的。所以要正確描述輸入之間的這種優(yōu)先級關(guān)系就應選用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)于設計實體、結(jié)構(gòu)體、類型、信號等項目的指定特征。通過屬性描述語句可以得到相關(guān)對象(Objects)的值、功能、類型和范圍屬性分為數(shù)值、函數(shù)、信號、數(shù)據(jù)類型和數(shù)據(jù)范圍等幾類綜合器支持的屬性有:LEFT、RIGHT、HIGH、LOW、RANGE、REVERSRANGE、LENGTH、EVENT及STABLE。,146,值類屬性,常用數(shù)據(jù)類型的值類屬性left:返回一個數(shù)據(jù)類型或子類型最左邊的值;right:返回一個數(shù)據(jù)類型或子類型最右邊的值;high:返回一個數(shù)據(jù)類型或子類型的最大值;low:返回一個數(shù)據(jù)類型或子類型的最小值。數(shù)組的值類屬性length:返回限定性數(shù)組的長度值,即數(shù)組中元素的個數(shù)。,147,函數(shù)類屬性,信號屬性函數(shù)(1)信號event:函數(shù)的返回值為“true”或“false”。信號事件有無發(fā)生。(2)信號active:函數(shù)的返回值為“true”或“false。信號活躍/不活躍。(3)信號last_event:即返回該信號從前一個事件發(fā)生到現(xiàn)在時刻所經(jīng)歷的時間值。(4)信號last_value:返回該信號在最近一個事件發(fā)生以前的值。(5)信號last_active:返回該信號從前一次信號活躍到現(xiàn)在時刻所經(jīng)歷的時間值。,148,函數(shù)類屬性,上升沿:clkeventANDclk1AND(clklast_value0)if(rising_edge(clk)then下降沿:clkeventANDclk0AND(clklast_value1)if(falling_edge(clk)then,149,信號類屬性,常用的信號屬性:delayed(t)stable(t)以下兩語句的功能是一樣的。(NOTclockSTABLEANDclock=1)(clockEVENTANDclock=1),150,數(shù)據(jù)范圍類屬性,數(shù)據(jù)范圍類屬性用來返回數(shù)據(jù)的區(qū)間范圍,要求數(shù)據(jù)類型必須是限定性數(shù)組。數(shù)據(jù)范圍類屬性包括兩種:數(shù)組RANGE(n):得到索引號為n的區(qū)間范圍;數(shù)組REVERSE_RANGE(n):得到索引號為n的區(qū)間的逆序范圍。例:.SIGNALrange1:INSTDLOGICVECTOR(0TO7);.FORiINrange1RANGELOOP.,151,總結(jié),并發(fā)/順序語句有各自的應用場合,兩者不能混用變量賦值“:=”變量只能出現(xiàn)在進程內(nèi)部,故為順序語句信號賦值“=”在結(jié)構(gòu)體中但在進程之外的,則為并發(fā)信號帶入語句;在進程內(nèi)的則為順序信號帶入語句。,VHDL語言的子結(jié)構(gòu),153,VHDL語言的子結(jié)構(gòu),子結(jié)構(gòu)由若干語句組成,用以完成特定的功能,常常用于計算數(shù)值或描述算法。子結(jié)構(gòu)不是一個獨立的編譯單位,可以放置在實體或程序包中,以便被不同的對象引用。常見的子結(jié)構(gòu)塊語句(BLOCK)進程語句過程函數(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ù)的返回值通常只有一個函數(shù)的使用函數(shù)的創(chuàng)建:可以在直接在結(jié)構(gòu)體中定義,也可以在實體部分定義,也可以在包集合中定義函數(shù)的調(diào)用:與高級語言中調(diào)用函數(shù)類似示例:P113P115,156,過程PROCEDURE,過程與函數(shù)類似,主要差別是過程可以返回多個值,函數(shù)只能返回一個值。過程的使用包括兩個步驟過程的定義過程的調(diào)用示例:P113P115,157,VHDL語言中的重載,重載就是指同樣名稱的子程序可以用不同類型的數(shù)據(jù)作為子程序參數(shù)而定義多次。經(jīng)常使用的重載:子程序重載:子程序重載允許子程序使用不同數(shù)據(jù)類型的參數(shù);運算符重載:而運算符重載允許對不同類型的數(shù)據(jù)進行相同的運算操作。,158,子程序重載,子程序調(diào)用由下列條件決定的:子程序調(diào)用過程中參數(shù)的數(shù)據(jù)類型;子程序調(diào)用過程中參數(shù)的數(shù)目;子程序為函數(shù)時返回值的類型。子程序參數(shù)類型的重載具有相同名字的子程序的參數(shù)的數(shù)據(jù)類型不同示例:P118P120/庫的定義/重載/數(shù)據(jù)類型子程序參數(shù)數(shù)目的重載具有相同名字的子程序具有不同數(shù)目的參數(shù),159,運算符重載,運算符重載允許運算符函數(shù)對各種數(shù)據(jù)類型的參數(shù)進行操作運算符重載是解決不同數(shù)據(jù)類型或多種數(shù)據(jù)類型的信號操作的有效手段示例:P120P121,VHDL的描述方式,161,VHDL的描述方式,常用的幾種描述方式(1)BEHAVIOR描述方式(2)STRUCTURAL描述方式(3)數(shù)據(jù)流描述方式說明RTL/STRUCTURAL描述方式的VHDL語言能夠進行邏輯綜合,而采用BEHAVIOR描述方式的VHDL語言大部分只能用于系統(tǒng)仿真、只有少數(shù)可以進行邏輯綜合。,162,BEHAVIOR描述方式,行為描述是高層次描述方式,它只描述輸入與輸出之間的邏輯轉(zhuǎn)換關(guān)系是對系統(tǒng)數(shù)學模型的描述,對設計實體的描述按照算法的路徑來進行對實體行為的抽象描述,而不是對具體的器件描述,即定義整體功能把設計處理成為一個或多個黑盒子,并帶有一組特定的輸入輸出、一組在時間上依據(jù)輸入條件描述每組輸出行為的函數(shù)。行為描述除了說明功能外還包括接口描述和對設計施加的約束描述。,163,BEHAVIOR描述方式,行為級的抽象程度比寄存器傳輸級和結(jié)構(gòu)級高。程序中大量采用了算術(shù)運算、關(guān)系運算、慣性延時、傳輸延時等難于進行邏輯綜合和不能進行邏輯綜合的VHDL語句。采用行為描述方式的VHDL語言程序主要用于系統(tǒng)數(shù)學模型的仿真或系統(tǒng)工作原理的仿真。描述系統(tǒng)行為的方法:電路級的轉(zhuǎn)移函數(shù)邏輯級/功能級的布爾表達式時序圖狀態(tài)圖,164,VHDL語言中提供的系統(tǒng)行為描述語句,(a)功能性描述:不對應實際的電路,只是從功能上描述了系統(tǒng)示例:Architecturebehavioralofeqcomp4isbegincomp:process(a,b)beginifa=bthenequal=1;elseequal=0;endif;endprocesscomp;endbehavioral;,高層次的功能描述,不必考慮在具體電路是怎樣實現(xiàn)的。,165,VHDL語言中提供的系統(tǒng)行為描述語句,(b)延時語句延時分為兩類:慣性延時和傳輸延時慣性延時是指器件或系統(tǒng)的輸出信號發(fā)生變化時是必須經(jīng)過一段時間。慣性延時的一個重要特點:當信號變化的周期小于慣性延時的時候,其輸出將保持不變。慣性延時只有在行為仿真時才有意義,邏輯綜合時被忽略。例如:b=aAFTER10ns;傳輸延時是指傳輸?shù)穆窂窖訒r。常用于描述總線、連接線以及ASIC芯片的路徑延時。例如:b=TRANSPORTaAFTER
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 公眾號加粉活動方案
- 公會步行活動策劃方案
- 公司一年慶活動策劃方案
- 2025至2030年中國產(chǎn)品開關(guān)鍵行業(yè)投資前景及策略咨詢報告
- 2025至2030年中國串花飾沙發(fā)行業(yè)投資前景及策略咨詢報告
- 2025至2030年中國PVC塑膠音柱行業(yè)投資前景及策略咨詢報告
- 《探索細胞的奧秘:七年級生物細胞結(jié)構(gòu)教案》
- 聽雨600字小學作文10篇
- 《英文寫作訓練:如何撰寫人物描述文》教案
- 公司七一建黨節(jié)活動方案
- 2023年養(yǎng)老服務有限公司簡介(4個范本)
- 紅色文化知識競賽試題及答案
- 老舊住宅屋面防水工程施工方案
- 操作規(guī)程儲氣罐安全操作規(guī)程
- 電廠物資管理系統(tǒng)解決方案
- 初一數(shù)學(下)難題百道及答案
- 七年級下實數(shù)及實數(shù)的計算
- 中國古典文獻學(全套)
- 《抖音平臺商品銷售策略研究10000字(論文)》
- 兩用物項-最終用戶用途證明
- 2023-2024學年貴州省銅仁市小學數(shù)學五年級下冊期末高分預測題
評論
0/150
提交評論