PRÁCTICA 8: CONTADOR SÍNCRONO CON QUARTUS II OBJETIVOS Diseñar un circuito secuencial síncrono e implementarlo en una FPGA. Al finalizar la práctica, el alumno debe ser capaz de: − Diseñar un circuito complejo a base de componentes más simples, − Diseñar circuitos secuenciales sencillos, − Reutilizar componentes de otros diseños usando Quartus II. MATERIAL − Ordenador personal con Quartus II, − Tarjeta de desarrollo de lógica programable DE1 de Altera. DURACIÓN 1 sesión. TRABAJO PREVIO Leer el enunciado de la práctica y diseñar de forma esquemática con flip-flop’s tipo D, un contador síncrono de cuatro bits, que cuente de 0h a Fh. INTRODUCCIÓN En esta práctica se va a diseñar un contador síncrono de cuatro bits que cuente de 0h a Fh para implementarlo en una FPGA y visualizar el resultado de la cuenta en uno de los display de siete segmentos que hay en la tarjeta del laboratorio. El esquema del circuito que el alumno debe montar en la práctica de hoy se encuentra en el Anexo A, al final del enunciado de la práctica. De los tres bloques que se encuentran en dicho esquema, el primero (DivisorReloj.vhd) es un divisor de reloj disponible en la página web del laboratorio. El código está en el anexo B de esta práctica. Este bloque es necesario porque el reloj de la tarjeta del laboratorio es de 50 MHz, lo que impide visualizar correctamente la evolución de la cuenta en el display de la tarjeta. Dicho bloque reduce la frecuencia del reloj de la tarjeta a una frecuencia de unos 2 Hz. 2 Práctica 8 El archivo anterior hay que copiarlo a la carpeta de trabajo de la sesión, abrirlo con Quartus II y generar su símbolo de la misma forma que se genera el símbolo de una captura de esquemas. El segundo bloque (Contador4Bits.gdf) es el contador síncrono de cuatro bits que debe realizar el alumno. Se conecta con el resto de bloques como se indica en el esquema del Anexo A. El tercer y último bloque es el decodificador de binario a siete segmentos (Bina7Seg.bdf) que el alumno ha realizado en las prácticas 3 y 4. Para poder utilizarlo, el alumno debe copiar el archivo Bina7Seg.bdf a la carpeta de trabajo de esta sesión y generar el símbolo. El circuito se diseñará mediante el programa Quartus II de Altera, se guardará con el nombre Contador.bdf y se implementará en la tarjeta de laboratorio con la FPGA. Como siempre, antes de comenzar a trabajar, se debe crear el directorio de trabajo para la práctica de esta sesión. CARACTERÍSTICAS DEL CIRCUITO El circuito Contador.bdf tiene dos entradas: − Una señal Reset, para inicializar el sistema, y − Una señal Reloj del sistema. Y siete salidas (a, b, c, d, e, f y g) que se conectarán a un display de siete segmentos de la tarjeta, para indicar el valor de la cuenta. El bloque Contador4bits.gdf tiene dos entradas: − Una señal Reset para inicializar el contador, y − Una señal Reloj para sincronizar la cuenta. Y cuatro salidas (QD, QC, QB y QA) que representan el número de la cuenta en binario. En el diseño sólo se pueden utilizar flip-flop’s tipo D sin enable (el componente se denomina dff) y puertas NAND (nand2, nand3, etc.). DESARROLLO PRÁCTICO DISEÑO Realice los siguientes pasos de diseño: − el diagrama de transición de estados, − la tabla de transición y la tabla de excitación de los flip-flop’s, 3 Práctica 8 − los diagramas de Karnaugh empleados para la obtención de las ecuaciones lógicas de las entradas a los flip-flop’s y de la salida, − los circuitos lógicos utilizados para implantar dichas ecuaciones lógicas. Recuerde que estos circuitos habrán de diseñarse de modo que sólo se utilicen puertas NAND. ESQUEMA Dibuje el esquema del Anexo A en una ventana de diseño de Quartus II, guárdelo con el nombre Contador.bdf y declárelo como proyecto. Asigne las patillas de la FPGA indicadas en la Tabla 1 a las entradas y salidas del circuito. Consulte para ello el manual de usuario de la tarjeta de lógica programable (Altera DE1 Board).1 Señal Tipo Patilla FPGA Componente Reset Entrada KEY[0] Reloj Entrada CLOCK_50 a Salida HEX0[0] b Salida HEX0[1] c Salida HEX0[2] d Salida HEX0[3] e Salida HEX0[4] f Salida HEX0[5] g Salida HEX0[6] Tabla 1. Asignación de patillas de la FPGA a las señales del circuito. Compile el circuito para el dispositivo EP2C20F484C7 de la familia Cyclone II. Realice la simulación del circuito comprobando las operaciones. Muestre al profesor los resultados de la simulación. CONFIGURACIÓN Configure la FPGA y compruebe el correcto funcionamiento con la tarjeta del laboratorio realizando diferentes operaciones. Enseñe al profesor dicho funcionamiento. ANEXO A 1 Disponible en la dirección http://www.iit.upcomillas.es/carlosrg/Docencia/LED/DE1_UserManual_v1018.pdf 4 Práctica 8 ANEXO B --********************************************************************* --** ** --** Divisor de reloj: divide la frecuencia de reloj por 2^25. ** --** ** --** La salida es una señal de reloj de unos 2 Hz. ** --** ** --** Version: 1.0 ** --** ** --** Universidad Pontificia Comillas de Madrid - I.C.A.I. ** --** ** --********************************************************************* LIBRARY ieee; USE ieee.std_logic_1164.ALL; USE ieee.std_logic_arith.all; ENTITY DivisorReloj IS PORT( Reloj_in : IN STD_LOGIC; Reloj_out: OUT STD_LOGIC ); END DivisorReloj; ARCHITECTURE arquit OF DivisorReloj IS SIGNAL Contador : INTEGER RANGE 0 TO 25000000; SIGNAL VectorContador : STD_LOGIC_VECTOR (24 DOWNTO 0); BEGIN PROCESS (Reloj_in, Contador, VectorContador) IS BEGIN VectorContador <= CONV_STD_LOGIC_VECTOR (Contador, 25); IF Reloj_in = '1' AND Reloj_in'EVENT THEN Contador <= Contador + 1; Reloj_out <= VectorContador(24); END IF; END PROCESS; END arquit;