【正文】
例化語句 生成語句( forgenerate) 作用 :為了方便電路描述 , 將具有某一邏輯功能的完整的 VHDL 設(shè)計 ( 元件 ) 直接調(diào)用 , 避免重復(fù)描述 。 元件端口信息,與該元件 實(shí)現(xiàn)時的實(shí)體的 port部分相 同并 在結(jié)構(gòu)體開始之前進(jìn) 行聲明 第二步:元件例化 例化名 : 元件名 Port Map(端口映射) 。 即: 元件標(biāo)號:元件名 Port Map( 信號 A1, 信號 B1,… ) 。 U1 : nd2 port map(a1,b1,x)。 U3 : nd2 port map (a=x,y,c=z1) 位置對應(yīng)方式 名字直接對應(yīng) 利用一位全加器元件的調(diào)用實(shí)現(xiàn)四位全加器: 利用一位全加器元件的調(diào)用實(shí)現(xiàn)四位全加器: FAS3A3 B3FAS2A2 B2FAS1A1 B1FAS0A0 B0C4Ci nC1C1C2C2C3C3C4FASa bCiC0Library ieee。 Use 。 x,y : in std_logic_vector(3 downto 0)。 Cout : out std_logic)。 Architecture a of adder is Signal c: std_logic_vector(0 to 4)。 s,co : out std_logic)。 Begin c(0)=Cin。 U2: fulladder Port map(c(1),x(1),y(1),sum(1),c(2))。 U4: fulladder Port map(c(3),x(3),y(3),sum(3),c(4))。 End a。 FAS3A3 B3FAS2A2 B2FAS1A1 B1FAS0A0 B0C4C inC1C1C2C2C3C3C0U2: fulladder Port map(ci=c(1),a=x(1),b=y(1),s=sum(1),co=c(2))。 FAS3A3 B3FAS2A2 B2FAS1A1 B1FAS0A0 B0C4C inC1C2C3C3C0U4: fulladder Port map(ci=c(3),a=x(3),b=y(3),s=sum(3),co=c(4))。 ◇ 元件例化循環(huán)管腳映射語句 [標(biāo)號: ] FOR 循環(huán)變量 IN 取值范圍 GENERATE 說明 BEGIN 并行語句 END GENERATE [標(biāo)號 ] ; [標(biāo)號: ] IF 條件 GENERATE 說明 Begin 并行語句 END GENERATE [標(biāo)號 ] ; FAS3A3 B3FAS2A2 B2FAS1A1 B1FAS0A0 B0C4C inC1C1C2C2C3C3C4: 格式: 過程名 ([形參名 =]實(shí)參表達(dá)式, ?) ; Example: ARCHITECTURE behav OF example IS PROCEDURE adder (SIGNAL a,b:IN std_logic。 ? END PROCEDURE。 ? END behav; 子程序調(diào)用語句包括了過程調(diào)用語句 和 函數(shù)調(diào)用語句 。 順序語句只能出現(xiàn)在進(jìn)程( Process)和子程序中, 子程序包括函數(shù)( Function)和過程( Procedure)。進(jìn)程語句是將并行 語句和順序語句區(qū)分開來的標(biāo)志之一。 (1) 進(jìn)程語句 ( Process 語句) Process(sel,x1,x2) Begin f=x1。 end if。 Process(sel,x1,x2) Begin If sel=1 then f=x2。 f=x1。 ?在第二個進(jìn)程中 , 無論什么情況 , f=x1, 而在第一個進(jìn)程中 ,只有信號 sel /=1時 , f=x1。 區(qū)別 Signal s1,s2 : std_logic 。 Process (s1 , s2) Variable v1,v2 : std_logic。 v2 := ?1? 。 s2 = ?1?。 sec(1) = v2。 sec(3) = s2。 v2 : = ?0?。 sec(4) = v1; sec(5) = v2; sec(6) = s1; sec(7) = s2; END PROCESS “ 0100 0111 ” 一、 第一種 IF語句 IF 條件句 THEN 順序語句 END IF 例題 語句格式 IF ( a b ) THEN out= ?1?; END IF。 END IF。 Elsif 條件句 Then 順序語句 。 else 順序語句 。 語句格式 例題 1: Signal a,b,c,p1,p2,z : bit。 ELSIF (p2=?0?) THEN z = b。 END IF。 USE 。 END coder 。 ELSIF (I(6)=?1?) THEN Y=“110”。 ELSIF (I(4)=?1?) THEN Y=“100”。 ELSIF (I(2)=?1?) THEN Y=“010”。 ELSE Y=“000”。 結(jié) 構(gòu) 體 設(shè) 計 功能:描述輸入和輸出之間的邏輯關(guān)系 END IF。 USE 。 END coder 。 ELSIF A=“001” THEN Y=“00000010”。 ELSIF A=“011” THEN Y=“00001000”。 ELSIF A=“101” THEN Y=“00100000”。 ELSE Y=“10000000”。 結(jié) 構(gòu) 體 設(shè) 計 功能:描述輸入和輸出之間的邏輯關(guān)系 END IF。 語法格式: Case 表達(dá)式 Is When 選擇值 =順序語句 When 選擇值 =順序語句 … End case。 USE ENTITY mux41 IS PORT ( s1, s2 : in std_logic。 z: out std_logic)。 ARCHITECTURE activ OF mux41 IS SIGNAL s :std_logic_vector(1 downto 0)。 s2 PROCESS (s1,s2,a,b,c,d) BEGIN CASE s IS WHEN “00”= z=a。 WHEN “10”= z=c。 WHEN OTHERS = z=?x?。 END PROCESS。 s1s2abcdzM U X 4 1ARCHITECTURE activ OF mux41 IS SIGNAL s :std_logic_vector(1 downto 0)。 s2 PROCESS (s1,s2,a,b,c,d) BEGIN IF s =“00” then z=a。 ELSIF s=“10” then z=c。 END IF。 END ARCHITECTURE activ。 BEGIN S= s1amp。 WHEN “01”= z=b。 WHEN “11”= z=d。 END CASE。 END activ。 …… CASE SEL IS WHEN 0 = Z1 =?1?。 WHEN 4 = Z3=?1?。 IF 與 CASE比較 1. IF語句中條件句之間是相與的關(guān)系, CASE語句中條件句之間是相或的關(guān)系。 3. IF語句可實(shí)現(xiàn)優(yōu)先級, CASE語句則不可以。 (二 ) 七段數(shù)碼顯示器 ↗↗↗↗↗↗↗↗↗↗↗↗↗abcdefg↗共陰極接法 a b c d e f gabcdefg a b c d e f gabcdef g1 1 1 1 0 1 19的顯示代碼 字型顯示代碼a b c d e f g1 1 1 1 1 1 00 1 1 0 0 0 01 1 0 1 1 0 11 1 1 1 0 0 10 1 1 0 0 1 10 1 1 0 0 1 11 0 1 1 1 1 11 1 1 0 0 0 01 1 1 1 1 1 11 1 1 1 0 1 1顯示譯碼器 顯示譯碼器功能 1514131211109YfYgYaYbYcYdYeA1A2A3A0adgA3 A2 A1 A0 Ya Yb Yc Yd Ye Yf Yg0 0 0 0 1 1 1 1 1 1 0 00 0 0 1 0 1 1 0 0 0 0 10 0 1 0 1 1 0 1 1 0 1 20 0 1 1 1 1 1 1 0 0 1 30 1 0 0 0 1 1 0 0 1 1 40 1 0 1 1 0 1 1 0 1 1 50 1 1 0 0 0 1 1 1 1 1 60 1 1 1 1 1 1 0 0 0 0 71 0 0 0 1 1 1 1 1 1 1 81 0 0 1 1 1 1 0 0 1 1 9輸入 輸出顯示結(jié)果其真值表如下所示 : 輸入代碼 輸出顯示代碼 Library ieee。 Use 。 Y : out std_logic_vector(6 downto 0))。 Architecture a1 of btod is Begin Process(d) Begin Case A is when 0000“ = Y= 0111111”。 1 when 0010“ = Y= 1011011”。3 when 0100“ = Y= 1100110” 。5 when 0110“ = Y= 1111101”。 7 when “1000“ = Y= “1111111 ”。9 End a1。 EXIT L2 WHEN a 10。 二、 FOR_LOOP語句 [LOOP標(biāo)號 :] FOR 循環(huán)變量 IN 循環(huán)次數(shù)范圍 LOOP 順序語句; END LOOP [LOOP 標(biāo)號 ] ; A7 A6 A5 A4 A3 A2 A1 A0 X O R 結(jié)果1 1 1 0 0 0 0 1 01 1 1 1 1 0 0 1 01 1 1 0 0 0 0 0 11 1 1 1 1 0 0 0 1例:試設(shè)計一個八位奇偶校驗(yàn)器 注: 0 XOR a = a LIBRARY IEEE。 ENTITY JIOU IS PORT (a : IN STD_LOGIC_VECTOR(7DOWNTO 0)。 END JIOU。 BEGIN PROCESS (a) BEGIN tmp = ?0?。 END LOOP。 END PROCESS。 三 . WHILE_LOOP語句 [標(biāo)號 :] WHILE 循環(huán)控制變量 LOOP 順序語句 END LOOP [標(biāo)號 ]; 例 1: Shift1 : PROCESS (inputx) VARIABLE n : POSITIVE :=1 BEGIN L1 : WHILE n8 LOOP outputx(n)= input (n+8)。 END LOOP L