【正文】
F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F M u x 12 5 6 39。 6個 4input LUT 2個 2input LUT PROCESS(input) IS BEGIN IF input(0)=?0? THEN y=“111”。 ELSIF input(2)=?0? THEN y=“101”。 ELSIF input(4)=?0? THEN y=“011”。 ELSIF input(6)=?0? THEN y=“001”。 END IF。 優(yōu)先級編碼器真值表 input output 7 6 5 4 3 2 1 0 2 1 0 0 1 1 1 0 1 1 1 0 0 1 1 1 0 1 0 1 1 1 1 0 0 0 1 1 1 1 0 1 1 0 1 1 1 1 1 0 1 0 0 1 1 1 1 1 1 0 0 1 1 1 1 1 1 1 1 0 0 0 LOOP 語句的書寫格式一般有兩種 : 1. FOR LOOP LOOP語句 LOOP語句使程序能 進行有規(guī)則的循環(huán),循環(huán)的次數(shù)受迭代算法控制。 END LOOP [ 標號 ]。 ASUM: FOR i IN 1 TO 9 LOOP sum:=i+sum; sum初始值為 0 END LOOP ASUM; LIBRARY IEEE。 ENTITY parity_check IS PORT( a: IN STD_LOGICVECTOR( 7 DOWNTO 0)。 END ENTITY parity_check。039。 END LOOP。 END PROCESS。 2. WHILELOOP [標號 ]: WHILE 條件 LOOP 順序處理語句 。 在該 LOOP語句中 ,如果條件為 真 ,則進行循環(huán) 。 i:=1。 sbcd: WHILE (i10) LOOP sum:=i+sum; i:=i+1。 ?NEXT語句用在 LOOP語句中,實現(xiàn) LOOP語句的內部循環(huán)控制。 NEXT 語句 ?“標號”表明下一次迭代的起始位置; ?“ WHEN 條件”表明 NEXT語句的執(zhí)行條件; ?如果 NEXT語句后面 “標號”和“ WHEN條件”都沒有,則只要執(zhí)行到該語句就立即無條件跳出本次循環(huán),從 LOOP語句的起始位置進入下一次循環(huán)。 如果 EXIT后面沒有跟 標號 和 WHEN條件 ,則程序執(zhí)行到該語句時就無條件地從 LOOP語句中跳出 ,結束循環(huán)狀態(tài) ,繼續(xù)執(zhí)行 LOOP 語句后繼的語句 , 7. 1. 6 EXIT語句 EXIT語句是 LOOP語句中使用的循環(huán)控制語句,執(zhí)行EXIT語句將結束循環(huán)狀態(tài),即從 LOOP語句中跳出,結束 LOOP語句的正常執(zhí)行。 EXIT [標號 ] [WHEN條件 ]。 如果 EXIT語句位于一個內循環(huán) LOOP語句中 ,執(zhí)行 EXIT語句 , 程序僅僅退出內循環(huán) , 而仍然留在外循環(huán)的 LOOP語句中 。 3) EXIT語句后跟“ WHEN條件”語句 當程序執(zhí)行到該語句時,只有所說明的” WHEN條件”為“真”時,才跳出循環(huán)的 LOOP語句。如果有標號說明,下一條要執(zhí)行的語句將是標號所說明的語句。 WAIT語句 WAIT語句的 5種格式: ① WAIT 無限等待 ② WAIT ON 敏感信號量變化 ③ WAIT UNTIL 條件滿足 ④ WAIT FOR 時間到 ⑤多條件 WAIT語句 滿足所有條件中的一個或多個條件 進程在仿真運行中總是處于下述兩種狀態(tài)之一:執(zhí)行和掛起。 1. WAIT ON [標號 :] WAIT ON 敏感信號列表; 例如: WAIT ON a,b。 Process(a,b) IS Begin y=a and b。 Process Begin y=a and b。 End process。 wait on a,b。 如果 PROCESS語句已含有敏感信號量說明,則進程中不能再使用 WAIT ON語句。 ?表達式為布爾表達式,當進程執(zhí)行到該語句時將被掛起,直到表達式的值為“真”,進程才被再次啟動。如果評估的結果使表達式返回一個“真”值,則進程脫離掛起狀態(tài),繼續(xù)執(zhí)行下一個語句。 3. WAIT FOR WAIT FOR 時間表達式 。 例如: WAIT FOR 20 ns。 4. 多條件 WAIT 語句 WAIT ON nmi, interrupt UNTIL ((nmi=TRUE) OR (interrupt=TRUE)) FOR 5181。 nmi和 interrupt任何一個有一次新的變化; nmi和 interrupt任何一個取值為真; 5181。 在多條件等待時,表達式的值至少應包含一個信號量的值;只有信號量的變化才能引起等待語句表達式的一次新的評價和計算。 SIGNAL sendb:STD_LOGIC。 senda=?1? after 10 ns。 senda=?0? after 10 ns。 B: PRCOESS BEGIN WAIT UNTIL senda=?0?。 WAIT UNTIL senda=?1?。 END PROCESS B。 A: PRCOESS BEGIN WAIT UNTIL (sendb=?1?) FOR 1 us。 senda=?1? after 10 ns。 ASSERT (sendb=?0?) REPORT”sendb timed out at ?0?” SEVERITY ERROR。 END PROCESS A。 NULL。PROCESS語句是 VHDL語言中描述硬件系統(tǒng)并發(fā)行為的最基本的語句 。 塊名: BLOCK [衛(wèi)式布爾表達式 ] [IS] [類屬參數(shù)說明 ] [類屬參數(shù)映射 ] [端口說明 ] [端口映射 ] [說明語句 ] BEGIN 并發(fā)描述語句; END BLOCK [塊名 ]。 ( 2) BLOCK語句是一個獨立的子結構,可以包含PORT和 GENERIC語句。 ( 3)說明語句可以是子程序聲明或定義、類型定義、常數(shù)定義、信號定義、 COMPONENT元件聲明等 ( 4) BLOCK內部語句是并發(fā)描述語句 ( 5)衛(wèi)式布爾表達式說明了 BLOCK語句的執(zhí)行條件,只有條件為“真”時, BLOCK語句才執(zhí)行。 條件信號賦值 (Conditional Signal Assignment)語句 條件信號賦值語句也是并發(fā)描述語句 ,它可以根據(jù)不同條件將不同的多個表達式之一的值代入信號量 。 ARCHITECTURE rtl OF mux4 IS SIGNAL sel: STD_LOGIC_VECTOR( l DOWNTO 0)。 a。X39。 注意幾點: 條件信號賦值語句與 IF語句的不同之處在于 ,后者只能在進程內部使用 (因 為它們是順序語句 )。 與 IF語句不同的是 ,條件信號賦值語句不能進行 嵌套。 USE IEEE. STD_LOGIC_1164. ALL。 q: OUT STD_LOGIC)。 ARCHITECTURE behav OF mux IS SIGNAL sel: INTEGER。 WHEN OTHERS。 AND b=?039。 AND b=?039。 AND b=?139。 AND b=?139。 END ARCHITECTURE behav。 USE IEEE. STD_LOGIC_1164. ALL。 q: OUT STD_LOGIC)。 ARCHITECTURE behav OF mux IS SIGNAL sel: STD_LOGIC_VECTOR(1 DOWNTO 0)。 b。 WHEN OTHERS。 PROCESS( sel) IS BEGIN CASE sel IS WHEN “00” = q=i0。, WHEN “01” = q=i2。 WHEN OTHERS=q=?X?。 END PROCESS。該語句指定了本構造體中所調用的是哪一個現(xiàn)成的邏輯描述模塊。 元件標號名加在元件名的前面,在該構造體的說明中該標號名一定是唯一的。 COMPONENT 語句及 PORT MAP 語句 GENERATE語句 GENERATE語句用來產生多個相同的結構, 有 FOR—GENERATE和 IF—GENERATE兩種形式: 標號: FOR 變量 IN 不連續(xù)區(qū)間 GENERATE 并發(fā)處理語句 。 END GENERATE [標號名 ]; GENERATE語句 ?FOR—GENERATE和 FOR—LOOP語句不同,前者的結構中采用并發(fā)處理語句,后者是順序處理語句。 ?IF—GENERATE語句在條件為“真”時才執(zhí)行結構內部的語句,語句同樣是并發(fā)處理的,該結構中沒有 ELSE項。 d q clk d q clk d q clk d q clk clk a Z(0) DFF X(0) DFF X(1) DFF X(2) DFF X(3) Z(1) Z(2) Z(3) Z(4) b 4位移位寄存器原理框圖 LIBRARY IEEE。 ENTITY shift IS PORT (a,clk: IN STD_LOGIC。 END ENTITY shift。 q: OUT STD_LOGIC)。 SIGNAL z:STD_LOGIC_VECTOR(0 to 4)。 g1:FOR i in 0 TO 3 GENERATE dffx: dff PORT MAP (z(i),clk,z(i+1))。 b=z(4)。 dff1: dff PORT MAP (z(0),clk,z(1))。 dff3: dff PORT MAP (z(2),clk,z(3))。 從上例可以發(fā)現(xiàn),在移位寄存器的輸入端和輸出端的信號連接無法用 FOR—GENERATE語句來實現(xiàn),只能用兩條信號代入語句來完成。為了解決不規(guī)則電路的統(tǒng)一描述方法,就可以采用 IF—GENERATE語句 。 USE 。 PORT (a,clk: IN STD_LOGIC。 END ENTITY shift。 q: OUT STD_LOGIC)。 SIGNAL z:STD_LOGIC_VECTOR(1 to (len1))。 END GENERATE。 END GENERATE。 END GENERATE。 END ARCHITECTURE if_shift。 VHDL語言中順并描述語句主要有: ?信號賦值語句; ?過程調用語句; ?斷言語句 ?報告語句 順并描述語句 信號賦值語句 目的信號 =表達式; ?信號賦值語句可以在進程中內部使用,此時它作為順序語句形式出現(xiàn);信號賦值語句也可以在構造體的進程之外使用,此時它作為并發(fā)語句出現(xiàn)。 END ARCHITECUTRE beh。 END PROCESS。 信號賦值語句 過程調用語句( Procedure Call) PROCEDURE 過程名(參數(shù) 1;參數(shù) 2; … ) IS [定義語句 ]; (變量等定義) BEGIN [順序處理語句 ]; (過程的語句) END [PROCEDURE] 過程名;