時序電路設計_第1頁
時序電路設計_第2頁
時序電路設計_第3頁
時序電路設計_第4頁
時序電路設計_第5頁
已閱讀5頁,還剩91頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

2.2.3包集合、庫及配置在VHDL中還有另外三個可以各自獨立進行編譯的源設計單元包集合庫配置

1.庫(Library)庫是經(jīng)編譯后的數(shù)據(jù)的集合,它存放了包集合定義、實體定義、結(jié)構(gòu)體定義和配置定義。庫中存放著設計好的已經(jīng)過編譯的數(shù)據(jù),設計者可以直接使用庫中的數(shù)據(jù)。在使用庫之前,必須要對庫進行說明。在VHDL語言中,庫的說明總是放在設計單元的最前面:

LIBRARY庫名;

庫的種類在VHDL中存在的庫大致可分為5類:

IEEE庫

STD庫

ASIC庫

WORK庫用戶定義庫①IEEE庫IEEE庫是最常用的資源庫目前IEEE庫中包含有:

IEEE標準包STD_LOGIC_1164NUMERIC_BIT,NUMERIC_STD,MATH現(xiàn)在有些公司,如SYNOPSYS公司也提供一些包集合如:“STD_LOGIC_ARITH”,“STD_LOGIC_UNSIGNED”雖然它們還沒有得到IEEE的承認,但是仍匯集在IEEE庫中。lEEE庫是最常用的資源庫,

其中含有的程序包為:

Std_logic_1164程序包

Numeric_Bit程序包

Numeric_Std程序包

Math_Real程序包

Math_Complex程序包

vital_Timing程序包

vital_Primitives程序包②STD庫STD庫是VHDL的標準庫在庫中存放著稱為“STANDARD”的包集合它是VHDL的標準配置,因此設計者如要調(diào)用“STANDARD”可以不按標準格式說明即:LIBRARYSTD;語句被隱含存在于任何設計單元之前,而不需要顯示寫出但是在使用“TEXTIO”程序包中的數(shù)據(jù)時,應先說明庫和包集合名,然后才可以使用該程序包中的數(shù)據(jù),如:LIBRARYSTD;USESTD.TEXTIO.ALL;③面向ASIC庫(是VHDL工具廠商自己提供的資源庫)在VHDL中,為了進行門級仿真,各公司可提供面向ASIC的邏輯門庫。在該庫中存放著與邏輯門一一對應的實體。為了使用面向ASIC的庫對庫進行說明是必要的。VHDL工具廠商與EDA工具專業(yè)公司都有自己的資源庫,例如:MentorGraphics公司Mgc_portable庫

ALTERA公司Prim庫

mf庫

Mega_lpm庫

edif庫

Synopsys公司Synopsys庫④WORK庫WORK庫是現(xiàn)行作業(yè)庫設計者所描述的VHDL語句不需要任何說明,都將存放在WORK庫中在使用該庫時無需進行任何說明即對下面的語句:LIBRARYWORK;用戶不必寫出⑤用戶定義庫用戶為自身設計需要所開發(fā)的程序包和實體等,也可以匯集在一起定義成一個庫。這就是用戶定義庫或稱用戶庫。用戶庫在使用時要首先說明庫名。庫的使用①庫的說明前面提到的5種庫除了WORK庫之外其它4類在使用前都要先作說明一般,在使用庫時先要用兩條語句對庫進行說明,如:LIBRARY庫名;USE程序包.項目名;例如:

LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;上例表明要使用IEEE庫中STD_LOGIC_1164包集合中的所有過程和函數(shù)這里項目名為ALL,表示包集合中的所有項目都要用②庫說明作用范圍庫說明語句的作用范圍:從一個實體說明開始到所屬的結(jié)構(gòu)體、配置為止。當一個源程序中出現(xiàn)兩個以上的實體時,兩條作為使用庫的說明語句應在每個實體說明語句前重復書寫例2-8:LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYand1IS┆ENDand1;ARCHITECTURErtlOFand1IS┆ENDrtl;CONFIGURATIONs1OFand1IS┆ENDs1;LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYor1IS┆

2.程序包(包集合)Package程序包(Package)的說明像C語言中的include語句一樣,用來單純地羅列VHDL語句中所要用到的信號定義、常數(shù)定義、數(shù)據(jù)類型、元件語句、函數(shù)定義和過程定義等。它是一個可編譯的設計單元,也是庫結(jié)構(gòu)中的一個層次。要使用包集合時用USE語句說明。一個程序包由兩大部分組成程序包標題(Header)程序包體程序包體(PackageBody)是一個可選項一般,程序包標題列出所有項的名稱而程序包體具體給出各項的細節(jié)程序包的結(jié)構(gòu)如下:PACKAGE程序包名IS[說明語句]END程序包名;——程序包標題PACKAGEBODY程序包名IS[說明語句]ENDBADY;——程序包體3.配置(Configuration)配置語句描述的是層與層之間的連接關系以及實體與結(jié)構(gòu)之間的連接關系。設計者可以利用這種配置語句來選擇不同的結(jié)構(gòu)體,使其與要設計的實體相對應。配置語句的格式:CONFIGURATION配置名OF實體名IS[語句說明]END配置名;

例如,要設計一個二輸入四輸出的譯碼器

如果一種結(jié)構(gòu)體中的基本元件采用反相器和三輸入與門,而在另一種結(jié)構(gòu)體中的基本元件都采用與非門,它們各自的結(jié)構(gòu)體是不一樣的,并且都放在各自不同的庫中,那么,現(xiàn)在要設計的譯碼器,就可以利用配置語句來實現(xiàn)對兩種不同結(jié)構(gòu)體進行配置。例2-10:最簡單的缺省配置格式CONFIGURATION配置名

OF實體名

ISFOR選配結(jié)構(gòu)體名

ENDFOREND配置名;例20-11:反相器和三輸入與門電路描述

LIBRARYSTD;USESTD.STD_LOGIC.ALL;USESTD.STD_TTL.ALL;ENTITYinvIS PORT(a:INT_WLOGIC;b:OUTT_WLOGIC;);ENDinv;ARCHITECTUREbehaveOFinvISBEGIN B<=NOT(a)AFTER5ns;ENDbehave;

————反相器

CONFIGURATIONinvconOFinvISFORbehave ENDFOR;ENDinvcon;

USESTD.STD_LOGIC.ALL;USESTD.STD_TTL.ALL;ENTITYand3IS PORT(a1,a2,a3:INT_WLOGIC;o1:OUTT_WLOGIC);ENDand3;ARCHITECTUREbehaveOFand3ISBEGINo1<=a1ANDa2ANDa3AFTER5ns;ENDbehave;—————三輸入與門

CONFIGURATIONand3conOFand3IS FORbehave ENDFOR;ENDand3con;例2-12:由反相器和三輸入與門構(gòu)成譯碼器的2-4譯碼器。例2-12:由反相器和三輸入與門構(gòu)成譯碼器的2-4譯碼器

LIBRARYSTD;USESTD.STD_LOGIC.ALL;ENTITYdecodeISPORT(a,b,en:INT_WLOGIC;q0,q1,q2,q3:OUTT_WLOGIC);ENDdecode;ARCHITECTUREstructuralOFdecodeISCOMPONENTinvPORT(a:INT_WLOGIC;b:OUTT_WLOGIC);ENDCOMPONENT;COMPONENTand3 PORT(a1,a2,a3:INT_WLOGIC;o1:OUTT_WLOGIC);

ENDCOMPONENT;

SIGNALnota,notb:T_WLOGIC;BEGIN I1:inv PORTMAP(a,nota); I2:inv PORTMAP(b,notb); A1:and3 PORTMAP(nota,en,notb,q0); A2:and3 PORTMAP(a,en,notb,q1); A3:and3 PORTMAP(nota,en,b,q2); A4:and3 PORTMAP(a,en,b,q3);ENDstructural;

§2.3VHDL語言的數(shù)據(jù)類型VHDL語言象其它高級語言一樣,具有多種數(shù)據(jù)類型,對大多數(shù)數(shù)據(jù)類型的定義,兩者是一致的。但是也有某些類型,在其它高級語言中是做不到的,如VHDL語言中可以由用戶自己定義數(shù)據(jù)類型。§2.3.1VHDL語言的對象及其分類所謂對象(Object)就是指一些可以存放值的容器,共有4類:信號、變量、常量和文件。對象在VHDL中是可以被賦值的。1、信號和變量都可以被連續(xù)的賦值2、而常量只能在它被說明的時候才被賦值一次(只有一次)。3、與其它三個對象不同,不能通過賦值來更新文件內(nèi)容。文件可以作為參數(shù)向子程序傳遞,通過子程序?qū)ξ募M行讀和寫操作。表2-2對象的含義及說明場合在電子電路設計中信號、變量、常數(shù)這三類對象都具有一定的物理含義例如,信號對應代表物理設計中的某一條硬件連接線;常數(shù)對應代表數(shù)字電路中的電源和地等。變量的對應關系不太直接,通常用于暫時數(shù)據(jù)的局部存儲,或用于硬件特性的高層次描述的建摸計算。一、常數(shù)(Constant)常數(shù)是一個固定的值。所謂常數(shù)說明就是對某一常數(shù)名賦予一個固定的值。通常常數(shù)的賦值在程序開始前進行。該值的數(shù)據(jù)類型則在說明語句中指明常數(shù)說明的一般格式:CONSTANT常數(shù)名:數(shù)據(jù)類型:=表達式;

例:CONSTANTVcc:REAL:=5.0v;CONSTANTDelay:TIME:=100ns;COMSTANTFbus:BIT_VECTOR:=“0101”;常數(shù)一旦被賦值就不能再改變。如上面的Vcc被賦值為5.0v,則在所有的VHDL語言程序中就被固定為5.0v。它不象變量和信號那樣,可以被任意代入不同的數(shù)值。常數(shù)所賦值的值應和定義的數(shù)據(jù)類型一致例如:CONSTANTVcc:REAL:=“0101”;這顯然是錯誤的。二、變量(Variable)變量只能用在進程、函數(shù)語句和子程序語句中作為局部的數(shù)據(jù)存儲它是一個局部量。和花時間處理的信號值正相反。所有對變量的賦值都是立即發(fā)生的

變量說明語句的格式如下:VARIABLE變量名:數(shù)據(jù)類型約束條件:=表達式;例:VARIABLEx,y:INTEGER;VARIABLEcount:INTEGERRANGE0TO255:=10;變量在賦值時不能產(chǎn)生附加延時若tmp1,tmp2,tmp3都是變量,則下式是錯誤的。tmp3:=tmp1+tmp2AFTER10ns;三、信號信號是內(nèi)部硬件連接的抽象。它除了沒有數(shù)據(jù)流動方向的說明之外,其它性質(zhì)幾乎和前面所述的“端口”概念一致。信號說明語句的格式為:SIGNAL信號名:數(shù)據(jù)類型約束條件;信號是一個全局量,它可以用來進行進程之間的通信。

例2-13:SIGNALsys_clk:BIT<=‘0’;SIGNALground:BIT<=‘0’;在程序中,信號的代入采用“〈=”代入符,不能用象變量賦值時:=符信號代入時可以附加延時例如,若s1、s2都是信號,則s1〈=s2AFTER10ns;表示s2的值經(jīng)10ns的延時以后被代入s1中。一般來說,在VHDL語言中對信號的賦值是按仿真時間來進行的,信號值的改變也需按仿真時間的計劃行事,到了規(guī)定的仿真時間才進行賦值。

四、信號和變量值代入的不同信號和變量值的代入除了形式不同(〈=和:=)之外,其操作過程也不相同在變量的賦值語句中,該語句一旦被執(zhí)行,就立即被賦值。而信號的代入則不同,信號賦值的條件是敏感信號發(fā)生變化或碰到WAIT語句也就是說:只有當進程的敏感量表中的任一個發(fā)生變化且進程執(zhí)行結(jié)束;或者碰到WAIT語句的時候,信號值才會進行代入。例2-14:下面兩個程序PROCESS(a,b,c,d)BEGINd<=a;x<=cXORd;d<=b;y<=cXORd;ENDPROCESS;結(jié)果:x<=bc; y<=bc;

PROCESS(a,b,c)VARIABLEd:BIT;BEGIN d:=a; x<=cXORd; d:=b; y<=cXORd;ENDPROCESS;結(jié)果:x<=ca; y<=cb;信號與變量的主要區(qū)別有:信號賦值至少有△延遲(可為0延遲);而變量賦值沒有延遲。信號除當前值之外,還有許多相關信息,如歷史信息、投影波形等;而變量只有當前值。進程對信號敏感,而不對變量敏感。信號可以是多個進程的全局信號;而變量只在定義它們的順序域(進程、子程序)內(nèi)出現(xiàn)信號是硬件中連線的抽象描述,而變量中無類似的對應關系?!?.3.2VHDL語言的數(shù)據(jù)類型VHDL是一種強類型語言,即每一個對象具有一種類型且只能具有該類型的值。在VHDL中,信號、變量、常數(shù)都要指定數(shù)據(jù)類型,而且VHDL的數(shù)據(jù)類型定義相當嚴格,不同類型之間的數(shù)據(jù)不能直接代入。而且,即使數(shù)據(jù)類型相同,位長不同時也不能直接代入。因此要熟練使用VHDL語言,就必須理解各種數(shù)據(jù)類型的定義。一、標準的數(shù)據(jù)類型(10種)1、整數(shù)2、實數(shù)3、位4、位矢量5、布爾量6、字符7、字符串8、大于等于0的整數(shù)、正整數(shù)。9、Time時間10、錯誤等級位(Bit)用來表示數(shù)字系統(tǒng)中的一個位位值用‘0’或‘1’表示位的取值與整數(shù)中的1和0不同,‘1’和‘0’僅表示一個位的兩種取值位數(shù)據(jù)與布爾數(shù)據(jù)也不同,可以用轉(zhuǎn)換函數(shù)來轉(zhuǎn)換。位矢量(BIT_VECTOR)位矢量是用雙引號括起來的一組位數(shù)據(jù)如“001100”,x“00BB”這里,位矢量最前面的x表示是十六進制用位矢量表示總線狀態(tài)最形象也最方便布爾量(Boolean)一個布爾量只有兩種狀態(tài),“真”和“假”但是它和位不同,沒有數(shù)值的含義,也不能進行數(shù)值運算,它只能進行關系運算。例如,它可以在IF語句中被測試,測試結(jié)果產(chǎn)生一個布爾量TRUE或FALSE。一個布爾量常用來表示信號的狀態(tài)或總線上的情況。如果某個信號或變量被定義為布爾量,那么在仿真中將自動對其賦值進行核查。一般這一類型的數(shù)據(jù)初始值總是為FALSE時間(Time)完整的時間量數(shù)據(jù)應包含整數(shù)和單位兩部分。而且整數(shù)和單位之間至少應留一個空格的位置:如55sec,2min……,20us,100ns在系統(tǒng)仿真時,時間數(shù)據(jù)可以表示信號延時,從而使模型系統(tǒng)能更逼近實際系統(tǒng)的運行環(huán)境錯誤等級(SeverityLevel)錯誤等級用來表示系統(tǒng)的狀態(tài)共有4種:NOTE、WARNING、ERROR、FAILURE在系統(tǒng)仿真過程中,可以用這種狀態(tài)來提示系統(tǒng)當前的工作情況

因為VHDL是一種強類型語言,所以任何一個信號和變量的賦值都必須滿足:1、數(shù)據(jù)類型要匹配;2、賦值一定要落入給定的約束區(qū)間中。(約束區(qū)間的說明通常跟在數(shù)據(jù)類型說明的后面)例如:INTEGERRANGE100DOWNTO1;--DOWNTO表示下降REALRANGE2.0TO30.0;--TO表示上升二、用戶定義的數(shù)據(jù)類型可由用戶定義的數(shù)據(jù)類型常見的有8種:——枚舉(Enumerated)類型;——整數(shù)(Integer)類型;——實數(shù)(Real)類型;——數(shù)組(Array)類型;——存取(Access)類型;——文件(File)類型;——記錄(Recorder)類型;——時間(Time)類型(物理類型)三、數(shù)據(jù)類型的轉(zhuǎn)換在VHDL語言中,數(shù)據(jù)類型的定義是相當嚴格的,不同類型的數(shù)據(jù)是不能進行運算直接代入的。為了實現(xiàn)正確的代入操作,必須要將要代入的數(shù)據(jù)進行類型變換。變換函數(shù)通常由VHDL語言的包集合提供。例如在“STD_LOGIC_1164”、“STD_LOGIC_ARITH”“STD_LOGIC_UNSIGNED”的包集合中提供了如下所示的數(shù)據(jù)類型變換函數(shù)(參見教材p114表3-4)例如:STD_LOGIC_1164包集合:提供BIT_VECTOR和STD_LOGIC_VECTOR、BIT和STD_LOGIC之間相互轉(zhuǎn)換的變換函數(shù)。STD_LOGIC_ARITH包集合:提供STD_LOGIC_VECTOR和整數(shù)、有符號數(shù)、無符號數(shù)之間的變換函數(shù)。STD_LOGIC_UNSIGNED包集合:由STD_LOGIC_VECTOR轉(zhuǎn)換成INTEGER.四、

IEEE標準“STD_LOGIC”、“STD_LOGIC_VECTOR”VHDL的標準數(shù)據(jù)類型“BIT”是一個邏輯型的數(shù)據(jù)類型。這類數(shù)據(jù)取值只能是“0”或“1”,由于不存在不定狀態(tài)“X”,故不便于仿真。而且,它也不存在高阻狀態(tài),因此很難用它來描述雙向數(shù)據(jù)總線。所以,IEEE在1993年制訂出了新標準IEEESTD1164,使得“STD_LOGIC”型數(shù)據(jù)可以具有以下9種不同得值:

“U”——初始值“X”——不定“0”——0“1”——1“Z”——高阻“W”——弱信號不定“L”——弱信號0“H”——弱信號1“-”——不可能情況§2.4VHDL語言的運算操作符在VHDL語言中共有四類操作符;邏輯運算(Logic)關系運算(Relational)算術運算(Arithmetic)并置運算(Concatenation)運算操作符具有優(yōu)先級,邏輯運算符NOT級別最高,AND的邏輯運算級別最低?!?.4.1邏輯運算符(7種)NOT——取反(最高)AND——與(最低)OR——或NAND——與非NOR——或非XOR——異或Shift--移位

這6種運算符可以對“STD_LOGIC”和“BIT”等的邏輯型數(shù)據(jù),“STD_LOGIC_VECTOR”邏輯型數(shù)組及布爾型數(shù)據(jù)進行邏輯運算在VHDL中,邏輯表達式的左右沒有優(yōu)先級差別例如,在下例中,去掉括號,那么從語法上來說是錯誤的:X〈=(aANDb)OR(NOTcANDd);§2.4.2算術運算符VHDL語言有10種算術運算符,它們分別是:+——加;-——減;*——乘;/——除;MOD——求模;REM——取余;+——正;(一元運算)-——負;(一元運算)**——指數(shù);ABS——取絕對值;§2.4.3關系運算符VHDL語言中有6種關系運算符,它們分別是:

=——等于;

/=——不等于;

<——小于;

<=——小于等于;

>——大于;

>=——大于等于;在進行關系運算時,左右兩邊的操作數(shù)的數(shù)據(jù)類型必須相同,但是位長度不一定相同。在位長度不同時,只能按從左至右的比較結(jié)果作為關系運算的結(jié)果。如;“1010”<“111”。為了使位矢量能正確進行關系運算,在程序包“STD_LOGIC_UNSIGNED”中對“STD_LOGIC_VECTOR”關系運算重新作了定義,使其可以正確的進行關系運算。注意在使用時必須首先說明調(diào)用該包集合(程序包)當然,此時位矢量也可以和整數(shù)進行關系運算§2.4.4并置運算符并置運算符“&”用于位的連接。例如,將4個位用并置運算符“&”連接起來就可以構(gòu)成一個具有4位長度的位矢量兩個4位的位矢量用并置運算符“&”連接起來就可以構(gòu)成一個8位長度的位矢量§2.5VHDL最基本的描述方法VHDL對系統(tǒng)與電路提供的最基本的描述方法是:結(jié)構(gòu)描述和行為描述結(jié)構(gòu)描述是對一個硬件的結(jié)構(gòu)進行描述,主要是描述它由哪些子元件組成,以及各個元件之間的互連關系,它與系統(tǒng)的原理圖設計很類似。行為描述的主要特點在于它能從行為上描述系統(tǒng)和電路,采用的方法主要是通過一系列的順序語句和一系列并行語句來進行描述,其中并行語句主要用來描述各摸型算法之間的連接關系在用VHDL語言描述系統(tǒng)硬件行為時若按語句執(zhí)行順序?qū)ζ溥M行分類,可以分為順序(sequential)描述語句和并行(concurrent)描述語句。例如進程語句(processstatement),它是一個并行語句。在一個結(jié)構(gòu)體內(nèi)可以有幾個進程語句同時存在,各進程語句是并發(fā)執(zhí)行的。但是,在進程內(nèi)部所有語句都必須是順序描述語句這兩類語句的靈活運用就可以正確的描述系統(tǒng)的并發(fā)行為和順序行為§2.5.1順序描述語句順序描述語句只能出現(xiàn)在進程或子程序中,由它定義進程或子程序所執(zhí)行的算法。語句中所涉及到的系統(tǒng)行為有時序流、控制、條件和迭代等語句功能有:算術、邏輯運算、信號和變量的賦值、子程序的調(diào)用等順序描述語句象在一般高級語言中一樣,是按出現(xiàn)次序加以執(zhí)行的VHDL中順序描述語句有以下十種

——WAIT語句

——ASSERT斷言語句

——信號代入語句

——變量賦值語句

——IF語句

——CASE語句

——LOOP語句

——NEXT語句

——過程調(diào)用語句

——NULL語句:一、WAIT語句進程在仿真運行中總是處于“執(zhí)行”或“掛起”兩種狀態(tài)之一:

WAIT語句的功能就是當進程執(zhí)行到等待語句時,就將被掛起,并設置好再次執(zhí)行的條件。WAIT語句可以設置4種不同狀態(tài)的等待條件。WAIT語句可以設置4中不同條件無限等待、時間到、條件滿足以及敏感信號量變化其書寫格式為:WAIT——無限等待WAITON——敏感信號變化WAITUNTIL——條件滿足WAITFOR——時間到其中后三種條件可以單獨使用也可以混合使用1、WAITONWAITON語句的完整書寫格式為

WAITON信號1,[信號2]…該語句的含義是等待后面跟的信號量發(fā)生變化,只要有一個發(fā)生改變進程就會結(jié)束掛起狀態(tài),而繼續(xù)執(zhí)行WAITON后面的語句。如:WAITONa,b;該語句表明,它等待信號量a或b發(fā)生變化,a或b中只要有一個發(fā)生變化,進程將結(jié)束掛起狀態(tài),而繼續(xù)執(zhí)行WAITON語句后面的語句例2-21:PROCESS(a,b)BEGINy<=aANDb;ENDprocess;

或:

PROCESSBEGINY<=aANDb;WAITONa,b;ENDPROCESS;

上面兩個進程的描述是完全等價的,只是引起進程變化的信號敏感量的書寫方法不同。錯誤形式:PROCESS(a,b)BEGINy<=aANDb;WAITONa,b;ENDPROCESS;如果PROCESS語句已經(jīng)有了信號敏感量的說明,那么在進程中就不能再使用WAITON語句2、WAITUNTIL其書寫格式為:WAITUNTIL布爾表達式;當進程執(zhí)行到該語句時,若表達式為“假”進程將被掛起,直到表達式返回一個“真”值,進程才會被再次啟動。該語句在表達式中將建立一個隱式的敏感信號量表,當表中的任何一個信號量發(fā)生變化時,就立即對表達式進行一次評估,如果評估結(jié)果使表達式返回一個“真”值,則進程脫離等待狀態(tài),繼續(xù)執(zhí)行下一個語句例如:WAITUNTIL((X*10)<100);在這個例子中,當信號量X的值大于或等于10時,進程執(zhí)行到該語句,就將被掛起;當X的值小于10時進程再次被啟動,繼續(xù)執(zhí)行WAITUNTIL語句的后繼語句。3、WAITFOR語句書寫格式:WAITFOR時間表達式;例:WAITFOR20ns;

WAITFOR(a*(b+c));a、b、c為時間量進程執(zhí)行到該語句時被掛起,直到等待時間到了以后,進程才再執(zhí)行后面的語句。4、多條件WAIT語句在前面的3個WAIT語句中,等待的條件都是單一的,要么是信號量,要么是布爾量或是時間量。實際上WAIT語句還可以同時使用多個等待條件,例如:WAITONumi,interruptUNTIL((umi=true))OR(interrupt=TRUE))FOR5us;

上述語句等待的是3個條件:上述語句等待的是3個條件:信號量umi和interrupt任何一個有一次變化;信號量umi或interrupt任何一個取值為“真”;該語句已等待5us。只要上述三個條件中的一個或多個滿足,進程就能再次啟動,繼續(xù)執(zhí)行WAIT語句的后繼語句應注意:在多個條件等待時,其表達式的值至少應包含一個信號量的值,例如:WAITUNTIL(interrupt=TRUE)OR(old_clk=‘1’);

如果上面語句中interrupt和old_clk兩個都是變量,而沒有一個信號量,那么,即使兩個變量有變化,該語句也不會對表達式進行評估和計算(事實上,在掛起的兩個變量的值是不可能改變的)。這樣,該語句將變成無限的等待語句,包含該等待語句的進程就不可能再次啟動。因而,在多等待條件中,只有信號變化才能引起等待語句表達式的一次新的評價和計算。5、超時等待如果在所設計的程序模塊中,等待語句所等待的條件,在實際執(zhí)行時不能保證一定會碰到。在這種情況下,等待語句通常要加一項超時等待項,以防止該等待語句進入無限期的等待狀態(tài)。通常用下面的語句格式來進行超時說明:WAITUNTIL表達式FOR1us;

ASSERT(表達式);REPORT“…”SEVERITYERROR;…

如果等待時間超過了規(guī)定時間,進程將執(zhí)行下一條ASSERT語句。ASSERT語句判斷條件是為真,則繼續(xù)執(zhí)行下一條語句,若判斷條件為假,則向操作人員提供錯誤信息輸出,如“sendBtimedoutat‘1’”。這樣將有助于操作人員了解在進程中發(fā)生了超時等待。例如:WAITUNTILsendB=‘1’FOR1us;ASSERT(sendB=‘1’)REPORT“sendBtimedoutat‘1’;SEVERITYERROR;該斷言語句的條件是信號量sendB=‘1’如果執(zhí)行到該語句時,信號量sendB=‘0’說明條件不滿足,就會輸出REPORT后跟的文字串。該文字串說明出現(xiàn)了超時等待錯誤,SEVERITY后跟的錯誤級別告訴操作人員,其出錯級別為ERROR。斷言語句為程序的仿真和調(diào)試帶來了極大的方便。二、信號代入語句書寫格式:目的信號量〈=信號量表達式;如A〈=B;該語句把右邊信號表達式的值賦予左邊的目的信號量;代入符號兩邊信號量的類型和位長度應該是一致的;在應用時須注意上、下文的含義和說明,因為代入符號與關系操作符的“〈=”時非常相似的三、變量賦值語句書寫格式:目的變量:=表達式;該語句表明,目的變量的值將由表達式所表達的數(shù)值代替,目的變量的類型、范圍及初值在事先應給出過,右邊的表達式可以是變量、信號或字符。變量和一般高級語言中的變量是類似的。例如:a:=2;b:=3;c:=d+e;注意:變量值只在進程或子程序中使用,它無法傳遞到進程之外因此,它類似于一般高級語言的局部變量,只在局部范圍內(nèi)有效五、IF語句IF語句是根據(jù)所指定的條件來確定執(zhí)行那些語句的其書寫格式通??煞譃?種:1、IF語句的門閂控制書寫格式:IF條件THEN

順序處理語句

ENDIF

當程序執(zhí)行到該IF語句時就要判斷此IF語句所指定的條件是否成立。如果成立,執(zhí)行IF語句所包括的順序處理語句;如果條件不成立,程序?qū)⑻^IF語句所包含的順序處理語句,而向下執(zhí)行IF語句后繼的語句這里的條件起門閂作用。典型電路:觸發(fā)器例如:

IF(a=‘1’)THENc〈=b;ENDIF;

當a=‘1’時,c〈=b;否則將不執(zhí)行c〈=b而執(zhí)行下面的語句。2、IF語句的二選擇控制

IF條件THEN

順序處理語句;

ELSE

順序處理語句;

ENDIF;

該語句的功能是:當條件滿足時,執(zhí)行THEN與ELSE之間的順序處理語句,否則執(zhí)行ELSE和IF之間的順序處理語句。這種描述的典型邏輯電路實例是二選一電路。例2-22:ARCHITECTURErtlOFmux2ISBEGINPROCESS(a,b,sel)IF(sel=‘1’)THENc〈=a;ELSEc〈=b;ENDIF;ENDPROCESS;ENDrtl;3、IF語句的多選擇控制IF語句的多選擇控制又稱IF語句的嵌套,其書寫格式為:

IF條件

THEN

順序處理語句;

ELSIF條件

THEN

順序處理語句;

ELSIF條件THEN

順序處理語句;

ELSE

順序處理語句;

ENDIF;在這種多選擇控制的IF語句中設置了多個條件,當滿足所設置的多個條件之一時就執(zhí)行該條件后跟的順序處理語句如果所有設置的條件都不滿足,則執(zhí)行最后一個ELSE和ENDIF之間的順序處理語句其典型的描述是多選一電路例2-23:四選一電路;LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYmux4ISPORT(input:INSTD_LOGIC_VECTOR(3DOWNTO0);

sel:INSTD_LOGIC_VECTOR(1DOWNTO0);y:OUTSTD_LOGIC);ENDmux4;ARCHITECTURErtlOFmux4ISBEGINPROCESS(input,sel)BEGINIF(sel=”00”)THENy<=input(0);ELSIF(sel=”01”)THENy<=input(1);ELSIF(sel=”10”)THENy<=input(2);ELSEy<=input(3);ENDIF;END

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論