ESCUELA SUPERIOR POLITÉCNICA DEL LITORAL FACULTAD DE INGENIERÍA EN ELECTRICIDAD Y COMPUTACION
LABORATORIO DE SISTEMAS DIGITALES
Proyecto de primer parcial DETECTOR BCD
“
”
Presentado por: KEVIN ARTEAGA YELA XAVIER AGUAYO MURILLO
Profesor a cargo:
ING. RONALD PONGUILLO Guayaquil – Ecuador 2014
CONTENIDO 1.
ESPECIFICACIÓN......................................................................................................... 3 DETECTOR DE CODIGO BCD ................................................................................. 3
2.
DIAGRAMA DE BLOQUES............................................................................................ 4
3.
DIAGRAMA ASM ........................................................................................................... 5
4.
DIAGRAMA DE TIEMPO ............................................................................................... 6 Salida BCD activada .................................................................................................. 6 Salida ERROR activada ............................................................................................ 7
5.
DIAGRAMA ESQUEMATICO......................................................................................... 7
6.
DESCRIPCION VHDL.................................................................................................... 9
7.
REPORTE SOBRE APROVECHAMIENTO ................................................................. 11
8.
CONCLUSIONES ........................................................................................................ 12
9.
RECOMENDACIONES ................................................................................................ 12
10.
BIBLIOGRAFÍA ........................................................................................................ 13
2
1. ESPECIFICACIÓN DETECTOR DE CODIGO BCD Diseñar y construir un circuito DETECTOR DE CODIGO BCD. El circuito tiene una entrada serial de DATOS, la entrada START y la entrada MOSTRAR representadas por botoneras y dos salidas ( BCD y ERROR) indicadas con dos diodos LED. Adicionalmente se agregaron dos entradas: la entrada INGRESAR y la entrada STOP. Al presionar y soltar la botonera START, el circuito habilitará la entrada de DATOS siempre que presionemos la entrada INGRESAR , asumiendo que el primer bit que se ingresa es el LSB. Después de haber ingresado los datos presionaremos el botón STOP para detener el ingreso de datos. Si el código ingresado corresponde a un código BCD, el circuito regresa al estado inicial generando la señal de salida BCD. Pero, si el código ingresado no corresponde a un código BCD, el circuito genera la señal de salida ERROR y luego regresa al estado inicial. Los diodos LED que indican las salidas BCD y ERROR permanecen prendidos hasta que se activa la entrada START para empezar el ingreso de un nuevo dato. Si la señal BCD ha sido activada y se presiona el botón MOSTRAR entonces el numero BCD ingresado es mostrado en un display de siete segmentos.
3
2. DIAGRAMA DE BLOQUES En esta sección mostraremos un esquema general de nuestro sistema digital DETECTOR BCD, indicando las entradas, salidas y una breve descripción de la función de cada una. El diagrama de bloques está formado por los siguientes componentes.
Controlador Almacenador de datos Detector BCD Display
El controlador dirige las acciones del usuario y de la maquina de estados, las entradas y salidas se muestran en la figura 1. Las entradas del controlador se encuentran en la parte izquierda del bloque y las salidas a la derecha. El almacenador de datos guarda los cuatro bits (0 - 1) que el usuario ingrese, el ingreso de cada bit es habilitado por la entrada en_guarda. La salida del bloque almacenador de datos es un número de cuatro bits. El detector BCD comprueba si el dato mostrado es un número BCD y su salida SiEsBCD se conecta al controlador para que el tome la decisión de mostrarle al usuario si es BCD o ERROR. El bloque Display tiene la función de mostrar el número BCD.
Figura 1.- Diagrama de bloques del sistema digital detector BCD
4
3. DIAGRAMA ASM
Figura2.- Diagrama ASM del sistema DETECTOR BCD
El diagrama ASM mostrado en la figura 2 es el diagrama de flujo del bloque controlador mostrado en la figura 1. Existen 7 estados, etiquetados como Ta, Tb, Tc, Td, Te, Tf, Tg, Th. El primer estado Ta encera el registro y el contador de cuatro bits. Una vez que se presiona START pasamos al siguiente estado Tb; si dejamos de presionar avanzamos al estado Tc. En el estado Tc, si presionamos STOP nos vamos al siguiente estado Td; sino sí, presionamos ingresar habilitamos en contador (EnC) y el registro (EnR1) para cargar un bit. Y así se cargaran bits y aumentara el contador hasta que el usuario presione STOP.
Cuando estamos en el estado Td, analizamos si el dato ingresado es un número BCD. Entonces, primero preguntamos si el número se ingreso más de cuatro veces (≠4) y si esto es verdadero vamos al estado Te y mostramos ERROR. Si es falso, preguntamos si el número es mayor que nueve (Data>9), si es verdadero nuevamente nos vamos al estado Te y mostramos ERROR; pero, si es falso nos dirigimos al estado Tf y activamos la salida BCD, que indica que el número ingresado es BCD. En el estado de ERROR y en el estado BCD, pasa salir de este estado y regresar al estado inicial hay que presionar y soltar el botón START.
4. DIAGRAMA DE TIEMPO Salida BCD activada
Figura 3.- Diagrama de tiempo mostrando la salida error Las señales internas contador y registro mostrados en la figura 3 nos ayudaran a saber el número de veces que ingreso el dato y el dato de cuatro bits cargado. Una vez ingresado el dato, el sistema analiza el dato siempre y cuando el usuario presione STOP. El usuario ingreso exactamente cuatro bits y el número cargado es tres en binario “0011”. El controlador muestra la salida BCD que indica que el número es un BCD. Data_out es la salida de 7 bits del decodificador de 7 segmentos. La figura 4 muestra la salida de ERROR activada. Vemos que después de presionar el botón stop, el número cargado es 11 en binario “1011”. El número 11 no representa un número BCD, y por lo tanto muestra la salida ERROR.
6
Salida ERROR activada
Figura 4.- Diagrama de tiempo mostrando la salida BCD
5. DIAGRAMA ESQUEMATICO La figura muestra el diagrama esquemático con todas las interconexiones y sus respectivos nombres. Los componentes utilizados son los siguientes
Controlador Divisor de Frecuencia Antirebote Decodificador de 7 segmentos Comparadores Display de 7 segmentos Puertas lógicas
Descripción de las terminales más importantes EnC.- Habilita al Contador para que cuente el número de bit ingresado EnR1.- Habilita el registro para que se cargue un bit y realice el desplazamiento DATO.- Bit a ingresar para formar el número BCD BCD.- Salida de un bit que indica si el número ingresado es BCD. ERROR.- Salida de un bit que indica si el número ingresado es no es BCD. DATA[3..0].- Señal interna utilizada para mostrar el valor cargado en el registro de desplazamiento. COUNT[3..0].- Señal interna utilizada para mostrar el número de datos bits ingresado por el usuario. DiferDe4.- Señal que indica si ingreso más de cuatro bits o menos de cuatro bits DataMay9.- Señal que indica si el numero ingresado en mayor que nueve 7
8
6. DESCRIPCION VHDL library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all;
entity DetectorCodigoBCD is port( clock, resetn: in std_logic; start, DATOS, mostrar, ingresar, stop: in std_logic; activ_disp: out std_logic; error,bcd: out std_logic; data_out: out std_logic_vector(0 to 6)); end detectorCodigoBCD; architecture comportamiento of DetectorCodigoBCD is --*****COMPONENTES*****-component ANTIREBOTE port(PB_N, CLOCK_100Hz : IN PB_SIN_REBOTE END component;
STD_LOGIC; : OUT STD_LOGIC);
component clock_div port (CLOCK_50MHz :IN STD_LOGIC; CLOCK_1MHz :OUT STD_LOGIC; CLOCK_100KHz :OUT STD_LOGIC; CLOCK_10KHz :OUT STD_LOGIC; CLOCK_1KHz :OUT STD_LOGIC; CLOCK_100Hz :OUT STD_LOGIC; CLOCK_10Hz :OUT STD_LOGIC; CLOCK_1Hz :OUT STD_LOGIC); end component; component contador_up port(clock,resetn,enable: in std_logic; --enable: entrada de habilitacion Q : out std_logic_vector(3 downto 0)); end component; component reg_iz_der port(R,Resetn,Clock, enable: in std_logic; Q: out std_logic_vector(3 downto 0)); end component; component DEC_DR_N port( BCD : in std_logic_vector(3 downto 0);
SEG7 : out std_logic_vector(0 to 6)); end component; type estado is (Ta, Tb, Tc, Td, Te, Tf, Tg, Th); signal y: estado; signal Vcc, EnR1, EnC, DiferDe4,dataMay9, prende: std_logic; signal data,count, nueve, cuatro: std_logic_vector(3 downto 0); signal start1, datos1, mostrar1, ingresar1, stop1: std_logic; -- salidas de antirebotes signal clk1, clk2, clk3, clk4, clk5, clk6, clk7: std_logic; -- salida de reloj CLOCk_div --*****CONTROLADOR*****-begin mss_transiciones: process(resetn, clk7, ingresar, mostrar) begin if resetn='0' then y<=Ta; elsif (clk1'event and clk1='1') then case y is when Ta => if start='0' then y<=Ta; else y<=Tb; end if; when Tb => if start='1' then y<=Tb; else y<=Tc; end if; when Tc => if stop='0' then y<=Tc; else y<=Td; end if; when Td => if diferDe4='1' then y<=Te; elsif dataMay9='1' then y<=Te; else y<=Tf ; end if; when Te => if start='0' then y<=Te; else y<=Tg; end if; when Tg => if start='1' then y<=Tg; else y<=Ta; end if; when Tf => if start='0' then y<=Tf; else y<=Th; end if; when Th => if start='1' then y<=Th; else y<=Ta; end if; end case; end if; end process; mss_salidas: process(y, stop, ingresar, start, mostrar) begin EnR1<='0'; EnC<='0'; Error<='0'; BCD<='0'; prende<='0'; case y is when Ta => when Tb => when Tc => if stop='0' and ingresar='1' then EnR1<='1'; EnC<='1'; else EnR1<='0'; EnC<='0'; end if; when Td => when Te => Error<='1'; when Tg => when Tf => BCD<='1'; if start='0' and mostrar='1' then prende<='1'; end if; when Th => end case; end process; 10
--*****PROCESADOR DE DATOS*****-Vcc<='1'; nueve<="1001"; Cuatro<="0100"; RELOJ: clock_div port map (clock, clk1, clk2, clk3, clk4, clk5, clk6, clk7); reg_id: reg_iz_der port map(Datos, resetn, clk6, EnR1, data); contador: contador_up port map(clk6, resetn, EnC, count); decoder: dec_DR_N port map (data, data_out); DataMay9<='1' when (Data > Nueve) else '0'; DiferDe4<='1' when ((Count > cuatro) or (Count < cuatro)) else '0'; activ_disp<='1' when (prende = Vcc) else '0'; end comportamiento;
7. REPORTE SOBRE APROVECHAMIENTO
Figura 5.- Captura de pantalla del reporte de compilación La figura 5 muestra un reporte general del aprovechamiento de la tarjeta DE0NANO EP4CE22. Se utilizaron 17 pines de los 154 existentes. Memoria total ocupada en bits: 5248 (menos del 1%)
11
8. CONCLUSIONES En resumen, el proyecto DETECTOR BCD se realizó utilizando una herramienta importante para simular sistemas digitales. Esta herramienta es Quartus 13.0, por medio de la cual pudimos describir nuestro proyecto de forma ESTRUCTURAL; en pocas palabras, se escribió todo el proyecto en líneas de código. Pudimos darnos cuenta de la dificultad de realizar el proyecto realizando descripción estructural, comparado con la construcción de bloques utilizando el diagrama esquemático. La dificultad de la descripción estructural reside en la interconexión de las terminales de cada componente con otros, lo que no sucede en la construcción de bloques. Finalmente, pudimos terminar con éxito este proyecto, realizando su análisis, la programación y la implementación del mismo. Para la implementación física, se utilizó la tarjeta De0 NANO EP4CE22F17. Cabe destacar que afianzamos los conocimientos aprendidos en las clases teóricas de Sistemas digitales I y II.
9. RECOMENDACIONES Fijar el bus de datos nos ayudará a que no existan desconexiones o falsos contactos; además, es importante utilizar el cable adecuado para la conexión de pines del cable de bus de datos con el protoboard. Así que si preferimos utilizar cables rígidos, tomar en cuenta que estos puedes romperse y producir grandes retrasos a la hora de encontrar el fallo. Cabe destacar la importancia de conocer las especificaciones de funcionamiento de los elementos electrónicos a utilizar en nuestro proyecto. Tales como diodos, pulsadores, resistencia y sus códigos de colores, switches y sobre todo el display de 7 segmentos. Al utilizar la tarjeta DE0 NANO debemos ser cuidadosos con la misma, las cargas estáticas presentes en nuestro cuerpo pueden averiar o dañar los chips y circuitos integrados. Estos dispositivos son sensibles a las cargas estáticas.
12
10.
BIBLIOGRAFÍA Sistemas digitales, A. Lloris y A. Prieto y L. Parrilla, McGraw Hill, Madrid 2003. Fundamentos de sistemas digitales, (7ª edición), Floyd T. L., Prentice Hall, Madrid 2003. Principios de Diseño Digital, D.D. Gajski, Prentice Internacional INC., 1997. Diseño Digital. Principios y Prácticas, J. F. Wakerly, Prentice Internacional INC., 2001. Fundamentos físicos y tecnológicos de la informática, P. Gómez, V. Nieto, A. Álvarez y R. Martínez, Pearson Prentice Hall, Madrid 2006.
13