domingo, 5 de septiembre de 2010

Como hacer un multiplexor en la Spartan 3

Un multiplexor es la función inversa a un decodificador, es decir, tienes n numero de entradas que se seleccionan  con otras entradas denominadas de selección y lo que tienes a la entrada lo deja pasar a su unica salida. De modo grafico se ve asi:
En modo de bloque:
Este es el ejemplo de un mux de 4 a 1. Con las entradas de seleccion puedo seleccionar que entrada quiero que aparesca a la salida del mux, es decir si pongo 00 en este caso seleccionaria la entrada 1, si selecciono 01 en las entradas de seleccion ahora escogeria la entrada numero 2 y asi sucesivamente.

Con base en estos principios pasamos a programar la FPGA
Se declararon las variables iniciales
entity Mux is
    Port ( A1 : in  bit;
           A2 : in  bit;
           A3 : in  bit;
           A4 : in  bit;
           S1 : in  bit;
           S2 : in  bit;
           O  : out bit);
end Mux;

Dentro de esta arquitectura declaramos variables temporales ya que cuando programas una FPGA todos los comandos del codigo se realizan al mismo tiempo por lo tanto esta es una forma de decirle que asigne de manera secuencial, es decir que primero declare las variables temporales y luego define cual de todas ellas usas, es como hacerlo en bloques. La forma de declarar variables temporales es con la palabra reservada signal luego el nombre de la variable: bit_vector(3 downto 0) lo que significa cuantas variables declararas como temporales, es como hacer un arreglo de variables en forma de vectores.

architecture Behavioral of Mux is
signal tmp:  bit_vector (3 downto 0); --declaracion de variables temporales
begin --aplicacion de variables temporales
tmp(0)<= ((NOT S1) AND (NOT S2) AND A1);
tmp(1)<= ((NOT S1) AND S2 AND A2);
tmp(2)<= (S1 AND (NOT S2) AND A3);
tmp(3)<= (S1 AND S2 AND A4);
O<= tmp(0) or tmp(1) or tmp(2) or tmp(3); --salida del mux
end Behavioral;


Cabe resaltar que esta es una forma de hacer un multiplexor ya que conforme avanzas en codigo te daras cuenta de que existen muchas formas mas de hacerlo pero todo depende de la logica que tu encuentres. Mas adelante les mostraremos mas tipos de codigos para hacer un mux y otras cosas interesantes.

No hay comentarios:

Publicar un comentario