【正文】
S BEGIN output=a(i)。 END GENERATE。 g3:IF i=(len1) GENERATE dffx: dff PORT MAP (z(i),clk,b)。 END COMPONENT dff。 b: OUT STD_LOGIC)。 LIBRARY IEEE。 dff4: dff PORT MAP (z(3),clk,z(4))。 END ARCHITECTURE gen_shift。 BEGIN z(0)=a。 ARCHITECTURE gen_shift OF shift IS COMPONENT dff IS PORT(d,clk: IN STD_LOGIC。 USE 。所以 FOR—GENERATE結(jié)構(gòu)中不能使用 EXIT和 NEXT語句。 低層元件的端口信號與高層的實際連接信號 PORT MAP的映射關(guān)系聯(lián)系起來。 COMPONENT 語句及 PORT MAP 語句 COMPONENNT 元件名 IS [GENERIC 語句; ] 參數(shù)說明 PORT (端口列表); 端口說明 END COMPONENT [元件名 ]; 在構(gòu)造體的結(jié)構(gòu)描述中, COMPONENT語句是基本描述語句。, WHEN “11” = q=i3。 END ARCHITECTURE behave。 BEGIN sel = a amp。 ENTITY mux IS PORT( il,i2,i3,a,b: IN STD_LOGIC。 ELSE 4。 ELSE 2 WHEN a=?039。 sel=0 WHEN a=?039。 END ENTITY mux。 LIBRARY IEEE。 END ARCHITECTURE rtl。 BEGIN sel=b amp。采用衛(wèi)式布爾表達式的 BLOCK語句內(nèi)部需要使用關(guān)鍵詞GUARDED控制賦值語句的執(zhí)行 一位全加器的 BLOCK的描述 D觸發(fā)器的 BLOCK的描述 選擇信號賦值語句 (Selective Signal Assignment) WITH 表達式 SELECT 目的信號量 =表達式 1 WHEN 條件 1, 表達式 2 WHEN 條件 2, …… 表達式 n WHEN條件 n。 BLOCK語句的書寫格式一般為 : BLOCK語句的特點: ( 1)塊名是必須要有的,不能省略。 并發(fā) ( Concurrent) 描述語句 在 VHDL語言中能進行并發(fā)處理的語句有: 進程 (PROCESS)語句 塊 (BLOCK)語句 選擇信號號代入 (Selective Signal Assignment )語句 條件信號代入 (Conditional Signal Assignment)語句 COMPONENT語句和 PORT MAP語句 GENERATE語句 進程語句是一種并發(fā)處理語句 ,在一個構(gòu)造體中多個 PROCESS語句可以同時并發(fā)運行 。 senda=?0? after 10 ns。 ASSERT (sendb=?1?) REPORT”sendb timed out at ?1?” SEVERITY ERROR。 sendb=?1? after 10 ns。 END PROCESS A。 BEGIN A: PRCOESS BEGIN WAIT UNTIL sendb=?1?。s; 只要上述 3個條件中一個或多個滿足,進程將再次啟動,繼續(xù)執(zhí)行 WAIT語句的后繼語句。 WAIT FOR (a*(b+c))。 例如: WAIT UNTIL((x*10)100)。 2. WAIT UNTIL WAIT UNTIL [布爾表達式 ]。 WAIT ON語句與進程敏感信號列表的關(guān)系 Process(a,b) IS Begin y=a and b。 End process。 進程狀態(tài)的變化受 WAIT語句的控制,當(dāng)進程執(zhí)行到WAIT語句時,就將被掛起,并設(shè)置好再次執(zhí)行的條件。此時不管 EXIT語句是否有標號說明,都將執(zhí)行下一條語句。 EXIT語句具有 3種基本書寫格式 : 1) EXIT語句沒有 “ 循環(huán)標號 ” 或 “ WHEN條件 ” 當(dāng)條件為 “ 真 ” 執(zhí)行 EXIT語句時 , 程序?qū)慈缦马樞驁?zhí)行:執(zhí)行 EXIT, 程序?qū)膬H僅當(dāng)前所屬的 LOOP語句中退出 。 ?LOOP 語句嵌套時,通常 NEXT語句應(yīng)標有“標號”和“ WHEN條件”。 END LOOP sbcd; FORLOOP與 WHILELOOP的區(qū)別舉例: NEXT 語句 NEXT [標號 ] [WHEN條件 ]。 如果條件為 假 ,則結(jié)束循環(huán)。 END ARCHITECTURE rtl。 ; F0R i IN 0 TO 7 LOOP tmp: =tmp XOR a(i)。 y: OUT STD_LOGIC)。 LOOP語句中的循環(huán)變量的值在每次循環(huán)中都將發(fā)生變化 , 而 IN后跟的離散范圍則表示循環(huán)變量在循環(huán)過程中依次取值的范圍。 END PROCESS。 ELSIF input(5)=?0? THEN y=“010”。 ELSIF input(1)=?0? THEN y=“110”。 h B 7 F F 7 F F F F F F F F F F F 7 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 a [ 7 . . 0 ]y [ 2 . . 0 ]M u x 02 5 6 39。 h 1 1 39。 h 3 1 39。 B U F ( D C )0S E L [ 3 . . 0 ]D A T A [ 1 5 . . 0 ]O U TM U XS E L [ 3 . . 0 ]D A T A [ 1 5 . . 0 ]O U TM U XS E L [ 3 . . 0 ]D A T A [ 1 5 . . 0 ]O U TM U XB U F ( D C )co m b ~0M u x 03 39。 WHEN 11111101 = y= 001。 WHEN 11011111 = y= 101。 WHEN 111 = y= 01111111。 WHEN 011 = y= 11110111。、39。 END CASE; CASE語句的注意問題: 1)每個條件表達式的取值唯一,值不能重復(fù); 2)所有的值都必須列出; 3)用 WHEN OTHERS列出其他所有可能值; 4)條件表達式的取值是平級的,與書寫順序無關(guān); 5)不支持優(yōu)先級電路的描述 6)條件表達式的取值不能是 不能使用任意值 39。 CASE 語句 條件表達式 4種不同表示形式: 1) WHEN 值 =順序處理語句; 2) WHEN 值 | 值 |值 |……|= 順序處理語句; 3) WHEN 值 TO 值 =順序處理語句; 4) WHEN OTHERS= 順序處理語句; CASE sel IS WHEN 0 = q=i0。 ?IF語句描述時鐘邊沿時,只能使用單分支操作 IF語句格式,即不能含有 ELSE項 ?IF語句的條件判斷輸出是布爾量,即真( TRUE)或假( FALSE)。 IF 條件表達式 1 THEN IF 條件表達式 2 THEN …… IF 條件表達式 N THEN 順序處理語句; 分支 1,同時滿足條件 1~N ELSE 順序處理語句; 分支 2,同時滿足條件 1~N1 END IF; …… ELSE 順序處理語句; 分支 N,只滿足條件 1 END IF; ELSE 順序處理語句; 分支 N+1,所有條件都不滿足 END IF; 格式 2: ?IF語句不僅可以用于選擇器的設(shè)計,而且還可以用于比較器、譯碼器等凡是可以進行條件控制的邏輯電路設(shè)計。 ELSIF (sel=“01”) THEN y=input(1)。 sel: IN STD_LOGIC_VECTOR(1 DOWNTO 0)。 分支 1 ELSIF 分支條件表達式 2 THEN 順序處理語句; 分支 2 ………… ELSIF分支條件表達式 N THEN 順序處理語句; 分支 N ELSE 順序處理語句; 分支 N+1 END IF; 在這種多選擇控制的IF語句中,設(shè)置了多個條件,當(dāng)滿足所設(shè)置的多個條件之一時,就執(zhí)行該條件后跟的順序處理語句。 END IF。分支 1 ELSE 順序處理語句; 分支 2 END IF; 在這種格式的 IF語句中,當(dāng) IF語句所指定的條件滿足時,將執(zhí)行 THEN和 ELSE之間所界定的順序語句。 END IF; 當(dāng)程序執(zhí)行到該 IF語句時,就要判斷 IF語句所指定的條件是否成立。 ?順序描述語句所涉及到的系統(tǒng)行為有時序流、條件、控制和迭代等; ?順序描述語句的功能操作有算術(shù)、邏輯運算,信號和變量的賦值,子程序調(diào)用等。 ?順序描述語句只能出現(xiàn)在進程或子程序(過程和函數(shù))中,由它定義進程或子程序所執(zhí)行的算法。 變量賦值語句的格式: IF語句 1. 單分支操作 IF語句 IF 分支條件表達式 THEN 順序處理語句; 分支操作 END IF; IF (a=?1?) THEN c=b。 END IF; 2. 雙重分支操作 IF語句 IF 分支條件表達式 THEN 順序處理語句 。 ELSE c=b。 3. 多重分支操作 IF語句 IF 分支條件表達式 1 THEN 順序處理語句 。 ENTITY mux4 IS PORT ( input :IN STD_LOGIC_VECTOR(3 DOWNTO 0)。 ARCHITECTURE rtl OF mux4 IS BEGIN PROCESS (input,sel) IS BEGIN IF (sel=“00”) THEN y=input(0)。 END IF; END PROCESS; END ARCHITECTURE rtl。 ?只能在進程、過程或函數(shù)等順序執(zhí)行語句結(jié)構(gòu)中使用。 格式: 當(dāng) CASE和 IS之間的表達式的取值滿足 WHEN指定的條件表達式的值時,程序?qū)?zhí)行后跟的,由符號 =所指的順序處理語句。 WHEN 3 = q=i3。039。 WHEN 010 = y= 11111011。 WHEN 110 = y= 10111111。 例: 210進制編碼器的 CASE描述 CASE input IS WHEN 01111111 = y= 111 ; WHEN 10111111 = y= 110。 WHEN 11111011 = y= 010。 END CASE。 h 1 M u x 13 39。 h 3 1 39。 3個 4input LUT S E L [ 7 . . 0 ]D A T A [ 2 5 5 . . 0 ]O U TM U XS E L [ 7 . . 0 ]D A T