INGENIERIA DE TELECOMUNICACION ELECTRONICA DIGITAL PRACTICA Nº2: DISEÑO Y SIMULACIÓN DE SISTEMAS DIGITALES CON DISPOSITIVOS PROGRAMABLES El objetivo de esta práctica es ilustrar las técnicas actuales de diseño y simulación de sistemas digitales, haciendo uso de una herramienta para la síntesis de sistemas digitales sobre FPGAs y una placa de evaluación. Sesión 2.1: introducción al uso del paquete MAX+plus II para el diseño y simulación de sistemas digitales; diseño y simulación de un codificador de binario a BCD y un decodificador de BCD para su uso con un display de 7 segmentos. Sesión 2.2: diseño y simulación de circuitos aritméticos. Sesión 2.3: implementación con FPGAs sobre una placa de evaluación de circuitos aritméticos. Sesión 2.4: diseño y simulación de un contador de segundos e implementación con FPGAs sobre una placa de evaluación. Sesión 2.5: introducción a VHDL; diseño y simulación de una máquina de estados finitos e implementación sobre una placa de evaluación. SESIÓN 2.1: Introducción a MAX+plus II Instrumental de laboratorio: • Software de diseño de sistemas digitales MAX+plus II 2.1.1. MAX+plus II MAX+plus II es un paquete para del desarrollo de sistemas digitales sobre dispositivos lógicos programables, permitiendo el diseño, simulación, síntesis y generación de los ficheros de configuración para una aplicación específica. Esta herramienta permite el diseño jerárquico con diferentes posibilidades de descripción del sistema: diseño con esquemáticos, lenguajes de descripción de hardware, etc., disponiendo de diferentes 2.1 INGENIERIA DE TELECOMUNICACION ELECTRONICA DIGITAL tipos de primitivas (puertas lógicas individuales, componentes de las familias 74, módulos LPM, etc.); por otra parte, la herramienta incluye un simulador que permite la verificación del diseño teniendo en cuenta las especificaciones temporales del dispositivo objetivo. CREACIÓN DE UN PROYECTO El diseño con MAX+plus II está basado en la creación de un proyecto. Para ello no es necesario más que crear un fichero de diseño (esquemáticos, .gdf, o de texto para el uso de algún lenguaje de descripción de hardware) en la carpeta deseada y utilizar el botón de la barra de herramientas, que crea un proyecto correspondiente a dicho fichero o abre el proyecto si éste ya existe. Una vez creado el proyecto e iniciado el diseño con esquemáticos, es posible insertar diferentes elementos con el comando “Symbol − Enter Symbol” del menú, o también desplegando el menú de contexto (botón derecho) en el editor gráfico de esquemáticos o haciendo doble click sobre el fondo del diseño; esta acción despliega la ventana de selección de componente, reflejada en la figura 2.1, ventana en la que aparecerán varias librerías de elementos disponibles: • los símbolos asociados al proyecto en curso, según el procedimiento que se verá a continuación; • c:\maxplus2\max2lib\prim, que contiene puertas lógicas individuales de varios Figura 2.1: selección de símbolos a insertar. 2.2 INGENIERIA DE TELECOMUNICACION ELECTRONICA DIGITAL tipos, diferentes tipos de biestables, elementos de entrada y salida, etc., y será la que se empleará básicamente en esta práctica; • c:\maxplus2\max2lib\mf, que contiene macrofunciones que implementan los diferentes circuitos integrados de las familias 74 de componentes digitales discretos; • c:\maxplus2\max2lib\mega_lpm, que contiene diferentes módulos parametrizables (multiplexores, circuitos aritméticos, registros, etc.); • c:\maxplus2\max2lib\edif, con elementos similares a los de la librería c:\maxplus2\max2lib\mf. Dentro de la librería c:\maxplus2\max2lib\prim, además de las diferentes puertas lógicas, los elementos más destacados para el desarrollo de estas prácticas son: • input y output, que permiten definir entradas y salidas individuales para el circuito descrito en cada fichero .gdf; • diferentes biestables, con y sin señal de ENABLE: dff, dffe, jkff, jkffe, srff, srffe, tff ó tffe. La figura 2.2 muestra un ejemplo de cómo se puede introducir un determinado circuito lógico en el editor gráfico. Obsérvese que al situarse en la ventana del editor gráfico, Figura 2.2: ejemplo de diseño con MAX+plus II. 2.3 INGENIERIA DE TELECOMUNICACION ELECTRONICA DIGITAL Figura 2.3: ejemplo de diseño jerárquico con MAX+plus II. en la parte derecha de MAX+plus II Manager aparece una barra de herramientas adecuada, al tiempo que para conectar los diferentes elementos del circuito, sólo hay que arrastrar el ratón sobre sus terminales, cambiando éste a una cruz y siendo posible realizar la conexión sin más que arrastrar el ratón hasta el punto deseado. DISEÑO JERÁRQUICO MAX+plus II permite el diseño jerárquico, es decir, emplear en un proyecto determinados bloques del mismo como elementos constitutivos de otros bloques del proyecto. Para ello, dado un determinado bloque, como el mostrado en la figura 2.2, es posible utilizarlo como componente de otros circuitos más complejos creando el símbolo adecuado; para ello sólo hay que usar el comando “File − Create Default Symbol”, que creará el fichero .sym correspondiente. Dicho símbolo puede editarse con el comando “File − Edit Symbol” y queda incluido en la librería de trabajo del proyecto en curso. De este modo, es posible emplear los símbolos creados en un nuevo diseño, como muestra la figura 2.3. En general, cuando se esté realizando un diseño jerárquico, el nombre del proyecto deberá corresponder al nombre del fichero que corresponde al nivel máximo de dicha jerarquía que, además, se abrirá empleando el botón de la barra de herramientas. COMPILACIÓN Y SIMULACIÓN Una vez que el diseño incluido en un proyecto está finalizado, MAX+plus II permite la simulación del mismo y su compilación y síntesis para su uso sobre un dispositivo 2.4 INGENIERIA DE TELECOMUNICACION ELECTRONICA DIGITAL Figura 2.4: aspecto típico de la ventana del compilador de MAX+plus II. lógico programable. En las siguientes sesiones se especificarán los parámetros a definir para la correcta implementación hardware del diseño, a través del menú “Assign” y sus diferentes posibilidades. En cualquier caso, la síntesis del proyecto se realiza a través del compilador, que puede abrirse con el botón de la barra de herramientas o a través del menú “MAX+plus II”; también puede iniciarse con los o botones , que guardan y comprueban (conexionado, sintaxis, etc.) y guardan y compilan, respectivamente, el proyecto. La figura 2.4 muestra el aspecto típico de la ventana del compilador y los mensajes correspondientes. Dada la transparencia para el usuario de MAX+plus II, el proceso de compilación, que se inicia con el botón “Start”, realiza de manera automática todos los pasos implicados en el mismo: • extracción de los nodos del circuito y creación de una base de datos de los mismos; • síntesis de la lógica necesaria para la creación del diseño utilizando las primitivas de diseño disponibles en la familia de dispositivos objetivo; • emplazamiento del diseño en el chip concreto objetivo y enrutado de las conexiones entre los diferentes módulos; • extracción de las características temporales del circuito final para su simulación; 2.5 INGENIERIA DE TELECOMUNICACION ELECTRONICA DIGITAL Figura 2.5: elección de las señales a mostrar en la simulación. • creación de los ficheros de programación necesarios para el volcado del diseño en el chip objetivo. En caso de producirse algún error durante la compilación, en la ventana de mensajes del compilador se mostrarán las causas del mismo y la etapa de compilación en la que se produjo el error. Una vez que el proyecto ha sido compilado con éxito, es posible simular el mismo creando un fichero .scf (Waveform Editor File) adecuado; dicho fichero habrá de llevar el nombre del proyecto a simular y podrá modificarse con el módulo Waveform Editor, que se inicia a través del menú “MAX+plus II” o al abrir algún fichero .scf. Una vez iniciado el Waveform Editor, podemos insertar en el mismo las diferentes señales del circuito a visualizar, a través del comando “Node − Insert nodes from SNF”, que inicia la ventana de la figura 2.5 en la que es posible buscar en la base de datos de nodos del diseño las señales a insertar, tanto entradas como salidas, grupos de señales, salidas de registros, etc. Antes de iniciar la definición de las entradas para la simulación, es necesario fijar la duración de la misma con el comando “File − End Figura 2.6: simulación con MAX+plus II. 2.6 INGENIERIA DE TELECOMUNICACION ELECTRONICA DIGITAL time”; posteriormente, se podrán definir las diferentes entradas a través de las diferentes opciones del comando “Edit − Overwrite”. Tras definir las entradas convenientemente y seleccionar las salidas a mostrar en el fichero .scf, no hay más que proceder a la simulación, bien iniciando el simulador con el botón , a través del menú “MAX+plus II” o con el botón , que guarda y simula el proyecto actual. Una vez realizada la simulación, se podrá comprobar el correcto funcionamiento del diseño. La figura 2.6 muestra los resultados de simulación para el circuito de la figura 2.3. FAMILIARIZACIÓN CON MAX+plus II Antes de proceder con el resto de las tareas de esta primera sesión, es conveniente familiarizarse con el paquete MAX+plus II comprobando el efecto de lo expuesto hasta ahora. 2.1.2. Codificador de binario a BCD OBJETIVO Creación de un módulo codificador de binario a BCD que pueda emplearse como bloque constitutivo en diseños posteriores. PROCEDIMIENTO Como primera tarea a realizar con MAX+plus II, se diseñará un módulo codificador de binario a BCD que se empleará en sesiones posteriores para la implementación de otros sistemas más complejos. En concreto, las especificaciones del sistema son las siguientes: • el codificador ha de tener cuatro entradas, que representan un número en binario natural, y cuatro salidas, que corresponden a la representación en BCD de la entrada; • para entradas que no representen números decimales la salida ha de ser 0000. 2.7 INGENIERIA DE TELECOMUNICACION ELECTRONICA DIGITAL El procedimiento a seguir es el siguiente: • diseñar el circuito empleando un esquemático en un fichero .gdf, a partir de las primitivas de la librería c:\maxplus2\max2lib\prim, y crear un proyecto con dicho fichero; • crear un fichero .scf en el que se visualicen las entradas y salidas del codificador BCD, configurando las entradas convenientemente para comprobar todas las posibilidades de la tabla verdad (para ello podrá usarse el comando “Edit − Overwrite − Clock” utilizando como multiplicador diferentes potencias de dos); • simular el diseño y comprobar el correcto funcionamiento del mismo (para facilitar la comprobación usar el comando “Node − Enter group” tras seleccionar un grupo de señales a agrupar, tomando la precaución de colocar las más significativas en la parte superior); • crear un símbolo para el codificador y guardar los ficheros .gdf y .sym para su uso en sesiones posteriores. CUESTIONES 1. Utilizando el Waveform Editor tras la simulación, estime el retardo que existe en el circuito diseñado entre un cambio en las entradas y el cambio correspondiente en las salidas. 2.1.3. Decodificador de BCD a 7 segmentos OBJETIVO Creación de un módulo decodificador de BCD para su uso con displays de 7 segmentos que pueda emplearse como bloque constitutivo en diseños posteriores. 2.8 INGENIERIA DE TELECOMUNICACION ELECTRONICA DIGITAL PROCEDIMIENTO Para finalizar la sesión se diseñará un módulo decodificador de BCD para su uso con displays de 7 segmentos que se empleará en sesiones posteriores para la implementación de otros sistemas más complejos. En concreto, las especificaciones del sistema son las siguientes: • el decodificador ha de seguir la nomenclatura estándar para los displays de 7 segmentos que se muestra en la figura 2.7; • en el diseño se supondrá que cada segmento se ilumina cuando se le Figura 2.7: display de 7 segmentos. asigna un 0 lógico, permaneciendo apagado mientras se le asigne un 1 lógico. El procedimiento a seguir es el siguiente: • diseñar el circuito empleando un esquemático en un fichero .gdf, a partir de las primitivas de la librería c:\maxplus2\max2lib\prim, y crear un proyecto con dicho fichero; • crear un fichero .scf en el que se visualicen las entradas y salidas del decodificador BCD, configurando las entradas convenientemente para comprobar todas las posibilidades de la tabla verdad; • simular el diseño y comprobar el correcto funcionamiento del mismo; • crear un símbolo para el decodificador de BCD a 7 segmentos y guardar los ficheros .gdf y .sym para su uso en sesiones posteriores. 2.9 INGENIERIA DE TELECOMUNICACION ELECTRONICA DIGITAL CUESTIONES 1. Utilizando el Waveform Editor tras la simulación, estime el retardo que existe en el circuito diseñado entre un cambio en las entradas y el cambio correspondiente en las salidas. 2. Estime el cambio en coste del circuito si los segmentos hubiesen de iluminarse con un 1 lógico en lugar de un 0 lógico. 2.10 INGENIERIA DE TELECOMUNICACION ELECTRONICA DIGITAL SESIÓN 2.2: Diseño y simulación de circuitos aritméticos (I) Instrumental de laboratorio: • Software de diseño de sistemas digitales MAX+plus II OBJETIVO En esta sesión se construirán, de manera jerárquica, diferentes circuitos aritméticos. Para ello, los módulos que se vayan diseñando irán formando los bloques constitutivos de los siguientes, haciendo uso también de algunos módulos diseñados en la sesión anterior. Todos los circuitos serán verificados mediante su simulación. Finalmente, el diseño total se trasladará a la placa de evaluación Altera Design Laboratory Package UP1 en la siguiente sesión. 2.2.1. Sumador completo de un bit OBJETIVO Diseñar un módulo sumador completo de un bit que pueda emplearse para la construcción de sumadores de mayor precisión. PROCEDIMIENTO El sumador completo de un bit es un módulo con tres entradas (los dos bits a sumar, x e y, y el bit de acarreo de entrada, cin) y dos bits de salida (el bit de suma, s, y el bit de acarreo de salida, cout); las salidas están definidas por las siguientes funciones de conmutación: s=x⊕y⊕cin cout=xy+xcin+ycin (2.1) El procedimiento a seguir es el siguiente: • diseñar el circuito empleando un esquemático en un fichero .gdf, a partir de las primitivas de la librería c:\maxplus2\max2lib\prim, y crear un proyecto con dicho fichero; 2.11 INGENIERIA DE TELECOMUNICACION ELECTRONICA DIGITAL • crear un fichero .scf en el que se visualicen las entradas y salidas del sumador completo, configurando las entradas convenientemente para comprobar todas las posibilidades de la tabla verdad; • simular el diseño y comprobar el correcto funcionamiento del mismo; • crear un símbolo para el sumador completo de un bit y guardar los ficheros .gdf y .sym para su uso posterior en la sesión. 2.2.2. Sumador de 4 bits OBJETIVO Diseñar, a partir del sumador completo anterior, un sumador de 4 bits para su uso en un sumador BCD de una cifra. PROCEDIMIENTO A partir del sumador completo de un bit definido anteriormente se creará un sumador de 4 bits, tal y como muestra la figura 2.8. Para ello, el procedimiento a seguir es: • crear un nuevo esquemático en un fichero .gdf y guardarlo en la misma carpeta que el proyecto anterior, asignando el proyecto actual al nuevo fichero Figura 2.8: sumador de 4 bits. 2.12 INGENIERIA DE TELECOMUNICACION ELECTRONICA DIGITAL Figura 2.9: ejemplo de simulación del sumador de 4 bits. con el botón de la barra de herramientas; • diseñar el sumador de 4 bits a partir del símbolo anteriormente creado, que debe aparecer en la librería de trabajo del proyecto actual del cuadro de diálogo “Enter Symbol”, tal y como muestra la figura 2.1; • crear un fichero .scf en el que se visualicen las entradas y salidas del sumador de 4 bits y, usando el comando “Node − Enter group” para mayor comodidad, introducir diferentes combinaciones de entradas y comprobar en la simulación la validez de los resultados, como se ilustra en la figura 2.9; • crear un símbolo para el sumador de 4 bits y guardar los ficheros .gdf y .sym para su uso posterior en la sesión. CUESTIONES 1. Utilizando el Waveform Editor tras la simulación, estime el retardo que existe en el sumador de 4 bits entre un cambio en las entradas y el cambio correspondiente en las salidas. 2.2.3. Sumador BCD de un dígito OBJETIVO Creación de un sumador decimal de un dígito a partir de los módulos definidos. 2.13 INGENIERIA DE TELECOMUNICACION ELECTRONICA DIGITAL PROCEDIMIENTO A partir del sumador de 4 bits definido anteriormente, ha de diseñarse un sumador BCD de un dígito, es decir, un sistema que satisfaga las especificaciones siguientes: • dos entradas de 4 bits, que representan los dos dígitos decimales codificados en BCD a sumar, y una entrada de 1 bit que represente el posible acarreo de entrada de la suma; • una salida de 4 bits que corresponda al dígito decimal codificado en BCD resultado de la suma de las entradas y una salida de 1 bit que represente el posible acarreo de salida de la suma. Para diseñar el circuito se seguirá una estructura puramente combinacional que ha de incluir los siguientes módulos: • un primer sumador de 4 bits que realice la suma de las dos entradas BCD y el posible acarreo de entrada; • un segundo sumador de 4 bits que implemente la suma del resultado del sumador anterior con 6 (0110), proporcionando el resultado correcto de la suma en BCD si el primer resultado no lo era; • un módulo que determine si el resultado del primer sumador de 4 bits es una cifra decimal correcta (nótese que el resultado de este primer sumador es incorrecto en BCD si los 4 bits de suma son, en binario, mayores que 9 o si el acarreo de salida de dicho sumador es 1); • finalmente, un multiplexor con dos entradas de 4 bits que, en función de la salida del módulo comparador anterior, seleccione entre las salidas de los dos sumadores de 4 bits. Es evidente que para la implementación de este sumador BCD según lo expuesto, es posible usar sin más el sumador de 4 bits anteriormente definido como bloque básico, siendo sólo necesario el diseño del multiplexor de 2 a 1 para palabras de 4 bits y el módulo comparador que genere la señal de control de dicho multiplexor; estos módulos se diseñarán siguiendo el procedimiento ya descrito para el diseño del 2.14 INGENIERIA DE TELECOMUNICACION ELECTRONICA DIGITAL sumador completo o el sumador de 4 bits. Una vez que todos los módulos hayan sido definidos: • crear un nuevo esquemático en un fichero .gdf y guardarlo en la misma carpeta que los proyectos anteriores, asignando el proyecto actual al nuevo fichero con el botón de la barra de herramientas; • diseñar el sumador BCD de un dígito a partir de los símbolos del sumador de 4 bits, multiplexor y comparador definidos; • crear un fichero .scf en el que se visualicen las entradas y salidas del sumador BCD e introducir diferentes combinaciones de entradas a fin de comprobar en la simulación la validez de los resultados, tal y como se hizo para el sumador de 4 bits. 2.15 INGENIERIA DE TELECOMUNICACION ELECTRONICA DIGITAL 2.16 INGENIERIA DE TELECOMUNICACION ELECTRONICA DIGITAL SESIÓN 2.3: Diseño y simulación de circuitos aritméticos (II) Instrumental de laboratorio: • Software de diseño de sistemas digitales MAX+plus II • Placa de evaluación Altera Design Laboratory Packager UP1 y accesorios OBJETIVO En esta sesión se trasladará el sumador BCD de un dígito desarrollado en la sesión anterior a la placa de evaluación Altera Design Laboratory Package UP1 para su implementación sobre FPGAs. DESIGN LABORATORY PACKAGE UP1 La placa de evaluación Altera Design Laboratory Package UP1, que se muestra en la figura 2.10, es una placa para el prototipado de sistemas digitales que incluye dos FPGAs: una de la familia MAX7000 y otra de la familia FLEX10K, ambas fabricadas por Altera. El sistema permite configurar ambos chips por separado a través del puerto paralelo de un PC desde MAX+plus II, o bien a través de otra placa UP1. Los chips disponibles en la placa UP1, tal y como corresponde a las FPGAs, son completamente programables, pudiendo alterarse el circuito digital que contienen sin más que rescribir en ellos la configuración adecuada; además, al cesar la alimentación de la placa, la configuración de ambos chips se pierde al estar basados en tecnología SRAM. Ambos chips cuentan con gran números de pines de E/S, que en su mayoría están disponibles para su conexionado externo a través de los conectores de expansión. Los pines no disponibles se hayan conectados a los recursos disponibles en la placa, que incluyen displays de 7 segmentos, pulsadores, conmutadores para fijar valores lógicos, una señal de reloj de 25.175 MHz o LEDs para comprobar diferentes valores lógicos. Para el desarrollo de estas prácticas se hará uso del chip de la familia FLEX10K, situado en la mitad derecha de la placa UP1 y al que se hayan conectados: • 2 pulsadores (FLEX_PB1 y FLEX_PB2 en la figura 2.10, conectados a los pines 28 y 29 del dispositivo, respectivamente); 2.17 INGENIERIA DE TELECOMUNICACION ELECTRONICA DIGITAL Figura 2.10: Altera Design Laboratory Package UP1. • 8 conmutadores (FLEX_SWITCH en la figura 2.10, la asignación de pines es la de la tabla 2.1); • 2 displays de 7 segmentos con punto decimal (FLEX_DIGIT en la figura 2.10, la asignación de pines es la de la tabla 2.2 siguiendo la nomenclatura de la figura 2.7). De esta manera, para poder implementar sobre este chip un determinado diseño sólo habrá que seguir las instrucciones de configuración del proyecto que se darán a 2.18 INGENIERIA DE TELECOMUNICACION ELECTRONICA DIGITAL Conmutador Pin FLEX_SWITCH-1 41 FLEX_SWITCH-2 40 FLEX_SWITCH-3 39 FLEX_SWITCH-4 38 FLEX_SWITCH-5 36 FLEX_SWITCH-6 35 FLEX_SWITCH-7 34 FLEX_SWITCH-8 33 Tabla 2.1: asignación de pines para FLEX_SWITCH. Segmento Pin Dígito 1 (izqda.) Dígito 2 (dcha.) a 6 17 b 7 18 c 8 19 d 9 20 e 11 21 f 12 23 g 13 24 Punto decimal 14 25 Tabla 2.2: asignación de pines para FLEX_DIGIT. continuación, eligiendo el dispositivo adecuado y asignado las diferentes entradas y salidas a los pines deseados. CONFIGURACIÓN DE UN PROYECTO Como ya se comentó en la descripción de MAX+plus II realizada en la documentación de la sesión anterior, el menú “Assign” de MAX+plus II Manager permite la Figura 2.11: selección de dispositivo. 2.19 INGENIERIA DE TELECOMUNICACION ELECTRONICA DIGITAL Figura 2.12: asignación de pines. configuración avanzada de los aspectos hardware de un determinado proyecto. Para el desarrollo de estas prácticas sólo es necesario configurar correctamente el dispositivo objetivo del diseño y la asignación de las entradas y salidas del diseño a los pines del dispositivo deseados. En lo que se refiere a la elección del dispositivo, el comando “Assign − Device” abre el cuadro de diálogo para la selección de dispositivo que se muestra en la figura 2.11, donde se podrá elegir la familia y el dispositivo concreto para el que se va a sintetizar el diseño. Para la asignación de pines a entradas y salidas del diseño habrá de usarse el comando “Assign − Pin/Location/Chip...”, que abre el cuadro de diálogo que se ilustra en la figura 2.12. En dicho cuadro de diálogo se puede asignar cada nodo de entrada o salida a un pin concreto del dispositivo objetivo del diseño. Figura 2.13: programador de MAX+plus II. 2.20 INGENIERIA DE TELECOMUNICACION ELECTRONICA DIGITAL PROGRAMACIÓN DE UN DISPOSITIVO Una vez que un determinado proyecto ha sido correctamente compilado con las asignaciones definitivas de dispositivos y pines, MAX+plus II permite la programación del dispositivo a través del módulo Programmer, que se inicia con el botón de la barra de herramientas o a través del menú “MAX+plus II”. El aspecto de dicha ventana es el de la figura 2.13, en la que se puede comprobar que este módulo permite programar y configurar un dispositivo, comprobar su programación, etc. PROCEDIMIENTO En virtud de lo expuesto anteriormente, a continuación se trasladará el sumador BCD de un dígito diseñado en la sesión anterior a la placa Altera Design Laboratory Package UP1. Para ello se fijará a cero la entrada de acarreo del sumador anterior y se volverá a compilar el proyecto atendiendo a las siguientes restricciones: • el sumador se trasladará al dispositivo FLEX10K de la placa UP1, para lo que habrá que configurar el proyecto como se ha indicado anteriormente; • los dos dígitos BCD que sirven de entrada al sumador decimal de un dígito se conectarán a los conmutadores FLEX_SWITCH, con lo que dichas entradas del diseño habrán de ser asignadas según la asignación de la tabla 2.1. A fin de evitar que entradas no válidas en BCD lleguen al sumador, se insertará el codificador de binario a BCD diseñado en la sesión 2.1 entre las entradas del diseño y las del sumador BCD en sí; • el resultado de la suma se visualizará en los dos displays de 7 segmentos FLEX_DIGIT, con lo que habrá de usarse el decodificador de BCD a 7 segmentos diseñado en la sesión 2.1, asignando las salidas de dicho decodificador según la asignación de pines de la tabla 2.2. Una vez que al sumador BCD de un dígito le hayan sido añadidos los codificadores de binario a BCD y los decodificadores de BCD a 7 segmentos en la entrada y la salida, respectivamente, y las entradas y salidas hayan sido asignadas a los pines adecuados según lo anteriormente expuesto, se volverá a compilar el proyecto y con el fichero .sof 2.21 INGENIERIA DE TELECOMUNICACION ELECTRONICA DIGITAL generado se procederá a programar el dispositivo FLEX10K de la placa UP1 para la comprobación del circuito. 2.22 INGENIERIA DE TELECOMUNICACION ELECTRONICA DIGITAL SESIÓN 2.4: Diseño y simulación de circuitos secuenciales Instrumental de laboratorio: • Software de diseño de sistemas digitales MAX+plus II • Placa de evaluación Altera Design Laboratory Packager UP1 y accesorios OBJETIVO En esta sesión se diseñará, a partir de contadores de 2, 3 y 4 bits, un contador de segundos, que será verificado mediante simulación y se trasladará a la placa de evaluación Altera Design Laboratory Package UP1. FUNDAMENTO La placa UP1 (figura 2.10) incluye un oscilador de cristal que proporciona una señal de reloj de 25.175 MHz; dicha señal de reloj está disponible en el chip de la familia FLEX10K de la placa UP1 en el pin 91. Aprovechando dicha señal de reloj y utilizando sólo contadores de 2, 3 y 4 bits con biestables tipo D (primitiva dff de la librería c:\maxplus2\max2lib\prim), se pretende construir un contador de segundos, de modo que en los dos displays de 7 segmentos asociados al chip de la familia FLEX10K se visualice la cuenta de segundos. El biestable D disponible en la librería c:\maxplus2\max2lib\prim se muestra en la figura 2.14, y consta de dos entradas asíncronas activas en bajo: PRN y CLRN. La entrada PRN fija la salida Q al valor 1 lógico cuando se hace 0, mientras que CLRN fija la salida a 0 lógico si esta entrada se hace 0, permaneciendo inactivas mientras ambas permanezcan a 1 o no se conecten en el circuito. Por otra parte, el biestable se dispara por los flancos de Figura 2.14: biestable D dff. subida de la señal conectada a la entrada de reloj, copiándose en dicho flanco el valor de la entrada D a la salida Q, como corresponde a un biestable tipo D. Este biestable será el elemento básico de los contadores a diseñar: 2.23 INGENIERIA DE TELECOMUNICACION ELECTRONICA DIGITAL • contador ascendente de 4 bits con señal de CLEAR (puesta a 0) global; • contador ascendente de 2 bits con señal de CLEAR (puesta a 0) global; • contador ascendente módulo 6 de 3 bits con señal de CLEAR (puesta a 0) global; • contador ascendente módulo 10 de 4 bits con señal de CLEAR (puesta a 0) global. Utilizando estos módulos como contadores básicos se pretende diseñar un contador de segundos, que constará de los siguientes bloques: • generador de una señal de reloj de 1 Hz de frecuencia a partir de la señal de reloj de 25.175 MHz disponible en la placa UP1; • contador decimal módulo 60, que puede construirse a partir de un contador módulo 10 que tenga como señal de reloj la señal generada de 1 Hz y un contador módulo 6 que obtenga su señal de reloj a partir de la salida del otro contador; • dos módulos decodificadores de BCD a 7 segmentos, diseñados en la sesión 2.1, que permitirán visualizar el estado de la cuenta en los displays de la placa UP1. PROCEDIMIENTO 2.4.1. Generación de un reloj de 1 Hz A partir de la señal de reloj de 25.175 MHz disponible en la placa UP1, en primer lugar se pretende generar una señal de reloj de 1 Hz. Para ello, no hay más que comprobar que 25.175·106/6·222≅1, con lo que un contador de 22 bits con señal de reloj de 25.175 MHz proporcionaría en su bit más significativo una frecuencia de 6 Hz. Dada la dificultad de generar un contador más de 22 bits, éste se construirá a partir de contadores más simples encadenados; en concreto, a partir de contadores de 4 y 2 2.24 INGENIERIA DE TELECOMUNICACION ELECTRONICA DIGITAL bits, a los que se añadirá un contador de 3 bits módulo 6, que usen como entrada de reloj el bit más significativo del contador precedente y con uno de ellos teniendo como entrada de reloj la señal de 25.175 MHz es posible realizar esta operación. Para ello, se diseñarán dos contadores de 4 y 2 bits y un contador de 3 bits módulo 6: • diseñar los contadores en sendos ficheros .gdf, a partir de las primitivas de la librería c:\maxplus2\max2lib\prim; dichos módulos han de contar con una entrada de CLEAR, que se conectará a la entrada CLRN de los biestables dff, una entrada que será la señal de reloj de entrada y una única salida, el bit más significativo, que se usará como señal de reloj en el módulo siguiente al encadenarlos; • simular los diseños y comprobar el correcto funcionamiento de los mismos; • crear los símbolos correspondientes para los contadores y guardar los ficheros .gdf y .sym para su uso posterior en la sesión. Una vez disponibles estos módulos, diseñar un módulo que, haciendo uso de los contadores de 2 y 4 bits encadenados con un contador final de tres bits módulo 6, genere una señal de reloj de 1 Hz a partir de la señal de 25.175 MHz. Para ello: • diseñar el módulo en un fichero .gdf a partir de los símbolos de los contadores de 2 y 4 bits y el contador módulo 6; el módulo tendrá un entrada de CLEAR, conectada a la entrada correspondiente de todos los contadores, una entrada que corresponderá a la señal de reloj de la placa UP1, y una única salida, que será una señal de reloj de 1 Hz (la salida del contador de 3 bits módulo 6); • crear el símbolo correspondiente y guardar los ficheros .gdf y .sym para su uso posterior en la sesión. 2.4.2. Contador decimal de segundos Una vez que el módulo que genera una señal de reloj de 1 Hz está disponible, a continuación se diseñará un contador decimal de segundos módulo 60, a partir de dos contadores ascendentes en módulo 6 y módulo 10; el contador módulo 10 usará como 2.25 INGENIERIA DE TELECOMUNICACION ELECTRONICA DIGITAL reloj la señal de 1 Hz, y habrá de generarse a partir de la salida de éste una señal de reloj para el contador módulo 6, de manera similar a lo hecho en la primera práctica (sesión 1.2) con el entrenador lógico DET 2020. Para ello: • diseñar el contador decimal de segundos en un fichero .gdf, a partir de las primitivas de la librería c:\maxplus2\max2lib\prim; dicho módulo habrá de contar con una entrada de CLEAR, que se conectará a la entrada CLRN de los biestables dff, una entrada de reloj, que será usada por el contador módulo 10, y 8 salidas correspondientes a los dos dígitos BCD que forman la cuenta decimal; • simular el contador decimal de segundos y comprobar el correcto funcionamiento del mismo; • crear el símbolo correspondiente y guardar los ficheros .gdf y .sym para su uso posterior en la sesión. 2.4.3. Implementación con FPGA Para la visualización del contador sobre la placa UP1, se creará un último proyecto en el que se incluirán los módulos anteriormente creados, con las siguientes consideraciones: • asignar el proyecto al chip de la familia FLEX10K disponible en la placa UP1, según lo descrito en la documentación de la sesión anterior (figura 2.11); • la entrada de reloj del módulo que genera la señal de reloj de 1 Hz habrá de asignarse, según el procedimiento descrito en la documentación de la sesión anterior (figura 2.12) al pin 91, en el que se halla disponible la señal de reloj de 25.175 MHz; • dado que todos los módulos generados cuentan con una señal de CLEAR, asignar a este nuevo proyecto una entrada de CLEAR global, que habrá de asignarse al pin 28, en el que está disponible la señal del pulsador FLEX_PB1 2.26 INGENIERIA DE TELECOMUNICACION ELECTRONICA DIGITAL (figura 2.10), de modo que este pulsador pueda emplearse para poner a 0 el contador de segundos en cualquier momento; • conectar a la salida del módulo contador decimal de segundos dos módulos decodificadores de BCD a 7 segmentos, creados en la sesión anterior, y asignar las salidas de los mismos a los pines correspondientes a los displays de 7 segmentos, como recoge la tabla 2.2. Una vez realizado lo anterior, se volverá a compilar el proyecto y con el fichero .sof generado se procederá a programar el dispositivo FLEX10K de la placa UP1 para la comprobación del funcionamiento del contador de segundos. 2.27 INGENIERIA DE TELECOMUNICACION ELECTRONICA DIGITAL 2.28 INGENIERIA DE TELECOMUNICACION ELECTRONICA DIGITAL SESIÓN 2.5: Introducción a VHDL Instrumental de laboratorio: • Software de diseño de sistemas digitales MAX+plus II • Placa de evaluación Altera Design Laboratory Packager UP1 y accesorios OBJETIVO En esta sesión se comprobará como es posible definir un sistema digital utilizando el lenguaje de descripción de hardware VHDL. 2.5.1. VHDL (Very high speed Hardware Description Language) VHDL (Very high speed Hardware Description Language) es un lenguaje de descripción de hardware, preferentemente de sistemas digitales, aunque también se han desarrollado recientemente variantes analógicas. Una de las mayores ventajas de VHDL es que permite diferentes niveles de abstracción en la descripción de un circuito, siendo posibles dos tipos extremos de descripción: • descripciones estructurales (structural): equivalen a los esquemáticos creados en sesiones anteriores, en los que se enumeran los componentes del circuito y sus interconexiones, siendo labor del diseñador el definir la estructura del circuito a partir del comportamiento deseado; • descripciones completamente comportamentales (behavioral): en éstas se describe simplemente el comportamiento o funcionamiento del circuito, siendo posteriormente el compilador el que determine la estructura final del mismo que corresponda a dicho comportamiento. De este modo, VHDL se asemeja a los lenguajes de programación de alto nivel (C, Java, etc.), en los que el programador/diseñador define en una serie de sentencias un determinado comportamiento, siendo el compilador el que determina finalmente la secuencia de instrucciones que se proporcionan a un microprocesador, en el caso de software, o el circuito que sintetiza dicho comportamiento, en el caso de hardware. 2.29 INGENIERIA DE TELECOMUNICACION ELECTRONICA DIGITAL La descripción de un circuito en VHDL ha de seguir unas ciertas pautas, que se ejemplifican a continuación: -- Electrónica Digital, Ing. Telecomunicación -- Ejemplo de VHDL -- Los comentarios se inician con “—-“ y alcanzan hasta el final de la línea LIBRARY ieee; USE ieee.std_logic_1164.ALL; USE ieee.std_logic_arith.ALL; ------------ -- En primer lugar se incluyen -- las librerías necesarias Cada fichero describe una entidad, que se indica con la palabra clave ENTITY y cuya declaración finaliza en END “nombre_entidad” La declaración incluyen dos partes: * GENERIC: declaración de constantes y parámetros de la entidad * PORT: lista de entradas y salidas de la entidad, indicando el tipo de cada una de ellas (pueden depender de los GENERIC) Entre los tipos básicos destacan * INTEGER: entero * STD_LOGIC: valor lógico estándar (bit) * STD_LOGIC_VECTOR: vector de valores lógicos, formado por bits muy útil en la definición de buses, etc. ENTITY ejemplo IS GENERIC ( ANCHO ); PORT ( in0 in1 output sel ); END ejemplo; : INTEGER := 16 : : : : IN IN OUT IN -- Ancho de palabra STD_LOGIC_VECTOR(ANCHO-1 downto 0); STD_LOGIC_VECTOR(ANCHO-1 downto 0); STD_LOGIC_VECTOR(ANCHO-1 downto 0); STD_LOGIC -- A cada entidad le corresponden una o varias arquitecturas (indicadas con la -- palabra clave ARCHITECTURE y delimitadas por BEGIN y -- END “nombre_arquitectura”) ARCHITECTURE circuito OF ejemplo IS -- Se pueden definir señales (SIGNAL) auxiliares, que básicamente -- corresponden a interconexiones en el circuito SIGNAL aux1 : STD_LOGIC_VECTOR(ANCHO-1 downto 0); SIGNAL aux2 : STD_LOGIC_VECTOR(ANCHO-1 downto 0); BEGIN ----- La arquitectura está formada por asignaciones en las que intervienen construcciones del tipo IF, FOR, WHILE, WHEN, etc., o por llamadas a otras entidades, como en este ejemplo para ilustrar un multiplexor de 2 a 1 para palabras de ANCHO bits aux1 <= in0 WHEN sel=’0’ ELSE in1; mux1 : multiplexor GENERIC MAP PORT MAP -- Asignación de señales -- Llamada a “multiplexor” ( WIDTHDATA => ANCHO, WIDTHSEL => 1 ) ( data_0 => in0, data_1 => in1, data_out => aux2 ); END circuito; 2.30 INGENIERIA DE TELECOMUNICACION ELECTRONICA DIGITAL Nótese que al crear un fichero de texto en MAX+plus II Manager (Text Editor File) y guardar éste con extensión .vhd (VHDL), el texto adquiere diferentes colores según la sintaxis. Por otra parte, a través del comando “Template − VHDL Template...”, MAX+plus II ofrece construcciones predefinidas de la mayoría de estructuras posibles en VHDL. Aparte de lo anteriormente expuesto, otra herramienta útil es el proceso. Un proceso en VHDL incluye una serie de sentencias que sólo “ocurren” cuando se produce un cambio en las señales que forman la lista de sensibilidad del proceso. El código siguiente ilustra el funcionamiento de un biestable tipo D: -- Electrónica Digital, Ing. Telecomunicación -- Ejemplo de proceso (biestable D) LIBRARY ieee; USE ieee.std_logic_1164.ALL; USE ieee.std_logic_arith.ALL; ENTITY biestableD IS PORT ( d : q : clk : ); END biestableD; IN OUT IN STD_LOGIC; STD_LOGIC; STD_LOGIC ARCHITECTURE proceso OF biestableD IS BEGIN proceso_biestableD : PROCESS (clk) BEGIN -- Lista de sensibilidad IF clk'event AND CLK='1' THEN q <= d; END IF; END PROCESS proceso_biestableD; -- Flanco de subida de clk -- La entrada D se copia en Q -- Fin del proceso END proceso; Figura 2.16: simulación de un biestable D definido en VHDL. 2.31 INGENIERIA DE TELECOMUNICACION ELECTRONICA DIGITAL La figura 2.16 muestra la simulación del código VHDL anterior, siendo evidente el funcionamiento de la entidad biestableD como un biestable de tipo D, siendo clk la entrada de reloj y d la entrada de datos. CUESTIONES 1. ¿Cómo describiría en VHDL un multiplexor de 2 a 1 para señales de un bit? Como indicación, use asignaciones entre señales con el operador <= y use los operadores lógicos AND, OR y NOT. 2. Compruebe, mediante simulación, el funcionamiento correcto de dicho multiplexor. 2.5.2. Máquina de estados finitos OBJETIVO Diseñar una máquina de estados finitos utilizando biestables D definidos en VHDL. PROCEDIMIENTO 2.5.2.1. Definición de un biestable tipo D con CLEAR asíncrono A partir del código anterior que recoge un biestable tipo D, habrá de definirse un nuevo biestable tipo D con una señal de CLEAR asíncrono activa en bajo. El procedimiento a seguir es: • crear un fichero de texto y guardarlo con extensión .vhd; copiar el código anterior en el que se define un biestable tipo D y modificarlo para añadir una entrada de CLEAR asíncrona activa en bajo, es decir, una señal que haga Q=0 en cualquier momento, independientemente de la señal de reloj y del valor de D. • crear un nuevo proyecto con dicho fichero, simular el biestable definido y comprobar el correcto funcionamiento del mismo; 2.32 INGENIERIA DE TELECOMUNICACION ELECTRONICA DIGITAL 1 A,00 0 1 C,10 1 0 B,01 0 Figura 2.15: diagrama de estados. • crear un símbolos para el nuevo biestable definido y guardar los ficheros .vhd y .sym para su uso posterior en la sesión. 2.5.2.2. Diseño de la máquina de estados Una vez que se ha definido el nuevo biestable tipo D y su símbolo correspondiente ha sido generado, éste se va a usar en el diseño de un sistema secuencial síncrono que sintetice la máquina de estados descrita en la figura 2.15: • el circuito cuenta con dos salidas que están asociadas al estado, de modo que en el estado A la salida es 00, en el estado B es 01 y en el estado C es 10; • el sistema ha de contar con una entrada de CLEAR asíncrono que devuelva el circuito al estado A. Una vez definida la estructura del circuito: • dibujar el circuito en un fichero .gdf, a partir de las primitivas de la librería c:\maxplus2\max2lib\prim; • simular el circuito y comprobar el correcto funcionamiento del mismo; 2.33 INGENIERIA DE TELECOMUNICACION ELECTRONICA DIGITAL • crear el símbolo correspondiente y guardar los ficheros .gdf y .sym para su uso posterior en la sesión. 2.3.2.2. Implementación con FPGA Tras la creación del módulo anterior que sintetiza la máquina de estados de la figura 2.15, se procederá a crear un nuevo proyecto para el dispositivo de la familia FLEX10K de la placa UP1, proyecto en el que se incluirán los siguientes módulos: • el módulo diseñado en la sesión 2.4 que genera un reloj de 1 Hz a partir del reloj de 25.175 MHz disponible en la placa UP1, a fin de comprobar en una escala de tiempos razonable el funcionamiento de la máquina de estados; de este modo, la entrada de este módulo habrá de asignarse al pin 91, en el que se halla disponible la señal de reloj de 25.175 MHz, y su salida se usará como reloj para el módulo definido anteriormente que realiza la máquina de estados; • el módulo definido anteriormente que realiza la máquina de estados, tomando como entrada de reloj la salida del módulo para generar un reloj de 1 Hz y asignando la entrada de la máquina de estados al pin 41 del dispositivo, que está conectado al conmutador FLEX_SWITCH-1, como indica la tabla 2.1, y la entrada de CLEAR asíncrono al pin 33 que corresponde al conmutador FLEX_SWITCH-3; • el módulo decodificador de BCD a 7 segmentos usado ya en diferentes ocasiones, que se empleará para visualizar la salida (y por tanto, el estado) de la máquina de estados en uno de los displays de 7 segmentos disponibles; por tanto, la salida de la máquina de estados se usará como entrada de este módulo, y sus salidas habrán de conectarse según la asignación de pines de la tabla 2.2. Una vez realizado lo anterior, se compilará este nuevo proyecto y con el fichero .sof generado se procederá a programar el dispositivo FLEX10K de la placa UP1 para la comprobación del funcionamiento de la máquina de estados, usando como entradas los conmutadores FLEX_SWITCH asignados en la compilación y visualizando su salida en el display de 7 segmentos. 2.34