第5章第2節(jié)-VHDL順序語句課件1_第1頁
第5章第2節(jié)-VHDL順序語句課件1_第2頁
第5章第2節(jié)-VHDL順序語句課件1_第3頁
第5章第2節(jié)-VHDL順序語句課件1_第4頁
第5章第2節(jié)-VHDL順序語句課件1_第5頁
已閱讀5頁,還剩68頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、第5章 VHDL設(shè)計(jì)進(jìn)階5.2 VHDL順序語句順序描述與并行描述語句并行語句:在結(jié)構(gòu)體中的執(zhí)行都是同時(shí)進(jìn)行的,沒有執(zhí)行順序的先、后之分;順序語句:每一條語句的執(zhí)行順序與其書寫順序?qū)?yīng);注意:順序語句綜合后,映射為實(shí)際的門電路,系統(tǒng)一上電,這些門電路都同時(shí)工作;因此順序語句并不意味者相應(yīng)地硬件結(jié)構(gòu)也有相同地順序性;順序語句只能出現(xiàn)在進(jìn)程(Process)和子程序(函數(shù)和過程)中VHDL順序語句6類基本順序語句:賦值語句轉(zhuǎn)向控制語句(IF、CASE、LOOP、NEXT、EXIT)等待語句(WAIT)子程序調(diào)用語句返回語句(RETURN)空操作語句(NULL)1 賦值語句賦值語句信號賦值變量賦值賦

2、值目標(biāo)、賦值符號、賦值源信號賦值變量賦值符號=:=位置結(jié)構(gòu)體內(nèi)定義的進(jìn)程或子程序中操作過程進(jìn)程的最后才賦值立即賦值A(chǔ)RCHITECTURE TEST OF FUZHI ISsignal A,B:integer range 0 to 255; -聲明信號A、B的位置begin process(reset,clock) variable C: integer range 0 to 255; -聲明變量C的位置 begin if reset=1 then -系統(tǒng)復(fù)位時(shí)對A、B、C賦值 A=0; B=2; -對信號賦值用”=” C:=0; -對變量賦值用”:=” elsif (clockevent a

3、nd clock=1)then C:=C+1; A=C+1; B=A+2; end if; end process; numA=A; -信號可在PROCESS外使用 numB=B;END;在進(jìn)程中,變量賦值語句一旦被執(zhí)行,目標(biāo)變量立即被賦值,在執(zhí)行下一條語句時(shí),該變量的值為上一句新賦的值;信號的賦值語句即使被執(zhí)行,也不會(huì)使信號立即發(fā)生代入, 下一條語句執(zhí)行時(shí),仍使用原來的信號值(信號是在進(jìn)程掛起時(shí)才發(fā)生代入的)。賦值目標(biāo)標(biāo)識符賦值目標(biāo)及數(shù)組單元素賦值目標(biāo);段下標(biāo)元素賦值目標(biāo)及集合塊賦值目標(biāo); 標(biāo)識符賦值目標(biāo) 以簡單的標(biāo)識符作為被賦值的信號或變量名;數(shù)組單元素賦值目標(biāo)數(shù)組類信號或變量名(下標(biāo)名)

4、; v1:=1; v2:=1; svec(0)=v1; svec(1)=v2;標(biāo)識符賦值及數(shù)組單元素賦值段下標(biāo)元素賦值目標(biāo)及集合塊賦值目標(biāo);A(1 TO 2):=“10”;A(3 DOWNTO 0):=“1011”; s=“0100” (a,b,c,d)e,3=f,1=g(0),0=g(1):=h集合塊賦值(位置關(guān)聯(lián)及名字關(guān)聯(lián)賦值) 數(shù)組類信號或變量(下標(biāo)1 TO/DOWNTO 下標(biāo)2) 對目標(biāo)中的每個(gè)元素進(jìn)行賦值的方式段下標(biāo)賦值(注意TO及DOWNTO)2 轉(zhuǎn)向控制語句IFCASELOOPNEXTEXITIF語句IF 條件 THEN 語句 END IF;格式1:若條件成立,則執(zhí)行THEN與E

5、ND IF間的語句,否則結(jié)束END IF;IF 條件 THEN 語句 ELSE 語句 END IF;格式2:若條件成立,則執(zhí)行THEN與ELSE間的語句;反之,執(zhí)行ELSE與END IF間的語句;IF語句的二選擇控制IF語句的多選擇控制IF 條件1 THEN 語句ELSIF 條件2 THEN 語句 . ELSE 語句 END IF;格式3:自上而下逐一判斷條件式是否成立。若條件成立,則執(zhí)行相應(yīng)的語句,并不再判斷其它條件式,直接結(jié)束IF語句;entity eqcomp4_if is port( a,b:in std_logic_vector(3 downto 0); equals: out st

6、d_logic);end eqcomp4_if; architecture behave of eqcomp4_if isbeginprocess(a,b)begin equals=0; if a=b then equals b1 THEN q1 = 1;ELSIF a1 b1 THEN q1 b1 THEN q1 = 1;ELSE q1 = 0;END IF;END PROCESS;END ARCHITECTURE one;a1=b1 ?12條件不完整12因此必須在所有情況下指定輸出值。在沒有指定輸出值的條件下,綜合器可能誤以為設(shè)計(jì)者希望存儲數(shù)據(jù)而引入鎖存器。architecture beh

7、ave of encoder isbeginprocess(en,i)begin if en=1 then if i(7)=1 then a=111; elsif i(6)=1 then a=110; elsif i(5)=1 then a=101; elsif i(4)=1 then a=100; elsif i(3)=1 then a=011; elsif i(2)=1 then a=010; elsif i(1)=1 then a=001; elsif i(0)=1 then a=000; else a=000; end if; else a=000; end if;end proces

8、s;end;所有需要讀入的信號都必須放在敏感信號參數(shù)表中此處的ELSE是否為必須的?library ieee;use ieee.std_logic_1164.all;entity mux4 isport(a,b,c,d:in std_logic_vector(3 downto 0); s :in std_logic_vector(1 downto 0); x :out std_logic_vector(3 downto 0);end mux4;architecture behave of mux4 isbegin process(a,b,c,d) begin if(s=00)then x=a;

9、 elsif(s=01)then x=b; elsif(s=10)then x=c; else x 語句A; WHEN 值2 = 語句B; WHEN OTHERS = 語句C; END CASE;這里的=不是關(guān)系運(yùn)算符,僅描述:值和對應(yīng)執(zhí)行語句的對應(yīng)關(guān)系,相當(dāng)于THEN的作用選擇值可以有4種不同的表達(dá)方式單個(gè)普通數(shù)值數(shù)值選擇范圍,如(2 to 4)并列數(shù)值,如2|4混合方式幾種容易發(fā)生的錯(cuò)誤-缺少when 引導(dǎo)的條件語句 case a is end case;-沒有將所有條件中有可能出現(xiàn)的情況全部列出來-選擇值中的值有重疊entity case_mux41 isport(a,b,c,d:in

10、std_logic; sel:in std_logic_vector(1 downto 0); z: out std_logic);end;architecture dataflow of case_mux41 isbeginprocess(sel,a,b,c,d)begin case sel is when 00=zzzzz=X; end case;end process;end;4選1多路選擇器CASE 輸 入輸 出G1G2A+G2BcbaY(7)Y(6)Y(5)Y(4)Y(3)Y(2)Y(1)Y(0)0XXXX11111111X1XXX11111111100001111111010001

11、111111011001011111011100111111011110100111011111010111011111101101011111110111011111117/25/2022CASElibrary ieee;use ieee.std_logic_1164.all;entity decode_3to8 is Port ( a,b,c,G1,G2A,G2B:in std_logic; y:out std_logic_vector(7 downto 0);end decode_3to8;architecture dec_arch of decode_3to8 is signal in

12、data: std_logic_vector(2 downto 0); begin indatayyyyyyyyy=XXXXXXXX; end case; else ya10; -當(dāng)a大于10時(shí)跳出循環(huán) END LOOP L2;2.FOR_LOOP語句語句格式:標(biāo)號:FOR 循環(huán)變量IN 循環(huán)次數(shù)范圍LOOP 順序語句;END LOOP 標(biāo)號 ;注意:循環(huán)變量是一個(gè)臨時(shí)變量,屬LOOP語句的局部變量,不必事先定義,它由LOOP語句自動(dòng)定義;循環(huán)變量只能作為賦值源,不能被賦值;在LOOP范圍內(nèi)不要再使用與此循環(huán)變量同名的標(biāo)識符;循環(huán)次數(shù)范圍規(guī)定LOOP語句中的順序語句被執(zhí)行的次數(shù)。每執(zhí)行一次,循

13、環(huán)變量自動(dòng)增1。例如:用LOOP語句實(shí)現(xiàn)19的累加器計(jì)算: sum:=0; FOR i IN 1 TO 9 LOOP sum:=sum+i; END LOOP;library ieee;use ieee.std_logic_1164.all;entity p_check is port(a:in std_logic_vector(7 downto 0); y:out std_logic);end;architecture behave of p_check issignal tmp:std_logic;begin process(a) begin tmp=0; for n in 0 to 7

14、loop tmp=tmp xor a(n); end loop; y=tmp; end process;end; tmp:變量8位奇偶校驗(yàn)邏輯電路VARIABLE length: INTEGER RANGE 0 TO 15;FOR i IN 0 to length LOOPEND LOOP;描述是否正確需用具體的數(shù)值表示3.WHILE_LOOP語句 循環(huán)標(biāo)號:WHILE 條件 LOOP 順序處理語句 END LOOP循環(huán)標(biāo)號;若條件為”真”,則進(jìn)行循環(huán);若為”假”,則結(jié)束循環(huán)注意:沒有循環(huán)變量和循環(huán)次數(shù),也沒有自動(dòng)遞增功能,只給出了執(zhí)行循環(huán)語句的條件;條件可以是任何布爾表達(dá)式;當(dāng)條件為TRUE

15、時(shí),進(jìn)行循環(huán);當(dāng)條件為FALSE時(shí),跳出循環(huán);VHDL綜合器支持WHILE語句的前堤是,LOOP的結(jié)束條件值必須是在綜合時(shí)就可以決定。綜合器不支持無法確定循環(huán)次數(shù)的LOOP語句。例如:用LOOP語句實(shí)現(xiàn)19的累加器計(jì)算: i:=1; sum:=0; WHILE (i10) LOOP sum:=sum+i; i:=i+1; END LOOP; process(a) variable i: integer :=0; begin tmp=0; while i8 loop tmp=tmp xor a(i); i:=i+1; end loop; yf); S3:b(k+8):=0; K:=K+1; NE

16、XT LOOP L_Y; NEXT LOOP L_X;.EXIT 語句EXIT;EXIT LOOP 標(biāo)號;EXIT LOOP 標(biāo)號 WHEN 條件表達(dá)式;其跳轉(zhuǎn)的方向是LOOP標(biāo)號指定的LOOP循環(huán)結(jié)束處,即完全跳出指定的循環(huán);SIGNAL a,b:STD_LOGIC_VECTOR(1 DOWNTO 0);SIGNAL a_less_then_b:BOOLEAN;.a_less_then_b=FALSE;FOR i IN 1 DOWNTO 0 LOOP IF(a(i)=1 AND b(i)=0)THEN a_less_then_b=FALSE; EXIT; ELSIF(a(i)=0 AND b

17、(i)=1)THEN a_less_then_b=TRUE; EXIT; ELSE NULL; END IF;END LOOP;比較a,b的大小5.2.3 WAIT 語句當(dāng)執(zhí)行到WAIT語句時(shí),運(yùn)行程序被掛起,直到滿足此語句設(shè)置的結(jié)束掛起條件后,將重新開始執(zhí)行進(jìn)程或過程中的程序;已列出敏感量的進(jìn)程中不能使用任何形式的WAIT語句;WAITON 信號表UNTIL 條件表達(dá)式FOR 時(shí)間表達(dá)式;單獨(dú)的WAIT,未設(shè)置停止掛起的條件,表示永遠(yuǎn)掛起。WAIT ON信號,信號,即敏感信號等待語句,當(dāng)敏感信號變化時(shí),結(jié)束掛起。例如:WAIT ON a,b;WAIT UNTIL條件表達(dá)式,即條件等待語句,當(dāng)

18、條件表達(dá)式中所含的信號發(fā)生了變化,并且條件表達(dá)式為真時(shí),進(jìn)程才能脫離掛起狀態(tài),繼續(xù)執(zhí)行此語句后面的語句。 例如:WAIT UNTIL(x*10)100);WAIT FOR 時(shí)間表達(dá)式,直到指定的時(shí)間到時(shí),掛起才結(jié)束。 例如:WAIT FOR 20ns;多條件WAIT語句,即上述條件中有多個(gè)同時(shí)出現(xiàn),此時(shí)只要多個(gè)條件中有一個(gè)成立,則終止掛起。process(a,b) process begin begin y=a and b; y=a and b;end process; wait on a,b; end process; process(a,b) begin y=a and b; wait o

19、n a,b; end process;已列出敏感量的進(jìn)程中不能使用WAIT語句PROCESSBEGIN rst_loop:LOOP WAIT UNTIL clock=1 AND clockEVENT; NEXT rst_loop WHEN (rst=1); x=a; WAIT UNTIL clock=1 AND clockEVENT; NEXT rst_loop WHEN (rst=1); yNULL; END CASE; END IF; END PROCESS;5.2.5 其它語句屬性測試項(xiàng)目名屬性標(biāo)識符信號類屬性STABLE 、EVENT;數(shù)據(jù)區(qū)間類屬性RANGE、REVERSE_RANG

20、E;數(shù)值類屬性LEFT、RIGHT、HIGH、LOW;數(shù)組屬性LENGTH;信號類屬性EVENT:如果在當(dāng)前一個(gè)相當(dāng)小的時(shí)間間隔內(nèi),事件發(fā)生了,那么函數(shù)返回一個(gè)“真”的布爾量;STABLE:剛好與EVENT 相反;在一個(gè)指定的時(shí)間間隔內(nèi),無事件發(fā)生,那么函數(shù)返回一個(gè)“真”的布爾量;數(shù)據(jù)區(qū)間類RANGE(n)返回一個(gè)數(shù)據(jù)區(qū)間;REVERSE_RANGE(n)返回一個(gè)次序顛倒的數(shù)據(jù)區(qū)間;如:若屬性RANGE返回的區(qū)間0 TO 15,那么使用REVERSE_RANGE返回的區(qū)間是15 DOWNTO 0數(shù)值類屬性數(shù)值類屬性用來得到數(shù)組、塊或者一般數(shù)據(jù)的有關(guān)值;LEFT-得到數(shù)據(jù)類或子類區(qū)間的最左端的值

21、RIGHT-得到數(shù)據(jù)類或子類區(qū)間的最右端的值HIGH-得到數(shù)據(jù)類或子類區(qū)間的高端值(max)LOW-得到數(shù)據(jù)類或子類區(qū)間的低端值(min)數(shù)組屬性LENGTH:用該屬性將得到一個(gè)數(shù)組的長度ASSERT語句用于程序調(diào)試、時(shí)序仿真時(shí)的人機(jī)對話,也屬于不可綜合語句,綜合時(shí)被忽略而不會(huì)生成邏輯電路。ASSERT 條件表達(dá)式 REPORT信息 SEVERITY級別若條件式為真,則任何事都不做;若條件式為假,則輸出錯(cuò)誤信息和錯(cuò)誤嚴(yán)重級別;出錯(cuò)級別共有5 種: Note、Warning、Error、Failure、Fatal ;若缺少,則默認(rèn)級別為ERROR;用雙引號括起來在VHDL 模型的模擬過程中,一旦

22、斷言語句的條件為假,則發(fā)送消息并將出錯(cuò)級別發(fā)送給模擬器。通??梢栽O(shè)置一個(gè)中止模擬器運(yùn)行的出錯(cuò)級別,一般默認(rèn)的中止運(yùn)行的出錯(cuò)級別為Failure。 我們來看一個(gè)例子: assert (s_cyi(DWIDTH-1)/4) = 0) and (s_ovi = 0) and (s_qutnt=conv_std_logic_vector(v_quot,DWIDTH) and (s_rmndr=conv_std_logic_vector(v_remd,DWIDTH) report ERROR in division! severity failure; 斷言的條件有4 個(gè)并且是與的關(guān)系,只要其中一個(gè)條件

23、不成立則整個(gè)表達(dá)式為假,斷言成立。如果斷言成立將輸出“ERROR in division!“這個(gè)消息。并且通知模擬器出錯(cuò)級別為failure,這一般會(huì)停止模擬。這個(gè)斷言實(shí)際是在對結(jié)果進(jìn)行驗(yàn)證。再來看一個(gè)例子:assert false report * & IMAGE(DWIDTH) & BIT DIVIDER SEQUENCE FINISHED AT & IMAGE(now) & ! & * severity note; 斷言的條件不是一個(gè)條件表達(dá)式,而直接是false。這說明只要程序執(zhí)行到這里斷言就一定會(huì)成立,送出消息。出錯(cuò)級別為note。architecture behav of rs_a

24、ssert is begin a:process(r,s) begin assert not (r=1 and s=1) report both r and s equal to 1 severity error; end process; b:process(r,s) variable d:std_logic:=0; begin if r=1 and s=0 then d:=0; elsif r=0 and s=1 then d:=1; end if; q=d;qf=not d; end process;end;REPORT語句報(bào)告有關(guān)信息的語句,本身不可綜合;類似于ASSERT,區(qū)別是REPORT沒有條件;REPORT 信息SEVERITY級別architecture behav of rs_report i

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論