1
DESCRIPCIÓN E IMPLEMENTACIÓN DE DECODIFICADORES EN VHDL OBJETIVOS
• Diseñar e implementar decodificadores con otros circuitos lógicos combinatorios usando lenguaje de descripción hardware VHDL. • Hacer uso de la descripción algorítmica y la descripción de flujo de datos para la realización de decodificadores. • Realizar la simulación de los circuitos descritos. 1. INTRODUCCIÓN
El presente trabajo busca sustentar teóricamente los procedimientos realizados en la practica correspondiente al laboratorio dos. Además, se muestra la correspondiente evidencia de los resultados obtenidos durante la práctica, así como las líneas de código y demás herramientas utilizadas en la misma.
programación y simulación de circuitos digitales. Para lograrlo, el lenguaje utiliza diferentes formas de descripción de circuitos, que pueden usarse independientemente, o bien de manera mixta. Así, se tiene:
Forma estructural: describe el circuito indicando los componentes que lo forman y la disposición de sus conexiones.
Forma funcional: describe la manera en que funciona el circuito sin necesidad de conocer la arquitectura interna. A su vez, la forma funcional permite dos maneras distintas de describir el circuito, forma algorítmica, y flujo de datos; donde la primera maneja un mayor nivel de abstracción.
El lenguaje VHDL puede ser utilizado para simular cualquier circuito, sin embargo se utiliza principalmente para la programación de PLD o FPGA. En este orden de ideas, la presente práctica sugiere el desarrollo de actividades, en una Tarjeta BASYS2 (fig.1), la cual es un diseño de circuito programable para principiantes; el cual permite la implementación de circuitos lógicos básicos y complejos controladores.
2. MARCO TEÓRICO Previo al desarrollo de la práctica, se hace necesario conocer diferentes conceptos que garantizan un correcto análisis de los procedimientos realizados. En primer lugar, al hablar de VHDL se hace referencia a un lenguaje especializado para la
Fig.1 Imagen real tarjeta BASYS2
2
La tarjeta posee un FPGA Spartan3 como dispositivo principal, además de herramientas adicionales que permiten la implementación de circuitos en un entorno profesional. La tarjeta cuenta con: • 4 pulsadores • 8 conmutadores • 8 LEDS • 4 displays de 7 segmentos • Un conector de teclado de PC • Una salida VGA
También es importante mencionar, que un FPGA (Field Programmable Gate Array) es un dispositivo formado por bloques lógicos interconectados entre si, cuya funcionalidad puede ser programable. Los FPGA pueden ser reprogramados, y comúnmente poseen una configuración volátil. Finalmente, al hablar de un codificador se hace referencia a un bloque lógico combinacional dotado de componentes electrónicos que tienen la capacidad de expresar, como salida binaria, un número ingresado, en código diferente como entrada. En consecuencia, un decodificador es aquel dispositivo capaz de retornar del valor binario al código original (fig.2).
3. PROCEDIMIENTO PROPUESTO Para el desarrollo de la práctica se llevan a cabo las actividades propuestas en la guía de laboratorio, donde se diseñan, simulan e implementan circuitos específicos. Es importante reconocer que la simulación respectiva de cada circuito se ejecuta en el software <>. Mientras que su correspondiente comprobación práctica se realiza sobre la tarjeta BASYS2. 3.1 Decodificador BCD a 7 segmentos Para la primera actividad, se solicita el diseño de un decodificador que permita visualizar el equivalente decimal en un display 7 segmentos, a partir de una entrada binaria de 4 bits. Esto se lleva a cabo describiendo de forma funcionalflujo de datos, haciendo uso de el comando <<WITH…SELECT…WHEN>>, el cual permite condicionar cada una de las salidas deseadas en el display 7 segmentos, a partir de las combinaciones posibles con los cuatro interruptores, que correspondan a los números del 0 al 9. Es importante mencionar, que para cumplir con las condiciones especificadas en la actividad, se condicionan dos interruptores adicionales que permiten encender o activar 2 y 4 display respectivamente; los cuales describen el mismo comportamiento, de acuerdo a la entrada binaria de 4 bits. Posterior al diseño se hace necesario corroborar el correcto funcionamiento del circuito. Así, se obtiene el código respectivo (fig.3), el cual es implementado a la tarjeta BASYS2 mediante el software <> , para evidenciar que el funcionamiento de las salidas concuerde con lo esperado y dispuesto en el diagrama de asignación de pines. (fig.4)
Fig.2 Ejemplos de representación codificadores y decodificadores.
lógica
Puntualmente, en electrónica digital se hace necesario esta conversión, por ejemplo para energizar los siete segmentos de un display en un orden o comportamiento específico, con el fin de mostrar un número decimal.
library IEEE; use IEEE.STD_LOGIC_1164.ALL; entity Primero is Port ( Sel: in STD_LOGIC_VECTOR (1 downto 0); D: out STD_LOGIC_vector (3 downto 0); Dec : in STD_LOGIC_VECTOR (3 downto 0); Salida : out STD_LOGIC_VECTOR (6 downto 0) ); end Primero;
3
architecture Behavioral of Primero is begin WITH Dec SELECT Salida <= "1000000" WHEN "0000", "1111001" WHEN "0001", "0100100" WHEN "0010", "0110000" WHEN "0011", "0011001" WHEN "0100", "0010010" WHEN "0101", "0000011" WHEN "0110", "1111000" WHEN "0111", "0000000" WHEN "1000", "0010000" WHEN "1001", "0001000" WHEN "1010", "0000011" WHEN "1011", "1000110" WHEN "1100", "0100001" WHEN "1101", "0000110" WHEN "1110", "0001110" WHEN "1111", "-------" WHEN OTHERS;
Así, posterior a la modificación se obtiene el código respectivo (fig.5) y se procede a la comprobación practica del circuito, mediante la implementación a la tarjeta BASYS2.(fig.6)
library IEEE; use IEEE.STD_LOGIC_1164.ALL; entity Segundo is Port ( a : in STD_LOGIC_VECTOR (3 downto 0); b : in STD_LOGIC_VECTOR (3 downto 0); Selec : in STD_LOGIC; Salida : out STD_LOGIC_VECTOR (6 downto 0)); end Segundo;
WITH Sel SELECT D <= "1110" WHEN "00", "1100" WHEN "01", "1000" WHEN "10", "0000" WHEN OTHERS;
architecture Behavioral of Segundo is SIGNAL Salmux: STD_LOGIC_VECTOR (3 downto 0); begin process (a,b,Selec) begin
end Behavioral;
Fig.3 Código utilizado if selec = '1' then Salmux <= a; else Salmux <= b; end if; end process;
Fig.4 Asignación de pines 3.2 Decodificador BCD a modificado (Multiplexor)
7
segmentos
Para la segunda actividad propuesta por el docente, se solicita modificar el diseño anterior, adicionando una herramienta de selección que permita elegir entre dos alternativas (A, B), la entrada binaria de 4 bits a mostrar. Es decir, ahora se tienen dos entradas binarias de cuatro bits cada una, y la variable de selección.
WITH Salmux SELECT Salida <= "1000000" WHEN "0000", "1111001" WHEN "0001", "0100100" WHEN "0010", "0110000" WHEN "0011", "0011001" WHEN "0100", "0010010" WHEN "0101", "0000011" WHEN "0110", "1111000" WHEN "0111", "0000000" WHEN "1000", "0010000" WHEN "1001", "0001000" WHEN "1010", "0000011" WHEN "1011", "1000110" WHEN "1100", "0100001" WHEN "1101", "0000110" WHEN "1110", "0001110" WHEN "1111", "-------" WHEN OTHERS; end Behavioral;
4
Fig.5 Código utilizado
"0011001" when (e = '1') else "0010010" when (f = '1') else "0000011" when (g = '1') else "1111000" when (h = '1') else "1111111" when (a = '0' and b = '0' and c = '0' and d = '0' and e = '0' and f = '0' and g = '0' and h = '0') else "-------"; end Behavioral;
Fig.7 Código utilizado
Fig.6 Asignación de pines
3.3 Decodificador 8 entradas Para la siguiente actividad propuesta, se busca diseñar e implementar un decodificador de ocho entradas BCD (switch) a partir de las cuales se genere la salida correspondiente (0 a 7) en el display cuando este activado un interruptor; o bien se genere el valor correspondiente al interruptor de menos peso, cuando estén activadas dos o mas entradas. Para cumplir con tales requisitos, se diseña un código cuya describición es comportamental-flujo de datos, y utiliza library IEEE; use IEEE.STD_LOGIC_1164.ALL; entity Tercero is Port ( a : in STD_LOGIC; b : in STD_LOGIC; c : in STD_LOGIC; d : in STD_LOGIC; e : in STD_LOGIC; f : in STD_LOGIC; g : in STD_LOGIC; h : in STD_LOGIC; Salida : out STD_LOGIC_VECTOR (6 downto 0)); end Tercero;
Fig.8 Asignación de pines 3.4 Sumador de dos números de dos bits Para la siguiente actividad se solicita diseñar un programa que permita realizar la suma binaria de dos entradas (buses de dos bits), y que el resultado sea mostrado en un display siete segmentos (decimal); es decir, se solicita un sumador binario que decodifique el resultado obtenido. Para ello, se implementa un código (fig.) donde se habilita la librería aritmética respectiva <<>>, con el finde poner asignar directamente a una variable el resultado de la suma, y así, poder trabajar las condiciones necesarias con dicha variable.
architecture Behavioral of Tercero is begin
En este orden de ideas, posterior al diseño del código se realiza la asignación respectiva de pines y la comprobación real del funcionamiento (fig.).
Salida <= "1000000" when (a = '1') else "1111001" when (b = '1') else "0100100" when (c = '1') else "0110000" when (d = '1') else
library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL;
5
use IEEE.STD_LOGIC_UNSIGNED.ALL; entity Cuarto is Port ( a : in STD_LOGIC_VECTOR (1 downto 0); b : in STD_LOGIC_VECTOR (1 downto 0); d : out STD_LOGIC_VECTOR(3 downto 0); Salida : out STD_LOGIC_VECTOR (6 downto 0)); end Cuarto; architecture Behavioral of Cuarto is SIGNAL X: STD_LOGIC_VECTOR (2 downto 0); begin X <= ('0'&a)+('0'&b);
b : in bit_vector (1 downto 0); c : in bit_vector (1 downto 0); d : in bit_vector (1 downto 0); selec : in bit_vector (1 downto 0); salida : out bit_vector (1 downto 0)); end mux; architecture Behavioral of mux is begin WITH selec SELECT salida <= a WHEN "00", b WHEN "01", c WHEN "10", d WHEN "11"; end Behavioral;
with X select Salida <= "1000000" when "000", "1111001" when "001", "0100100" when "010", "0110000" when "011", "0011001" when "100", "0010010" when "101", "0000011" when "110", "1111000" when "111", "-------" when OTHERS;
Fig.9 Código utilizado
d <= "1110";
end Behavioral; Fig.10 Asignación de pines. Fig.9 Código utilizado
Fig.10 Asignación de pines 3.5 Ejercicio adicional diapositivas Finalmente, se solicita diseñar e implementar un multiplexor de 4 a 1 con cada entrada de dos bits, lo anterior utilizando el comando WITH..SELECT..WHEN. library IEEE; use IEEE.STD_LOGIC_1164.ALL; entity mux is Port ( a : in bit_vector (1 downto 0);
6
4. SIMULACIONES Posterior a la realización y ejecución de los ejercicios, se solicita, con ayuda del mismo software trabajado <>, realizar la correspondiente simulación, donde se observa el comportamiento de cada una de las variables trabajadas dentro de cada programa, a través del tiempo; esto por medio de una función continua que evidencia como pulsos altos y bajos, los valores respectivos de unos y ceros. Entonces, las simulaciones respectivas a cada ejercicio son: 4.1 Decodificador BCD a 7 segmentos
5. SUSTENTACIÓN Finalmente, adicional a los análisis y evidencias mostrados con anterioridad respecto de los ejercicios propuestos en la guía de laboratorio; se hace necesario sustentar frente al docente cada una de las actividades, así como presentar el correcto funcionamiento de la tarjeta BASYS2, para cada uno de los ejercicios. Proceso verificable mediante la firma otorgada por el docente:
6. CONCLUSIONES
7. BIBLIOGRAFÍA
Diapositivas otorgadas por el docente de circuitos digitales 2, de la Universidad Militar Nueva Granada, Juan Carlos Martínez .
[2]ACHA Santiago, y otros. “Electrónica Digital. Lógica Digital Integrada”. Alfaomega Grupo editor. México D.F. , junio 2010
Fig.11 Simulación respectiva 4.2 Decodificador BCD a modificado (Multiplexor)
7
segmentos
Fig.12 Simulación respectiva
4.3 Decodificador 8 entradas Fig.13 Simulación respectiva 4.4 Sumador de dos números de dos bits
Fig.14 Simulación respectiva 4.5 Ejercicio adicional diapositivas Fig.15 Simulación respectiva