【正文】
PORT (a,b,c,d: IN STD_LOGIC。 s1: IN STD_LOGIC。 mux21 in0 output in1 sel buf3s input output enable END ENTITY mux41。定義標(biāo)準(zhǔn)邏輯位矢量數(shù)據(jù) BEGIN s0s1=s1amp。 s1 相并 s0,即 s1 與 s0 并置操作 PROCESS(s0s1,a,b,c,d) BEGIN IF s0s1 = 00 THEN y = a。 ELSIF s0s1 = 10 THEN y = c。 END IF。 END ARCHITECTURE if_mux41。 USE 。 s0: IN STD_LOGIC。 y: OUT STD_LOGIC)。 ARCHITECTURE case_mux41 OF mux41 IS SIGNAL s0s1 : STD_LOGIC_VECTOR(1 DOWNTO 0)。s0。 WHEN 01 = y = b。 WHEN 11 = y = d。 END CASE。 END ARCHITECTURE case_mux41。要求 : 1)首先設(shè)計(jì) 1 位半減器 ,然后用例化語(yǔ)句將它們連接起來(lái) ,圖 420 中 h_suber 是半減器 ,diff 是輸出差 (diff=xy),s_out 是借位輸出 (s_out=1,xy),sub_in 是借位輸入。 半減器描述 (1):布爾方程描述方法 USE 。 diff,s_out: OUT STD_LOGIC)。 ARCHITECTURE hs1 OF h_suber IS BEGIN Diff = x XOR (NOT y)。 END ARCHITECTURE hs1。 1 位二進(jìn)制全減器順層設(shè)計(jì)描述 USE 。 sub_out,diff_out: OUT STD_LOGIC)。 ARCHITECTURE fs1 OF f_suber IS COMPONENT h_suber 調(diào)用半減器聲明語(yǔ)句 PORT(x, y: IN STD_LOGIC。 END COMPONENT。 定義 1 個(gè)信號(hào)作為內(nèi)部的連接線。 u2: h_suber PORT MAP(x=a, y=sub_in, diff=diff_out,s_out=c)。 END ARCHITECTURE fs1。 xin yin a b diff_out c 解 (2):采用例化方法,以 1 位全減器為基本硬件;實(shí)現(xiàn)串行借位的 8 位減法器 (上圖所示 )。 USE 。 y0,y1,y2,y3,y4,y5,y6,y7,sin: IN STD_LOGIC。 diff4,diff5,diff6,diff7,sout: OUT STD_LOGIC)。 ARCHITECTURE s8 OF suber_8 IS COMPONENT f_suber 調(diào)用全減器聲明語(yǔ)句 PORT(xin,yin,sub_in: IN STD_LOGIC。 END COMPONENT。 定義 1 個(gè)信號(hào)作為內(nèi)部的連接線。 u1:f_suber PORT MAP(xin=x1,yin=y1,diff_out=diff1,sub_in=a0,sub_out=a1)。 u3:f_suber PORT MAP(xin=x3,yin=y3,diff_out=diff3,sub_in=a2,sub_out=a3)。 u5:f_suber PORT MAP(xin=x5,yin=y5,diff_out=diff5,sub_in=a4,sub_out=a5)。 u7:f_suber PORT MAP(xin=x7,yin=y7,diff_out=diff7,sub_in=a6,sub_out=sout)。 35 用 VHDL 設(shè)計(jì)一個(gè) 38 譯碼器,要求分別用 (條件 )賦值語(yǔ)句、 case 語(yǔ)句、 if else 語(yǔ)句或移位操作符來(lái)完成。 解( 1):條件賦值語(yǔ)句 35 3 到 8 譯碼器設(shè)計(jì) (條件賦值語(yǔ)句實(shí)現(xiàn) ) xin sub_out yin u0 sub_in diff_out x0 y0 sin diff0 xin sub_out yin u1 sub_in diff_out x1 y1 diff1 xin sub_out yin u7 sub_in diff_out x7 y7 sout diff7 ……………… . ……………… . 串行借位的 8 位減法器 a0 a1 a6 LIBRARY IEEE。 USE 。 ENTITY decoder3to8 IS port( DIN: IN STD_LOGIC_VECTOR(2 DOWNTO 0)。 END decoder3to8。 END behave。 USE 。 為使用類(lèi)型轉(zhuǎn)換函數(shù),打開(kāi)此程序包。 DOUT: OUT BIT_VECTOR(7 DOWNTO 0))。 ARCHITECTURE behave OF decoder3to8 IS BEGIN PROCESS (DIN) BEGIN CASE CONV_INTEGER(DIN) IS WHEN 0 = DOUT=00000001。 WHEN 2 = DOUT=00000100。 WHEN 4 = DOUT=00010000。 WHEN 6 = DOUT=01000000。 WHEN OTHERS = NULL。 END PROCESS。 解( 3): if_else 語(yǔ)句 35 3 到 8 譯碼器設(shè)計(jì) (if_else 語(yǔ)句實(shí)現(xiàn) ) LIBRARY IEEE。 USE 。 ENTITY decoder3to8 IS port( DIN: IN STD_LOGIC_VECTOR(2 DOWNTO 0)。 END decoder3to8。 ELSIF CONV_INTEGER(DIN)=1 THEN DOUT=00000010。 ELSIF CONV_INTEGER(DIN)=3 THEN DOUT=00001000。 ELSIF CONV_INTEGER(DIN)=5 THEN DOUT=00100000。 ELSIF CONV_INTEGER(DIN)=7 THEN DOUT=10000000。 END PROCESS。 解( 4):移位操作符 35 3 到 8 譯碼器設(shè)計(jì) (移位操作實(shí)現(xiàn) ) LIBRARY IEEE。 USE 。 ENTITY decoder3to8 IS port( DIN: IN STD_LOGIC_VECTOR(2 DOWNTO 0)。 END decoder3to8。 被移位部分是常數(shù) END behave。 解: 36 設(shè)計(jì)一個(gè)比較電路,當(dāng)輸入的 8421BCD 碼大于 5 時(shí)輸出 1,否則輸出 0。 USE 。 ENTITY g_5_cmp IS PORT( d_in : IN STD_LOGIC_VECTOR(3 DOWNTO 0)。 比較輸出 (1:輸入數(shù)據(jù) 5) END g_5_cmp。139。 else cmp_out=39。 輸入數(shù)據(jù)小于等于 5,比較輸出 0。 END PROCESS。 37 利用 if 語(yǔ)句設(shè)計(jì)一個(gè)全加器 。 1 位二進(jìn)制全加器頂層設(shè)計(jì)描述 USE 。 ENTITY f_adder IS PORT (ain,bin,cin : IN STD_LOGIC。 END ENTITY f_adder。139。139。139。139。039。 IF (ain=39。 AND bin=39。)OR(ain=39。 AND cin=39。)OR(bin=39。 AND cin=39。)OR(ain=39。 AND bin=39。 AND cin=39。) THEN cout=39。 ELSE cout=39。 END IF。 END ARCHITECTURE fd1。 解: 38 設(shè)計(jì)一個(gè)求補(bǔ)碼的程序,輸入數(shù)據(jù)是一個(gè)有符號(hào)的 8 位二進(jìn)制數(shù)。 USE 。 ENTITY _patch IS PORT( _data : IN STD_LOGIC_VECTOR(7 DOWNTO 0)。補(bǔ)碼輸出 END _patch。039。 _data=0,補(bǔ)碼 =原碼。(not _data(6 DOWNTO 0))+1。 END IF。 END BHV。 39 設(shè)計(jì)一個(gè)格雷碼至二進(jìn)制數(shù)的轉(zhuǎn) 換器。 USE 。 為使用類(lèi)型轉(zhuǎn)換函數(shù),打開(kāi)此程序包。 DOUT: OUT BIT_VECTOR(3 DOWNTO 0))。 ARCHITECTURE behave OF grayTObinary IS BEGIN PROCESS (DIN) BEGIN CASE DIN IS WHEN 0000 = DOUT=0000。 WHEN 0011 = DOUT=0010。 WHEN 0110 = DOUT=0100。 WHEN 0101 = DOUT=0110。 WHEN 1100 = DOUT=1000。 WHEN 1111 = DOUT=1010。 WHEN 1010 = DOUT=1100。 WHEN 1001 = DOUT=1110。 WHEN OTHERS = NULL。 END PROCESS。 310 利用 if 語(yǔ)句設(shè)計(jì)一個(gè) 3 位二進(jìn)制數(shù) A[2..0]、 B[2..0]的比較器電路。 310 利用 if 語(yǔ)句設(shè)計(jì)一個(gè) 3 位二進(jìn)制數(shù) A[2..0]、 B[2..0]的比較器電路。 LIBRARY IEEE。 USE 。 兩個(gè) 3 位輸入 LT: OUT STD_LOGIC。 大于輸出 EQ: OUT STD_LOGIC)。 ARCHITECTURE ONE OF COMP IS BEGIN PROCESS(A,B) BEGIN IF (AB) THEN LT=39。ELSE LT=39。END IF。139。039。 IF (A=B) THEN EQ=39。ELSE EQ=39。END IF。 LT = (AB)。 大于 EQ = (A=B)。 311 利用 8 個(gè)全加器,可以構(gòu)成一個(gè) 8 位加法器。并以此項(xiàng)設(shè)計(jì)為例,使用 GENERIC 參數(shù)傳遞的功能,設(shè)計(jì)一個(gè) 32 位加法器。 USE 。 USE 。 定義參數(shù) S 為整數(shù)類(lèi)型,且等于 4 PORT(A,B: IN STD_LOGIC_VECTOR(S1 DOWNTO 0)。 SUM: OUT STD_LOGIC_VECTOR(S1 DOWNTO 0)。 END ENTITY ADDER8B。 VARIABLE C1: STD_LOGIC。 BEGIN C1:=CIN。