WebElektronika

Variációk VHDL-ben a multiplexerre

person access_time 2014.05.06.
Megnézzük most egy egyszerű példán keresztül a VHDL nyelvben használt feltételes szerkezeteket. Egy egyszerű multiplexer megvalósítási lehetőségeit tekintjük át.


Megnézzük most, hogy egy multiplexert (1. ábra) hogyan tudunk VHDL nyelv segítségével megadni. Nem állítjuk, hogy az összes lehetőséget közöljük, de néhány variációt áttekintünk.

      

  1. ábra   Multiplexer

 

Struktúrális leírás

entity mux4x1 is
        port(AIN : in bit_vector(3 downto 0);
               SEL : in bit_vector(1 downto 0);
               Y: out bit);
end mux4x1;

architecture BEH of mux4x1 is
begin

  Y <= (AIN(0) and not(SEL(0)) and not(SEL(1)))
            or (AIN(1) and SEL(0) and not(SEL(1)))
            or (AIN(2) and not(SEL(0)) and SEL(1))
            or (AIN(3) and SEL(0) and SEL(1));

end BEH;

 

when szerkezet használata

entity mux4x1vis2 is
          port(AIN : in bit_vector(3 downto 0);
                 SEL : in bit_vector(1 downto 0);
                 Y: out bit);
end mux4x1vis2;

architecture RTL of mux4x1vis2 is
begin

     Y <= AIN(0) when SEL(0) = '0' and SEL(1) = '0'
       else AIN(1) when SEL(0) = '1' and SEL(1) = '0'
       else AIN(2) when SEL(0) = '0' and SEL(1) = '1'
       else AIN(3) when SEL(0) = '1' and SEL(1) = '1'; 

end RTL;

 

case szerkezet használata 

entity mux4x1vis3 is
        port(AIN : in bit_vector(3 downto 0);
               SEL : in bit_vector(1 downto 0);
               Y: out bit);
end mux4x1vis3;

architecture viselk of mux4x1vis3 is
begin
    process(SEL)
    begin
        case SEL is
               when "00" => Y <= AIN(0);
               when "01" => Y <= AIN(1);
               when "10" => Y <= AIN(2);
               when others => Y <= AIN(3);
        end case;
    end process;
end viselk;

 

if-es szerkezet

entity mux4x1vis1 is
      port(AIN : in bit_vector(3 downto 0);
             SEL : in bit_vector(1 downto 0);
             Y: out bit);
end mux4x1vis1;

architecture RTL of mux4x1vis1 is
begin
    process(AIN,SEL)
    begin
           if SEL = "00" then
                 Y <= AIN(0);
           elsif SEL = "01" then
                 Y <= AIN(1);
           elsif SEL = "10" then
                 Y <= AIN(2);
           else
                 Y <= AIN(3);
           end if;
    end process;
end RTL; 

Készítsük el a multiplexer szimulációs környezetét! 

entity mux4x1sim is
             port(Y: out bit);
end mux4x1sim;

architecture BEH of mux4x1sim is 
         component mux4x1 is
              port(AIN : in bit_vector(3 downto 0); 
                     SEL : in bit_vector(1 downto 0);
                     Y: out bit);
         end component;
signal SAIN : bit_vector(3 downto 0);
signal SSEL : bit_vector(1 downto 0);
begin
 MUX41: mux4x1 port map(SAIN, SSEL, Y);
      process
      begin
            SAIN <= "1010";
            SSEL <= "00";
            wait for 10 ns;
            SSEL <= "01";
            wait for 10 ns;
            SSEL <= "10";
            wait for 10 ns;
            SSEL <= "11";
            wait for 10 ns;
            SAIN <= "0101";
            SSEL <= "00";
            wait for 10 ns;
            SSEL <= "01";
            wait for 10 ns;
            SSEL <= "10";
            wait for 10 ns;
            SSEL <= "11";
            wait for 10 ns;
      end process;
end BEH;


Szimuláljuk le a multiplexer működését ennek a tesztkörnyezetnek a segítségével (2. ábra).


2. ábra   A multiplexer működésének szimulációs eredménye