Story Transcript
LABORATORIO DE TECNOLOGÍA DE COMPUTADORES PRÁCTICA 7 Objetivo: Diseño e implementación de un cronómetro digital usando la herramienta de diseño Xilinx Foundation. El diseño se realizará con captura de esquemáticos y será necesario realizar su simulación funcional antes de proceder a su implementación. Visualización de la salida en 3 displays 7-segmentos (minutos, segundos y décimas de segundos).
rst reloj Divisor de frecuencias
Reloj de m:s:ds
Conversores binario7segmentos
Figura 1 Desarrollo Se diseñará un reloj que muestre minutos (hasta 9), segundos y décimas de segundos en los 3 displays 7-segmentos de la placa. Para esta práctica supondremos que un minuto corresponde a 10 segundos. Se necesitarán tres contadores, cuyas salidas se deberán convertir a código 7 segmentos, y serán las salidas de los 3 conversores 7 segmentos las salidas físicas de nuestro circuito. El sistema tiene 2 entradas. La entrada rst es una entrada de reset, de modo que si rst = 1 la salida de los contadores será 0 (y por tanto la salida del circuito). La señal de reloj estará conectada al reloj de la placa que funciona a 12MHz (pin 13 de la FPGA). Está señal será necesario pasarla por un divisor de frecuencias para obtener una señal de reloj de frecuencia más baja, por ejemplo, 10 Hz. Ayuda: 1º Esquemático: Contadores Se trata de contadores mod-10, que deben recibir la señal de reset y un reloj, que en el diseño final será la salida del divisor de frecuencias. También deben tener una señal de capacitación, que permita contar o no. La salida será un número binario de 4 bits (del 0 al 9) y un fin de cuenta. Se puede diseñar el circuito usando contadores módulo 16 (por ejemplo el CB4RE tiene capacitación y Reset). En el diseño final usaremos tres contadores: uno para las décimas de segundo, otro para los segundos y otro para los minutos. Los tres contadores se concatenan, de forma que cuando las décimas de segundo lleguen a 10 se incrementen los segundos y así sucesivamente
Realizamos el esquemático de un contador, lo simulamos y cuando funcione correctamente generamos a partir de él un símbolo, que utilizaremos en el diseño final. 2º Esquemático: Conversor binario a 7-segmentos Cada conversor constará de 4 terminales de entrada y 7 terminales de salida. Aunque los tres conversores son idénticos, existe una diferencia entre los displays 7segmentos de la placa inferior y los de la superior. Los primeros son activos a baja (un ‘0’ enciende el segmento) mientras que el de la parte superior es activo a alta (un ‘1’ enciende el segmento). Por tanto, para la correcta visualización de la salida es necesario colocar inversores a la salida de los conversores que van a los displays 7-segmentos de la placa inferior. De nuevo, realizamos el esquemático, lo simulamos y cuando funcione correctamente generamos a partir de él un símbolo. 3º módulo: Divisor de frecuencias Se os proporcionará el código del divisor de frecuencias en VHDL y vosotros tendréis que añadir este fichero a vuestro proyecto (Document-Add), abrirlo y crear a partir de él un símbolo. Para crear un símbolo a partir de un fichero en VHDL, simplemente pulsar la opción Create a macro del menú Project dentro del editor de HDL. El módulo tendrá 2 entradas de 1 bit (reset y reloj externo, a 12MHz) y 1 salida, el fin de cuenta que usaréis como reloj en vuestros contadores, a 10 Hz. 4º esquemático: Circuito completo Realizamos el diseño del circuito tal y como aparece en la figura 1. El circuito tendrá 2 entradas de 1 bit (reloj del oscilador y reset) y 3 salidas de 7 bits que conectamos a un terminal bus. En este último esquemático debemos incluir los IBUF y los OBUF, para que se conecten a las entradas/salidas físicas de la FPGA. Implementación Necesitaremos 1 switch para controlar la entrada de rst (p. e., P7 que es el puerto asociado al switch 1). La señal de reloj se conectará al reloj de la placa (P13). Por último necesitaremos 3 displays 7 segmentos para visualizar las salidas. A continuación se muestran los puertos asociados a cada display (en el formato que debéis incluir en el fichero *.ucf) considerando que la numeración de los leds del 7-segmentos es la siguiente: 0 ---5 |
| 1 ←6
---4 |
| 2 ---3
Display 7-segmentos de la parte izquierda de la placa extendida: net displayiLOC=P83; net displayiLOC=P79; net displayiLOC=P4; net displayiLOC=P3; net displayiLOC=P5; net displayiLOC=P82; NET displayiLOC=P78; Display 7-segmentos de la parte derecha de la placa extendida: net displayd loc=P60 net displayd loc=p50; net displayd loc=p57; net displayd loc=p59; net displayd loc=p51; net displayd loc=p58; net displayd loc=p56; Display 7-segmentos de la placa superior net display loc=p19; net display loc=p23; net display loc=p26; net display loc=p25; net display loc=p24; net display loc=p18; net display loc=p20; Proceso de diseño con FPGAs 1º Entrada de esquemáticos: Lo primero que hay que hacer es generar un nuevo proyecto, y para eso hay que seguir los siguientes pasos: • Pulsar en Foundation Project Manager • Seleccionar New Project • En la ventana que aparece hay que seleccionar las FPGAs XC4000XL, en particular la 4010XLPC84 con speed 3 y el tipo Schematic • Pulsar OK Si la entrada del diseño va a ser mediante esquemáticos hay que seleccionar en el menú: Tools→ Design Entry→ Schematic Editor
o bien pulsar con el botón izquierdo del ratón en el símbolo , que se encuentra en la parte derecha del recuadro Design Entry que se muestra en la figura 2.
Figura 2 Con ello nos introducimos en la ventana en la que podremos realizar el diseño de nuestro esquemático. Para añadir elementos al diseño se selecciona en el menú principal: Model→ Symbols de la barra de herramientas de la izquierda. o bien el símbolo Aparecerá una ventana de símbolos donde se deben seleccionar las puertas y módulos necesarios. Para añadir los pines de entradas y salidas seleccionar en la esquina superior izquierda de la ventana de símbolos. Es necesario añadir buffers entre los pines y las puertas lógicas EN AQUELLAS SEÑALES QUE SE QUIERAN CONECTAR A E/S FÍSICAS DE LA FPGA. Los nombres de estos buffers son IBUF y OBUF. Una vez terminado el diseño hay que salvar el esquemático: File→ Save A continuación, se debe generar la netlist mediante: Options→ Create Netlist Options→ Integraty Test Este último paso permite chequear los errores de la netlist en la pantalla del flujo de diseño (la del Project Manager). A continuación es necesario exportar la netlist para que puedan usarla otras herramientas (entre ellas el simulador). Para ello seleccionar: Options→ Export Netlist y en la ventana que aparece seleccionar Edif200{*.edn} Una vez realizados todos los pasos de generación del esquemático, para salir de la ventana pulsar: File→ Exit Por último, si el esquemático no aparece en la lista de elementos del proyecto (parte izquierda del Project Manager) es necesario añadir el esquemático al proyecto. Para ello pulsar: Document→ Add y seleccionar el fichero correspondiente. 2º Simulación Funcional:
1. De nuevo en el Project Manager pulsar el botón simulación en la ventana de flujo de diseño. 2. En la ventana de simulación, añadir las señales que se deseen visualizar mediante Signal → Add signal y a continuación seleccionar las señales y pulsar
Add Para cerrar la ventana de selección de señales pulsar Close. 3. Aplicar los estímulos al circuito. A las señales se les puede asignar un valor constante o un valor que cambia en cada ciclo de simulación (una señal cuadrada, por ejemplo). Para asignar un valor constante pulsar en el símbolo . Para asignar un valor que va cambiando pulsar en . Una vez terminado pulsar Close. Las salidas pueden visualizarse como buses. Para ello seleccionar los 4 bits de cada salida, y pulsar en: Signal → Bus → Combine Si queremos verlas individualmente pulsar en: Signal → Bus → Flatten Si los resultados no son los correctos, puede ser que las direcciones de los buses no sean las correctas. En este caso, por ejemplo, veríais en vez de un 1 un 8, porque estaría considerando el bit menos significativo como el más significativo. Para darle la vuelta pulsar en: Signal → Bus → Change Direction 4. Simular. Como en este caso estamos realizando una simulación funcional, ya que el diseño no ha sido todavía implementado, tiene que aparecer la opción functional seleccionada en la ventana principal. Cada paso de simulación se produce pulsando el botón que se encuentra a la derecha del ON. Cada vez que se pulsa esta tecla se produce un paso de simulación, y hay que pulsarla tantas veces como sea necesario para comprobar el funcionamiento del reloj (al menos 60). 5. Para salvar la simulación hay que pulsar en: File→ Save Simulation State 3º Implementación del diseño lógico: Antes de implementar el diseño hay que asociar cada E/S de nuestro diseño con un pin concreto de la FPGA, de tal forma que la entrada de reset quede conectada a un switch de la placa, el reloj a la salida del oscilador, y la salida del circuito a los 3 displays 7-segmentos. Hay dos formas para asignar a cada E/S un pin: 1. En el propio esquemático, pulsando dos veces en los IBUF o en los OBUF, aparece la ventana de atributos. Añadir un nuevo atributo llamado LOC y asignar un pin correspondiente (por ejemplo p69 para S). 2. En un fichero *.ucf. El formato de las asignaciones es: NET nombre_del_pin LOC=pnº; Para cada asignación de E/S a pin es necesario colocar una línea. Por ejemplo, en nuestro caso, donde vamos a utilizar: a.- Los switches para introducir los datos NET RST LOC=P7; // switch 1 b.- La entrada de reloj de la FPGA. NET reloj LOC=P13; //Entrada de reloj c.- Las salida por el display de 7 segmentos NET M LOC=P56; // Salida display 7 segmentos
Una vez generadas todas las restricciones, bien mediante la opción 1 –colocando atributos LOC en los IBUF y OBUF- o bien mediante la opción 2 –generando un fichero *.ucf-, pasamos a la generación del mapa de bits, es decir, a la implementación. Para generar el mapa de bits a partir de la netlist pulsar en: Implementation en la ventana del flujo de diseño. Aparece una ventana que nos permite seleccionar un fichero de restricciones si es necesario (por ejemplo, en el caso de haber utilizado la segunda opción para asignar pines de E/S del diseño). Si se desea añadir dicho fichero hay que pulsar en: SET y en la nueva ventana en la opción Use Constraints File From elegir Custom. Se abrirá una nueva ventana en la que se selecciona el fichero de restricciones *.ucf. Por defecto siempre se lee un fichero con el nombre del proyecto y la extensión *.ucf. Una vez dado el fichero de restricciones pulsar en OK. Para implementar hay que pulsar en Run Todos los pasos de la implementación se realizan automáticamente: Translate: se compila la netlist a un formato propio. Map: se realizan optimizaciones para minimizar el número de puertas. Place&Route: se asignan las puertas a CLBs. Timing: se computan los retardos de los CLBs y los PSMs. Configure: se genera el mapa de bits. 4º Descarga del diseño en la placa XS40: Desde una ventana MSDos se utiliza el comando XSLOAD nombre_fich.bit Una vez volcado el mapa de bits, colocar una configuración en los switches de entrada, pulsar el botón de reset y comprobar que el resultado de la multiplicación aparece en los leds.