版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、VHDL語言的主要描述語句按照語句的執(zhí)行順序對VHDL語言進行分類,包含兩類語句:并行描述語句該語句的執(zhí)行與書寫順序無關,總是同時被執(zhí)行順序描述語句從仿真的角度,該語句是順序執(zhí)行的進程語句(PROCESS是最典型的并行語句,一個構造體內(nèi)可以有幾個進程語句同時存在,而且并發(fā)執(zhí)行。但是進程內(nèi)部的所有語句都是順序語句。一、順序描述語句順序描述語句只能用在進程和子程序中,它和其他高級語言一樣,其語句是按照語句的出現(xiàn)的順序加以執(zhí)行的。如下分別介紹有關的順序描述語句1. WAIT語句進程在執(zhí)行過程中總是處于兩種狀態(tài):執(zhí)行或掛起,進程的狀態(tài)變化受等待語句的控制,當進程執(zhí)行到等待語句,就被掛起,并等待再次執(zhí)行
2、進程等待語句的格式:* WAIT無限等待WAITON敏感信號變化* WAITUNTIL條件滿足WAITFOR時間到(1) WAITON格式:WAITON信號,信號例5-1PROCESS(a,b)BEGINy<=aANDb;ENDPROCESS;該例中的進程與下例中進程相同:例5-1PROCESSBEGINy<=aANDb;WAITONa,b;ENDPROCESS;例5-2PROCESS(a,b)BEGINy<=aANDb;WAITONa,b;ENDPROCESS;(2) WAITUNTIL直到條件滿足格式:WAITUNTIL布爾表達式當進程執(zhí)行到該語句時,被掛起;若布爾表達式
3、為真時,進程將被啟動例:WAITUNTIL(x*10)<100)(3) WAITFOR等到時間到格式:WAITFOR時間表達式當進程執(zhí)行到該語句時,被掛起;等待一定的時間后,進程將被啟動例:WAITFOR20ns;WAITFOR(a*(b+c);(4) 多條件WAIT語句例:WAITONnmi,interruptUNTIL(nmi=TRUE)OR(interrupt=TRUE)FOR5us該等待有三個條件:第一,信號nmi和interrupt任何一個有一次刷新動作第二,信號nmi和interrupt任何一個為真第三,已等待5us只要一個以上的條件被滿足,進程就被啟動.*注意:多條件等待時
4、,表達式的值至少應包含一個信號量的值。(5) 超時等待例53【例5-3JARCHITECTUREwaitexampleOFwait.exampleISSIGNAL»endB«sendA:STD_LOGICfBEGINsendA<r0»A:PROCESSBEGINWAITUNTILsendB=/rfsemiAVhAFTER10nsiWAITUNTILsendB=,0/1sendA<5=5r0JAFTER10nsiENDPROCESSA<BsPROCESSBEGINWAITUNTILsendA=/0,t'sendB<=r0/AFTER1
5、0nsfWAITUNTILsendA-fV卜sendB<=TAFTER10nsiENDPROCESSE*ENDwait-example*例54ARCHITECTUREwair-tinrfourOFISSIGNALtendAtbcwIB:STOLQGICiBEGINAPROCESSBEGINWAITUNTIL(s«idB-,l/)FOR1啊ASSERT(sendB=,l>)REPORT如dBtimedoutat7V"SEVERITYEKRORj8endAV="l"AFTER10n叭WAITUNTIL(BendB-'tf)FOR1呻ASS
6、ERT(sendB-)REPORTffsendBtitnedoutAtWSEVERITYERRORtsern!A<=QAFTER10ns4ENDPROCESSA:BtPROCESSBEGINWAITUNTIL(«ndA=,0,)FOR11ASSERT(sendA=r(/)REPORTSendAtimedoutatSEVERITYERROR#sendBV='O'AFTER10miWAITUNTIL(rtndA-11)FOR1ASSERTC«ndA-,l,>REPORT*MndAoutat*ltrtSEVERITYERROft1»endB&
7、lt;=,rAFTER10EN*WtOCESSB»ENDwait-timeoutf斷言語句(ASSERT)(主要用于仿真、調(diào)試)格式:ASSERT條件REPORT輸出信息SEVERITY級別執(zhí)行到斷言語句時,判斷條件,若條件滿足就繼續(xù)執(zhí)行,否則輸出文字串和錯誤級別信息例:ASSERT(tiaojian=''REPORTsomethingwrong”SEVERITYERRO;信號代入語句格式:目的信號量<=信號量表達式例:a<=b;(注意區(qū)別小于等于)2. 變量賦值語句格式:目的變量:=表達式例:c:=a+d3. IF語句三種書寫格式:1) IF的門閂控制格
8、式:IF條件THEN順序執(zhí)行語句;ENDIF;例55IF(a=''THENc<=b;ENDIF;例56r«s-«LIBRARYIEEE*VSEIEEE.STD-LOGIC-1164.ALLiENTITYdffISPORT訕k,dtINSTDLOGICiqtOUTSTD-LOGIC)<ENDdff;ARCHITECTURErtlOFdffISBEGINPROCESS(dk)BEGINIF(dk*EVENTANDelk=*T)THENqV-=dENDIFiENDPROCESS(ENDrth2) IF語句的二選擇控制格式:IF條件THEN順序執(zhí)行語句;
9、ELSE順序執(zhí)行語句;ENDIF;例5-7ARCHITECTURErtlOFmux2ISBEGINPROCESS(a,b,sel)BEGINIF(sel=''THENc<=a;ELSEc<=b;ENDIF;ENDPROCESS;ENDrt1;IF語句的多選擇控制格式:IF條件THEN順序執(zhí)行語句ELSIF條件THEN順序執(zhí)行語句ELSIF條件THEN順序執(zhí)行語句ELSIF條件THEN順序執(zhí)行語句ENDIF;例如:58LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYmux4ISPORT(input:INSTD_L0GIC_VE
10、CT0R(3DOWNTO0);sei:INSTD_LOGIC_VECTOR(1DOWNTO0);q:OUTSTD_LOGIC);ENDmux4;ARCHITECTURErt1OFmux4ISBEGINnn:PROCESS(input,sel)BEGINIF(sel='OO')THENq<=input(O);ELSIF(sel='01')THENq<=input(1);ELSIF(sel='10')THENq<=input(2);ELSEq<=input(3);ENDIF;ENDPROCESSnn;ENDrt1;注意:條件判
11、斷輸出是布爾量。4. CASE語句常用來描述總線、編碼和譯碼的行為。格式:CASE表達式ISWHEN條件表達式=>順序處理語句ENDCASE;其中WHEN勺條件表達式可以有4種形式:WHEN直=>順序處理語句WHEN值|值|值|值=>順序處理語句WHEN值TO值=>順序處理語句WHENOTHERS=>?處理語句例:5-9LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYmux43ISPORT(a,b,iO,i1,i2,i3:INSTD_LOGIC;q:OUTSTD_LOGIC);ENDmux43;ARCHITECTUREmu
12、x4_behaveOFmux43ISSIGNALsel:INTEGERRANGE0TO3;BEGINnn:PROCESS(a,b,iO,i1,i2,i3)BEGINsel<=0;IF(a='1')THENsel<=sel+1;ENDIF;IF(b='1')THENsel<=sel+2;ENDIF;CASEselISWHEN0=>q<=iO;WHEN1=>q<=i1;WHEN2=>q<=i2;WHEN3=>q<=i3;ENDCASE;ENDPROCESSnn;ENDmux4_behave;例5-10
13、3-8譯碼器LIBRARYieee;USEieee.std_logic_1164.all;entitydecoder38isport(a,b,c,g1,g2a,g2b:instd_logic;y:outstd_logic_vector(7downto0);enddecoder38;architecturebehave38OFdecoder38issignalindata:std_logic_vector(2downto0);beginindata<=c&b&a;process(indata,g1,g2a,g2b)beginif(g1='1'andg2a=&
14、#39;0'andg2b='0')thencaseindataiswhen"000"=>y<="11111110"when"00l"=>y<="llllll0l"when"0l0"=>y<="lllll0ll"when"0ll"=>y<="llll0lll"when"100"=>y<="11101111"when&
15、quot;ioi"=>y<="lioillll"when"lio"=>y<="ioilllll"when"lll"=>y<="0lllllll"whenothers=>y<="XXXXXXXX"endcase;elsey<="11111111"endif;endprocess;endbehave38;例5-11LIBRARYieee;USEieee.std_logic_1164.all;ent
16、ityencoderisport(input:instd_logic_vector(7downto0);y:outstd_logic_vector(2downto0);endencoder;architecturebehaveOFencoderisbeginprocess(input)begincaseinputiswhen”"=>y<=111”;when”=>y<=110”;when”"=>y<=101”;when”=>y<=100”;when”"=>y<=011”;when”=>y<=01
17、0”;when”"=>y<=001”;when”=>y<=000”;whenothers=>y<=xendcase;endprocess;endbehave;表5-1優(yōu)先級編碼器的真值表輸入輸出iput(7)iiput(6)input(5)input(4)input(3)input(2)input(1)nput(0)Y2Y1Y0XXxXXxX0111XXTXXXX0P1110XXXXx011101XXXX0111100XxX01111r011xX011111010X0111111001X1111111000例512LIBRARYieee;USEie
18、ee.std_logic_1164.all;entitypriorisport(input:instd_logic_vector(7downto0);y:outstd_logic_vector(2downto0);endprior;architecturebe_priorOFpriorisbeginprocess(input)beginif(input(O)='O')theny<="111"elsif(input(1)='0')theny<="110"elsif(input(2)='O')the
19、ny<="101"elsif(input(3)='O')theny<="100"elsif(input(4)='O')theny<="011"elsif(input(5)='O')theny<="010"elsif(input(6)='O')theny<="001"elsey<="000"endif;endprocess;endbe_prior;5. LOOP語句格式一:標號:
20、FOR循環(huán)變量IN離散范圍LOOP順序處理語句;ENDLOOP標號;例:ASUM:FORiIN1TO9LOOPsum=1+sum;ENDLOOPASUM;例513:8位奇偶校驗電路LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYpcISPORT(a:INSTD_LOGIC_VECTOR(7DOWNTO0);y:OUTSTD_LOGIC);ENDpc;ARCHITECTUREbehaveOFpcISBEGINcbc:PROCESS(a)VARIABLEtmp:STD_LOGIC;BEGINtmp:='0'FORiIN0TO7LOOPtmp
21、:=tmpXORa(i);ENDLOOP;y<=tmp;ENDPROCESScbc;ENDbehave;格式二:標號:WHILE條件LOOP順序處理語句;ENDLOOP標號;在該語句中,如果條件為真,則進行循環(huán),否則結束循環(huán)例:I:=1;sum:=0abcd:WHILE(I<10)LOOPsum:=l+sum;I:=I+1;ENDLOOPabcd;例514:LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYpcISPORT(a:INSTD_LOGIC_VECTOR(7DOWNTO0);y:OUTSTD_LOGIC);ENDpc;ARCHITE
22、CTUREbehaveOFpcISBEGINcbc:PROCESS(a)VARIABLEtmp:STD_LOGIC;BEGINtmp:='0'i:=0;WHILE(i<8)LOOPtmp:=tmpXORa(i);i=i+1;ENDLOOP;y<=tmp;ENDPROCESScbc;ENDbehave;NEXT語句在LOOP語句中用NEXT語句跳出循環(huán)格式:NEXT標號WHEN條件;NEXT語句用于控制內(nèi)循環(huán)的結束.例5-15:PROCESS(a,b)CONSTANTmax_limit:INTEGER:=255BEGINFORIIN0TOmax_limitLOOPIF
23、(done(l)=TRUE)THENNEXT;ELSEdone(I):=TRUE;ENDIF;q(I)<=a(I)ANDb(I);ENDLOOP;ENDPROCESS;6. EXIT語句EXIT語句用于結束LOOP循環(huán)狀態(tài).格式:EXIT標號WHEN條件例5-16:PROCESS(a)VARIABLEint_a:INTEGER;BEGINint_a:=aFORI=0IN0TOmax_limitLOOPIF(int_a<=0)THENEXIT;ELSEint_a:=int_a-1;q(l)<=3.1416/REAL(a*l);ENDIFENDLOOP;y<=q;ENDPR
24、OCESS;二、并發(fā)描述語句進程語句在一個構造體中多個PROCES語句可以同時并行的執(zhí)行,該語句有如下特點:1)可以和其它進程語句同時執(zhí)行,并可以存取構造體和實體中所定義的信號2)進程中的所有語句都按照順序執(zhí)行3)為啟動進程,在進程中必須包含一個敏感信號表或WAIT語句4)進程之間的通信是通過信號量來實現(xiàn)的1. 并發(fā)信號代入代入語句在進程中使用是順序語句,但是在進程外即在構造體中使用就是并發(fā)語句,相當于一個進程例:ARCHITECTUREbehaveOFa_varISBEGINOutput<=a(l);ENDbehave;可以等效于:ARCHITECTUREbehaveOFa_varIS
25、BEGINssPROCESS(a,I)BEGINOutput<=a(I);ENDPROCESSss;ENDbehave;信號代入語句的右邊可以是算數(shù)表達式,也可以是邏輯表達式,還可以是關系表達式所以可以仿真加法器、乘法器、除法器、比較器和各種邏輯電路。2. 條件信號代入條件代入語句也是并發(fā)語句,它可以將符合條件的表達式代入信號量。格式:目的信號量<=表達式1WHEN條件1ELSE表達式2WHEN條件2ELSE表達式3WHEN條件3ELSE表達式n;例517:四選一電路LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYmux44ISPORT(i
26、O,i1,i2,i3,a,b:INSTD_LOGIC;q:OUTSTD_LOGIC);ENDmux44;ARCHITECTUREaaOFmux44ISSIGNALsei:STD_LOGIC_VECTOR(1DOWNTO0);BEGINsel<=b&a;q<=i0WHENsel="00"ELSE11 WHENsel="01"ELSE12 WHENsel="10"ELSE13 WHENsel="11"ENDaa;選擇信號代入格式:WITH表達式樣SELECT目的信號量<=表達式1WHEN條件1
27、表達式2WHEN條件2表達式nWHEN條件n;該語句很象CASE語句.例5-18:LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYmux45ISPORT(i0,i1,i2,i3,a,b:INSTD_LOGIC;q:OUTSTD_LOGIC);ENDmux45;ARCHITECTUREbbOFmux45ISSIGNALsel:INTEGERrange0to3;BEGINWITHselSELECTq<=iOWHEN0,11 WHEN1,12 WHEN2,13 WHEN3;sel<=0WHENa='0'ANDb='0
28、9;ELSE1 WHENa='1'ANDb='0'ELSE2 WHENa='0'ANDb='1'ELSE3 WHENa='1'ANDb='1'ENDbb;3. 并發(fā)過程調(diào)用語句過程調(diào)用語句可以并發(fā)執(zhí)行,但要注意如下問題:并發(fā)過程調(diào)用是一個完整的語句,在它之前可以加標號并發(fā)過程調(diào)用語句應帶有IN,OUT或INOUT的參數(shù),他們應該列在過程名后的括號內(nèi)并發(fā)過程調(diào)用可以有多個返回值例:ARCHITECTURE-.BEGINvector_to_int(z,x_flag,q);END;等同于:ARCHITECTURE.BEGINPROCESS(z,q)BEGINvector_to_int(z,x_flag,q);ENDPROCESS;END;Block語句4. 通用模塊調(diào)用語句ComponentCOMPONEN元件名PORT說明;ENDCOMPONENT;&端口映射
溫馨提示
- 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 卡巴萊歌舞表演娛樂服務行業(yè)相關項目經(jīng)營管理報告
- 工業(yè)用排風扇產(chǎn)品供應鏈分析
- 醫(yī)用軟化水產(chǎn)業(yè)鏈招商引資的調(diào)研報告
- 吸濕排汗運動胸衣產(chǎn)品供應鏈分析
- 化油器產(chǎn)品供應鏈分析
- 液壓引擎和馬達產(chǎn)品供應鏈分析
- 醫(yī)用孕婦托腹帶產(chǎn)業(yè)鏈招商引資的調(diào)研報告
- 電測量儀器市場分析及投資價值研究報告
- 保齡球手套產(chǎn)品供應鏈分析
- 外科整形用手術器械產(chǎn)品供應鏈分析
- 九年級數(shù)學上冊第23章旋轉學案(無答案)(新版)新人教版
- 50430建工審核員考試題匯總-帶答案.doc
- 經(jīng)緯度計算和轉換工具
- 鋼結構平臺施工合同
- “新生杯”三人制籃球賽比賽計分表
- 鋼絲網(wǎng)骨架聚乙烯復合管道施工手冊
- 安安全全用剪刀PPT課件
- (統(tǒng)編版四年級上冊)課本內(nèi)多音字匯總
- 動物細胞培養(yǎng)技術.ppt
- ASTMA494-2015中文版
- 法語_工程詞匯
評論
0/150
提交評論