第五VHDL語言的主要描述語句_第1頁
第五VHDL語言的主要描述語句_第2頁
第五VHDL語言的主要描述語句_第3頁
第五VHDL語言的主要描述語句_第4頁
第五VHDL語言的主要描述語句_第5頁
已閱讀5頁,還剩184頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、第五章第五章2021-12-1425.1 順序描述語句順序描述語句n執(zhí)行的順序:順序描述語句同高級語言的執(zhí)行執(zhí)行的順序:順序描述語句同高級語言的執(zhí)行一樣,是一樣,是按出現(xiàn)次序按出現(xiàn)次序加以執(zhí)行的;加以執(zhí)行的;n出現(xiàn)的場合:進(jìn)程或子程序出現(xiàn)的場合:進(jìn)程或子程序( (過程過程/ /函數(shù)函數(shù)) )中;中; wait語句語句 斷言語句斷言語句 信號代入語句信號代入語句 變量賦值語句變量賦值語句 過程調(diào)用語句過程調(diào)用語句 if語句語句 case語句語句 loop語句語句 next語句語句 exit語句語句 null語句語句2021-12-1435.1.1 信號代入語句信號代入語句1) 書寫格式書寫格式目

2、的信號量目的信號量= 敏感信號量表達(dá)式;敏感信號量表達(dá)式;處于處于構(gòu)造體中構(gòu)造體中的信號代入語句的信號代入語句 z = a or (b nand c);有有3 個敏感量個敏感量 a、b、 c,無論哪一個敏感量發(fā)生,無論哪一個敏感量發(fā)生變化,該代入語句將被執(zhí)行。變化,該代入語句將被執(zhí)行。2) 舉例舉例2021-12-144na = b after 5 ns;表示當(dāng)表示當(dāng)b發(fā)生新的變化發(fā)生新的變化5ns后,才被代入到信后,才被代入到信號號a中;中;nc = a and b after 15 ns;表示當(dāng)表示當(dāng)a或或b發(fā)生新的變化發(fā)生新的變化15ns后,它們進(jìn)行后,它們進(jìn)行與邏輯操作的結(jié)果才被代入到

3、信號與邏輯操作的結(jié)果才被代入到信號a中,可描述中,可描述邏輯門的延時特性;邏輯門的延時特性;na=0 after 5 ns,1 after 10 ns, 0 after 15 ns;該信號代入語句描述了怎樣的波形呢?該信號代入語句描述了怎樣的波形呢?2021-12-1453) 兩類延時語句慣性延時、傳輸延時兩類延時語句慣性延時、傳輸延時(1) 慣性(慣性(Inertial)延時)延時n慣性延時:在慣性模型中,慣性延時:在慣性模型中,系統(tǒng)或器件系統(tǒng)或器件輸出信號要發(fā)輸出信號要發(fā)生變化,必須有一段時間的延時,這段延時時間,就生變化,必須有一段時間的延時,這段延時時間,就是系統(tǒng)或元件的慣性延時。是系

4、統(tǒng)或元件的慣性延時。n特點:當(dāng)一個系統(tǒng)或器件的輸入信號周期,小于系統(tǒng)特點:當(dāng)一個系統(tǒng)或器件的輸入信號周期,小于系統(tǒng)或器件的慣性延時,其輸出將保持不變?;蚱骷膽T性延時,其輸出將保持不變。n如:在一個信號值維持期間,如果存在任何毛刺、脈如:在一個信號值維持期間,如果存在任何毛刺、脈沖等周期小于器件本身的慣性延時的情況,輸出信號沖等周期小于器件本身的慣性延時的情況,輸出信號的值將不變,否則將引起信號的變化。的值將不變,否則將引起信號的變化。2021-12-146慣性延時舉例慣性延時舉例假設(shè)某門電路的慣性延假設(shè)某門電路的慣性延時為時為20 nsb=inertial a after 20 ns;所有器

5、件都存在慣性延時,所有器件都存在慣性延時,在代入語句中加上慣性延在代入語句中加上慣性延時時間,可以仿真硬件電時時間,可以仿真硬件電路實際工作情況,如:路實際工作情況,如: b = a after 10 ns;或:或: b=inertial a after 10 ns; 慣性延時說明只在慣性延時說明只在行為行為仿真仿真時才有意義,邏輯綜時才有意義,邏輯綜合時將被忽略。合時將被忽略。10ns2021-12-147(2)傳輸傳輸(Transport)延時延時n傳輸延時常用于描述傳輸延時常用于描述總線延遲、連接線總線延遲、連接線的延的延時,及時,及ASIC芯片的路徑延時芯片的路徑延時。n在在VHDL語

6、言中,語言中,傳輸延時不能缺省傳輸延時不能缺省,必須在,必須在語句中使用傳輸延時的前置詞語句中使用傳輸延時的前置詞transport明確明確說明。說明。n特點:輸出端的信號在延時規(guī)定時間后,將特點:輸出端的信號在延時規(guī)定時間后,將完全復(fù)現(xiàn)完全復(fù)現(xiàn)輸入端的輸入波形,而不管輸入波輸入端的輸入波形,而不管輸入波形的形狀和寬窄如何。形的形狀和寬窄如何。2021-12-148傳輸延時舉例傳輸延時舉例傳輸延時:不管多傳輸延時:不管多短的脈沖都根據(jù)指短的脈沖都根據(jù)指定的延時值,傳給定的延時值,傳給一個延時信號輸出一個延時信號輸出 。2021-12-1495.1.2 變量賦值語句變量賦值語句1) 書寫格式書寫

7、格式目的變量目的變量:表達(dá)式;表達(dá)式;2) 舉例舉例 a:=2; -值;值; b:=d+e; -表達(dá)式;表達(dá)式; c:=f; -可為信號、變量、常量;可為信號、變量、常量;2021-12-14105.1.3 斷言(斷言(assert)語句)語句n作用:主要用于程序的仿真、調(diào)試中的人機會話。作用:主要用于程序的仿真、調(diào)試中的人機會話。 assert 條件條件 report 輸出信息輸出信息severity 級別級別;格式:格式:assert語句檢查一個布爾表達(dá)式為真或假,如果值語句檢查一個布爾表達(dá)式為真或假,如果值是是真真,則,則該語句任何事都不做該語句任何事都不做,如果值是如果值是假假,斷言斷

8、言語句將輸出一用戶規(guī)定的字符串到標(biāo)準(zhǔn)輸出終端語句將輸出一用戶規(guī)定的字符串到標(biāo)準(zhǔn)輸出終端。2021-12-1411assert 條件條件 report 輸出信息輸出信息severity 級別級別;設(shè)計者所寫的文設(shè)計者所寫的文字串,通常是說字串,通常是說明錯誤的原因,明錯誤的原因,文字串應(yīng)用雙引文字串應(yīng)用雙引號括起來。號括起來。錯誤嚴(yán)重程度的級別,錯誤嚴(yán)重程度的級別,分為分為4級別:級別:failure,error,waring,note布爾表達(dá)式布爾表達(dá)式 assert (sendb=1) report “sendb timed out at 1 ” severity error;2021-12

9、-14125.1.4 wait語句語句n等待語句用于等待語句用于控制進(jìn)程的執(zhí)行時間控制進(jìn)程的執(zhí)行時間;n當(dāng)進(jìn)程執(zhí)行到當(dāng)進(jìn)程執(zhí)行到wait語句時,將被語句時,將被掛起掛起,直到,直到wait語句的語句的條件滿足條件滿足,才繼續(xù),才繼續(xù)執(zhí)行執(zhí)行后續(xù)語句;此時進(jìn)后續(xù)語句;此時進(jìn)程中該語句之前的信號賦值語句得到執(zhí)行;程中該語句之前的信號賦值語句得到執(zhí)行; n注意:注意:wait語句通常不存在具體電路對應(yīng),在電語句通常不存在具體電路對應(yīng),在電路綜合時通常不產(chǎn)生影響;路綜合時通常不產(chǎn)生影響; 2021-12-1413wait語句可設(shè)置的四種不同條件語句可設(shè)置的四種不同條件無限等待、時間到、條件滿足以及敏感

10、信號量變化。無限等待、時間到、條件滿足以及敏感信號量變化。wait 無限等待無限等待wait for 時間到時間到wait until 條件滿足條件滿足wait on 敏感信號變化敏感信號變化后三種條件可以單獨使用也可以混合使用。后三種條件可以單獨使用也可以混合使用。書寫格式書寫格式2021-12-14141. wait on 語句語句wait on語句后面可跟一個或多個信號量,語句后面可跟一個或多個信號量,等待等待所列舉信號中任何一個發(fā)生變化所列舉信號中任何一個發(fā)生變化。1) 書寫格式書寫格式wait on 信號信號1 ,信號,信號2 ;2) 舉例舉例wait on a,b;等待信號量等待信

11、號量a或或b發(fā)生變化,發(fā)生變化,a或或b中只要有一個發(fā)生變化,中只要有一個發(fā)生變化,進(jìn)程將結(jié)束掛起狀態(tài),繼續(xù)執(zhí)行進(jìn)程將結(jié)束掛起狀態(tài),繼續(xù)執(zhí)行wait on語句后面的語句。語句后面的語句。2021-12-1415例:判斷以下三段程序的正誤例:判斷以下三段程序的正誤process(a,b)begin y=a and b;end process;processbegin wait on a,b; y=a and b;end process;process(a,b)begin wait on a,b; y=a and b;end process;wait on 所起作用與進(jìn)程的敏感信號量表相所起作用與

12、進(jìn)程的敏感信號量表相同,兩者不能同時存在。同,兩者不能同時存在。2021-12-14162. wait until 語句語句v利用表達(dá)式建立隱含的利用表達(dá)式建立隱含的敏感信號量表敏感信號量表;v當(dāng)任何一個涉及的信號發(fā)生變化時,就自動檢測當(dāng)任何一個涉及的信號發(fā)生變化時,就自動檢測布爾表達(dá)式是否為真;布爾表達(dá)式是否為真;v如果為真,如果為真,則進(jìn)程脫離等待狀態(tài)則進(jìn)程脫離等待狀態(tài), ,執(zhí)行后續(xù)語句;執(zhí)行后續(xù)語句;如果為假,則繼續(xù)等待。如果為假,則繼續(xù)等待。1) 書寫格式書寫格式wait until 布爾表達(dá)式;布爾表達(dá)式;2021-12-1417nwait until ( (x*10) 100 );

13、a.當(dāng)信號量當(dāng)信號量x的值大于或等于的值大于或等于10時,進(jìn)程執(zhí)行到該時,進(jìn)程執(zhí)行到該語句,就被掛起;語句,就被掛起;b.當(dāng)當(dāng)x的值小于的值小于10時,進(jìn)程再次被啟動,繼續(xù)執(zhí)行時,進(jìn)程再次被啟動,繼續(xù)執(zhí)行wait until語句的后繼語句。語句的后繼語句。2)舉例)舉例:利用表達(dá)式建立隱含的利用表達(dá)式建立隱含的敏感信號量表敏感信號量表2021-12-1418library ieee;use ieee.std_logic_1164.all;entity kdec24 isport(a:in std_logic_vector (1 downto 0); en:in std_logic; f:out

14、 std_logic_vector (3 downto 0) );end entity kdec24;例:例:architecture d of kdec24 isbegin process begin wait until en=1; f(0) = not a(1) and not a(0); f(1) = not a(1) and a(0); f(2) = a(1) and not a(0); f(3) = a(1) and a(0); end process;end architecture d;2021-12-14193. wait for 語句語句 當(dāng)進(jìn)程執(zhí)行到該語句時將被掛起,直到

15、指當(dāng)進(jìn)程執(zhí)行到該語句時將被掛起,直到指定的時間到了,進(jìn)程再次開始執(zhí)行定的時間到了,進(jìn)程再次開始執(zhí)行wait for 語句語句后繼的語句。后繼的語句。1) 書寫格式書寫格式 wait for 時間表達(dá)式;時間表達(dá)式;2021-12-1420若若a=2,b=50ns,c=70ns,則執(zhí)行到該語句時,就要等待則執(zhí)行到該語句時,就要等待2*(50+70)=240ns后,后,再繼續(xù)執(zhí)行后續(xù)語句。再繼續(xù)執(zhí)行后續(xù)語句。wait for( a*(b+c););2) 舉例舉例執(zhí)行到該語句等待執(zhí)行到該語句等待20ns以后,再繼續(xù)執(zhí)行下一條指令。以后,再繼續(xù)執(zhí)行下一條指令。wait for 20 ns;2021-1

16、2-1421例:利用例:利用wait for構(gòu)成輸入信號波形構(gòu)成輸入信號波形entity inhibittestbench isend entity inhibittestbench;architecture beh of inhibittestbench iscomponent inhibit isport (x,y:in bit;z: out bit);end component inhibit;signal xt,yt,zt:bit;begin u1: inhibit port map (xt, yt, zt);process begin xt=0;yt=0; wait for 10 n

17、s; xt=0;yt=1; wait for 10 ns; xt=1;yt=0; wait for 10 ns; xt=1;yt=1; wait; -進(jìn)入無限期等待,進(jìn)入無限期等待,避免進(jìn)入無限期循環(huán);避免進(jìn)入無限期循環(huán); end process;end architecture beh;2021-12-1422entity inhibit isport (x,y:in bit; z: out bit);end entity inhibit;architecture rtl of inhibit isbegin z= x and (not y);end architecture rtl;com

18、ponent inhibit is port (x,y:in bit;z: out bit);end component inhibit;2021-12-14234. 多條件等待語句多條件等待語句上述語句等待的是上述語句等待的是3個條件:個條件:1) 信號量信號量umi和和interrupt任何一個有一次新的變化;任何一個有一次新的變化;2) 信號量信號量umi或或interrupt 任何一個取值為任何一個取值為“真真”;3) 該語句已等待該語句已等待5 us。 前面所講的三類前面所講的三類wait 語句,等待的條件都是單一的,語句,等待的條件都是單一的,要么是信號量要么是信號量(wait o

19、n),要么是布爾量,要么是布爾量(wait until),要,要么是時間量么是時間量(wait for)。wait語句可同時使用多個等待條語句可同時使用多個等待條件件。例如例如wait on umi,interruptuntil ( (umi=true) or (interrupt=true) ) for 5 us;2021-12-1424 多條件等待中的表達(dá)式,至少應(yīng)包含一個多條件等待中的表達(dá)式,至少應(yīng)包含一個信號量,信號量,比如,比如,wait until (interrupt=true)or(old_clk=1););結(jié)論:在等待語句中結(jié)論:在等待語句中信號的變化信號的變化才能引起等待語

20、句才能引起等待語句表達(dá)式的一次評價和計算。表達(dá)式的一次評價和計算。 若上面語句中若上面語句中interrupt和和old_clk兩個都是兩個都是變量,變量,而沒有一個信號量,那么,即使兩個變量有變化,而沒有一個信號量,那么,即使兩個變量有變化,這條語句也不會對表達(dá)式進(jìn)行評估和計算。這條語句也不會對表達(dá)式進(jìn)行評估和計算。 事實上,掛起的兩個變量的值是不可能改變的,事實上,掛起的兩個變量的值是不可能改變的,這樣,該語句將變成無限的等待語句,包含該等待這樣,該語句將變成無限的等待語句,包含該等待語句的進(jìn)程就不可能再次啟動。語句的進(jìn)程就不可能再次啟動。2021-12-14255. 超時等待超時等待 w

21、ait until (sendb =1)for 1 us; assert (sendb =1) report “ sendb timed out at 1” severity .;等待語句加超時等待項的等待語句加超時等待項的目的目的:防止等待語句:防止等待語句進(jìn)入無限期的等待狀態(tài)。進(jìn)入無限期的等待狀態(tài)。for 1 us:作為超時等待項;:作為超時等待項;assert 語句:用于檢測進(jìn)程是否遇到等待條件,語句:用于檢測進(jìn)程是否遇到等待條件,還是因超時等待而執(zhí)行后續(xù)語句。還是因超時等待而執(zhí)行后續(xù)語句。 2021-12-1426例:可能進(jìn)入死鎖的進(jìn)程通信例:可能進(jìn)入死鎖的進(jìn)程通信architectu

22、re wait_example of wait_example issignal sendb, senda: std_logic;begin senda=0;a: process begin wait until sendb=1; senda=1 after 10 ns; wait until sendb=0; senda=0 after 10 ns; end process;b: processbegin wait until senda=0;sendb=0 after 10 ns;wait until senda=1;sendb=1 after 10 ns;end process;end

23、architecture wait_example;2021-12-14272021-12-1428例:使用超時等待項的進(jìn)程通信例:使用超時等待項的進(jìn)程通信 senda=0;a: process begin wait until sendb=1 for 1 us;assert (sendb=1) report “sendb timed out at 1 ” severity error;senda=1 after 10 ns;wait until sendb=0 for 1 us;assert (sendb=0) report “sendb timed out at 0” severity e

24、rror;senda=0 after 10 ns; end process;b: process begin wait until senda=0 for 1 us; assert (senda=0) report “senda timed out at 0” severity error;sendb=0 after 10 ns;wait until senda=1 for 1 us; assert (senda=1) report “senda timed out at 1” severity error;sendb=1 after 10 ns; end process;end wait_e

25、xample;2021-12-1429wait until sendb=1 for 1 us; assert (sendb=1) report “sendb timed out at 1 ” severity error;senda=1 after 10 ns;程序解釋:程序解釋:1) 如果等待時間超過了如果等待時間超過了1us進(jìn)程則執(zhí)行進(jìn)程則執(zhí)行assert語句。語句。2) assert語句判斷條件(語句判斷條件(sendb =1)為)為真真,則繼續(xù)執(zhí),則繼續(xù)執(zhí)行下一條語句行下一條語句senda=1 after 10 ns;3) 若若assert語句判斷條件為語句判斷條件為假,假,則向操作人

26、員提供錯則向操作人員提供錯誤信息輸出,誤信息輸出,report后的字符串后的字符串“sendb timed out at 1”以及以及severity后的錯誤等級。后的錯誤等級。2021-12-14305.1.5 if 語句語句 nif 語句根據(jù)所指定的條件來確定執(zhí)行哪一些語語句根據(jù)所指定的條件來確定執(zhí)行哪一些語句,書寫格式通??煞殖扇N類型:句,書寫格式通??煞殖扇N類型:qif 語句的門閂控制語句的門閂控制qif 語句的二選擇控制語句的二選擇控制qif 語句的多選擇控制語句的多選擇控制2021-12-14311. if 語句的門閂控制語句的門閂控制if 布爾表達(dá)式布爾表達(dá)式 then 順序

27、處理語句;順序處理語句; end if;當(dāng)布爾表達(dá)式為當(dāng)布爾表達(dá)式為true時,時,執(zhí)行執(zhí)行then后面的順序語句;后面的順序語句;為為false時,執(zhí)行時,執(zhí)行end if 以以后的語句。后的語句。1) 書寫格式書寫格式2021-12-14322) 舉例舉例n當(dāng)當(dāng)a=1時,時,c= b;n否則,將不進(jìn)入該條件語句的內(nèi)部執(zhí)行信號代入否則,將不進(jìn)入該條件語句的內(nèi)部執(zhí)行信號代入c= b,而執(zhí)行,而執(zhí)行end if之后的語句。之后的語句。 if a=1 then c= b; end if;a為門閂控制信號:為門閂控制信號:2021-12-1433例例 D觸發(fā)器描述觸發(fā)器描述library ieee;

28、use ieee.std_logic_1164.all;entity dff is port( clk,d0 : in std_logic; q0: out std_logic);end entity dff;architecture rtl of dff is beginprocess(clk) is begin if (clkevent and clk=1) then q0=d0; end if; end process;end architecture rtl;2021-12-1434RTL視圖視圖仿真波形圖仿真波形圖DENAQPRECLRq0clkd0q0reg02021-12-143

29、5How Many Registers?LIBRARY IEEE;USE IEEE.std_logic_1164.all;USE IEEE.std_logic_unsigned.all; ENTITY reg1 ISPORT ( d: in STD_LOGIC; clk: in STD_LOGIC; q: out STD_LOGIC);END ENTITY reg1;ARCHITECTURE reg1 OF reg1 ISSIGNAL a, b : STD_LOGIC;BEGINPROCESS (clk) isBEGINIF (clkevent and clk=1) THENa = d;b =

30、 a;q = b;END IF;END PROCESS;END ARCHITECTURE reg1;2021-12-1436How Many Registers?nSignal Assignments Inside the IF-THEN Statement That Checks the Clock Condition Infer RegistersQclkdclkCLRNENADclkqbCLRNENADaCLRNENADQQQ2021-12-1437IF (clkevent and clk=1) THENa = d;b = a;q = b;END IF;QDENAQPRECLRDENAQ

31、PRECLRDENAQPRECLRdclkqaqreg0b2021-12-1438How Many Registers?LIBRARY IEEE;USE IEEE.std_logic_1164.all;USE IEEE.std_logic_unsigned.all;ENTITY reg1 ISPORT ( d: in STD_LOGIC;clk : in STD_LOGIC;q: out STD_LOGIC);END ENTITY reg1;ARCHITECTURE reg1 OF reg1 ISSIGNAL a, b : STD_LOGIC;BEGINPROCESS (clk) isBEGI

32、NIF rising_edge(clk) THENa = d;b = a;END IF;END PROCESS;q = b;END ARCHITECTURE reg1;Signal Assignment Moved2021-12-1439How Many Registers?nB to Q Assignment Is No Longer Edge-sensitive Because It Is Not Inside the If-then Statement That Checks the Clock ConditionqCLRNENADclkCLRNENADdclkaQQ2021-12-14

33、40DENAQPRECLRDENAQPRECLRbclkqdaARCHITECTURE reg1 OF reg1 ISSIGNAL a, b : STD_LOGIC;BEGINPROCESS (clk) isBEGINIF rising_edge(clk) THENa = d;b = a;END IF;END PROCESS;q = b;END ARCHITECTURE reg1;2021-12-1441How Many Registers?LIBRARY IEEE;USE IEEE.std_logic_1164.all;USE IEEE.std_logic_unsigned.all;ENTI

34、TY reg2 ISPORT ( d: in STD_LOGIC; clk: in STD_LOGIC; q: out STD_LOGIC);END reg2;ARCHITECTURE reg2 OF reg2 ISBEGINPROCESS (clk)VARIABLE a, b : STD_LOGIC;BEGINIF rising_edge(clk) THENa := d;b := a;q = b;END IF;END PROCESS;END reg2;Signals Changed to Variables2021-12-1442How Many Registers?nVariable As

35、signments Are Updated ImmediatelynSignal Assignments Are Updated on Clock EdgeCLRNENADdclkqQ2021-12-1443DENAQPRECLRdclkqqreg0IF (clkevent and clk=1) THENa := d;b := a;q = b;END IF;2021-12-14442. if 語句的二選擇控制語句的二選擇控制if 布爾表達(dá)式布爾表達(dá)式 then 順序語句順序語句1; else 順序語句順序語句2;end if;當(dāng)布爾表達(dá)式為當(dāng)布爾表達(dá)式為true時,執(zhí)行時,執(zhí)行then后面的順

36、序語句后面的順序語句1;為為false時,執(zhí)行時,執(zhí)行else后面的順序語句后面的順序語句2。1) 書寫格式書寫格式2021-12-14452) 舉例舉例 二選一電路二選一電路architecture rtl of mux2 is begin process(a,b,sel)is begin if (sel =1)then c = a; else c = b; end if; end process;end architecture rtl;01cc0absel2021-12-14463. if語句的多選擇控制語句的多選擇控制if 條件條件 then 順序處理語句;順序處理語句;elsif 條

37、件條件 then 順序處理語句;順序處理語句; elsif 條件條件 then 順序處理語句;順序處理語句;else 順序處理語句;順序處理語句;end if;ture判斷條件判斷條件順序語句后續(xù)語句順序語句turefalsefalse判斷條件判斷條件判斷條件判斷條件順序語句順序語句后續(xù)語句后續(xù)語句順序語句順序語句turefalsefalse1) 書寫格式書寫格式 可設(shè)置多個條件;可設(shè)置多個條件; 滿足某個條件滿足某個條件, 就執(zhí)行該條件后的就執(zhí)行該條件后的順序處理語句;順序處理語句; 若所有設(shè)置的條件都不滿足時若所有設(shè)置的條件都不滿足時,就就執(zhí)行最后一個執(zhí)行最后一個else 和和end if

38、之間的之間的順序處理語句。順序處理語句。2021-12-14472) 舉例舉例 四選一電路四選一電路architecture rtl of ifmux isbeginprocess(input, sel) isbegin if (sel = 00) then y = input(0); elsif (sel=01) then y = input(1); elsif (sel= 10) then y = input(2); else y = input(3); end if;end process;end architecture rtl;=A1.0B1.0EQUAL=A1.0B1.0EQUAL

39、=A1.0B1.0EQUAL010101y0y1y2yinput3.0Equal12 h1 -Equal22 h2 -Equal02 h0 -sel1.02021-12-1448nif語句不僅可用于語句不僅可用于多路選擇器多路選擇器設(shè)計,還可用于設(shè)計,還可用于比比較器、譯碼器較器、譯碼器等具有條件控制的邏輯電路設(shè)計。等具有條件控制的邏輯電路設(shè)計。nnote:nif語句的條件判斷輸出是隱式語句的條件判斷輸出是隱式布爾量,布爾量,所以在所以在if語句中的語句中的if條件表達(dá)式中,只能使用條件表達(dá)式中,只能使用關(guān)系運算操關(guān)系運算操作作及及邏輯運算操作邏輯運算操作的組合表達(dá)式。的組合表達(dá)式。2021-

40、12-1449練習(xí):程序補充題,練習(xí):程序補充題,if語句描述的質(zhì)數(shù)檢測器語句描述的質(zhì)數(shù)檢測器library ieee;use ieee.std_logic_1164.all; use ( 1 );entity prime is port (n: in std_logic_vector(3 downto 0); f: out std_logic);end entity prime;architecture beh of prime isbegin1 ieee.std_logic_unsigned.all; process(n) is variable ni : ( 2 ); begin ni

41、:= conv_integer(n); if ni=1 or ni=2 then f= 1;( 3 ) ni=3 or ni=5 or ni=7 or ni=11 or ni=13 then f=1; else f= 0;( 4 ); end process;end architecture beh;2 integer 3 elsif 4 end if2021-12-1450練習(xí)練習(xí)n設(shè)計一個簡單恒溫加熱器的行為模型。這個裝置設(shè)計一個簡單恒溫加熱器的行為模型。這個裝置的實體模型有兩個整數(shù)輸入端,其中一個預(yù)先設(shè)的實體模型有兩個整數(shù)輸入端,其中一個預(yù)先設(shè)定溫度定溫度desired_temp,另一個

42、連接到測溫計,另一個連接到測溫計actual_temp;還有一個控制加熱器開關(guān)的布爾輸;還有一個控制加熱器開關(guān)的布爾輸出端出端heater_on。如果測量的溫度低于所設(shè)定的溫。如果測量的溫度低于所設(shè)定的溫度度2度,恒溫系統(tǒng)將打開加熱器進(jìn)行加熱,而如果度,恒溫系統(tǒng)將打開加熱器進(jìn)行加熱,而如果測量的溫度高于設(shè)定溫度測量的溫度高于設(shè)定溫度2度,則關(guān)閉加熱器停止度,則關(guān)閉加熱器停止加熱。加熱。2021-12-1451entity thermostat isport( desired_temp, actual_temp:in integer; heater_on:out boolean);end ent

43、ity thermostat;architecture beh of thermostat isbegin process(desired_temp,actual_temp) is begin if actual_temp=desired_temp-2 then heater_on=desired_temp+2 then heater_on 順序語句順序語句1;when 選擇值選擇值2 = 順序語句順序語句2;when 選擇值選擇值n = 順序語句順序語句3;when others = 順序語句順序語句n;end case;“=”用來表明表達(dá)用來表明表達(dá)式的取值和執(zhí)行語句式的取值和執(zhí)行語句的對

44、應(yīng)關(guān)系;的對應(yīng)關(guān)系;選擇值應(yīng)選擇值應(yīng)互斥互斥,并覆,并覆蓋表達(dá)式所有的可能蓋表達(dá)式所有的可能取值;取值; 選擇值須為選擇值須為靜態(tài)靜態(tài)值。值。2021-12-14531) when 值值 =順序處理語句;順序處理語句;2) when 值值|值值|值值|值值 =順序處理語句;順序處理語句;3) when 值值 to 值值 =順序處理語句;順序處理語句;4) when others =順序處理語句;順序處理語句;多個值的多個值的“或或”關(guān)關(guān)系系值的取值范圍值的取值范圍所有的缺省值所有的缺省值選擇值的四種不同書寫形式選擇值的四種不同書寫形式表達(dá)式的一個取值表達(dá)式的一個取值2. 舉例舉例 四選一多路數(shù)

45、據(jù)選擇電路四選一多路數(shù)據(jù)選擇電路library ieee;use ieee.std_logic_1164.all;entity mux4 isport(input: in std_logic_vector(3 downto 0); sel: in std_logic_vector(1 downto 0); y: out std_logic);end entity mux4;2021-12-1454SEL1.0DATA3.0OUTMUXyinput3.0Mux0sel1.0architecture mux4_behave of mux4 isbeginprocess(sel, input) is

46、begin case sel is when 00 = y y y y null; end case;end process;end architecture mux4_behave;使用使用when others包包含所有的缺省值含所有的缺省值2021-12-1455if (sel = “00”) then y = input(0);elsif (sel = “01”) then y = input(1);elsif (sel = “10”) then y = input(2);else y y y y y null;end case;3. if 語句和語句和case語句的區(qū)別語句的區(qū)別if

47、 語句首先處理最起始的條件,如果不滿足,再處語句首先處理最起始的條件,如果不滿足,再處理下一個條件;理下一個條件;case語句沒有值的順序號,所有的值都是并行處理語句沒有值的順序號,所有的值都是并行處理的,因此,值應(yīng)互斥,不能重復(fù)使用。的,因此,值應(yīng)互斥,不能重復(fù)使用。2021-12-1456舉例舉例 優(yōu)先級編碼器的優(yōu)先級編碼器的VHDL描述描述 輸入輸入 輸出輸出b7b6b5b4b3b2b1b0y2y1y0 - - - - - - -0111 - - - - - -01110 - - - - -011101 - - - -0111100 - - -01111011 - -011111010

48、-0111111001 -1111111000表中表中“-”為為任意項,其任意項,其值可以為值可以為1,也可以為也可以為0。優(yōu)先級編碼器的真值表優(yōu)先級編碼器的真值表2021-12-1457 優(yōu)先級編碼器的輸入含有任意項,用優(yōu)先級編碼器的輸入含有任意項,用case語句語句可以描述嗎?可以描述嗎?process(input) isbegin case input is when XXXXXXX0 = y y y y y y y y=000; end case;end process; 這樣的描述這樣的描述語句在語句在VHDL語語言中還未定制出言中還未定制出來,此程序在編來,此程序在編譯綜合中含有不

49、譯綜合中含有不確定值的程序行確定值的程序行被忽略,得不到被忽略,得不到正確的正確的rtl視圖。視圖。2021-12-1458 多選擇控制多選擇控制if語句是從最起始的條件開始依次進(jìn)行判斷語句是從最起始的條件開始依次進(jìn)行判斷處理的,可處理的,可利用該語句條件判斷的順序性利用該語句條件判斷的順序性來描述優(yōu)先編碼器來描述優(yōu)先編碼器的最低位零優(yōu)先編碼的特點。的最低位零優(yōu)先編碼的特點。process(input) is begin if (input(0)=0) then y=111; elsif (input(1)=0) then y=110; elsif (input(2)=0) then y=10

50、1; elsif (input(3)=0) then y=100; elsif (input(4)=0) then y=011; elsif (input(5)=0) then y=010; elsif (input(6)=0) then y=001; else y=000; end if;end process;end architecture rtl;2021-12-1459n由上例可知:由上例可知:n利用利用if 語句條件判斷的順序性,可實現(xiàn)優(yōu)先編碼,語句條件判斷的順序性,可實現(xiàn)優(yōu)先編碼,要注意若是低位要注意若是低位0優(yōu)先,則條件判斷一定是從優(yōu)先,則條件判斷一定是從input的最低位開始

51、,否則從的最低位開始,否則從input的最高位開始。的最高位開始。ncase語句中,語句中,when語句的順序可以顛倒,沒有執(zhí)語句的順序可以顛倒,沒有執(zhí)行的先后次序的分別,不存在隱含的優(yōu)先級,不行的先后次序的分別,不存在隱含的優(yōu)先級,不可描述優(yōu)先級編碼器。可描述優(yōu)先級編碼器。2021-12-1460練習(xí):練習(xí):將采用將采用if語句描述的質(zhì)數(shù)檢測器,改寫成用語句描述的質(zhì)數(shù)檢測器,改寫成用case語言語言描述的質(zhì)數(shù)檢測器描述的質(zhì)數(shù)檢測器library ieee;use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all;entity p

52、rime is port (n: in std_logic_vector(3 downto 0); f: out std_logic);end prime;architecture beh of prime isbeginprocess(n)variable ni : integer;begin ni := conv_integer(n); if ni=1 or ni=2 then f= 1; elsif ni=3 or ni=5 or ni=7 or ni=11 or ni=13 then f=1; else f f f f y N:=2; y y y y y x:=0; when 1| H

53、 = x:=1; when others = x:=X;end case;2021-12-14645.1.7 loop語句語句n如果要書寫一組被重復(fù)執(zhí)行的順序語句,可以使用如果要書寫一組被重復(fù)執(zhí)行的順序語句,可以使用loop循環(huán)語句來表示這種重復(fù)執(zhí)行的行為。在循環(huán)語句來表示這種重復(fù)執(zhí)行的行為。在VHDL語言中常用來描述位片邏輯及迭代電路的行為。語言中常用來描述位片邏輯及迭代電路的行為。n 循環(huán)語句的書寫格式一般有兩種循環(huán)語句的書寫格式一般有兩種 for 循環(huán)循環(huán) while 循環(huán)循環(huán)2021-12-14651. for循環(huán)變量循環(huán)變量標(biāo)號標(biāo)號:for 循環(huán)變量循環(huán)變量 in 離散范圍離散范圍

54、loop 順序處理語句;順序處理語句; end loop 標(biāo)號標(biāo)號;a: for i in 1 to 9 loop sum:=i +sum; -sum初始值為初始值為0 end loop a;1) 書寫格式書寫格式循環(huán)變量的值在每次循環(huán)中都將發(fā)生變化循環(huán)變量的值在每次循環(huán)中都將發(fā)生變化離散范圍表示循環(huán)變量在循環(huán)過程中依次取值的范圍離散范圍表示循環(huán)變量在循環(huán)過程中依次取值的范圍2) 舉例舉例2021-12-1466舉例舉例 8位奇偶校驗電路位奇偶校驗電路library ieee;use ieee.std_logic_1164.all;entity parity_check isport( a:

55、in std_logic_vector(7 downto 0); y: out std_logic);end entity parity_check;architecture rtl of parity_check isbegin 該電路的輸入為一個該電路的輸入為一個8位的數(shù)據(jù)位的數(shù)據(jù)a,判斷該數(shù)據(jù)含有,判斷該數(shù)據(jù)含有奇數(shù)個奇數(shù)個1還是偶數(shù)個還是偶數(shù)個1,若為奇數(shù),則輸出端口,若為奇數(shù),則輸出端口y輸出為輸出為1,否則,輸出為,否則,輸出為0。2021-12-1467process(a) isvariable tmp:std_logic;begin tmp:=0; for i in 0 to

56、7 loop tmp:=tmp XOR a(i); end loop; y= tmp; end process;end architecture rtl;變量在進(jìn)程內(nèi)部說明變量在進(jìn)程內(nèi)部說明(局部量局部量)循環(huán)變量循環(huán)變量i是一個整數(shù)量,使是一個整數(shù)量,使用前不需要進(jìn)行說明,而且變用前不需要進(jìn)行說明,而且變量、信號都不能代入循環(huán)變量量、信號都不能代入循環(huán)變量變量值要通過信號從進(jìn)程內(nèi)部變量值要通過信號從進(jìn)程內(nèi)部帶出帶出2021-12-14682. while 循環(huán)條件循環(huán)條件標(biāo)號標(biāo)號:while 條件條件 loop 順序處理語句;順序處理語句; end loop 標(biāo)號標(biāo)號;a. 不指定循環(huán)次數(shù);

57、每次循環(huán)前檢測條件中布爾表不指定循環(huán)次數(shù);每次循環(huán)前檢測條件中布爾表達(dá)式的值;當(dāng)布爾表達(dá)式為真時,執(zhí)行循環(huán);為達(dá)式的值;當(dāng)布爾表達(dá)式為真時,執(zhí)行循環(huán);為假時,不進(jìn)行循環(huán);假時,不進(jìn)行循環(huán);b. 重要:在循環(huán)體內(nèi),應(yīng)有語句能夠?qū)⒅匾涸谘h(huán)體內(nèi),應(yīng)有語句能夠?qū)⒉紶柋磉_(dá)式布爾表達(dá)式的值改變?yōu)榧?,避免無限循環(huán)。的值改變?yōu)榧伲苊鉄o限循環(huán)。1) 書寫格式書寫格式2021-12-14692) 舉例:舉例:計算計算19的累加和的累加和i:=1;sum:=0;a: while (i10) loop sum:=i+sum; i:=i+1;end loop a;循環(huán)控制變量遞增的實現(xiàn)循環(huán)控制變量遞增的實現(xiàn)程序結(jié)

58、束循環(huán)的條件程序結(jié)束循環(huán)的條件2021-12-1470舉例舉例 while循環(huán)描述的循環(huán)描述的8位奇偶校驗電路位奇偶校驗電路architecture behave of parity_check isbeginprocess(a) isvariable tmp:std_logic;variable i: integer;begin tmp := 0; i := 0MaxplusII 10.0 不支持不支持while循環(huán)循環(huán) while (i8) loop tmp := tmp xor a(i); i := i+1; end loop; y = tmp; end process; end arc

59、hitecture behave;2021-12-14713. next 語句語句 next語句是用來控制循環(huán)執(zhí)行的一種跳轉(zhuǎn)語句。執(zhí)行該語句是用來控制循環(huán)執(zhí)行的一種跳轉(zhuǎn)語句。執(zhí)行該語句時,立即中止當(dāng)前的循環(huán)迭代。語句時,立即中止當(dāng)前的循環(huán)迭代。給出下一迭代的起始位置給出下一迭代的起始位置next語句執(zhí)行的條件語句執(zhí)行的條件如果如果next語句后面既無語句后面既無“標(biāo)號標(biāo)號”也無也無“when條件條件”,那,那么,只要執(zhí)行到該語句就立即無條件地么,只要執(zhí)行到該語句就立即無條件地,并且,從并且,從loop語句的起始位置進(jìn)入下一次循環(huán)迭代。語句的起始位置進(jìn)入下一次循環(huán)迭代。next 標(biāo)號標(biāo)號 whe

60、n 布爾表達(dá)式布爾表達(dá)式;1) 書寫格式書寫格式2021-12-1472process(a,b) isconstant max_limit: integer:=255;begin for i in 0 to max_limit loop if (done(i)=true) then next; else done(i):= true; end if; q(i) = a(i) and b(i); end loop; end process;既無既無“標(biāo)號標(biāo)號”也無也無“when條條件件”2) 舉例舉例2021-12-1473 L1: while i 10 loop; L2: while j 20

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論