Documentos de Académico
Documentos de Profesional
Documentos de Cultura
En este capítulo se presentan los conceptos teóricos y las herramientas que servirán para
el desarrollo de este Proyecto Fin de Carrera. Se describirá brevemente la arquitectura de una
FPGA, se hará una introducción al lenguaje de descripción de hardware VHDL y se presentarán
los conceptos básicos de los diseños basados en procesadores soft-cores como Microblaze.
Finalmente se presentarán las herramientas de desarrollo de Xilinx, ISE, EDK, SDK y se hará un
glosario de términos que será de utilidad para la comprensión del resto de la memoria.
Las FPGAs fueron inventadas en el año 1984 por Ross Freeman, co-fundador de la
compañía Xilinx, surgiendo a partir de los Dispositivos Lógicos Programables Complejos (CPLD).
Una FPGA es un dispositivo semiconductor que contiene bloques lógicos cuya interconexión y
funcionalidad se puede configurar. La lógica programable tiene la capacidad de reproducir desde
funciones tan sencillas como las llevadas a cabo por una puerta lógica o un sistema
combinacional, hasta sistemas complejos en un chip.
Se podría decir que las FPGAs, al igual que los CPLDs, entran dentro de la tecnología de
los ASICs (Circuitos Integrados para Aplicaciones Específicas) puesto que las FPGAs son en sí
mismos circuitos integrados de aplicación específica. A pesar de que las FPGAs se utilizan en
aplicaciones similares a los ASICs, en general resultan más lentas y poseen un mayor consumo
de potencia. Así mismo, las FPGAs no pueden abarcar sistemas tan complejos como los que
comprenden los ASICs. A pesar de esto, las FPGAs tienen las ventajas de ser reconfigurables, lo
cual resulta en una gran flexibilidad en el flujo de diseño, y sus costes de desarrollo y adquisición
son mucho menores cuando se trata de pequeñas cantidades. El tiempo de desarrollo es también
menor, ahorrando todo el tiempo de fabricación propio de los ASIC, que los dotan de un mayor
rendimiento pero también de altos costos en el diseño.
Por otro lado, el ingeniero tiene el control completo sobre la implementación de sus
diseños sin la necesidad de tiempos perdidos en la fabricación de circuitos integrados [3]. Tanto
los CPLDs como las FPGAs contienen un gran número de elementos lógicos programables.
Estos elementos suelen medirse en las llamadas "puertas lógicas equivalentes", que son el
número de puertas NAND que podrían ser programadas en el dispositivo. En un CPLD se podrían
programar del orden decenas de miles de puertas NAND y una FPGA podría llegar a los cientos
de miles y hasta millones de ellas.
Actualmente existe una gran variedad de FPGAs proporcionadas por varias compañías
como Xilinx, Altera, Atmel y Lattice. Cada fabricante desarrolla su FPGA con una arquitectura
única. Una FPGA típica está formada por bloques lógicos configurables, bloques configurables de
entrada/salida e interconexiones programables como se muestra en la Figura 2.1.
Cada bloque es bidireccional y está dotado de flip-flops, latches y buffers. Además, en ocasiones
incluye resistores pull-up y/o pull-down en la salida. La polaridad de la señal de salida es
programable.
Circuito de reloj. Existe un tercer tipo de recurso exclusivo de conexión: las líneas
dedicadas a la transmisión de las señales de reloj. Las señales de reloj tienen la característica
especial de que se conectan a un gran número de bloques por lo que han de llegar a todos los
rincones de la FPGA en el menor tiempo posible. Estas líneas de reloj global están diseñadas
para obtener tiempos de propagación lo más pequeños posibles, y son distribuidas mediante
buffers de reloj especiales, conocidos como drivers de reloj, situados en el periferia de la FPGA.
Estos buffers se encuentran conectados al reloj principal y llevan su señal a través de las líneas
de reloj hacia cada CLB.
Por norma general, cada segmento de conexión atraviesa solamente un bloque lógico,
antes de que éste termine en una de las cajas de interruptores. Realizando las conexiones
adecuadas a través de los interruptores programables, se pueden hacer líneas de conexión más
largas. En cada punto donde confluyen varias líneas de interconexión, existe una caja de
interconexiones que permite conectar una línea, a otras tres posibles líneas adyacentes dentro
del segmento del canal. Una línea solo puede conectarse con otra de las tres en su propia caja
de conexiones, y no puede conectarse directamente con líneas de otras intersecciones.
Como se comentó anteriormente, las tendencias recientes a combinar los bloques lógicos e
interconexiones de las FPGA con microprocesadores y periféricos para formar un SoC (System
On a Chip, Sistema programable en un chip) hacen que se las FPGA combinen sistemas híbridos
y otros elementos lógicos en el mismo chip. Como ejemplo de estas tecnologías híbridas se
tienen los dispositivos Virtex-II PRO y Virtex-4 de Xilinx, que incluyen uno o más procesadores
del tipo PowerPC incrustados en un espacio de silicio junto con la lógica de la FPGA.
Este es también el caso del dispositivo Spartan-6, que será la FPGA utilizada para
desarrollar este Proyecto Fin de Carrera. Esta FPGA en particular viene con la posibilidad de
incorporar un procesador incrustado llamado Microblaze, para combinar bloques hardware
definidos por el diseñador (periféricos) junto a bloques controlados por software. Se dedicará un
apartado completo para hablar de Microblaze más adelante.
La tarea que debe realizar un ingeniero en hardware para implementar un diseño sobre
FPGA es definir la función que realizarán cada uno de los bloques lógicos programables del
dispositivo, así como seleccionar el modo de trabajo de cada bloque de entrada y salida, y por
último interconectar todos los bloques usando la matriz de interconexiones.
x VHDL
x Verilog
x ABEL
Existen muchos motivos para usar lenguajes HDL en la fase de diseño de un sistema
electrónico digital. Sus principales ventajas son:
x Posibilidad de verificar el funcionamiento del sistema dentro del proceso de diseño, sin
necesidad de implementar el circuito.
x Las simulaciones en la fase de diseño permiten tomar decisiones en cuanto a la
arquitectura y a los cambios a realizar.
x Se apoyan en las herramientas de síntesis, que convierten una descripción en HDL y la
optimizan según la tecnología utilizada.
x Permite la migración de diseños de una tecnología a otra sin pérdida de funcionalidad.
x Las herramientas de síntesis proveen la forma de transformar el lenguaje HDL en un
circuito lo más compacto y rápido posible. Además, en la descripción se permite
introducir ciertas restricciones que se utilizan en la síntesis para mejorar el circuito
resultante (Retardos, simplificación de compuertas, frecuencia de reloj, etc..).
x Proporcionan documentación de la funcionalidad de un diseño independientemente de
la tecnología utilizada.
x Son mucho más fáciles de leer e interpretar que los esquemáticos y Netlist.
Este proyecto hace uso del lenguaje VHDL, por ser un lenguaje de alto nivel de
abstracción que ha sido aceptado como un estándar de diseño.
El lenguaje VHDL se creó con el objetivo de ofrecer una solución a los numerosos
problemas que se planteaban en el desarrollo y la documentación del hardware digital. La
documentación necesaria para describir un sistema electrónico es extensa, y puede llegar a
ocupar miles de páginas. También es muy costoso reemplazar o actualizar la información
contenida cuando la tecnología o las especificaciones cambian. Un lenguaje de descripción
adecuado resuelve el problema ya que la "documentación" es ejecutable y su funcionamiento se
basa en la descripción de la funcionalidad del hardware.
Las siglas VHDL corresponden a VHSIC (Very High Speed Integrated Circuits) Hardware
Description Language. El primer borrador apareció en agosto de 1985, y fue diseñado por
Intermetrics, IBM y Texas Instruments, impulsado también por el Departamento de Defensa de
los Estados Unidos. Dos años más tarde, en Diciembre de 1987 fue aprobado como estándar del
IEEE y posteriormente, en 1993, fue revisado y registrado como norma IEEE Std 1076-1993. La
última revisión fue publicada en enero del 2009, registrado como estándar VHDL IEEE 1076-
2008. El hecho de que VHDL sea un estándar resulta muy ventajoso, ya que reúne muchas
características que lo hacen particularmente atractivo. VHDL es un lenguaje independiente de la
tecnología que se utilice para implementar el diseño creado, no está emparejado a un
determinado simulador ni a ningún programa de síntesis y no requiere una metodología precisa (a
nivel de puertas lógicas, por ejemplo) de diseño. VHDL además permite implementar
ampliaciones en diseños ya existentes.
VHDL soporta varios estilos para la descripción de diseños. Estos, denominados dominios
descriptivos, son distintos en cuanto al nivel de abstracción que manejan, y son:
x Dominio de Comportamiento.
x Dominio de Flujo de Datos (RTL).
x Dominio Físico.
El dominio Físico, o nivel lógico, se usa para describir circuitos en términos de sus
componentes. Puede ser usado para crear una descripción de bajo nivel, como la descripción a
nivel de transistor, o una descripción a nivel de diagrama de bloques. El diseñador emplea los
recursos que el lenguaje proporciona para describir las interconexiones entre los distintos
componentes de un circuito.
La Tabla 2.1 describe los diferentes niveles de abstracción, que pueden verse junto a los
modelos descriptivos en la Figura 2.4.
Tabla 2.1. Niveles de abstracción en el diseño de circuitos mediante lenguajes HDL y características medibles.
Como podemos observar, cada uno de los niveles de abstracción se ocupa de unos
determinados valores, que posteriormente las herramientas de síntesis y optimización se
encargarán de ajustar y optimizar, usando algoritmos de iteración sobre los elementos de la
Figura 2.4. En los apartados posteriores se hará un análisis de la fase de diseño y síntesis.
Figura 2.4. Diagrama Y de Gajsky-Khun. Relación entre los modelos descriptivos y los niveles de Abstracción [164].
Toda descripción de diseños en VHDL requiere de una entidad y una o más arquitecturas.
La declaración de la entidad define la interfaz del circuito digital que se está diseñando con el
mundo exterior. La declaración de una arquitectura complementa el diseño del bloque,
describiendo el comportamiento de la entidad a la cual pertenece.
La entidad es una forma de describir un circuito de forma abstracta, sea cual sea su
funcionalidad interna, que puede ir desde un complejo sistema electrónico hasta una simple
compuerta u operación lógica. La entidad sólo describe la forma externa del circuito, definiendo
las entradas y salidas de éste. Es análoga a un símbolo en esquemático. La entidad sirve para
relacionar el diseño con el mundo exterior, es decir, se analiza lo que se intenta modelar como
una "caja negra", de la que sólo se conocen sus entradas, sus salidas y la disposición de las
mismas. La arquitectura, por el contrario, es el complemento de la entidad, y describe
completamente el funcionamiento de un circuito o sistema digital. La arquitectura representa la
estructura interna del bloque declarado por la entidad, describiendo de qué forma la información
en las entradas es procesada para obtener las correspondientes salidas, modelando de esta
manera el funcionamiento del circuito diseñado.
VHDL contiene elementos que son parecidos a los encontrados en los lenguajes de
programación, aunque hay que tener presente el hardware que generan al momento de ser
usados. A continuación se mencionan algunos de los elementos comunes que encontramos entre
VHDL y los lenguajes de programación secuenciales.
x Uso de variables y constantes, para almacenar valores que pueden cambiar o valores
que no cambian durante la ejecución del programa, respectivamente.
x Funciones y procedimientos, que son segmentos de código que pueden ser llamados
desde distintos puntos. Al igual que en los lenguajes de programación, las funciones
devuelven un valor y los procedimientos no. La diferencia es que son usadas para
generar circuitos lógicos. En el caso de las funciones generan lógica combinacional.
x La sentencia case, usada para ejecutar una acción de acuerdo al valor de una variable.
Son muy utilizadas para generar multiplexores o máquinas de estados finitos.
x La sentencia if-then-else, que realiza una prueba para determinar la veracidad o
falsedad de una sentencia, y de acuerdo a esto realizar o no un grupo de instrucciones.
x Uso de ciclos for, do y while, que ejecutan un grupo de instrucciones hasta que se
cumpla alguna condición. Se debe tener especial cuidado con este grupo de
sentencias, ya que su implementación difiere mucho a las conocidas en los lenguajes
de programación habituales.
x Uso de bibliotecas y paquetes, en donde se puede almacenar las definiciones de
componentes, funciones, procedimientos o constantes, con la finalidad de tener
componentes reutilizables, y así usar el mismo código para mas de un proyecto.
x Instrucciones de entrada y salida, usadas solo durante la simulación. Con este tipo de
instrucciones es posible leer datos de un archivo, los cuales pueden ser los valores de
Algunos de los elementos mencionados son propios para la simulación y otros son tanto
para simulación como para síntesis. Por ejemplo, la instrucción "wait for XXns" se usa para
esperar cierto intervalo de tiempo en simulación. Esta instrucción es muy usada en simulación,
para variar el valor de los estímulos de entrada a una entidad, pero en síntesis no tiene sentido ya
que su uso implicaría conectar en cascada gran cantidad de elementos, para generar el retardo
especificado. Otras instrucciones son ignoradas al momento de realizar la síntesis, por ejemplo la
inicialización de variables y las instrucciones de entrada y salida.
[4], [5], [6], [7] y [8] contienen información detallada sobre VHDL, así como una referencia
completa sobre el diseño y descripción de Hardware.
A continuación se describen las cinco fases del proceso de diseño en FPGAs, que son [9]:
x Diseño
x Simulación
x Síntesis
x Implementación
x Programación
2.3.1 Diseño
El diseño es la primera fase de desarrollo del conjunto de ficheros fuente que serán usados
para configurar una FPGA. En esta fase se deben tener en cuenta muchas más cosas además de
crear un diseño. La fase de diseño implica conocer las herramientas, tomar las decisiones
correctas en la forma de implementación, y esquematizar todo el conjunto antes de comenzar a
describir el diseño de un sistema.
Por otro lado, cada fase de desarrollo tiene asociadas sus propias herramientas y software.
En el caso de la fase de diseño, las herramientas dependen sobre todo del formato de salida, así
como el coste o las capacidades de diseño compartido. Por ejemplo, si el diseño se va a realizar
en formato de esquemáticos, se necesitarán herramientas que acepten este tipo de diseños, y no
sólo un editor de texto. Algunas herramientas de desarrollo son estándares para un tipo de
producto, y no se podrán utilizar para otros.
Así mismo, por contrapartida a las herramientas "Standalone" (aquellas que sólo
implementan una función), existen herramientas completas, que ofrecen todo lo necesario para la
síntesis de diseños completos. Esto es, que la propia herramienta tiene todo lo necesario para su
uso en las fases de diseño, síntesis, simulación, implementación y la programación. Sin embargo,
en algunos casos éstas herramientas completas de desarrollo pueden resultar caras, tanto en la
compra del producto como en la posterior adquisición de licencias. Como ejemplo, Xilinx’s
Integrated Software Environment (ISE) y Altera’s Quantus II son herramientas de desarrollo
completas.
Una vez se han escogido las herramientas necesarias, se podrá comenzar con el diseño.
Éste pude hacerse en VHDL a base de escribir código manualmente, usando un generador de
código automático (como por ejemplo la herramienta Core Generator de Xilinx), o una mezcla de
ambos métodos. También existen herramientas capaces de generar bloques complejos, e incluso
procesadores que podremos implementar en una zona de la FPGA. Más adelante se hablará
sobre esta última característica.
2.3.2 Simulación
Una de las formas más usadas para simular diseños es el banco de pruebas (Testbench),
que proporciona una forma gráfica de producir y visualizar las formas de onda de las señales de
entrada y salida.
2.3.3 Síntesis
Por ejemplo, una compuerta NAND podría ser sustituida por su equivalente NAND(A,B) = A'
+ B', o una instrucción if podría convertirse en parte de un multiplexor, o en una función lógica
más compleja que involucrase diferentes tipos de puertas. Por lo tanto, como se dijo
anteriormente, el proceso de síntesis depende del dispositivo utilizado y de los recursos lógicos
de los que disponga. Diferentes dispositivos implementarán una misma función de distintas
formas, pero sin cambiar la funcionalidad del diseño, que es en todo caso la misma.
Por otro lado el grado de optimización del proceso de síntesis a la hora de convertir el
código VHDL al un circuito equivalente, depende de los siguientes factores:
La descripción es el punto más importante, ya que de esto dependen los otros dos. En la
descripción no solamente se “dice” cómo funciona el circuito; además se describe en qué “forma”
Los recursos afectan a la forma en que las funciones descritas son interpretadas e
implementadas en los recursos lógicos existentes en el dispositivo. Por ejemplo, un circuito que
realice una división entre un número que no sea potencia de dos no podría hacerse en ciertos
dispositivos, que no cuentan con esta característica.
Las directivas de síntesis son aquellos parámetros que se configuran para que la
herramienta de síntesis los tenga en cuenta en el proceso de implementar las ecuaciones en el
dispositivo. Algunas de ellas incluso pueden ser descritas en el mismo código (como por ejemplo
forzar a que un nodo no sea simplificado y se retenga en todo caso). Otros ejemplos de estas
directivas pueden ser la síntesis para optimizar el área, síntesis para maximizar la velocidad y por
tanto la frecuencia de trabajo.
2. Optimización:
Reducción de funciones lógicas.
Eliminación de la lógica redundante.
Proceso de reducción de área e incremento de velocidad.
3. Mapeado de la tecnología:
Conexión del diseño final con la lógica disponible.
Predicción y adición de tiempos estimados.
Creación de Netlist e informes.
2.3.4 Implementación
2.3.5 Configuración
La configuración incluye la transferencia del fichero bitstream a la FPGA. Éste puede residir
en una memoria no volátil como una PROM, o dentro de la FPGA (Muchas FPGA vienen con una
memoria interna capaz de mantener el fichero de configuración). El bitstream puede ser cargado
en la FPGA mediante programación JTAG, a través de un procesador, microcontrolador u otro
dispositivo externo. Usualmente, el bitstream dispone de opciones de seguridad para prevenir
que el fichero sea descargado sin autorización [9].
2.3.6 Otros
Existen algunos pasos adicionales que deberán realizarse en caso de tener un soft-core
incrustado en la FPGA. En este caso será necesario no solo crear un fichero de configuración de
la FPGA, sino además compilar los archivos de software que ejecutará el procesador. En el caso
de disponer del procesador Microblaze, las herramientas de Xilinx (EDK, SDK) permiten acceder
a su memoria de programa a través del Xilinx® Microprocessor Debugger (XMD) usando la línea
de comandos, para realizar tareas de depuración o cargar el fichero de instrucciones (.elf).
Figura 2.8. Ejemplo de compilación de archivos de programa (.elf) y configuración (.bit) [165].
También existen una gran variedad de SCPs distribuidos en forma de código abierto, como
el OpenRISC 1200 [15] mantenido por la comunidad Opencores [16], o los SCPs LEON2 y
LEON3 [17] [18] que proporciona la compañía Gaisler Research [19].
Debido que este Proyecto Fin de Carrera gira en torno a la familia Spartan-6 de Xilinx, se
presentarán los detalles generales de los soft-cores propios de dicho fabricante, centrando la
atención en Microblaze.
2.4.1 Picoblaze
PicoBlaze está diseñado para ejecutar pequeñas tareas de control y no para ejecutar
grandes aplicaciones, aunque en ocasiones se lo ha utilizado en sistemas multiprocesador [20].
2.4.2 Microblaze
MicroBlaze fue desarrollado por Xilinx para las FPGA de la familia Spartan y Virtex. Es un
microprocesador RISC de 32 bits con una arquitectura Harvard, en la cual los buses de memoria
de datos e instrucciones están separados. Una de sus principales ventajas es que es muy
configurable, pudiéndose añadir o quitar una gran cantidad de elementos, atendiendo a las
necesidades de la aplicación, y así permitiendo una gran cantidad de configuraciones que varían
en cuanto a velocidad y área ocupada en la FPGA.
Actualmente MicroBlaze es uno de los soft-core processor más utilizados. Parte de este
éxito se debe a las herramientas que proporciona Xilinx para crear sistemas basados en este
microprocesador. La herramienta Xilinx Platform Studio [24] permite de forma gráfica e intuitiva
interconectar tanto el procesador como los distintos periféricos y buses que forman el sistema,
como podemos ver en la Figura 2.11.
2.4.3 PowerPC
Hoy en día, todo proceso de ingeniería necesita de un soporte software que asista al
ingeniero de aplicaciones en el desarrollo de sistemas complejos. Los sistemas electrónicos
reconfigurables del tipo FPGA son de una alta complejidad en el desarrollo, y no sería posible la
implementación de sistemas de este tipo sin la ayuda de unas herramientas adecuadas que
asistan en el proceso de diseño, así como métodos de simulación, síntesis del resultado y
configuración del hardware.
En este apartado se hace una breve descripción de las herramientas de Xilinx para el
desarrollo de sistemas en FPGA. Dado que serán las herramientas de trabajo principales en este
Proyecto Fin de Carrera, no se describirá ninguna herramienta de otros fabricantes. El software
que provee Xilinx, para las diferentes necesidades en el proceso de desarrollo, es el siguiente:
x Para el diseño lógico: Xilinx ISE® Foundation™ [26], Xilinx PlanAhead™ [33]
x Para procesadores incrustados: Xilinx Embedded Development Kit (EDK) [34]
x Diseños DSP: Xilinx System Generator for DSP [39]
x Verificación On-Chip: Xilinx ChipScope™ Pro Tool [40]
La interfaz gráfica de usuario (GUI: Graphic User Interface) se denomina Project Navigator
y facilita el acceso a los diferentes componentes del proyecto. La descripción de los diseños se
puede realizar mediante distintas técnicas. Entre ellas se encuentran la descripción hardware en
VHDL, los grafos de estado o los esquemáticos. Una vez terminado un diseño o una parte del
mismo, la herramienta permite la simulación de su comportamiento, tanto a nivel funcional como
a nivel temporal.
Una guía completa de la última versión hasta el momento de esta herramienta se puede
encontrar en [27], [28] y [29].
EDK También incluye una amplia lista de bloques IP junto con toda su documentación, que
permiten un diseño completo de sistemas basados en MicroBlaze y PowerPC [34].
Los sistemas con procesadores soft-core incrustados suelen tener una complejidad alta.
Hacer funcionar sistemas de este tipo no solo requiere diseñar correctamente el hardware, y
crear una interacción correcta entre los bloques lógicos y el procesador a través de los buses
disponibles, sino que además necesita que el software que ejecuta el procesador esté bien
programado. Es por ello que usualmente este tipo de proyectos se suele dividir en porciones más
pequeñas, cada una de las cuales se convierten en proyectos en sí.
Para el desarrollo con XPS y SDK, se pueden tomar como referencia los siguientes pasos:
[34], [35], [36] y [37] ofrecen sólida documentación de referencia sobre el uso de la
herramienta EDK.
ChipScope es una herramienta proporcionada por Xilinx que permite el análisis de las
señales de un circuito diseñado para FPGA, en el propio chip, creando los bloques necesarios
para la visualización de cualquier señal en tiempo real del sistema implementado, incluido el
acceso a los buses de datos y memoria de los procesadores soft-core incrustados.
x Análisis de cualquier señal interna en la FPGA, incluido los buses del procesador.
x Inserción de bloques de bajo nivel configurables para el análisis.
x Captura de señales con nivel de disparo configurable.
x Consola y monitor de sistema para las familias Virtex-5 y Virtex-6 para acceder a
parámetros como sensores de temperatura y voltaje.
x Cambio de puntos de prueba sin necesidad de re-implementar el diseño.
x Depuración remota desde Internet.
Figura 2.17. Ejemplo captura de señales usando ChipScope Pro Tools [167].
2.5.6 Otros
Las herramientas de desarrollo de Xilinx hacen uso del siguiente software para los aspectos
de implementación.
Xilinx Microprocessor Debugger (XMD) [24]. Es una herramienta que se usa con EDK, y
facilita las tareas de depuración de software y su verificación en sistemas que usan soft-cores
como PowerPC o MicroBlaze. XMD accede a las instrucciones de programa directamente en el
Hardware, a través del bus de debug, y permite tareas como la actualización del software o la
configuración de programas bootloader, entre otros.