miércoles, 17 de abril de 2013

Multiplexor (Mux) VHDL

Esta va a ser la primera entrada en la que tratemos el lenguaje VHDL. Lo primero que hay que dejar claro es que no se trata de un lenguaje de programación, sino que es un lenguaje descriptivo de dispositivos electrónicos. Este lenguaje nos permite simular sistemas electrónicos.

A continuación se presenta la descripción y el banco de pruebas (test bench) de un multiplexor (mux) en VHDL, para ver si el funcionamiento de salida coincide con el teóricamente programado, cumpliendo la tabla de verdad del multiplexor.

El esquema del multiplexor sería, con su tabla de verdad:




S   A   B   Y
0   0    0    0
0   0    1    0
0   1    0    1
0   1    1    1

1   0    0    0
1   0    1    1
1   1    0    0
1   1    1    1


(Tabla de verdad)
(Fundamento: La entrada 'S' es la que selecciona la entrada que va a ser la salida)

Aquí el código


--Declaración de las librerias a usar
library ieee;
use ieee.std_logic_1164.all;

--Declaración de la entidad
entity multiplexor is
port (A, B, S: in std_logic;
  Y: out std_logic);
end multiplexor;

--Descripción comportamental
architecture behavior of multiplexor is
begin
   process(A, B, S)
begin
  if (S='1') then
  Y <= B;
else
         Y <= A;
      end if;
   end process;
end behavior;:





y aquí el test:


--Declaración librerias
library ieee;
use ieee.std_logic_1164.all;

entity testbench is
end testbench;

architecture behavior of  testbench is

--Declaración de la unidad bajo test (uut)
component multiplexor
port (A, B, S: in std_logic;
  Y: out std_logic);
end component;

signal A : std_logic:='0';
   signal B : std_logic:='0';
   signal S : std_logic:='0';
   signal Y : std_logic:='0';

begin

   uut: multiplexor port map (
      A => A,
      B => B,
      S => S,
Y => Y
);

--Se asignan valores a las señales de test
estimulo: process 
   begin
wait for 1 ns;
A <= '0'; wait for 10 ns;
B <= '1'; wait for 10 ns;
S <= '1'; wait for 10 ns;
A <= '1'; wait for 10 ns;
B <= '0'; wait for 10 ns;
S <= '0'; wait for 10 ns;
end process estimulo;

end;





Y por último unas capturas del cronográma y del código:





Para más información sobre multiplexores, uno de los bloques básicos de sistemas combinacionales, se puede consultar cualquier libro de electrónica digital. Las señales de simulación se pueden cambiar a vuestro antojo.

Un saludo.




3 comentarios:

  1. Buenas noches,

    Disculpa, qué compilador utilizas?

    ResponderEliminar
    Respuestas
    1. Hola!
      El compilador que usé en su momento es Xilinx ISE.
      Cuentas con una versión de evaluación en la web de xilinx:
      http://www.xilinx.com/ise_eval/index.htm

      Un saludo

      Eliminar