sistemas digitales - practica 5
DESCRIPTION
Programación de multiplexores en VHDLTRANSCRIPT
UNIVERSIDAD AUTONOMA
DE QUERETARO
FACULTAD DE INFORMATICA
ING. EN TELECOMUNICACIONES
SISTEMAS DIGITALES
PRACTICA No.5
“Multiplexores en VHDL”
Alumnos:
Ramírez Cruz Uriel Exp: 215488
Reyes Cruz Luis Ángel Exp: 163986
Paniagua Martínez Jonathan Exp: 215486
Uribe García Alejandro Exp: 215484
FECHA: 23/09/11
Objetivo Aprender el funcionamiento de los multiplexores para poder implementarlos mediante VHDL,
realizar el código necesario para hacer esta implementación en la GAL y aprender a minimizar
funciones con mapas K pero especialmente para multiplexores.
Antecedentes
Los Multiplexores son circuitos Combinacionales con varias entradas y una única salida de datos, están
dotados de entradas de control capaces de seleccionar una, y sólo una, de las entradas de datos para
permitir su transmisión desde la entrada seleccionada hacia dicha salida.
En el campo de la electrónica el multiplexor se utiliza como dispositivo que puede recibir varias entradas y
transmitirlas por un medio de transmisión compartido. Para ello lo que hace es dividir el medio de
transmisión en múltiples canales, para que varios nodos puedan comunicarse al mismo tiempo.
Material Galaxy previamente instalado Y Active Sim
Desarrollo Tenemos la función con la que vamos a trabajar:
F4(0, 1, 2, 3, 4, 8, 10, 14, 15)
Y se minimizara por mapas K de manera que la función F4(x₄, X₃, X₂, X₁) se implemente como
multiplexores teniendo como S₁ = X₄ y S₂= X₃ para obtener los valores de I₀, I₁, I₂, I₃. Para
posteriormente pasar a programar en VHDL.
Para programar esa función en VHDL usaremos vectores lógicos para S y para las I también pero
estas tendrán que ir como señales intermedias.
A: in std_logic_vector(3 downto 0); -- <- Como se muestra aqui
Y el programa tendrá que tener una estructura CASE para los valores de S. Ejemplo:
Case señal is
When opcion1 => grupo_de_asignaciones_1;
When opcion2 => grupo_de_asignaciones_2;
…
When others => grupo_de_asignaciones_por_omision;
End case;
Por último se simulara para ver los resultados y comprobar que el código fue correcto.
Resultados
X₂X₁ X₃X₄
00 01 11 10
00 1 1 1 1
01 1
11 1 1 1
10 1 1
Reduciendo por medio de este mapa K tenemos las siguientes subfunciones cuando como S₁ = X₄ y
S₂= X₃
I₀= 1
I₁= X₂’X₁’
I₂= x₁’
I₃= X₂
Por lo tanto podemos observar que Y = S₁ ‘S₂’ I₀ + S₁ ‘S₂ I₁ + S₁ S₂’ I₂ + S₁ S₂ I₃
Ya con estos datos procedemos a realizar el código en VHDL y obtuvimos lo siguiente:
--PRACTICA 4 : MULTIPLEXORES
Library IEEE;
USE IEEE.std_logic_1164.all;
--Programacion Estructura Case
I₃
I₀
I₁
I₄
--De esta manera solo se usa el 9% de los recursos
ENTITY MUX_4_1_CASE is
PORT (
S: in std_logic_vector (1 downto 0);
X1,X2:in std_logic;
Y: out std_logic
);
END MUX_4_1_CASE;
ARCHITECTURE MUX_4_1_CASE OF MUX_4_1_CASE IS
SIGNAL I: std_logic_vector(3 downto 0);
BEGIN
I(0) <= '1';
I(1) <= (not X2) and (not X1);
I(2) <= (not X1);
I(3) <= X2;
PROCESS(S,I)
BEGIN
CASE (S) IS
WHEN "00" => Y <= I(0);
WHEN "01" => Y <= I(1);
WHEN "10" => Y <= I(2);
WHEN OTHERS => Y <= I(3);
END CASE;
END PROCESS;
END MUX_4_1_CASE;
Procediendo a simularlo para comprobar los resultados tenemos las imágenes de las simulaciones
parciales que realizamos donde se puede comprobar que la función programada esta correcta con
respecto a la función dada.
Primera parte de la simulación donde se puede ver que de 0 hasta 4 da en alto y 5 y 6 en bajo.
En la segunda parte de la simulación nos damos cuenta de que en el 7 está en bajo pero en el 8
cambia a alto y en el 9 vuelve a bajar para después subir en el 10 y en el 11 vuelve a estar en bajo.
En la última parte de la simulación nos damos cuenta de que desde el 11 hasta el 13 está en bajo y
en el 14 y 15 cambia a alto y así tenemos que la función se programó correctamente y podemos
ahora implementarlo físicamente en la GAL lo que en esta práctica no se realizó.
Conclusión Aprendimos en esta práctica varias cosas como:
El uso de vectores en VHDL, el funcionamiento de los multiplexores y sus aplicaciones así como
una forma más fácil de minimizar por medio de mapas K.
Y todo esto será la base para las practicas posteriores ya que será más común el uso de vectores
que aparte de tener una forma más ordenada del código, también nos facilita algunas
operaciones.