Introducción a la simulación de sistemas digitales 04-05 UPV LDD Ejemplo: SUMA/RESTA ACUMULADA ATC OBJETIVO: En estas sesiones de laboratorio vamos a estudiar una de las herramientas software habituales que se utilizan para el diseño de sistemas digitales. Existen varias alternativas en el mercado; en este curso vas a utilizar un paquete comercial muy común, MAX+plus II de la casa ALTERA, para implementar diseños en dispositivos de lógica programable. Para estudiar este conjunto de aplicaciones vamos a diseñar un pequeño sistema digital, siguiendo todos los pasos habituales: definición del sistema lógico, dibujándolo o mediante lenguajes tipo VHDL, compilación, simulación, e implementación en un dispositivo concreto utilizando la placa UP1. EJEMPLO: Se ha diseñado un sistema que suma o resta números naturales de dos bits y muestra el resultado acumulado en un registro. Los datos se introducen mediante dos interruptores. El sistema se controla mediante tres pulsadores: LD, S y R. Como ejemplo, sólo se considera la suma hasta 4 bits y no se consideran resultados negativos. Por ello, al superar el valor 15 (overflow), o si el resultado es <0 (underflow) no se pueden realizar más operaciones hasta pulsar LD. LD: carga en el registro de un dato de 4 bits. No existe señal de inicialización a cero; para introducir un 0 hay que ejecutar LD 0. Al cargar un dato los dos indicadores del sistema (overflow y underflow) se ponen a 0. S: suma de un número de dos bits al valor del registro, tal como se ha hecho en el ejemplo anterior (SUM). Al detectar overflow (>15), se activa el indicador OVF; a continuación sólo se admite una operación LD. R: resta de un número de dos bits al valor del registro. Al detectar underflow (<0), se activa el indicador UNF; a continuación sólo se admite una operación LD. El algoritmo de control y un esquema de la unidad de proceso aparecen en la figura e la pagina siguiente. Unidad de proceso: 0,0,N1,N0 4 Biest JK JOVF 4 4 J K KOVF Cout clk RESETL N3-0 4 4 OVF CL Rest Sumador Q Biest JK 0 Dat_0 1 Mux JUNF J K KUNF 4 clk Ld_R clk RESETL Registro 4 Unidad de control: RESET* E0 0 1 E1 LD 0 E2 KOVF KUNF DAT_0 LD_R 0 S 1 1 0 1 Cout (>15) JOVF 1 JUNF E5 1 LD Cout (< 0) 0 1 LD+S+R E3 LD_R REST LD_R E4 0 R 0 Q CL UNF TRABAJO A REALIZAR 1. DESCRIPCIÓN DEL DISEÑO En primer lugar se va a describir el diseño propuesto utilizando tanto el editor gráfico como el de texto. a) Editor gráfico (Unidad de proceso): Un diseño puede describirse gráficamente utilizando los símbolos de los módulos incluidos en alguna de la tres bibliotecas de la herramienta Altera, o bien, los de los diseños previos realizados por un usuario. En este caso, se va a describir la Unidad del proceso del ejemplo utilizando elementos de las citadas bibliotecas. Para ello consultar el resumen de la guía del usuario de la herramienta y seguir las siguientes pautas: • Usar la biblioteca de primitivas para puertas lógicas y biestables. • Usar la bibliotecas de CI estándar TTL de la serie 74 para el Sumador • Usar la biblioteca de módulos parametrizables para el registro de almacenamiento. y el multiplexor. b) Editor de texto para VHDL (Unidad de control): La Unidad de control se va a describir utilizando el lenguaje VHDL. Para ello seguir los pasos ya vistos en las clases teóricas y consultar la guía Altera para editar dicho fichero. c) Usar de nuevo el editor gráfico para generar la descripción del sistema completo: Unidad de control + Unidad de proceso. 2. SIMULACIÓN LÓGICA Se van a simular desde un punto de vista lógico las unidades previamente diseñadas. Para ello y tal como se describe en la guía de usuario Altera, los pasos a seguir son: a) Compilar el diseño: En primer lugar se realizará una compilación funcional simple. b) Editar las formas de onda de las señales de entrada del sistema a simular utilizando para ello el Editor de Formas de onda: Waveform Editor. c) Simular el diseño descrito en el orden siguiente: 1. Unidad de control: las posibles transiciones de estados (al menos los casos más críticos), las señales de salida a activar. 2. Unidad de proceso: las respuestas de los diferentes módulos incluidos 3. El sistema completo: realizar un estudio lo suficientemente representativo del funcionamiento del sistema sin alargarlo en exceso con casos redundantes. 3. COMPILACIÓN Y PROGRAMACIÓN EN UNA CPLD. Se va a implementar el diseño en una de los dispositivos disponibles en la placa UP1, en concreto el de la familia FLEX10K20, utilizando para ello el “ByteBlaster” que permite su programación directa desde el PC. Para poder visualizar de manera adecuada las salidas y aplicar las entradas se actuará de la siguiente manera: • Para el dato de entrada se utilizarán los microinterruptores • Asignaremos el pulsador PB1 a La señal S, y el pulsador PB2 a R. • Asignaremos microinterruptores a Reset, y a la señal LD. • Visualizaremos el estado del sistema en uno de los dígitos y el resultado en el otro NOTA: Para ello será necesario incluir en el diseño dos decodificadores Hex-7seg. . a) Tareas previas. Seleccionar el dispositivo concreto en el que se va a implementar el diseño, volver a compilarlo (esta vez con el dispositivo seleccionado). Añadir al diseño los módulos necesarios de acuerdo con las pautas del párrafo anterior, y realizar la asignación de pines de entrada/salida. Para ello consultar la guía del usuario y la información resumida de la placa UP1. b) Programar la CPLD Seleccionar en el menú “Programer”, verificar las conexiones de la placa UP1 al PC yl programarlo. c) Comprobar el funcionamiento del sistema real.