INSTITUTO DE ELECTRÓNICA Y COMPUTACIÓN “SISTEMAS DIGITALES” Tutorial para el Diseño y Simulación de un circuito digital con VHDL, Síntesis e Implementación en un FPGA Profesor: M. C. Felipe Santiago Espinosa – MC Jacob J. Vásquez Sanjuan Septiembre de 2009 Sistemas Digitales UTM/2010-1 Introducción En este documento se presentan de manera detallada los pasos a seguir desde el planteamiento de un circuito digital hasta su puesta en marcha y verificación en una tarjeta de desarrollo Nexys 2 de Digilent, la cual contiene un FPGA Spartan 3E XC3S500E de Xilinx. El ejemplo que se desarrolla es bastante simple porque el objetivo del tutorial es ilustrar el proceso y no resolver un problema complejo. Las herramientas de Software que se utilizan durante el tutorial son: ISE 8.2i de Xilinx: En realidad es un ambiente integrado de desarrollo desde el que se invocan diferentes herramientas, conforme se van requiriendo. Se utilizará para la síntesis, implementación y creación del archivo de descarga. También puede utilizarse para programar al FPGA si se emplea una interfaz conocida como JTAG. Adept de Digilent: Es una utilería que permite programar a los FPGAs en algunas tarjetas desarrolladas por Digilent, a través del puerto USB. 1. Planteamiento del problema Se desea diseñar e implementar un comparador de 4 bits. Se tienen las entradas A y B, y tres salidas: mayor, igual y menor. Ejercicio: Diseñe empleando VHDL, el circuito indicado. 4 bits A> B A A= B 4 bits Después de implementación. realizar B el A< B código y simularlo, se procede a la 2. Síntesis La síntesis se va a realizar con las herramientas de Xilinx desde un Ambiente Integrado de Software (Integrated Software Environment – ISE) el cual se inicia con un doble click en el ícono siguiente: 2 Sistemas Digitales UTM/2010-1 Al iniciar este programa se mostrará el Tip del Día y luego se abrirá el último proyecto en el que se haya trabajado (excepto cuando es la primera vez que se ejecuta al software). Para este tutorial se iniciará con un nuevo proyecto, seleccionando la opción New Project en el menú File, con esto se obtendrá el cuadro de diálogo similar al siguiente: Primero debe seleccionarse la ubicación del proyecto en disco y luego asignársele un nombre. Esto para que el proyecto quede ubicado en una carpeta con el mismo nombre. En este caso, el proyecto se ubicará en la carpeta D:\Practicas y llevará por nombre comparador. Para el tipo de módulo superior (Top-Level Source) se mantiene HDL por que se desarrollará un archivo en VHDL para el comparador. Una vez que se introduzcan estos datos se procede con el paso siguiente. En el cual se definen las propiedades del proyecto relacionadas con el FPGA en el 3 Sistemas Digitales UTM/2010-1 que se va a realizar la descarga, por lo que es necesario seleccionar los valores correctos. Los valores seleccionados corresponden al FPGA que está integrado en las tarjetas de desarrollo Nexys 2. En el paso siguiente es posible iniciar con nuevos archivos. En este caso se avanza al siguiente paso, dado que el archivo a sintetizar ya fue creado con el Active-HDL. Precisamente el siguiente paso es para agregar archivos existentes: 4 Sistemas Digitales UTM/2010-1 Presionando el botón Add_Source se abrirá una ventana de navegación en la que deberá buscarse al archivo comp4b.vhd, el cual se encuentra en la ruta: my_designs -> tutorial -> comparador -> src, esto porque el Active-HDL trabaja en la carpeta denominada my_designs, el espacio de trabajo se denominó tutorial, en el cual se inició con un diseño denominado comparador, y todos los diseños dejan los archivos del código fuente en una carpeta denominada src. Dado que solo se agregará un módulo al proyecto, se continúa con el paso siguiente. Es conveniente dejar marcada la casilla que crea una copia del archivo en el proyecto, para conservar el archivo original sin modificaciones. En el paso siguiente se muestra un resumen con la información del proyecto: el nombre, el dispositivo y los archivos incluidos. Si todo está bien se finaliza con la creación del proyecto (Botón Finalizar). 5 Sistemas Digitales UTM/2010-1 Aparecerá un cuadro de diálogo en el que se define el uso que se le dará al archivo agregado, en este caso se conservan los parámetros de default que indican que el archivo puede ser usado para síntesis, implementación y simulación. Al presionar OK se presenta el entorno de desarrollo de Xilinx, en el que se distinguen cuatro áreas, el área 1 es el área de archivos, se muestran los diferentes archivos fuente que integran al proyecto, a manera de un árbol. Si el proyecto estuviera formado por varios módulos, en este árbol los módulos se ubicarían de acuerdo a sus niveles jerárquicos. 6 Sistemas Digitales 1 UTM/2010-1 2 3 4 El área 2 es el espacio de trabajo, acá serán abiertos los diferentes archivos fuente o reportes que se generen. Inicialmente se muestra un resumen del diseño. Para abrir un archivo basta con darle un doble click a su nombre en el área 1, al hacerlo sobre Comp4b.vhd se obtiene: 7 Sistemas Digitales UTM/2010-1 El área 3 es el área de procesos, acá aparecerá una lista de los procesos aplicables al archivo seleccionado, esta lista puede cambiar, de acuerdo con el tipo de archivo. El área 4 muestra una consola con mensajes indicando las diferentes actividades que se están realizando. Además, existen otras cejas para mostrar errores o precauciones. Con el archivo comp4b.vhd seleccionado se realiza su síntesis. Para ello, en el área de procesos se da un doble click al proceso de síntesis, si no hay errores de sintaxis, en el proceso de síntesis aparecerá la indicación de que se realizó con éxito y la consola reflejará el mismo hecho. En caso de que hubiera errores, el proceso de síntesis no será superado: Y el posible error se mostrará en el espacio de la consola, específicamente en la ceja de errores, también se observa la posición del error. 8 Sistemas Digitales UTM/2010-1 Se esperaría que no ocurrieran errores, dado que el módulo fue evaluado con el Active-HDL, sin embargo, si se realizó algún ajuste en el código VHDL que generó errores, éstos deben resolverse considerando la sintaxis del lenguaje. 3. Acondicionamiento para la implementación. Como pudo observarse en los diagramas anteriores, el código VHDL ha sido sintetizado satisfactoriamente en hardware, ahora habrá que tomar algunas consideraciones para poder llevar a cabo su implementación. El circuito será descargado en un FPGA XC3S500 de Xilinx, el cual está en una tarjeta Nexys 2 de Digilent, que se muestra a continuación: Digilent es la empresa que manufactura estas tarjetas de desarrollo y su manual de referencia puede obtenerse de su sitio web: www.digilentinc.com. Se observa que la tarjeta tiene diferentes elementos para entrada/salida o almacenamiento de datos. Para la implementación del comparador, es de esperarse que las entradas A y B se obtengan de los interruptores, y las salidas: Mayor, Menor e Igual, se muestren en los LEDs. Por lo tanto, se requiere conocer a que terminales del FPGA están conectados estos elementos. En la figura siguiente se muestra la organización de las terminales en el FPGA, se observa una disposición matricial organizada en 4 bancos. Para referirse a una terminal, debe indicarse el renglón (A-V) y la columna (1-18). 9 Sistemas Digitales UTM/2010-1 En la figura siguiente se muestra a que terminales del FPGA están conectados los dispositivos básicos de entrada/salida. Para la asignación de terminales, es necesario agregar un archivo de restricciones (archivo con extensión UCF), para ello, en cualquier parte del área de archivos se debe dar un click derecho y en el menú contextual seleccionar la opción New Source. 10 Sistemas Digitales UTM/2010-1 Dentro de los diferentes tipos de archivo que pueden insertarse seleccionar Implementation Constraints File y asignarle un nombre. Al avanzar se debe seleccionar el módulo con el cual se asignarán las restricciones, en este caso sólo se tiene un módulo en el diseño, si hubiera más módulos habría que seleccionar al de mayor jerarquía. Luego solo se muestra información sobre este nuevo archivo y se finaliza. 11 Sistemas Digitales UTM/2010-1 Con esto aparece el archivo de restricciones, en el área de archivos. Para modificarlo, habrá que seleccionarlo en el área de archivos y con ello, en el área de procesos se mostrarán aquellos que sean aplicables al archivo. Se debe dar un doble click al proceso Assing Pakage Pins, con lo cual se abre una ventana con la aplicación Xilinx PACE en la cual se desarrollará la asignación de terminales. 12 Sistemas Digitales UTM/2010-1 En esta aplicación, en su navegador se debe seleccionar la opción I/O Pins, con esto en la lista de objetos del diseño se mostrará la lista de las terminales de entrada/salida, en la columna Loc se escriben las terminales correspondientes al FPGA, buscando relacionar las entradas A y B con los interruptores y las salidas con 3 de los 8 LEDs disponibles. Se salva el archivo con los parámetros propuestos y se cierra la aplicación. Regresando al entorno del ISE, si en los procesos aplicables al archivo de restricciones se da un doble click a Edit Constrains (text), en el área de trabajo se mostrará el contenido del archivo en simple texto, en donde se notará que para cada terminal se tiene el siguiente enunciado: NET “nombre de la señal” LOC = “terminal” ; donde NET y LOC son palabras reservadas. El contenido del archivo es: 13 Sistemas Digitales UTM/2010-1 Se observa que el símbolo # es para insertar comentarios en los archivos de restricciones. Notas: 1. El archivo con restricciones (UCF) puede realizarse editando la versión de texto en la herramienta de Xilinx o con cualquier otro editor de textos. Si se opta por la última alternativa, después del click derecho habría que seleccionar la opción “Add Source”, en lugar de “New Source”, buscar al archivo y asociarlo con el que le corresponda de los módulos VHDL. 2. Existen otros tipos de restricciones, de área o temporización, pero éstas requieren definiciones que son mucho más complejas. 4. Implementación. La implementación es un proceso que involucra varios pasos: Trasladar el diseño (Traslate), mapearlo (Map) y su colocación y ruteo (Place & Route). Sin embargo esto lo realiza la herramienta de manera automática. Para ello es necesario seleccionar el archivo comp4b en el área de archivos, con ello se abrirán los procesos aplicables al archivo, en ellos se debe buscar la lista de procesos Implement Design y darle un doble click para ejecutarlos. En la figura anterior se observa que todos los procesos de implementación se han realizado con éxito. En el resumen del proyecto (que se muestra en el área de trabajo) se pueden ver los recursos que está usando el diseño dentro del FPGA: 5. Generación del archivo de configuración Dentro de los procesos asociados al diseño (los cuales se obtienen al seleccionarlo), se encuentra el grupo de procesos Generate Programming File ubicado después de los procesos de implementación. 14 Sistemas Digitales UTM/2010-1 Antes de ejecutar este proceso es necesario definir uno de sus parámetros, para ello habrá que darle un click derecho y seleccionar la opción propiedades en el menú contextual, Con ello se abrirá una ventana similar a: En las opciones que se presentan en la columna de categorías seleccionar Startup Options y cambiar el valor de la propiedad FPGA Start-Up Clock para que tenga: JTAG Clock. 15 Sistemas Digitales UTM/2010-1 Después del cambio debe presionarse el botón Aceptar. Este cambio es necesario para la programación del FPGA, la cual se hará mediante un puerto conocido como JTAG y por lo tanto se requiere que de ahí llegue la señal de reloj. Una vez hecho esto es posible ejecutar el proceso Generate Programming File aplicándole un doble click. Se abrirá un cuadro de diálogo en el que se puede habilitar el envío de información a Xilinx, para sus estadísticas, se sugiere declinar para evitar el flujo de información. Si el proceso se realiza con éxito, esto se indicará en el estado del mismo: 6. Programación del dispositivo La tarjeta puede programarse desde dos diferentes puertos, el puerto JTAG o un puerto mini-USB, el programa puede enviarse directamente al FPGA o a una FLAH, para que el FPGA cargue el programa automáticamente, después de que es alimentada la tarjeta. En la figura siguiente se observa como en realidad es sólo por el puerto JTAG por el que se tiene acceso al FPGA y a la Flash. La salida del manejador USB va dirigida hacia el puerto JTAG. 16 Sistemas Digitales UTM/2010-1 El cable JTAG es similar al de la figura siguiente, si se utiliza este medio, debe ejecutarse el proceso Configure Device (iMPACT). En este caso se utilizará un cable USB, para ello se utilizará una suite de descarga denominada Adept, proporcionada por Digilent. De los diferentes programas incluidos en la suite se selecciona el programa ExPort, al ejecutarlo se muestra la ventana: En este momento ya se puede energizar la tarjeta y conectar el cable USB. 17 Sistemas Digitales UTM/2010-1 En la tarjeta hay que verificar que el conector de Modo está en JTAG, en lugar de ROM, si el conector de Modo estuviera en ROM, cargaría al FPGA desde la memoria Flash y no permitiría su programación desde el puerto JTAG. La ROM contiene un programa de demostración que se utilizará para verificar la funcionalidad de la tarjeta, por lo que no debe ser modificado. En el programa ExPort se agrega al archivo del comparador (con Add File), navegando hasta encontrar al archivo con extensión .bit. Con la tarjeta alimentada, conectada a la PC y encendida, se debe presionar el botón initialize Chain, con el cual se inicializa la comunicación entre la PC y la tarjeta mostrando los dispositivos programables detectados. 18 Sistemas Digitales UTM/2010-1 Para el FPGA se agrega al archivo .bit y la ROM se marca para que se ignorada en la descarga. La programación se realiza presionando el botón Program Chain, mientras se ejecuta se muestra una barra con el avance: Al finalizar se muestra una ventana indicando el éxito en la programación. Después de la programación, el programa Digilent Export puede cerrarse así como también el ISE. El cable USB puede retirarse. 19 Sistemas Digitales UTM/2010-1 El diseño puede evaluarse modificando las entradas desde los interruptores para observar las salidas en los LEDs. Cabe aclarar que los recursos programables en el FPGA están basados en tecnología RAM, por lo que si se retira la alimentación, el programa se perderá. Para evitar esto, el programa podría almacenarse en la memoria FLASH, pero es preferible que el programa de demostración se conserve, para garantizar que la tarjeta funciona en el momento en que se solicita en el laboratorio. 7. Conclusión Se ha revisado de manera detallada el proceso a seguir para implementar sistemas digitales en FPGAs con ayuda de VHDL, para otro tipo de tarjetas u otro tipo de FPGAs solo debe hacerse la selección adecuada. Se utilizaron 2 herramientas principales durante el proceso, y pudo observarse que la simulación de un diseño con el Active-HDL es mucho más didáctica que la simulación en el mismo entorno de Xilinx. Si no se tiene éxito en la programación, las causas pueden ser diversas: La tarjeta puede estar desconectada Se seleccionó un FPGA que no corresponde con el de la tarjeta El empaque seleccionado no es el empaque del FPGA El puerto o el cable USB no funcionan correctamente El FPGA no funciona correctamente 20