構(gòu)造體的行為描述+順序控制語句_第1頁
構(gòu)造體的行為描述+順序控制語句_第2頁
構(gòu)造體的行為描述+順序控制語句_第3頁
構(gòu)造體的行為描述+順序控制語句_第4頁
構(gòu)造體的行為描述+順序控制語句_第5頁
已閱讀5頁,還剩31頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、VHDL構(gòu)造體常用描述方法構(gòu)造體常用描述方法 混合描述 :復(fù)雜電路,因地制宜。描述方法 綜合時(shí)間 硬件知識(shí) 程序結(jié)構(gòu) 優(yōu)化程度行為描述行為描述 最長(zhǎng)最長(zhǎng)最少最少簡(jiǎn)單簡(jiǎn)單最不優(yōu)化最不優(yōu)化結(jié)構(gòu)描述 中等多復(fù)雜優(yōu)化邏輯描述 最短最多最簡(jiǎn)單最優(yōu)化 行為之間必然存在并行行為之間必然存在并行(concurrency)關(guān)關(guān)系和順序關(guān)系系和順序關(guān)系 VHDL通過通過進(jìn)程進(jìn)程(process)語句解決這個(gè)問語句解決這個(gè)問題。題。 進(jìn)程之間進(jìn)程之間是是并行并行關(guān)系關(guān)系 進(jìn)程內(nèi)部進(jìn)程內(nèi)部語句之間是語句之間是順序順序關(guān)系關(guān)系 一個(gè)結(jié)構(gòu)體可由一個(gè)或多個(gè)進(jìn)程組成。一個(gè)結(jié)構(gòu)體可由一個(gè)或多個(gè)進(jìn)程組成。 進(jìn)程之間用進(jìn)程之間用信

2、號(hào)信號(hào)進(jìn)行數(shù)據(jù)傳遞進(jìn)行數(shù)據(jù)傳遞結(jié)構(gòu)體的行為描述結(jié)構(gòu)體的行為描述 標(biāo)號(hào):標(biāo)號(hào):process (敏感信號(hào)表敏感信號(hào)表)聲明部分聲明部分begin順序語句部分順序語句部分end process 標(biāo)號(hào)標(biāo)號(hào); 進(jìn)程標(biāo)號(hào):可選項(xiàng);進(jìn)程標(biāo)號(hào):可選項(xiàng); 聲明部分:局部數(shù)據(jù)環(huán)境;聲明部分:局部數(shù)據(jù)環(huán)境;不能聲明信號(hào)和共享變量不能聲明信號(hào)和共享變量 語句部分:順序語句程序段,定義該進(jìn)程的行為。語句部分:順序語句程序段,定義該進(jìn)程的行為。 有的進(jìn)程可以指定敏感信號(hào)。有的進(jìn)程可以指定敏感信號(hào)。 每個(gè)進(jìn)程語句用一系列的順序語句定義一個(gè)特定的行每個(gè)進(jìn)程語句用一系列的順序語句定義一個(gè)特定的行為。行為的結(jié)果可以加在輸出信號(hào)

3、上,被其他的進(jìn)程為。行為的結(jié)果可以加在輸出信號(hào)上,被其他的進(jìn)程讀取。讀取。進(jìn)程語句的一般形式進(jìn)程語句的一般形式process variable N :integer;constant sum_vector:bit_vector(0 to 3):=“0101”;constant Cout_vector:bit_vector(0 to 3):=“0011”;Begin wait on x,y,Cin;-等待輸入信號(hào)變化等待輸入信號(hào)變化N:=0;if -使使N的值按條件進(jìn)行變化的值按條件進(jìn)行變化end if;Sum=sum_vector(N);-對(duì)不同的對(duì)不同的N進(jìn)行相應(yīng)輸出進(jìn)行相應(yīng)輸出Cout=C

4、out_vector(N);End process; 進(jìn)程兩種狀態(tài):激活與掛起。進(jìn)程兩種狀態(tài):激活與掛起。 如果當(dāng)前正在執(zhí)行某個(gè)進(jìn)程,進(jìn)程是如果當(dāng)前正在執(zhí)行某個(gè)進(jìn)程,進(jìn)程是活躍活躍的,否的,否則說該進(jìn)程被則說該進(jìn)程被掛起掛起。 每個(gè)進(jìn)程可以在任何時(shí)刻被激活,所有被激活每個(gè)進(jìn)程可以在任何時(shí)刻被激活,所有被激活的進(jìn)程并行執(zhí)行。的進(jìn)程并行執(zhí)行。 整個(gè)運(yùn)行過程中激活與掛起可以交替進(jìn)行,直整個(gè)運(yùn)行過程中激活與掛起可以交替進(jìn)行,直到運(yùn)行結(jié)束。到運(yùn)行結(jié)束。 進(jìn)程激活與掛起由進(jìn)程激活與掛起由wait語句控制語句控制進(jìn)程的激活與掛起:進(jìn)程的激活與掛起:wait進(jìn)程中可以有若干等待語句。p1: processbe

5、ginwait on s1;wait on s2;wait on s1;end process p1;進(jìn)入進(jìn)程進(jìn)入進(jìn)程遇到遇到wait掛起并掛起并判斷激判斷激活條件活條件條件滿足條件滿足激活進(jìn)程激活進(jìn)程一直執(zhí)行,直到下一直執(zhí)行,直到下一條一條wait,又被掛起,又被掛起執(zhí)行到執(zhí)行到末尾后末尾后返回程返回程序開始序開始進(jìn)程中的語句進(jìn)程中的語句循環(huán)執(zhí)行循環(huán)執(zhí)行,如果進(jìn)程執(zhí)行到最,如果進(jìn)程執(zhí)行到最后一個(gè)語句,則下一個(gè)語句是第一個(gè)語句后一個(gè)語句,則下一個(gè)語句是第一個(gè)語句Wait的幾種使用形式的幾種使用形式wait on 敏感信號(hào)表敏感信號(hào)表如如wait on A, B; 表中任一信號(hào)變化時(shí),進(jìn)程激活。

6、wait until 條件表達(dá)式條件表達(dá)式如如 wait until Enable = 1; 滿足條件時(shí),進(jìn)程激活。 wait for 時(shí)間表達(dá)式時(shí)間表達(dá)式;如如wait for 5 ns; 過5 ns 后,進(jìn)程激活。 wait可以出現(xiàn)在進(jìn)程的任何位置,可以出現(xiàn)在進(jìn)程的任何位置,也可以有多個(gè)進(jìn)程語句。也可以有多個(gè)進(jìn)程語句。 Wait語句的組合使用語句的組合使用三者可以任意組合:wait on A, B until Enable = 1; 等待A, B變化,且Enable = 1時(shí)激活。wait on A, B for 5 ns; 等待A, B變化,或到達(dá)5 ns 時(shí)激活。wait until

7、Enable = 1 for 5 ns; 等待Enable = 1時(shí)激活,或者到達(dá)5 ns 時(shí)激活。wait on A, B until Enable = 1 for 5 ns; 等待A, B變化,且Enable = 1時(shí)激活,或者到達(dá)5 ns 時(shí)激活。 執(zhí)行規(guī)則:(執(zhí)行規(guī)則:(on 且且 until )或)或 for Wait語句是鎖鑰,不可缺少 只有一種情況可以省略: Wait on 出現(xiàn)在process順序語句的第一或最后一句 同時(shí)要把后面的敏感信號(hào)表列在process后,圓括號(hào)process process ( x,y,Cin )Begin Beginwait on x,y,Cin;

8、N:=0;N:=0;省略省略wait 用在進(jìn)程和子程序中 標(biāo)號(hào):標(biāo)號(hào):process (敏感信號(hào)表敏感信號(hào)表)聲明部分聲明部分begin順序語句部分順序語句部分end process 標(biāo)號(hào)標(biāo)號(hào); 程序的分支、循環(huán) If Case Loop 順序控制語句順序控制語句 格式: If 條件1 then 順序語句;Elsif 條件2 then -注意不是elseif順序語句;Else 順序語句;End if;IF條件語句條件語句 If 條件 then -單條件控制單條件控制順序語句;End if; If 條件 then -二選擇控制二選擇控制順序語句1;Else 順序語句2;End if;If 條件1

9、 then -多選擇控制多選擇控制順序語句1;Elsif 條件2 then順序語句2;Elsif 條件N then順序語句N;Else 順序語句N+1;End if;如果條件如果條件n-1成立,則成立,則執(zhí)行相應(yīng)的順序語句,執(zhí)行相應(yīng)的順序語句,并不再判斷條件并不再判斷條件n及后及后續(xù)條件式,直接結(jié)束續(xù)條件式,直接結(jié)束IF語句執(zhí)行語句執(zhí)行Library.Entity mux4 is port(s: IN std_logic_vector(3 downto 0);en: IN std_logic_vector(1 downto 0);y: OUT std_logic );End mux4;Arch

10、itecture mux4 of mux4 isbegin process (en)begin y=s(2); if en=“00” then else y=s(0); y=s(3); elsif en=“01” then end if; y=s(1); end process; elsif en=“10” then end mux4;多選擇控制:四選一電路多選擇控制:四選一電路IF語句的嵌套語句的嵌套 三態(tài)輸出三態(tài)輸出D鎖存器鎖存器 OCT:輸出控制:輸出控制 G:鎖存允許:鎖存允許 D:輸入數(shù)據(jù):輸入數(shù)據(jù) Q:鎖存輸出:鎖存輸出 Q0:保持原態(tài):保持原態(tài) Z:高阻態(tài):高阻態(tài)輸入輸入輸出輸出

11、OCTGDQLHHHLHLLLLXQ0HXXZ誰的優(yōu)先級(jí)最高,先用誰的優(yōu)先級(jí)最高,先用if判斷誰判斷誰LibraryEntity dff;Architecture dff1 of dff isSignal a: std_logic;begin process (g,oct)begin q=a; if oct=1 then -oct=1 a=z; elseif g=1 then -oct=0,g=1 a=d; else-oct=0,g=0 a=a; end if; end if; end process;end dff1; IF語句的嵌套語句的嵌套:8分頻電路分頻電路Architecture d

12、evider of FreDevider isConstant N:integer:=3;Signal clk : std_logic;Signal counter:integer range 0 to N;begin process (Clkin)begin if rising_edge(Clkin) then if counter=N then counter=0; clk=NOT clk; else counter= counter+1; end if; end if; end process; Clkout 順序語句;順序語句;end case;When 條件表達(dá)式條件表達(dá)式的四種形式

13、:的四種形式:When 值值 = 順序語句;順序語句;When 值值1|值值2|值值n| =順序語句順序語句When 值值1 to 值值2 =順序語句順序語句When others =順序語句;順序語句;begin process (in)begincase in iswhen “11111110”= y y y y y y y y=“111”;end case; end process;適合總線及編碼譯碼電路適合總線及編碼譯碼電路 Loop 語句:無條件循環(huán)。格式:語句:無條件循環(huán)。格式: :loop-標(biāo)號(hào)為可選項(xiàng)標(biāo)號(hào)為可選項(xiàng);end loop; 僅僅loop無意義。無意義。 Exit :退

14、出循環(huán):退出循環(huán) 格式:格式:exit when ;無條件退出:無條件退出:exit ;或;或 exit;循環(huán)語句循環(huán)語句 loopLoop循環(huán)實(shí)現(xiàn)D觸發(fā)器如: loopl: loop wait until clk=1; q=d after 2 ns; exit; end loop loopl; MAX+plus II支持支持 事先給定次數(shù)的循環(huán)。格式:事先給定次數(shù)的循環(huán)。格式: :-標(biāo)號(hào)為可選項(xiàng)標(biāo)號(hào)為可選項(xiàng)For 循環(huán)變量循環(huán)變量 in 范圍范圍 loop;end loop;范圍:指定循環(huán)變量所有可取的值,變量每從中取值一次則循范圍:指定循環(huán)變量所有可取的值,變量每從中取值一次則循環(huán)一次,取

15、完范圍內(nèi)所有的值,則結(jié)束循環(huán)。環(huán)一次,取完范圍內(nèi)所有的值,則結(jié)束循環(huán)。循環(huán)變量:不需聲明,存活于循環(huán)體,循環(huán)變量:不需聲明,存活于循環(huán)體,可讀不可寫可讀不可寫。循環(huán)范圍表達(dá)形式:循環(huán)范圍表達(dá)形式:表達(dá)式表達(dá)式 TO 表達(dá)式;表達(dá)式; 遞增方式遞增方式 表達(dá)式表達(dá)式 DOWNTO 表達(dá)式;表達(dá)式; 遞減方式遞減方式For 循環(huán)語句循環(huán)語句例6.15 8位奇偶校驗(yàn)電路library ieee;use ieeestd_logic_1164all;entity p_check is port(a:in std_logic_vector (7 downto o);); y:out std_logic);

16、end p_check;architecture rtl of p_check isbegin process(a) variable tmp:std_logic; begin tmp:=0; for i in 0 to 7 loop tmp:=tmp xor a(i); -xor相當(dāng)于半加器相當(dāng)于半加器 end loop; y=tmp; end process;end rtl; 相當(dāng)于對(duì)相當(dāng)于對(duì)a(i)的所有位進(jìn)的所有位進(jìn)行累加,只關(guān)心累加結(jié)果行累加,只關(guān)心累加結(jié)果的最后一位是的最后一位是0還是還是1如如a=00001011,有奇數(shù),有奇數(shù)個(gè)個(gè)1,若傳輸過程中產(chǎn)生,若傳輸過程中產(chǎn)生了一位誤差

17、,變成了偶數(shù)了一位誤差,變成了偶數(shù)個(gè)個(gè)1,則可以通過前后,則可以通過前后y值不一樣判斷出產(chǎn)生了誤值不一樣判斷出產(chǎn)生了誤差差可按照下示結(jié)構(gòu)用結(jié)構(gòu)描述實(shí)現(xiàn)可按照下示結(jié)構(gòu)用結(jié)構(gòu)描述實(shí)現(xiàn)while 循環(huán)語句循環(huán)語句 布爾條件循環(huán)。格式:布爾條件循環(huán)。格式:-標(biāo)號(hào)為可選項(xiàng)標(biāo)號(hào)為可選項(xiàng)While 條件表達(dá)式條件表達(dá)式 loop;end loop; 條件真則循環(huán),假則結(jié)束。條件真則循環(huán),假則結(jié)束。例例6.16 用用WHILE_LOOP語句設(shè)計(jì)的語句設(shè)計(jì)的8位奇偶校驗(yàn)電路位奇偶校驗(yàn)電路Library ieee;Use ieeeStd_logic_1164all;Entity p_check isPort(a:

18、in std_logic_vector(7 downto o);); y:out std_logic););End p_check;Architecture behav of p_check isBeginProcess(a) variable tmp:std_logic; begin tmp:=0; i:=o; while(i8)loop tmp:=tmp xor a(i);); i:=i+l; end loop; y=tmp; end process;End behav; NEXT; 第一種語句格式第一種語句格式 NEXT LOOP標(biāo)號(hào);標(biāo)號(hào);第二種語句格式第二種語句格式 NEXT LOO

19、P標(biāo)號(hào)標(biāo)號(hào) WHEN條件表達(dá)式;條件表達(dá)式;第三種語句格式第三種語句格式 第一種語句格式,第一種語句格式,NEXT語句作用于當(dāng)前最內(nèi)層循環(huán),當(dāng)語句作用于當(dāng)前最內(nèi)層循環(huán),當(dāng)LOOP語句的順序語語句的順序語句執(zhí)行到句執(zhí)行到NEXT語句時(shí),即刻無條件終止當(dāng)前的循環(huán),跳回到語句時(shí),即刻無條件終止當(dāng)前的循環(huán),跳回到LOOP語句的起始語句的起始位置處,開始下一次循環(huán)。位置處,開始下一次循環(huán)。 第二種語句格式,與第一種語句格式的功能基本相同,只是當(dāng)有多重第二種語句格式,與第一種語句格式的功能基本相同,只是當(dāng)有多重LOOP語語句嵌套時(shí),可以句嵌套時(shí),可以跳轉(zhuǎn)到指定標(biāo)號(hào)跳轉(zhuǎn)到指定標(biāo)號(hào)的的LOOP語句處,重新開始

20、執(zhí)行循環(huán)操作。語句處,重新開始執(zhí)行循環(huán)操作。 第三種語句格式,如果條件表達(dá)式的值為第三種語句格式,如果條件表達(dá)式的值為TURE,則執(zhí)行,則執(zhí)行NEXT語句,進(jìn)入跳語句,進(jìn)入跳轉(zhuǎn)操作,否則繼續(xù)向下執(zhí)行。當(dāng)只有單層轉(zhuǎn)操作,否則繼續(xù)向下執(zhí)行。當(dāng)只有單層LOOP循環(huán)語句時(shí),關(guān)鍵詞循環(huán)語句時(shí),關(guān)鍵詞NEXT與與WHEN之間的之間的“LOOP標(biāo)號(hào)標(biāo)號(hào)”可以省略??梢允÷浴?Exit:結(jié)束循環(huán);:結(jié)束循環(huán); next:提前結(jié)束本輪循環(huán),進(jìn)入下一輪:提前結(jié)束本輪循環(huán),進(jìn)入下一輪。Next 跳出循環(huán)跳出循環(huán)設(shè)計(jì)實(shí)例設(shè)計(jì)實(shí)例帶有屏蔽位的帶有屏蔽位的8位邏輯與操作位邏輯與操作通過通過mask屏蔽某些位,而對(duì)另一些位

21、進(jìn)行與操作:屏蔽某些位,而對(duì)另一些位進(jìn)行與操作:PROCESS(a,b,mask)BEGINFOR i IN 7 DOWNTO 0 LOOPIF (mask(i)= 1) THENNEXT;ELSEq(i) = a(i) AND b(i);END IF;END LOOP;END PROCESS; 信號(hào)賦值語句的格式:信號(hào)賦值語句的格式:信號(hào)名信號(hào)名=延遲選項(xiàng)延遲選項(xiàng) 運(yùn)算表達(dá)式運(yùn)算表達(dá)式 延遲表達(dá)式;延遲表達(dá)式; 處于處于process內(nèi)時(shí),為順序執(zhí)行內(nèi)時(shí),為順序執(zhí)行 處于處于process外時(shí),并行執(zhí)行外時(shí),并行執(zhí)行 Process也是語句:復(fù)合語句也是語句:復(fù)合語句 process之間為并

22、行關(guān)系。之間為并行關(guān)系。 仍以全加器為例仍以全加器為例順序信號(hào)賦值語句與順序信號(hào)賦值語句與并行信號(hào)賦值語句并行信號(hào)賦值語句Architecture a_adder of full_adder issignal s:std_logic;Begin s=x xor y;sum=s xor Cin;Cout=(s and Cin) or (x and y);process.End a_adder;并行信號(hào)賦值語句并行信號(hào)賦值語句(邏輯描述)(邏輯描述)Architecture b_adder of full_adder issignal s:std_logic;Begin process(x,y,cin)s=x xor y;sum=s xor Cin;Cout=(s and Cin) o

溫馨提示

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

評(píng)論

0/150

提交評(píng)論