【正文】
第四章 基本邏輯電路設(shè)計(jì)實(shí)例 ?組合邏輯電路設(shè)計(jì) ?時序邏輯電路設(shè)計(jì) ?存儲器設(shè)計(jì) ?狀態(tài)機(jī)設(shè)計(jì) 一、 4選 1多路選擇器 四 選 一 y a b c d s0 s1 組合邏輯電路的設(shè)計(jì) LIBRARY IEEE。 USE 。 ENTITY mux4 IS PORT (a,b,c,d,s0,s1: IN std_logic。 y: OUT std_logic )。 END mux4。 ARCHITECTURE func OF mux4 IS VARIABLE sel:std_logic_vector(1 DOWNTO 0); BEGIN sel=s1amp。s0。 y = a WHEN sel =‘0039。 ELSE b WHEN sel =‘01’ ELSE c WHEN sel =‘10’ ELSE d WHEN sel =‘11’ ELSE ‘X’。 END func。 PROCESS (s0, s1) sel:=s1& s0 CASE sel IS WHEN ‘00’= y =‘ a’ ; WHEN ‘01’= y =‘ b’ ; WHEN ‘10’= y =‘ c’ ; WHEN ‘ 11’ = y = ‘ d ’ ; WHEN OTHERS= y = ‘X’ ; END CASE; END PROCESS; BEGIN PROCESS (s0, s1) BEGIN IF(s0=‘0’and s1=‘0’) THEN y =‘ a’ ; ELSIF(s0=‘0’and s1=‘1’)THEN y =‘ b’ ; ELSIF(s0=‘1’and s1=‘0’)THEN y =‘ c’ ; ELSIF(s0=‘1’and s1=‘1’)THEN y =‘ d’ ; ELSE y = ‘X’ ; END IF; END PROCESS; 二:編碼器與譯碼器 優(yōu)先級 83編碼器 編碼器 y0 d0 d1 d2 d3 d4 d5 d6 d7 y1 y2 輸入 輸出 d7 d6 d5 d4 d3 d2 d1 d0 y2 y1 y0 1 - - - - - - - 1 1 1 0 1 - - - - - - 1 1 0 0 0 1 - - - - - 1 0 1 0 0 0 1 - - - - 1 0 0 0 0 0 0 1 - - - 0 1 1 0 0 0 0 0 1 - - 0 1 0 0 0 0 0 0 0 1 - 0 0 1 0 0 0 0 0 0 0 0 0 0 0 優(yōu)先編碼器就是當(dāng)有兩個或兩個以上的輸入有效時,僅對優(yōu)先級高的輸入進(jìn)行編碼 LIBRARY IEEE。 USE 。 ENTITY encoder8_3 IS PORT (d: IN std_logic_vector(7 downto 0)。 y0,y1,y2: OUT std_logic )。 END encoder8_3。 ARCHITECTURE func OF encoder8_3 IS BEGIN PROCESS(d) VARIABLE temp:std_logic_vector(2 downto 0)。 BEGIN IF(d(7)=‘1’) THEN temp:=“111”。 ELSIF(d(6)=‘1’) THEN temp:=“110”。 ELSIF(d(5)=‘1’) THEN temp:=“101”。 ELSIF(d(4)=‘1’) THEN temp:=“100”。 ELSIF(d(3)=‘1’) THEN temp:=“011”。 ELSIF(d(2)=‘1’) THEN temp:=“010”。 ELSIF(d(1)=‘1’) THEN temp:=“001”。 ELSIF(d(0)=‘1’) THEN temp:=“000”。 END IF y(0)=temp(0)。 y(1)=temp(1)。 y(2)=temp(2)。 END PROCESS END func。 普通 83編碼器 CASE d IS WHEN ‘ 10000000’= temp =‘ 111’ ; WHEN ‘01 000000’= temp =‘ 110’ ; WHEN ‘ 00100000’= temp =‘ 101’ ; WHEN ‘ 00010000’= temp =‘1 00’ ; WHEN ‘ 00001000’ = temp =‘ 011’ ; WHEN ‘ 00000100’ = temp =‘ 010’; WHEN ‘ 00000010’ = temp =‘ 001’; WHEN ‘ 00000001’ = temp =‘ 000’; WHEN OTHERS = temp= ‘X XX’ ; END CASE; 138譯碼器 選通輸入 地址輸入 譯碼器輸出 g1 g2a g2b a2 a1 a0 y7 y6 y5 y4 y3 y2 y1 y0 - 1 - - - - 1 1 1 1 1 1 1 1 - - 1 - - - 1 1 1 1 1 1 1 1 0 - - - - - 1 1 1 1 1 1 1 1 1 0 0 0 0 0 1 1 1 1 1 1 1 0 1 0 0 0 0 1 1 1 1 1 1 1 0 1 1 0 0 0 1 0 1 1 1 1 1 0 1 1 1 0 0 0 1 1 1 1 1 1 0 1 1 1 1 0 0 1 0 0 1 1 1 0 1 1 1 1 1 0 0 1 0 1 1 1 0 1 1 1 1 1 1 0 0 1 1 0 1 0 1 1 1 1 1 1 1 0 0 1 1 1 0 1 1 1 1 1 1 1 LIBRARY IEEE。 USE 。 ENTITY decoder3_8 IS PORT (a2,a1,a0,g1,g2a,g2b: IN std_logic。 y: OUT std_logic_vector)。 END decoder3_8。 ARCHITECTURE func OF decoder3_8 IS BEGIN PROCESS(a2,a1,a0,g1,g2a,g2b) VARIABLE temp:std_logic_vector(2 downto 0)。 BEGIN temp:=a2amp。a1amp。a0。 IF(g1=‘1’and g2a=‘0’and g2b=‘0’)THEN CASE temp IS WHEN “000”=y=“11111110” WHEN “111”=y=“01111111”。 WHEN “OTHERS”=y=“XXXXXXXX”。 END CASE。 ELSE y=“11111111” END IF。 END PROCESS。 END func。 三:加法器 一位全加器 半加器 h_adder的描述 I 1 1 3coasob1001010110001100cosoban o t x n o r 2a n d 2一位全加器可以由兩個半加器和一個與門連接而成。 LIBRARY IEEE。 半加器描述 USE 。 ENTITY h_adder IS PORT (a, b : IN STD_LOGIC。 co, so : OUT STD_LOGIC)。 END h_adder。 ARCHITECTURE fh1 OF h_adder is BEGIN so = NOT(a XOR (NOT b)) 。 co = a AND b 。 END fh1。 全加器 f_adder電路圖及其實(shí)體模塊 LIBRARY IEEE。 1位二進(jìn)制全加器頂層設(shè)計(jì)描述 USE 。 ENTITY f_adder IS PORT (ain, bin, cin : IN STD_LOGIC。 cout, sum : OUT STD_LOGIC )。 END f_adder。 ARCHITECTURE fd1 OF f_adder IS COMPONENT h_adder 調(diào)用半加器聲明語句 PORT ( a, b : IN STD_LOGIC。 co, so : OUT STD_LOGIC)。 END COMPONENT ; COMPONENT or2a PORT (a, b : IN STD_LOGIC。 c : OUT STD_LOGIC)。 END COMPONENT; SIGNAL d, e, f : STD_LOGIC。 定義 3個信號作為內(nèi)部的連接線 。 BEGIN u1 : h_adder PORT MAP(a=ain, b=bin, co=d, so=e)。例化語句 u2 : h_adder PORT MAP(a=e, b=cin, co=f, so=sum)。 u3 : or2a PORT MAP(a=d, b=f, c=cout)。 END fd1。 串行進(jìn)位加法器 兩個多位二進(jìn)制數(shù)相加時,除了最低位之外,每一位相加都必須包括低位進(jìn)位,因此必須使用全加器。 按照加法規(guī)則,只需將低位全加器的進(jìn)位輸出端 Ci接到高位全加器的進(jìn)位輸入端 Ci+1就可以構(gòu)成多位二進(jìn)制加法器。 2B1iC?iC?iA iB2A1iC?iC?iA iB1B1A 3A1iC?iC?iA iB3B0S1iC?iC?iA iB0A 0B3S2S1S4C例:兩個二位數(shù)相加 串行進(jìn)位鏈: c0 = (a0 and b0) or ((a0 or b0)and cin)。 c1 = (a1 and b1) or ((a1 or b1)and c0