问答题 用VHDL语言设计上题的4-16线译码器,要求:
【正确答案】用行为描述方法实现。
   LIBRARY ieee;
   USE ieee.Std_logic_1164.ALL;
   ENTITY xiti4701 IS
   PORT(nst:IN Std_logic;a:IN Std_logic_vector(3 Std_logic_vector(15 downto 0)));
   END xiti4701
   ARCHITECTURE xiti4701 ar OF xiti4701 IS
   SIGNAL ny_i: Std_logic_vector(15 downto 0)
   BEGIN
   WITH a SELECT ny i<=
    "1111111111111110" WHEN "0000",
    "1111111111111101" WHEN "0001",
    "1111111111111011" WHEN "0010",
    "1111111111110111" WHEN "0011",
    "1111111111101111" WHEN "0100",
    "1111111111011111" WHEN "0101"
    "1111111110111111" WHEN "0110"
    "1111111101111111" WHEN "0111"
    "1111111011111111" WHEN "1000"
    "1111110111111111" WHEN "1001"
    "1111101111111111" WHEN "1010"
    "1111011111111111" WHEN "1011"
    "1110111111111111" WHEN "1100"
    "1101111111111111" WHEN "1101"
    "1011111111111111" WHEN "1110"
    "0111111111111111" WHEN "1111"
    "1111111111111111" WHEN OTHERS;
          ny<=ny i WHEN nst='0' ELSE "11ii111111111111";
    end xiti4701_ar;
    ARCHITECTURE xiti4701_ar OF xiti4701 IS
    BEGIN
       PROCESS(a)
       BEGIN
          IF nst=' 1 ' THEN
             ny<="1111111111111111";
          ELSIF a="0000" THEN
             ny<="1111111111111110";
          ELSIF a="0001" THEN
             ny<: "1111111111111101";
          ELSIF a= "0010" THEN
             ny<="1111111111111011";
          ELSIF a="0011" THEN
            ny<="1111111111110111";
          ELSIF a='0100" THEN
       ny<= "1111111111101111";
    ELSIF a:"0101" THEN
       ny<= "1111111111011111";
    ELSIF a="0110" THEN
       ny<= "1111111110111111";
    ELSIF a="0111" THEN
       ny<="1111111101111111";
    ELSIF a="1000" THEN
       ny<= "1111111011111111";
    ELSIF a= "1001" THEN
       ny<= "iiiiIi0111111111" ;
    ELSIF a="1010" THEN
       ny<= "1111101111111111";
    ELSIF a="1011" THEN
       ny<= "1111011111111111";
    ELSIF a= "1100" THEN
       ny<= "1110111111111111";
    ELSIF a= "1101" THEN
       ny<="1101111111111111";
    ELSIF a = "1110" THEN
       ny<= "1011111111111111";
    ELSE
       ny<="0111111111111111" ;
    END IF;
   END PROCESS;
【答案解析】
【正确答案】用结构描述方法设计:首先用VHDL设计74LS139;再用结构描述设计总电路。
   LIBRARY ieee
   USE ieee. Std_logic_1164. ALL;
   LIBRARY lattice;
   USE lattice, components. ALL;
   ENTITY v74x139 IS
   PORT(nst: IN Std_logic; A: IN Std_logic_vector(1 downto 0) ; ny: OUT Std_logic_vector(3 downto 0))
   END v74x139
   ARCHITECTURE v74x139_ar OF v74x139 IS
   SIGNAL s0, s1, s2, s3, s4 .. Std_logic;
   COMPONENT inv
    PORT ( a0: IN Std_Iogie ; zn0 : OUT Std_logic) ;
   END COMPONENT ;
   COMPONENT nand3
    PORT(a0, al, a2: IN Std_logic ; zn0 : OUT Std_logic)
   END COMPONENT:
   BEGIN
   U1:inv PORT MAP(nst,s0);
   U2:inv PORT MAP(A(0),s1);
   U3:inv PORT MAP(A(1),s2);
   U4:inv PORT MAP(s1,s3);
   U5:inv PORT MAP(s2,s4);
   U6:nand3 PORT MAP(s0,s1,s2,ny(0));
   U7:nand3 PORT MAP(s0,s2,s3.ny(1));
   U8:nand3 PORT MAP(s0,s1,s4,ny(2));
   U9:nand3 PORT MAP(s0.s3,s4,ny(3));
   顶层电路的VHDL程序如下:
   LIBRARY ieee:
   USE ieee.Std_logic_11 64.ALL;
   USE work.components.ALL;
   ENTlTY xiti4702 IS
   GENERIC(n:Integer:=8);
   PORT(nst:IN Std_logic;a:IN Std_logic_vector(3 downto 0);
   ny:OUT Std_logic_vector(15 downto 0));
   END xiti4702:
   ARCHITECTURE xiti4702_ar OF xiti4702 IS
   SIGNAL m:Std_logic_vector(3 downto 0);
   COMPONENT v74x139
   PORT(nst:IN Std_logic;a:IN Std_logic_vector(1 downto 0);ny:OUT Std_logic_ve ctor(3downto 0));
   END COMPONENT:
   BEGIN
   u1:v74x139 PORT MAP(nst,a(3 downto 2),m):
   u2:v74x139 PORT MAP(m(0),a(1 downto 0),ny(3 downto 0));
   u3:v74x139 PORT MAP(m(1),a(1 downto 0),ny(7 downto 4));
   u4:v74x139 PORT MAP(m(2),a(I downto 0),ny(11 downto 8));
   u5:v74x139 PORT MAP(m(3),a(1 downto 0),ny(15 dowmo 12));
   END xiti4702_ar;
   end v74x139_ar;
【答案解析】