Está en la página 1de 5

LABORATORIO # 6 En este laboratorio se ve a hacer un decodificador que nos permita visualizar en un display el codigo BCD de 0 a 9 El circuito que se implementara

en la FPGA es el que se encuentra en la imgen 1

Imagen 1 Bien ahora explicaremos como se desarrollo el cdigo para poder hacer este circuito en la FPGA Lo primero que hacemos despus de declarar las libreras que se usaran es declarar las variables de entrada y salida del circuito, as pues este es la parte del cdigo que se encarga de ello. library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; ---- Uncomment the following library declaration if instantiating ---- any Xilinx primitives in this code. --library UNISIM; --use UNISIM.VComponents.all; entity Lab6 is port( nombre del proyecto

EntradaDecimal: in std_logic_vector(9 downto 0); esta es nuestra primera variable que seran cada uno de los pulsadores que usaremos que en total seran 10 ya que queremos representar el cdigo BCD de 0 a 9 Display: out std_logic; este es la declaracin de nuestra primera salida, este sera el que nos muestre los nmeros de 0 a 9 Display1: out std_logic; Display2: out std_logic; Display3: out std_logic; estos dispay se estn declarando para poder dejarlos en apagados y as solo uno de los cuatro que tiene la FPGA nos de la salida BCD Segmentos: out std_logic_vector(6 downto 0) Esta es una salida que lo que declara es que usaremos un display 7 segmentos de 8bits ); end Lab6; En este momento solo hemos declarado algunas entradas y salidas del circuito. Ahora vamos a implementar lo que seria la parte del decodificador 74LS147 junto con las entradas del 0 a 9 que se nos muestra en la imagen 1 architecture Behavioral of Lab6 is signal SalidaCodificadorBCD: std_logic_vector(3 downto 0); begin --DECLARACION CODIFICADOR process(EntradaDecimal, SalidaCodificadorBCD) begin if (EntradaDecimal = "0000000000") then SalidaCodificadorBCD <="1111"; else if EntradaDecimal = "0000000001" then SalidaCodificadorBCD <="0000"; else if EntradaDecimal = "0000000010" then SalidaCodificadorBCD <="0001"; else if EntradaDecimal = "0000000100" then SalidaCodificadorBCD <="0010"; else if EntradaDecimal = "0000001000" then SalidaCodificadorBCD <="0011"; else if EntradaDecimal = "0000010000" then SalidaCodificadorBCD <="0100"; else if EntradaDecimal = "0000100000" then SalidaCodificadorBCD <="0101"; else if EntradaDecimal = "0001000000" then SalidaCodificadorBCD <="0110"; else if EntradaDecimal = "0010000000" then SalidaCodificadorBCD <="0111"; else if EntradaDecimal = "0100000000" then SalidaCodificadorBCD <="1000";

else if EntradaDecimal = "1000000000" then SalidaCodificadorBCD <="1001"; else SalidaCodificadorBCD <= "1110"; end if; end if; end if; end if; end if; end if; end if; end if; end if; end if; end if; end process; lo que quiere decir esta parte del codigo if (EntradaDecimal = "0000000000") then SalidaCodificadorBCD <="1111"; que cuando la entrada decimal este toda en 0 el nos de un 15 como salida BCD ya que este numero no lo usaremos para este proyecto, ahora si este caso no se cumple y por ejemplo tenemos este caso else if EntradaDecimal = "0000000100" then SalidaCodificadorBCD <="0010"; en donde el tercer pulsador esta en 1 el nos de de salida un 2 en BCD 0010 y asi sucesivamente con las otras 8 opciones. En esta instancia tendramos declarados los pulsadores de o a 9 y tendramos las 4 salidas que se muestran en la figura 2

Figura2

Ya terminada esta parte entramos a implementar lo que es el decodificador CD4543 que se nos muestra en la figura1, y su cdigo respectivo es: process(SalidaCodificadorBCD) begin Display<='0'; Display1<='1'; Display2<='1'; Display3<='1'; if SalidaCodificadorBCD = "1111" then Segmentos <="1111110";-#Nulo else if SalidaCodificadorBCD = "0000" then Segmentos <="0000001";--#0 else if SalidaCodificadorBCD = "0001" then Segmentos <="1001111";--#1 else if SalidaCodificadorBCD = "0010" then Segmentos <="0010010";--#2 else if SalidaCodificadorBCD = "0011" then Segmentos <="0000110";--#3 else if SalidaCodificadorBCD = "0100" then Segmentos <="1001100";--#4 else if SalidaCodificadorBCD = "0101" then Segmentos <="0100100";--#5 else if SalidaCodificadorBCD = "0110" then Segmentos <="0100000";--#6 else if SalidaCodificadorBCD = "0111" then Segmentos <="0001111";--#7 else if SalidaCodificadorBCD = "1000" then Segmentos <="0000000";--#8 else if SalidaCodificadorBCD = "1001" then Segmentos <="0000100";--#9 else Segmentos <= "1111111"; end if; end if; end if; end if; end if; end if; end if; end if; end if; end if; end if; end process; end Behavioral; Lo que se esta haciendo con este cdigo es decir que por cada salida que nos de el codificador en BCD el nos asigne el numero en el diplay de 7segmentos entonces

tendramos la siguiente tabla para poder hacer esta asignacin de forma correcta segn la ubicacin de cada led dentro del display.
D 0 0 0 0 0 0 0 0 1 1 C 0 0 0 0 1 1 1 1 0 0 B 0 0 1 1 0 0 1 1 0 0 A 0 1 0 1 0 1 0 1 0 1 a 0 1 0 0 1 0 0 0 0 0 b 0 0 0 0 0 1 1 0 0 0 c 0 0 1 0 0 0 0 0 0 0 d 0 1 0 0 1 0 0 1 0 1 e 0 1 0 1 1 1 0 1 0 1 f 0 1 1 1 0 0 0 1 0 0 g 1 1 0 0 0 0 0 0 0 0

Tabla1 Esta asignacin de leds a,b,c,d,e,f,g se hace bajo la configuracin del 7 segmentos ubicados como se muestra en la figura 3

Imgen3 Como vemos es la imagen 3 para obtener un 1 en el display se requiere que alumbre los leds b y c por eso en la tabla vemos que cuando el cdigo BCD es igual a 0001 este le asigna al display 0 nicamente en b y c y asi se generan con los dems nmeros vemos que segmentos del display se requieren para formar el numero y a estos que queramos que alumbre les asignamos un 0.

También podría gustarte