




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
2.5VHDL主要描述語句2.5VHDL主要描述語句2.5.1順序語句2.5.2并行語句2.5.3其他語句2.5.1VHDL順序語句1順序語句特點2順序語句類型信號賦值語句變量賦值語句流程控制語句WAIT、ASSERT、NULL過程調(diào)用語句,RETURN1、順序語句特點注意:所謂順序僅僅指語句執(zhí)行(仿真執(zhí)行)的順序性。并不意味著順序語句對應(yīng)的硬件結(jié)構(gòu)也具有相同的順序性硬件中的組合邏輯具有最典型的并行邏輯功能,但它也可以用順序語句也表達(dá)。順序語句只能出現(xiàn)在進(jìn)程和子程序中2.5.1VHDL順序語句信號賦值語句1、格式目的信號<=信號量表達(dá)式;Z<=anor(bnandc);--delta延遲Z<=anor(bnandc)after5ns;Z<=”1101”;Z<=(‘1’,‘0’,‘1’,‘1’);Z(2)<=‘1’;對矢量中任一位進(jìn)行賦值Z(i)<=‘0’;設(shè)I為下標(biāo)變量(a,b,c,d)<=z;設(shè)Z為4位位矢量,A,B,C,D都是位類型2、舉例信號賦值語句3、注意(1)可在不同進(jìn)程中讀取一個信號(2)在同一進(jìn)程中對同一信號多次賦值,最后一次有效(3)不能在不同進(jìn)程中對同一信號進(jìn)行賦值(4)在進(jìn)程與子程序外是并行的,在內(nèi)部是順序的(5)對一個信號進(jìn)行有條件賦值時(IF-ELSE),要注意條件的互斥性注意條件互斥性,修改下列程序IFA=4THENS<=1;ENDIF;IFA=5THENS<=2;ENDIF;信號賦值語句變量賦值語句1、格式目的變量:=表達(dá)式;2、舉例a:=2;c:=d+e;3、注意與信號的區(qū)別流程控制語句1、IF語句格式
IF條件THEN順序語句;ENDIF;IF條件THEN順序語句;
ELSE順序語句;
ENDIF;IF條件THEN順序語句;
ELSIF條件THEN順序語句;
ELSE順序語句;
ENDIF;IF、CASE、LOOP使用IF要點
IF語句可以嵌套
IF語句用于有優(yōu)先級的條件判斷
在進(jìn)程中使用IF語句描述組合邏輯時,務(wù)必覆蓋所有情況;否則綜合后將引入鎖存器。流程控制語句例1IF(A='1')THENC<=B;ENDIF;
例2IF(SEL=‘1’)THENC〈=A;
ELSEC〈=B;
ENDIF; 流程控制語句2、CASE語句CASE表達(dá)式ISWHEN選擇值=〉順序語句;WHEN選擇值=〉順序語句;
…WHENOTHERS=〉順序語句;
ENDCASE;選擇值的四種表達(dá)方式:1)When6=>順序語句;2)When2TO4=>順序語句;表示取值為2、3和43)When3|5=>順序語句;表示取值為3或54)Whenothers=>順序語句;流程控制語句使用CASE要點1)選擇值不可重復(fù)或重疊
2)當(dāng)CASE語句的選擇值無法覆蓋所有情況時,要用OTHERS指定未能列出的其他所有情況的輸出值。
3)選擇值之間沒有優(yōu)先級的差別。IF語句是有優(yōu)先權(quán)的順序語句,CASE是并行語句;libraryieee;useieee.std_logic_1164.all;entitymux4isport(a,b,d0,d1,d2,d3:instd_logic;y:outstd_logic);endmux4;architecturebehavofmux4is signalsel:integerrange0to3;begin
流程控制語句例4選1數(shù)據(jù)選擇器--請用IF語句重新描述4選一的選擇器process(a,b,d0,d1,d2,d3)beginsel<='0';if(a='1')thensel<=sel+1;endif;if(b='1')thensel<=sel+2;endif;
caseseliswhen0=>y<=d0;when1=>y<=d1;when2=>y<=d2;when3=>y<=d3;endcase;endprocess;endbehav;CASE語句與IF語句比較:
選擇器的行為描述可以用IF語句或CASE語句;
IF語句是有優(yōu)先權(quán)的順序語句,CASE語句中條件句具有相同的優(yōu)先權(quán)(把任意兩個換一下位置,結(jié)果一樣);
CASE語句中的條件必須窮舉,不能重復(fù),不能窮舉的條件用ORTHERS表示;而IF語句允許條件涵蓋不完整。流程控制語句3、LOOP語句:常用來描述迭代電路的行為。(1)[標(biāo)號]:FOR循環(huán)變量IN離散范圍LOOP
順序處理語句;
ENDLOOP[標(biāo)號]; 流程控制語句例1:ASUM:FORiIN1TO9LOOP-i變量不用定義和說明
SUM:=i+SUM;
ENDLOOPASUM;(2)[標(biāo)號]:WHILE條件LOOP
順序處理語句;
ENDLOOP[標(biāo)號]; 例2:8位奇偶校驗電路(偶較驗)entitycheckisport(a:instd_logic_vector(7downto0);y:outstd_logic);endcheck;
流程控制語句architecturebehavofcheckisbeginprocess(a)variabletmp:std_logic;
variableI:integerrange0to10;begintmp:=‘0’;I:=0;
while(I<8)looptmp:=tmpXORa(I);I:=I+1;Endloop;y<=tmp;Endprocess;Endbehav;--請用FOR_LOOP循環(huán)改寫WHILE循環(huán)語句流程控制語句流程控制語句4、NEXT語句用于LOOP語句內(nèi)部,有條件或無條件終止當(dāng)前循環(huán)迭代并開始下一循環(huán)。它的語句格式有以下三種:
(1)NEXT;--無條件終止循環(huán),跳回到當(dāng)前循環(huán)開始處(2)NEXT標(biāo)號;--無條件終止循環(huán),跳到標(biāo)號指定的循環(huán)語句開始處(3)NEXT標(biāo)號WHEN條件;--條件成立,跳到標(biāo)號指定的循環(huán)語句
開始處
流程控制語句例:Lp1:forIin1to10loopLp2:forJin10downto1loopnextLp1whenI=J;--條件成立,跳到LP1處
k:=I*J;--條件不成立,繼續(xù)內(nèi)循環(huán)LP2的執(zhí)行
endloopLp2;endloopLp1;y<=k;
……;流程控制語句5、EXIT語句
與NEXT語句不同的是,執(zhí)行EXIT語句將結(jié)束循環(huán)狀態(tài),從LOOP循環(huán)中跳出,結(jié)束LOOP的執(zhí)行。格式有三種:
(1)exit;--無條件終止循環(huán),
跳到本循環(huán)體結(jié)束處,即離開本循環(huán)(2)exit標(biāo)號;--無條件終止循環(huán),
跳到標(biāo)號指定的循環(huán)體結(jié)束處(3)exit標(biāo)號when條件;
--條件成立,
跳到標(biāo)號指定的循環(huán)結(jié)束處流程控制語句
例:
lp1:foriin10downto1looplp2:forjin0toiloopexitlp2wheni=j;--當(dāng)i=j時終止LP2循環(huán)
matrix(i,j):=i*(j+1);endlooplp2;endlooplp1;WAIT語句1、WAIT語句格式WAIT;無限等待WAITON信號表;敏感信號發(fā)生變化時啟動進(jìn)程WAITUNTIL條件表達(dá)式;條件成立時啟動進(jìn)程WAITFOR時間表達(dá)式;等待時間到進(jìn)程啟動
WAITUNTIL((X*10)<100);......;WAITFOR20ns;......;2、例子processbeginy<=aandb;waitona,b;endprocess;----------------------process(a,b)beginy<=aandb;endprocess;processbeginwaituntilclk=’1’;q<=data;endprocess;-------------------------------process(clk)beginifclk=‘1’thenq<=data;endif;endprocess;WAIT語句2、例子2、例子WAITUNTILclock=‘1’;WAITUNTILrising_edge(clock);WAITUNTILNOTclock’STABLEANDclock=‘1’;WAITUNTILclock’EVENTANDclock=‘1’;WAIT語句以上四條WAIT語句所設(shè)的進(jìn)程啟動條件都是時鐘上升沿,所以它們所對應(yīng)的硬件結(jié)構(gòu)是一樣的NULL語句caseopcodeiswhen‘001’=>tmp:=regaandregb;when“101”=>tmp:=regaorregb;when“110”=>tmp:=notrega;whenothers=>null;--不作任何操作,跳到下一語句endcase;ASSERT語句assert條件表達(dá)式report“條件不滿足時輸出的相關(guān)信息”severity錯誤等級;--note,warning,error,failure用于仿真、調(diào)試中的人-機(jī)會話,它可以給出一個文字串作為警告和錯誤信息。1.格式另:在1164版中,可單獨使用REPORT語句。如:IFcount>50thenREPORT“thecountisover50”;Endif;entityRSFFisport(s,r:inbit;q,qb:outbit);endRSFF;architecturebehavofRSFFisbegin
processbegin
assertnot(S=’1’andR=’1’)report“bothSandRequalto‘1’”severityerror;--設(shè)為或非門構(gòu)成的RSFFifS=’0’andR=’0’thennext_state:=present_state;else……2、例:子程序調(diào)用語句1、過程調(diào)用格式過程名([形參名=>]實參表達(dá)式,…);形參名為當(dāng)前預(yù)調(diào)用的過程中已說明的參數(shù)名實參是當(dāng)前調(diào)用過程形參的接受體被調(diào)用的形參名與調(diào)用語句中的實參的對應(yīng)關(guān)系有兩種:一類是位置關(guān)聯(lián)法(位置相對應(yīng)),可以省去形參名;另一類是名字關(guān)聯(lián)法(=>表示相關(guān)聯(lián))子程序調(diào)用語句2、過程調(diào)用例子PACKAGEdata_typesISSUBTYPEdata_elementISINTEGERRANGE0TO3;TYPEdata_arrayISARRAY(1To3)OFdata_element;ENDdata_types;USEWORK.data_types.ALL;EntitysortISPort(in_array:Indata_array;out_array:outdata_array);Endsort;
ArchitectureexmpofsortisbeginProcess(in_array)Procedureswap(data:INOUTdata_array;low,high:INinteger)isvariabletemp:data_element;beginif(data(low)>data(high))thentemp:=data(low);data(low):=data(high);data(high):=temp;endif;
endswap;
--將數(shù)組進(jìn)行排序此過程的有效區(qū)域?Variablemy_array:data_array;Beginmy_array:=in_array;
swap(my_array,1,2);swap(my_array,2,3);swap(my_array,1,2);out_array<=my_array;EndProcess;Endexmp;
子程序調(diào)用語句3、函數(shù)調(diào)用函數(shù)調(diào)用與過程調(diào)用十分相似,不同的是,調(diào)用函數(shù)將返回一個指定數(shù)據(jù)類型的值,函數(shù)的參量只能是輸入值。
參考”2.2VHDL結(jié)構(gòu)體的子結(jié)構(gòu)描述.ppt”返回語句(Return)1、返回語句兩種格式:RETURN;RETURN表達(dá)式;第一種格式只能用于過程(Procedure),它只是結(jié)束過程,并不返回任何值第二種格式只能用于函數(shù),必須返回一個值;返回語句只能用于子程序中。執(zhí)行返回語句將結(jié)束子程序的執(zhí)行,無條件地跳轉(zhuǎn)到子程序的END處。2.5.2VHDL并行語句1并行語句特點2并行語句類型進(jìn)程語句(略)并發(fā)信號賦值(略)條件信號賦值選擇信號賦值3關(guān)于順序語句的順序性VHDL并行語句特點1、VHDL并行語句特點注意:每一并行語句內(nèi)部的語句運行方式可以是并行執(zhí)行(如塊語句)或順序執(zhí)行(進(jìn)程語句)。各種并行語句在結(jié)構(gòu)體中的執(zhí)行是同步進(jìn)行的,或者說是并行運行的,其執(zhí)行方式與書寫順序無關(guān)。條件信號賦值賦值目標(biāo)<=表達(dá)式WHEN賦值條件ELSE
表達(dá)式WHEN賦值條件ELSE…
表達(dá)式;
條件信號賦值語句的功能與在進(jìn)程中的IF語句相同,在執(zhí)行條件信號語句時,每一賦值條件是按書寫的先后關(guān)系逐項測定的,一旦發(fā)現(xiàn)賦值條件為TRUE,立即將表達(dá)式的值賦給賦值目標(biāo),并不再測試下面的條件。與IF語句的區(qū)別:(1)IF只能在進(jìn)程內(nèi)使用,且不一定要有else語句;when-else一定要有else語句;(2)when-else不能嵌套,只有當(dāng)用進(jìn)程語句、IF語句和Case語句難以描述時,才使用條件語句。選擇信號賦值WITH選擇表達(dá)式SELECT
賦值目標(biāo)<=表達(dá)式1WHEN選擇值1,…
表達(dá)式nWHENOTHERS;與CASE語句的功能相似。選擇信號賦值語句不允許有條件重疊現(xiàn)象,條件涵蓋不全時,請用OTHERS覆蓋全。When-else、with-select和Case區(qū)別以MUX為例。MUX實體libraryieee;useieee.std_logic_1164.all;entitymuxisport(a,b,c,d:instd_logic;s:instd_logic_vector(1downto0);y:outstd_logic);endentitymux;When-Elsearchitecturemux2ofmuxisbeginy<=awhens="00"elsebwhens="01"elsecwhens="10"elsedwhens="11"else'X';endarchitecturemux2;With-Selectarchitecturemux1ofmuxisbeginwithsselecty<=awhen“00”,bwhen“01”,
cwhen“10”,dwhen“11”,'X'whenothers;endarchitecturemux1;Casearchitecturemux2ofmuxisbegin Process(s)
begin CASEsis when"00“=>y<=a; when"01"=>y<=b; when"10"=>y<=c; when"11"=>y<=d; WhenOthers=>y<='X'; ENDCASE; EndProcess;endarchitecturemux2;關(guān)于順序語句的順序性1.表現(xiàn)出并行特性的順序語句architecturebehofsequenceisbeginProcess(Reset,Clock)BeginIfReset='1'thenA<=1;B<=0;Elsifrising_edge(Clock)thenIfA=1thenB<=4;Endif;IfB=4thenA<=5;Endif;Endif;EndProcess;endbeh;(1)寫出對應(yīng)實體(2)將內(nèi)部的IF語句互換位置,對綜合和仿真結(jié)果有何影響?(3)分析其執(zhí)行過程(4)進(jìn)程中沒有變量時,進(jìn)程內(nèi)語句仍可視為并行執(zhí)行;如果有變量則呈現(xiàn)為順序性2.5.3其他語句1.生成語句2.屬性語句3.延時語句生成語句1、生成語句格式[標(biāo)號:]FOR變量IN不連續(xù)區(qū)間GENERATE
并行語句;
ENDGENERATE[標(biāo)號];
產(chǎn)生多個相同的電路結(jié)構(gòu)。典型應(yīng)用:生成存儲器陣列和寄存器陣列。生成語句1、生成語句格式[標(biāo)號:]IF條件GENERATE
并行語句;
ENDGENERATE[標(biāo)號];生成語句2、例子(shift4,全部規(guī)則電路)entityshift4isport(a,clk:instd_logic;b:outstd_logic);endshift4;生成語句2、例子(shift4,全部規(guī)則電路)architecturegenofshiftiscomponentdffport(d,clk:instd_logic;q:outstd_logic);endcomponent;signalz:std_logic_vector(0to4);beginz(0)<=a;
g1:forIin0to3generatebegindff(I):dffportmap(z(I),clk,z(I+1));endgenerate;b<=z(4);endgen;將元件例化和生成語句結(jié)合使用--請將本例全部采用元件例化書寫architectureconsofshift4iscomponentdffport(d,clk:instd_logic;q:outstd_logic);endcomponent;signalz:std_logic_vector(0to4);beginz(0)<=a;b<=z(4);dff1:dffportmap(z(0),clk,z(1));dff2:dffportmap(z(1),clk,z(2));dff3:dffportmap(z(2),clk,z(3));dff4:dffportmap(z(3),clk,z(4));endcons;生成語句3、例子(首尾不規(guī)則電路)電路分析:電路中間部分的結(jié)構(gòu)是規(guī)則的,但在前端有點不同,因此要改造一下才能利用FOR_GENERATE語句。或者使用IF_GENERATE語句。圖中的d_ff觸發(fā)器有兩個輸出q和nq,所以下面對這個d觸發(fā)器將重新描述生成語句3、例子(首尾不規(guī)則電路)Entityd_ffisport(d,clk:instd_logic;q,nq:outstd_logic);Endd_ff;Architecturebehavofd_ffisBeginprocess(clk)beginifclk’eventandclk=‘1’thenq<=d;nq<=notd;endif;endprocess;Endbehav;Entitycnt_nisgeneric(n:integer:=6);port(q:outstd_logic_vector(0ton-1);in_1:instd_logic);Endcnt_n;Architecturebehavofcnt_nisComponentd_ffport(d,clk:instd_logic;q,nq:outstd_logic);Endcomponent;生成語句3、例子(首尾不規(guī)則電路)Signals:std_logic_vector(0ton);Begins(0)<=in_1;p1:foriin0ton-1
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 分期房產(chǎn)合同范本
- 收款付款合同范本
- 京東送包車合同范本
- 單位門頭安裝合同范本
- 醫(yī)用氧氣購銷合同范本
- 助理就業(yè)合同范本
- 包裝材料銷毀合同范本
- 傳媒剪輯合同范本
- 醫(yī)生參加培訓(xùn)合同范本
- 勞務(wù)配送合同范本
- 模塊1鐵道線路養(yǎng)護(hù)與維修認(rèn)知《鐵道線路養(yǎng)護(hù)與維修》教學(xué)課件
- 高鐵無砟軌道精調(diào)精測課件
- 2024年企業(yè)規(guī)章制度修訂方案
- 聚焦任務(wù)的學(xué)習(xí)設(shè)計作業(yè)改革新視角
- 西班牙語筆記A1
- 血管活性藥物靜脈輸注護(hù)理方法(中華護(hù)理學(xué)會團(tuán)體標(biāo)準(zhǔn)T CNAS 22-2021)
- 史上最完善IPD培訓(xùn)資料華為IPD培訓(xùn)資料
- 2024高二語文期末試卷(選必上、中)及詳細(xì)答案
- 《選材專項訓(xùn)練》課件
- 附著式升降腳手架安裝平臺和架體檢查驗收表
- 小兒麻疹的護(hù)理查房
評論
0/150
提交評論