问答题 仿照7449的VHDL程序,写出7447的VHDL程序。据此写出电平高有效输出显示译码器7448的VHDL程序。
【正确答案】7447的VHDL程序如下:
   LIBRARY ieee;
   USE ieee.Std_logic_1164.ALL;
   LIBRARY lattice;
   USE lattice.components.ALL;
   ENTITY v7447 IS
   PORT(nit,nrbi:IN Bit;bi_rbo:INOUT Bit;di:IN Bit_vector(3 downto 0);a,b,C,d,e,f,g:OUT Bit):
   END v7447:
   ARCHITECTURE v7447_ar OF v7447 IS
   SIGNAL ny_i:BiLvector(6 downto 0);
   BEGIN
   PROCESS(bi_rbo,nit,nrbi,di)
   BEGIN
   IF bi_rbo='1' THEN
   IF nlt='l' THEN
   CASE di IS
   WHEN "0000"=>
   IF nrbi='0' THEN
   ny_i<="1111111";bi_rbo<='1';
   ELSE
   ny_i<="0000001";bi_rbo<='1';
   END IF:
   WHEN "0001"=>ny_i<="1001111";bi_rbo<='1';
   WHEN "0010" =>ny_i<="0010010";bi_rbo<='1';
   WHEN "0011"=>ny_i<="0000110";bi_rbo<='1';
   WHEN "0100"=>ny_i<="1001100";bi_rbo<='1';
     WHEN "0101"=>ny_i<="0100100"; bi_rbo<='1' ;
     WHEN "0110" =>ny_i<="1100000"; bi_rbo<='1' ;
     WHEN "0111"=>ny_i<="0001111"; bi_rbo<='1' ;
     WHEN "1000"=>ny_i<i="0000000"; bi_rbo<=' 1' ;
     WHEN "1001"=>ny_i<="0001100"; bi_rbo<='1' ;
     WHEN "1010"=>ny_i<="1110010"; bi_rbo<='1' ;
     WHEN "1011"=>ny_i<="1100110"; bi_rbo<='1' ;
     WHEN "1100"=>ny_i<="1011100"; bi_rbo<='1';
     WHEN "1101"=>ny_i<="0110100"; bi_rbo<='1';
     WHEN "1110"=>ny_i<="1110000"; bi_rbo<='1';
     WHEN "1111"=>ny_i<="1111111"; bi_rbo<='1';
     WHEN OTHERS= >ny_i< = "0000000" ; bi_rbo< ='1';
          END CASE;
       ELSE
             ny_i<= "0000000" ;
       END IF ;
    ELSE
             ny_i< = "1111111" ;
    END IF;
          a<= ny_i(6) ;b< = ny_i(5) ; c<= ny_i(4) ; d<= ny_i(3) ;e<= ny_i(2) ;f<= ny_i(1) ;g<= ny_i(0) ;
       END PROCESS;
    END v7447_ar;
    高电平有效的7448的VHDL程序如下:
    LIBRARY ieee;
    USE ieee. Std_logic_1164. ALL;
    LIBRARY lattice ;
    USE lattice, components. ALL;
    ENTITY v7448 IS
       PORT(nlt,nrbi:IN Bit;bi_rbo: INOUT Bit; di:IN Bit_vector(3 downto 0); a,b,c,d,e,f,g:OUT Bit) ;
    END v7448 ;
    ARCHITECTURE v7448_ar OF v7448 IS
       SIGNAL ny_i: Bit_vector(6 downto 0) ;
    BEGIN
       PROCESS (bi_rbo, nlt, nrbi, di)
    BEGIN
       IF bi_rbo=' 1 ' THEN
          IF nlt=' 1 ' THEN
            CASE di IS
                WHEN "0000" =>
                   IF nrbi=' 0 ' THEN
                     ny_i< = "0000000"; bi_rbo<=' 1 ';
                   ELSE
                     ny_i<="1111110"; bi rbo<='1';
                   END IF;
                WHEN "0001"=>ny_i<="0110000"; bi_rbo<=' 1 ';
                WHEN "0010"=>ny_i<="1101101"; bi_rbo<='1';
                WHEN "0011"=>ny_i<="1111001"; bi_rbo<='1';
                WHEN "0100"=>ny_i<="0110011"; bi_rbo<='1';
                WHEN "0101" =>ny_i<= "1011011"; bi_rbo< =' 1 ';
                WHEN "0110" =>ny_i<= "0011111"; bi_rbo<=' 1 ';
                WHEN "0111"=>ny_i<="1110000"; bi_rbo<=' 1 ';
                WHEN "1000" =>ny_i<= "1111111"; bi_rbo<=' 1 ';
                WHEN "1001" =>ny_i<= "1110011"; bi_rbo<=' 1 ';
                WHEN "1010"=>ny_i<= "0001000"; bi_rbo<=' 1 ';
                WHEN "1011"=>ny_i<= "1100000"; bi_rbo<=' 1 ';
                WHEN "1100"=>ny_i<="1110010"; bi_rbo<=' 1 ';
                WHEN "1101"=>ny_i<= "1000010"; bi_rbo<=' 1 ';
                WHEN "1110" =>ny_i<= "0110000"; bi_rbo<=' 1 ';
                WHEN "1111" =>ny_i<= "0111000"; bi_rbo< =' 1 ';
                WHEN OTHERS= >ny_i< = "0000000" ; bi_rbo<=' 1 ';
             END CASE;
          ELSE
             ny_i< =" 1111111";
          END IF;
       ELSE
          ny_i< =" 0000000" ;
       END IF ;
          a<= ny_i(6) ;b< = ny_i(5) ; c< = ny_i(4) ;d< = ny_i(3) ; e< = ny_i(2) ; f<= ny_i(1) ;g<= ny_i(0) ;
       END PROCESS;
    END v7448_ar;
【答案解析】