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