【正文】
00″, 選擇值用“ ,” bwhen ″01″ cwhen ″10″ dwhen others。 第 10章 VHDL硬件描述語(yǔ)言簡(jiǎn)介 2 1 賦值目標(biāo) = q=borc; 第 10章 VHDL硬件描述語(yǔ)言簡(jiǎn)介 2 賦值目標(biāo) =表達(dá)式 when賦值條件 else … … architecture oneof max41ais begin y=awhen q=″00″e(cuò)lse bwhen q=″01″e(cuò)lse cwhen q=″10″e(cuò)lse d。因?yàn)橛|發(fā)器的輸出只在時(shí)鐘上升 / 在一個(gè)結(jié)構(gòu)體( architecture)里可以有多個(gè) process語(yǔ)句,這些 process之間可以通過一些信號(hào)相互聯(lián)系。一般來說,如果描述的是組合電路模塊,那么敏感信號(hào)列表必須包括所有的輸入信號(hào),否則在綜合時(shí)會(huì)出錯(cuò),在仿真時(shí)將導(dǎo)致一個(gè)錯(cuò)誤的結(jié)果。然后,再掛起,再執(zhí)行,一直循環(huán)下去,直到仿真結(jié)束。在最后一條語(yǔ)句執(zhí)行完后,返回到進(jìn)程開始的 process語(yǔ)句,進(jìn)程處于掛起狀態(tài)。 第 10章 VHDL硬件描述語(yǔ)言簡(jiǎn)介 2) process 進(jìn)程在仿真運(yùn)行中總是處于兩個(gè)狀態(tài)之一:執(zhí)行或掛起。 end behavior。 end if。 architecture behaviorof mux2is begin mux2:process (a,b,s) begin if (s=′0′)thenf=a。 f:out std—logic)。進(jìn)程內(nèi)是順序執(zhí)行,進(jìn)程與進(jìn)程之間是并發(fā)的,有點(diǎn)類似于計(jì)算機(jī) 1) process process [進(jìn)程名]: process(進(jìn)程敏感信號(hào)列表 ) begin end process 第 10章 VHDL硬件描述語(yǔ)言簡(jiǎn)介 process語(yǔ)句從 process開始,到 endprocess結(jié)束,進(jìn)程 entity mux2is port (a,b:in std—logic。要注意 exit語(yǔ)句與 next語(yǔ)句的區(qū)別: next只結(jié)束本次循環(huán),開始下一次循環(huán),而 exit語(yǔ)句結(jié)束整個(gè)循環(huán),跳出循環(huán)狀態(tài)。如果標(biāo)號(hào)省略,則表示跳到 loop循環(huán)的后繼語(yǔ)句,即 endloop下面的語(yǔ)句。從功能上來看, next語(yǔ)句用于 loop循環(huán)內(nèi)的執(zhí)行控制。如果標(biāo)號(hào)省略,則表示跳到 loop循環(huán)的起始位置,開始下一次循環(huán)。 這里,當(dāng)條件為“真”時(shí),執(zhí)行循環(huán)體中的語(yǔ)句;當(dāng)條件為“假”時(shí),結(jié)束循環(huán)。變量只能在本進(jìn)程內(nèi)有效,要實(shí)現(xiàn)輸出還必須將它賦值給一個(gè)信號(hào)(本例中是 p=tmp)。這里只能用變量,不能用信號(hào)。 第 10章 VHDL硬件描述語(yǔ)言簡(jiǎn)介 上面的例子描述了一個(gè)偶校驗(yàn)的電路(只要把 tmp的初值改成“ 1”,就可以實(shí)現(xiàn)奇校驗(yàn))。 end process。 end loop。 begin tmp:=′0′。 end parity—checker。例如: entity parity—checker is port (data:in std—logic—vector(7downto 0)。 該語(yǔ)句等待 clk信號(hào)的值發(fā)生變化,而且 clk的值為 ′1′(即 clk從 ′0′變到 ′1′)時(shí),進(jìn)程將結(jié)束掛起狀態(tài),進(jìn)入執(zhí)行狀態(tài),執(zhí)行該語(yǔ)句的后繼語(yǔ)句。當(dāng)a=3,t1=20ns,t2=50ns時(shí),它相當(dāng)于 wait for 110 ns 必須注意: waitfor語(yǔ)句不是可綜合語(yǔ)句,它只能在仿真時(shí)使用。 第 10章 VHDL硬件描述語(yǔ)言簡(jiǎn)介 上面的第一個(gè) wait for語(yǔ)句中, 30ns是一個(gè)時(shí)間常量。當(dāng)進(jìn)程執(zhí)行到waitfor語(yǔ)句時(shí),進(jìn)程將進(jìn)入掛起狀態(tài),直到時(shí)間表達(dá)式指定的時(shí)間到,進(jìn)程將結(jié)束掛起狀態(tài),進(jìn)入執(zhí)行狀態(tài),執(zhí)行waitfor wait for 30 ns。例如: waituntila=′1′。若出現(xiàn)在進(jìn)程中間,則相當(dāng)于改變了進(jìn)程中語(yǔ)句的順序。雖然, waiton語(yǔ)句可以出現(xiàn)在進(jìn)程中的任何位置,但在不同位置它的作用略有不同。由此可以看出,控制進(jìn)程執(zhí)行還是掛起的敏感信號(hào)列表,可以寫在進(jìn)程開始的process語(yǔ)句中,也可以寫在進(jìn)程結(jié)尾的 waiton語(yǔ)句中,兩種描述是等價(jià)的。 end process。 else f=b。 end process 。 end if 。例如: mux2:process () begin if (s=′0′)then f=a。 第 10章 VHDL硬件描述語(yǔ)言簡(jiǎn)介 waiton語(yǔ)句可以使進(jìn)程掛起,然后又使它重新執(zhí)行,其條件是信號(hào)列表中任何一個(gè)信號(hào)的值發(fā)生變化。信號(hào)列表中的任何一個(gè)信號(hào)的值發(fā)生變化,進(jìn)程將結(jié)束掛起狀態(tài),進(jìn)入執(zhí)行狀態(tài),執(zhí)行 waiton waitona,b,s。這幾個(gè)條件還可以組合成一個(gè)復(fù)合條件。當(dāng)進(jìn)程執(zhí)行到 wait語(yǔ)句時(shí),將被掛起,并設(shè)置好再次執(zhí)行的條件,可以是無限等待 (wait) 或有限等待。如果沒有列舉出 case和 is之間的表達(dá)式的全部取值,則 whenothers=必不可少。 第 10章 VHDL硬件描述語(yǔ)言簡(jiǎn)介 上述 case when值 = when值 1|值 2|值 3|…| 值 n= when值 1to值 2= whenothers= 第 10章 VHDL硬件描述語(yǔ)言簡(jiǎn)介 上述語(yǔ)句分別表示條件表達(dá)式的值是某個(gè)確定的值,多個(gè)值中的一個(gè),一個(gè)取值范圍中的一個(gè),其他所有的缺 當(dāng) case和 is之間的表達(dá)式取值滿足某一個(gè)條件表達(dá)式的值時(shí),程序?qū)?zhí)行后面的由符號(hào) =所指的順序描述語(yǔ)句。 第 10章 VHDL硬件描述語(yǔ)言簡(jiǎn)介 3. case語(yǔ)句 case語(yǔ)句用來對(duì)多個(gè)條件分支進(jìn)行判定,并根據(jù)判定的結(jié)果決定執(zhí)行給出分支之一。 第 10章 VHDL硬件描述語(yǔ)言簡(jiǎn)介 3 在使用 if語(yǔ)句時(shí),有時(shí)需要對(duì)多個(gè)條件進(jìn)行判斷。 end process。 else f=b。 end mux2。 s:in std logic。 第 10章 VHDL硬件描述語(yǔ)言簡(jiǎn)介 當(dāng) if語(yǔ)句的條件為“真”時(shí),執(zhí)行 then和 else之間的順序描述語(yǔ)句;當(dāng) if語(yǔ)句的條件為“假”時(shí),執(zhí)行 else和 endif之間的順序描述語(yǔ)句。 if語(yǔ)句的條件是一個(gè)條件表達(dá)式,只能使用關(guān)系運(yùn)算符及邏輯運(yùn)算符組成的表 1 當(dāng) if語(yǔ)句在條件為假時(shí)并不需要執(zhí)行任何操作,那么,if if 條件 then end if。 第 10章 VHDL硬件描述語(yǔ)言簡(jiǎn)介 2 目的變量 := 變量賦值的符號(hào)與信號(hào)賦值的符號(hào)不同,表達(dá)式與信號(hào) 變量與信號(hào)有明顯的區(qū)別:變量只在定義它的進(jìn)程和子程序內(nèi)有效,無法傳遞到進(jìn)程之外,而信號(hào)在定義它的結(jié)構(gòu)體內(nèi)有效;賦給變量的值立即成為當(dāng)前值,而賦給信號(hào)的值必須在進(jìn)程結(jié)束后才能成為當(dāng)前值。 x=y+z。 a=b。例如: f=′1′。 第 10章 VHDL硬件描述語(yǔ)言簡(jiǎn)介 1 1 目的信號(hào)量 = 上述語(yǔ)句將右邊表達(dá)式的值賦予左邊的信號(hào)量?;静僮骺梢允切盘?hào)和變量的賦值、算術(shù)運(yùn)算、邏輯運(yùn)算、 VHDL中常用的順序描述語(yǔ)句包括:信號(hào)和變量賦值、if、 case、 wait、 loop、 next、 exit、斷言語(yǔ)句、過程調(diào)用語(yǔ)句、空語(yǔ)句等。 第 10章 VHDL硬件描述語(yǔ)言簡(jiǎn)介 VHDL的主要描述語(yǔ)句 順序描述語(yǔ)句 順序描述語(yǔ)句只能出現(xiàn)在進(jìn)程或子程序中,它定義進(jìn)程或子程序所執(zhí)行的算法。在利用關(guān)系運(yùn)算符對(duì)位矢量數(shù)據(jù)進(jìn)行比較時(shí),比較過程從最左邊的位開始,自左向右按位進(jìn)行。“0011”的結(jié)果是“ 11010011” 第 10章 VHDL硬件描述語(yǔ)言簡(jiǎn)介 (3)算術(shù)運(yùn)算符中只有加、減、乘運(yùn)算符在 VHDL綜合時(shí)才生成邏輯電路,對(duì)于數(shù)據(jù)位較長(zhǎng)的數(shù)據(jù)應(yīng)慎重使用乘法運(yùn) (4)關(guān)系運(yùn)算符的作用是將相同數(shù)據(jù)類型的數(shù)據(jù)對(duì)象進(jìn)行比較或關(guān)系排序判斷,并將結(jié)果以布爾類型的數(shù)據(jù)表示出來?!庇糜趯⑽换蛞痪S數(shù)組組合起來形成新的位矢量或數(shù)組。在所有邏輯運(yùn)算符中, not的優(yōu)先級(jí)最高。 位連接 一維數(shù)組 nor 或非 減法 整數(shù) xor 異或 高 A 算術(shù) 運(yùn)算 + 加法 整數(shù) A 低 邏輯 運(yùn)算 xnor 異或非 bi t , boo l e n, s t d_l ogi c 第 10章 VHDL硬件描述語(yǔ)言簡(jiǎn)介 (1)邏輯運(yùn)算符可以對(duì) stdlogic、 bit、 stdlogicvector、bitvector、 boolean等類型的數(shù)據(jù)進(jìn)行運(yùn)算,運(yùn)算符兩邊的 當(dāng)一個(gè)語(yǔ)句中存在兩個(gè)以上的邏輯表達(dá)式時(shí), VHDL規(guī)定左右沒有優(yōu)先級(jí)差別。各種運(yùn)算操作符如表 ,其運(yùn)算優(yōu)先級(jí)由上至下變低。操作數(shù)的類型應(yīng)與運(yùn)算符所要求的類型相一致。 記錄數(shù)據(jù)類型比較適合于系統(tǒng)仿真,在生成邏輯電路時(shí)應(yīng)將它分解開來。 第 10章 VHDL硬件描述語(yǔ)言簡(jiǎn)介 5 數(shù)組是同一類型數(shù)據(jù)集合起來形成的,而記錄則是將不同類型的數(shù)據(jù)和數(shù)據(jù)名組織在一起而形成的新類型,定 type數(shù)據(jù)類型名 isrecord … endrecord 在從記錄數(shù)據(jù)類型中提取元素?cái)?shù)據(jù)類型時(shí)應(yīng)用“ 單位條目 。 在函數(shù)和過程語(yǔ)句中,若使用無限制范圍的數(shù)組,則其 多維數(shù)組需要用兩個(gè)以上的范圍來描述,而且多維數(shù)組不能生成邏輯電路,因此只能用于生成仿真圖形及硬件的抽象模型。包集合 stdlogic和 stdlogic1164中的 stdlogicvector類型 type stdlogicvector is array(natural range)of stdlogic。 type數(shù)據(jù)類型名 isarray范圍 of type word is array( 1 to 8) of stdlogic。 第 10章 VHDL硬件描述語(yǔ)言簡(jiǎn)介 3 數(shù)組是將相同類型的數(shù)據(jù)集合在一起形成的一個(gè)新的復(fù)合數(shù)據(jù)類型。例如 ,在 IEEE庫(kù)的包集合 stdlogic和 stdlogic1164中都有此數(shù)據(jù)類型的定 type stdlogicis(′U′,′X′,′1′,′0′,′Z′,′W′, ′L′,′H′,′′)。 第 10章 VHDL硬件描述語(yǔ)言簡(jiǎn)介 1 type數(shù)據(jù)類型名 is(元素 1,元素 2, … ,元素 n type WEEK is(SUN,MON,TUE,WED,THU,FRI,SAT)。新構(gòu)造的數(shù)據(jù)類型通常在程序包中說明,其一 type數(shù)據(jù)類型名 is typedigitisintegerrange0to7。 表 標(biāo)準(zhǔn)的數(shù)據(jù)類型 第 10章 VHDL硬件描述語(yǔ)言簡(jiǎn)介 IEEE庫(kù)的 stdlogic1164程序包中還定義了兩種應(yīng)用十 ( 1) stdlogic:工業(yè)標(biāo)準(zhǔn)邏輯型,有 0、 X(未知)、Z(高阻)等 9 ( 2) stdlogicvector:標(biāo)準(zhǔn)邏輯矢量型,是多個(gè) stdlogic VHDL的 STD庫(kù)中定義的數(shù)據(jù)類型可以直接使用,不需要事先說明,而 IEEE庫(kù)中定義的數(shù)據(jù)類型在使用前必須在程序開始處用庫(kù)調(diào)用語(yǔ)句加以說明??梢源肆私夥抡鏍顟B(tài)。 t ime 時(shí)間型數(shù)據(jù),由整數(shù)和單位組成,使用時(shí),數(shù)值和單位之間應(yīng)有空格,如 1 0 n s 。 c h a r a c t e r 字符型數(shù)據(jù),可以是任意的數(shù)字和字符,字符用‘’括起來,如‘ A ’。 b o o l e a n 布爾型數(shù)據(jù),取值是 t r u e (真)和 f a l s e (假)。 b it_ v e c t o r 位矢量型,