GUÍA PARA PROGRAMACIÓN DE FPGAS Joaquín Olivares, Gustavo Minnucci, C. Diego Moreno, Fco. Javier Quiles, J. Ignacio Benavides Escuela Politécnica Superior de la Universidad de Córdoba olivares@uco.es 1. RESUMEN Se ha realizado un manual de prácticas para alumnos de segundo ciclo de Ingeniero en Automática y Electrónica Industrial para la asignatura de Sistemas Electrónicos Digitales, con el objeto de facilitar y servir de orientación en el proceso de programación bajo el Lenguaje de Descripción Hardware VHDL, de simulación y síntesis de circuitos digitales sobre FPGAs, para ello se mostrarán aspectos relevantes como la estructura de una FPGA y las características relevantes de VHDL y del entorno de Xilinx. 2. INTRODUCCIÓN Si pensamos en la complejidad que ya de por si conllevan el diseño, la programación y la simulación en el proceso del Diseño Digital, sumado a la complejidad, ya no sólo para realizar el proceso de síntesis sobre un dispositivo sino también para comprender y utilizar las herramientas existentes para síntesis, que presentan áridos y extensos libros de soporte, es comprensible que frecuentemente no se cubran los aspectos referentes a la síntesis e implementación práctica en las asignaturas troncales referentes a esta materia, por carestía de tiempo. El presente manual de prácticas se constituye en una guía precisa que contempla los diversos procesos necesarios para el diseño, programación e implementación de circuitos digitales en estos dispositivos. En especial explotaremos las posibilidades de la FPGA Xilinx XC4005-XL y de todos sus componentes, mostrando ejemplos completos y proponiendo ejercicios en los que el alumno podrá dar utilidad a circuitos digitales genéricos para aplicaciones particulares. La idea del proyecto es que el alumno culmine el proceso de diseño, programación y simulación de los circuitos digitales con el proceso de utilización de herramientas de síntesis, la implementación y por último la verificación de un dispositivo real sin necesitar demasiado tiempo para familiarizarse con los complejos entornos de síntesis. 3. CARACTERÍSTICAS DEL LENGUAJE DE DESCRIPCIÓN HARDWARE VHDL En este apartado se da una introducción y revisión de las principales características y limitaciones del lenguaje. Los puntos principales incluidos en el manual se presentan a continuación, algunos de los cuales comentados: [2] [3] 3.1. Estándar del lenguaje IEEE std1076-1993.
3.2. Concurrencia El comportamiento de un sistema Digital viene dado en función de sus componentes y de la interconexión física de los mismos, por tanto, este lenguaje debe permitir simular dichos componentes y las conexiones entre los mismos, apareciendo los conceptos de entidad, arquitectura y señal. w<= not a; x <= a and b; y <= c and w; z <= x or y; Tabla 1. a) Diseño VHDL b) Instrucciones VHDL En la tabla 1 se muestra un circuito y su representación concurrente en lenguaje VHDL. 3.3. Secuencialidad Para procesos complejos que la mente humana no es capaz de discurrir concurrentemente, podemos crear bloques que se evalúen secuencialmente, aparecen los conceptos de process y variable. 3.4. Modularidad Podemos crear componentes con una funcionalidad y parámetros definidos que pueden ser reutilizados en posteriores diseños. 3.5. Limitaciones El lenguaje proporciona una funcionalidad amplia, dado que es un lenguaje compatible entre diferentes herramientas de CAD y portable entre distintos Dispositivos Electrónicos programables, por tanto no todas las operaciones que permita un simulador de VHDL son implementables en todas las herramientas CAD ni en todos los Dispositivos. 3.6. Otras características relevantes También se afrontan otros aspectos como la estructura sintáctica, tipo de los datos, jerarquía, compatibilidad, portabilidad, documentación, temporización, COREs, etc. 4. DISPOSITIVOS DE LÓGICA PROGRAMABLE PLA, GAL, PAL, CPLD, FPGA. El uso de dispositivos lógicos programables se ha difundido entre los diseñadores de hardware debido a las múltiples ventajas que estos poseen,
algunas de ellas son que permiten reemplazar a gran cantidad de componentes discretos, admiten reprogramación y permiten un diseño relativamente simple, en la figura 1 se muestra la estructura general de un dispositivo de lógica programable. [1] Entradas Salidas In 0 In 1 In 2 In n Función de entrada Matriz AND Matriz OR Función de salida Q 0 Q 1 Q 2 Q p Realimentación Estructura básica Figura 1. Estructura general de un PLD 4.1. FPGA (Field Programmable Gate Array) Las FPGA son Matrices de Puertas Programables en Campo. Simplemente son matrices de puertas eléctricamente programables que contienen múltiples niveles de lógica. Las FPGA se caracterizan por altas densidades de puerta, alto rendimiento, un número grande de entradas y salidas definibles por el usuario, un esquema de interconexión flexible, y un entorno de diseño similar al de matriz de puertas. No están limitadas a la típica matriz AND-OR. Por contra, contienen una matriz interna configurable de relojes lógicos (CLBs) y un anillo de circunvalación de bloques de entrada/salida (IOBs). Cada CLB contiene lógica programable combinacional y registros de almacenamiento. La sección de lógica combinacional es capaz de implementar cualquier función booleana de sus variables de entrada. Cada IOB puede programarse independientemente para ser una entrada, y salida con control tri-estado o un pin bidireccional. También contiene flip-flops que pueden usarse como buffers de entrada y salida. Los recursos de interconexión son una red de líneas que corren horizontalmente y verticalmente las filas y columnas entre el CLBS. Los interruptores programables conectan las entradas y salidas de IOBS y CLBS a líneas cercanas. Las líneas largas recorren la anchura o longitud entera del dispositivo, estableciendo intercambios para proporcionar una distribución de señales críticas con la mínima demora o distorsión. Los diseñadores que usan FPGAs pueden definir funciones lógicas en un circuito y revisar estas funciones como sea necesario. Así, las FPGAs pueden diseñarse y verificarse en unos días, a diferencia de las varias semanas necesarias para las matrices de puerta programables.
4.2. Estructura de una FPGA En realidad, la estructura interna, ver figura 2, de una FPGA depende de su tipo y fabricante. En este apartado se intenta mostrar un esquema genérico para las FPGA s a utilizar en las prácticas sucesivas. Los datos provistos por el fabricante son una herramienta insustituible a la hora de evaluar la arquitectura interna del dispositivo y su funcionamiento, por lo que resulta conveniente su lectura. [8] A continuación, se verán algunas características de la familia Xilinx XC4000, las cuales presentan tres tipos de componentes diferenciados en su interior: CLB, IOB y red de Interconexión. Figura 2. Estructura interna de una FPGA 4.2.1. CLB (Bloques lógicos configurables) Los CLB son los ladrillos básicos de la FPGA. Se encuentran distribuidos uniformemente por toda el área de la misma y son idénticos entre sí. Dependiendo del tipo de FPGA, ver figura 3, estos bloques lógicos poseen distintos componentes. Los CLBs son configurables, estableciéndose en ellos las conexiones y funciones que se implementarán. Figura 3. Estructura interna de un CLB de una FPGA de la familia XC4000 de Xilinx
4.2.2. IOB (bloques de entrada/salida) Los IOB son una especie de CLB especializado, que se encuentran junto a los pines de conexión externa al chip. En la figura 4 se muestra la estructura interna de un IOB. Su función es interconectar la lógica interna con el exterior permitiendo definir distintas características eléctricas como: ser dirección de datos del pin (Entrada / Salida), Configuración en estado de reposo (Pull Down / Pull Up), tipo de IO (combinacional o registrada), etc. Figura 4. Estructura interna de un IOB de una FPGA de la familia XC4000 de Xilinx 4.2.3. Red de Interconexión La Red de Interconexión, mostrada en la figura 5, es un conjunto de caminos formados por Wires (líneas de conexión) y PSM (Programmable Switch Matrix o matrices de interconexión - magic boxes). Éstas últimas permiten la conexión de distintos Bloques Lógicos Programables (CLB's) entre sí y/o la conexión con Bloques de Entrada/Salida (IOB's). Figura 5. Estructura interna de la Red de Interconexión de una FPGA de la familia XC4000 de XIlinx Todas las funciones lógicas, multiplexores, decodificadores, biestables, memorias, etc, se implementan utilizando los componentes internos de los CLB's. Cuanto mayor es el circuito a diseñar, mayor será la cantidad de CLB's necesaria para implementarlo. El funcionamiento de los distintos IOBs, CLBs y Redes de Interconexión queda determinado por un Bitstream ( ó tira de bits) de configuración que son cargados después del reset del dispositivo. Este Bit-Stream es el que determina el funcionamiento del dispositivo y otorga al mismo la característica de Dispositivo Reconfigurable.
5. LAS HERRAMIENTAS DE DISEÑO, COMPILACIÓN Y SIMULACIÓN Para programar una FPGA de la familia Xilinx XC4000 en nuestro caso, vamos a necesitar una serie de herramientas sobre las cuales se ofrece un manual al alumno. Las herramientas mostradas se enumeran a continuación: [4] [5] [7] 5.1. Xilinx Foundation 2.1i Entorno integrado de desarrollo para la generación, compilación y depuración de programas VHDL y esquemáticos, en la figura 6 se muestra la interfaz de usuario. Esta herramienta incluye un simulador que evalúa tanto consideraciones de índole funcionales como temporales. Permite manejar proyectos, compilar componentes para Figura 6. Entorno de programación Xilinx Foundation 2.1i librerías y generar archivos binarios de configuración para programación de diferentes FPGAs de la familia Xilinx. 5.2. Utilidades XESS Una vez creado el código para programar la FPGA, debemos introducir el código físicamente en la FPGA, y además debemos ser capaces de comunicarnos con los diferentes puertos de la misma y poder configurarla apropiadamente, XESS constituye un conjunto de utilidades para la comunicación con la tarjeta FPGA, se muestra al alumno el funcionamiento de las mismas. Estas contemplan la transmisión de datos a la FPGA, activación de puertos asociados a pines en la FPGA, configuración del reloj programable y test de funcionamiento. [8] [9] 5.2.1. XESS GXSLoad Esta herramienta, figura 7, permite la carga de los archivos binarios de configuración generados por Xilinx Foundation a la FPGA de la Kit de desarrollo Xess XS-40. También permite la carga de la memoria RAM estática así como la programación de la memoria Flash de almacenamiento permanente. Figura 7. Xess GXSLoad.
5.2.2. XESS GXSPort Esta herramienta, mostrada en la figura 8, permite la activación de líneas del puerto paralelo que están conectadas a pines de la FPGA. Por este medio se pueden generar estímulos externos. Figura 8. Xess GXSPort. 5.2.3. XESS GXSTest Esta herramienta permite el testeo de funcionamiento del Kit Xess XS-40 y la conexión del puerto paralelo, se muestra en la fig. 9. Figura 9. Xess GXSTest. 5.2.3. XESS GXSSetClk Esta herramienta permite la configuración del reloj programable del Kit de desarrollo XS-40. Consta de un divisor de frecuencia programable siendo posible obtener señales de reloj según la expresión: T[clk] = K * T[xtal] Figura 10. Xess GXSTest. T[xtal] = 10 nseg (f[xtal] = 100 MHz) y K = 1,2,3,4 6. HERRAMIENTAS HARDWARE 6.1. Kit de desarrollo para FPGA En un primer lugar se presenta la tarjeta de prácticas XS 40005 XL, mostrando las características internas de la misma, a nivel de estructura y arquitectura, esta tarjeta se muestra en la figura 11. Figura 11. Xess GXSTest.
Los kits de desarrollo de FPGA permiten la ejecución en hardware los programas. Además, implementan interfaces de comunicaciones PS2, salida de video VGA, RAM estáticas. En la figura 12, se muestran las conexiones con los interfaces de comunicaciones. Poseen pines de conexión inferior que permiten extender los pines de la FPGA a otra placa específica o conectar instrumentos de medición. Figura 12. Conexionado 6. TUTORIALES DE DISEÑO E IMPLEMENTACIÓN Una vez conocidas las herramientas y el entorno, es el momento de realizar diferentes prácticas que proporcionen al alumno una visión práctica de los conocimientos impartidos en la asignatura. Este punto refleja la segunda parte del manual, que consiste en una libreta de prácticas en ella se describen una serie de prácticas mediante imágenes, código fuente VHDL, comportamiento de los componentes presentados y se proponen ciertas actividades al alumno, las prácticas propuestas se enumeran a continuación: [6] Circuitos Combinacionales. Circuitos Secuenciales. Máquinas de Estados. Utilización de la Memoria Interna y Externa incluida en la XC4005-XL. Comprensión de la importancia de la configuración del reloj. Utilización del LED incluido en la tarjeta para ofrecer resultados. Cada práctica propuesta proporciona al alumno los fundamentos teóricos generales para afrontarla, incluyendo teoría, esquemas y código VHDL sobre los componentes sobre los que se articula la práctica, registros, contadores, multiplexores, utilización de la RAM de la tarjeta, etc., posteriormente se proponen al alumno los ejercicios a realizar que dotarán al mismo de un mayor conocimiento sobre el lenguaje y el comportamiento de los componentes, para ello el alumno deberá rellenar en un espacio reservado a tal fin en el manual, cuestiones referentes a la práctica y trazar el cronograma correspondiente a la simulación del diseño.
7. CONCLUSIONES Se ha elaborado un manual para alumnos de la asignatura Sistemas Electrónicos Digitales de la titulación de Ingeniero en Automática y Electrónica Industrial, este manual tiene dos partes bien diferenciadas, la primera parte tiene como objeto, dotar a los alumnos con fundamentos sobre Dispositivos Lógicos Programables, Instrumentación y el Lenguaje de Descripción Hardware VHDL, por otra parte, la segunda parte del manual se constituye en una libreta de prácticas que aportará al alumno conocimientos sobre Diseño de Sistemas Digitales, el alumno deberá programar, simular e implementar las prácticas propuestas, respondiendo en el espacio habilitado a tal fin cuestiones referentes a la práctica y dibujando el cronograma obtenido en la simulación de la práctica. 8. BIBLIOGRAFÍA Y RECURSOS INTERNET [1] Peter J. Ashenden. 1996. "The Designer's Guide to VHDL". Ed. Morgan Kaufmann. [2] David Pellerin. 1997. "VHDL Made Easy!". Ed. McGraw-Hill. [3] S. A. Pérez. 2002. Diseño de Sistemas Digitales con VHDL. Ed. Thomson. [4] Xilinx, Inc. 1999. Foundation Series 2.1i Quick Start Guide. [5] Xilinx, Inc. 1999. Foundation Series 2.1i User Guide. [6] John F. Wakerly. 2001. Diseño Digital Principios y Prácticas. Ed. Prentice-Hall. [7] David E. Vanden Bout. 2001. Pragmatic Logic Design. www.xess.com/pragmatic-2_1.html [8] Xess Corporation. XS40-005XL Prototyping Board with 3.3V, 9000 gate FPGA. www.xess.com/prod004.php3 [9] Xess Corporation. 1998. XS40, XSP, and XS95 Board Manual. XSTOOLS CDROM