2. CONCEPTOS TEÓRICOS Y...

23
PROYECTO FIN DE CARRERA. NICOLÁS AGUIRRE DOBERNACK 19 2. CONCEPTOS TEÓRICOS Y HERRAMIENTAS 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. 2.1 Arquitectura de una FPGA 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. La arquitectura de una FPGA está basada en un gran número de pequeños bloques creados para realizar operaciones lógicas sencillas. Estos bloques a su vez cuentan con biestables que proporcionan funcionalidades síncronas. La enorme flexibilidad de las FPGAs reside en la libertad que se posee a la hora de interconectar dichos bloques. Las FPGA en su gran mayoría, disponen también de bloques con funciones de alto nivel, como sumadores y multiplicadores, incrustados en la propia matriz de interconexiones, así como bloques de memoria y en algunos casos microprocesadores completos. 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.

Transcript of 2. CONCEPTOS TEÓRICOS Y...

PROYECTO FIN DE CARRERA. NICOLÁS AGUIRRE DOBERNACK 19

2. CONCEPTOS TEÓRICOS Y HERRAMIENTAS

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.

2.1 Arquitectura de una FPGA

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.

La arquitectura de una FPGA está basada en un gran número de pequeños bloques creados para realizar operaciones lógicas sencillas. Estos bloques a su vez cuentan con biestables que proporcionan funcionalidades síncronas. La enorme flexibilidad de las FPGAs reside en la libertad que se posee a la hora de interconectar dichos bloques. Las FPGA en su gran mayoría, disponen también de bloques con funciones de alto nivel, como sumadores y multiplicadores, incrustados en la propia matriz de interconexiones, así como bloques de memoria y en algunos casos microprocesadores completos.

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.

Capítulo 2. Conceptos teóricos y herramientas

PROYECTO FIN DE CARRERA. NICOLÁS AGUIRRE DOBERNACK 20

Figura 2.1. Arquitectura general de una FPGA.

A continuación, se hará una breve descripción de cada uno de estos bloques:

Bloques lógicos configurables. Los Bloques Lógicos Configurables (CLBs, Configurable Logic Blocks) son bloques lógicos que permiten al usuario realizar diferentes funciones y están distribuidos en el dispositivo en forma de matriz. En el de que estos recursos sean de complejidad baja, es decir, las funciones lógicas que se pueden realizar en ellos son sencillas, y existe un gran número de ellos, se dice que la FPGA es de granularidad fina. En caso de contar con menos elementos pero de complejidad mayor, se dice que la FPGA es de granularidad gruesa; en una FPGA de éste tipo el número de CLBs que lo integran es reducido pero poseen la capacidad de implementar funciones de mayor complejidad. Como ejemplo, una FPGA de granularidad gruesa puede contener en cada CLB cuatro LUTs, cuatro multiplexores, cuatro flip-flips tipo D, lógica de reset y puesta a uno, y elementos de acarreo rápido [155].

Figura 2.2. Bloque lógico típico de FPGA consistente en 4 entradas a una tabla de funciones lógicas (Look-Up Table), y un flip-flop.

Bloques configurables de entrada/salida. La matriz de bloques CLBs está rodeada por un anillo de bloques de interfaz denominados “bloques configurables de entrada/salida” (IOB). Estos bloques están dedicados a proporcionar la interconectividad entre la FPGA y el exterior, es decir, controlan la entrada y salida de datos entre los pines de entrada y salida y la lógica interna.

2.1 Arquitectura de una FPGA

PROYECTO FIN DE CARRERA. NICOLÁS AGUIRRE DOBERNACK 21

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.

Interconexiones programables. Son un conjunto de líneas o interruptores programables que sirven para transmitir las señales entre los bloques lógicos internos y los bloques de entrada/salida. También existe una matriz de interconexiones de elementos lógicos cuyo objetivo es facilitar la comunicación entre los buses. La jerarquía de interconexiones programables permite que los bloques lógicos de una FPGA puedan interconectarse según la necesidad del diseñador del sistema, Estos bloques lógicos e interconexiones pueden ser programados después del proceso de fabricación por el usuario/diseñador.

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.

En la Figura 2.2 podemos apreciar la estructura de un bloque lógico correspondiente a una FPGA basada en LUTs (Look-Up Tables). Nótese que hay solamente una salida, la cual puede ser o bien la salida directa de la LUT, o bien la registrada por el flip-flop. El bloque lógico básico posee cinco entradas totales, cuatro como entrada de datos para la LUT, y una entrada de reloj para el biestable. Las señales de reloj son tratadas por separado, tal y como se comentó en el párrafo anterior. Para un bloque lógico como el de la Figura 2.2, la localización de los pines se muestra en la Figura 2.3, así como la forma en que se conectan estos bloques entre sí [155].

Figura 2.3. Localización de los pines en un bloque lógico [155].

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.

Capítulo 2. Conceptos teóricos y herramientas

PROYECTO FIN DE CARRERA. NICOLÁS AGUIRRE DOBERNACK 22

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.

2.2 El lenguaje VHDL

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.

Para esto, el diseñador cuenta con la ayuda de herramientas de programación. Cada fabricante suele tener las suyas, aunque los lenguajes de descripción suelen ser comunes. Estos lenguajes son los llamados lenguajes de descripción de hardware (HDL ''Hardware Description Language''), entre los que se encuentran, por ejemplo:

VHDL

Verilog

ABEL

2.2.1 Ventajas de los lenguajes HDL

Existen muchos motivos para usar lenguajes HDL en la fase de diseño de un sistema electrónico digital. Sus principales ventajas son:

Posibilidad de verificar el funcionamiento del sistema dentro del proceso de diseño, sin necesidad de implementar el circuito.

Las simulaciones en la fase de diseño permiten tomar decisiones en cuanto a la arquitectura y a los cambios a realizar.

Se apoyan en las herramientas de síntesis, que convierten una descripción en HDL y la optimizan según la tecnología utilizada.

Permite la migración de diseños de una tecnología a otra sin pérdida de funcionalidad.

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..).

Proporcionan documentación de la funcionalidad de un diseño independientemente de la tecnología utilizada.

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.

2.2 El lenguaje VHDL

PROYECTO FIN DE CARRERA. NICOLÁS AGUIRRE DOBERNACK 23

2.2.2 Origen de VHDL

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 es un lenguaje de semántica no sólo orientado a la descripción, sino que también se aplica en la simulación. Por ello una de sus principales aplicaciones es el modelado de dispositivos hardware y su posterior simulación para comprobar el correcto funcionamiento de los diseños. También tiene otras áreas de aplicación tales como: documentación, verificación formal, síntesis automática, modelado de rendimiento, diagnosis de fallos, entre otros.

2.2.3 Dominios descriptivos y niveles de abstracción en VHDL

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:

Dominio de Comportamiento.

Dominio de Flujo de Datos (RTL).

Dominio Físico.

El dominio de Comportamiento o algorítmico es el nivel de abstracción más elevado que soporta VHDL. Cuando se describe usando este nivel de abstracción, el circuito se modela en términos de su funcionalidad, sin preocuparse de los componentes internos del mismo o de qué forma física se llevará a cabo esta funcionalidad.

El dominio de Flujo de Datos describe el circuito en términos de cómo los datos se mueven a través del sistema y la forma en que la información fluye a través de los registros del circuito. El diseñador toma en cuenta las distintas señales que interactúan en un circuito, así como su comportamiento por medio de ecuaciones lógicas y sentencias de asignación. Este modelo es comúnmente llamado Transferencia Lógica de Registros (RTL, Register Transfer Logic). Es un nivel intermedio que permite simplificar la lógica combinacional, mientras que las partes más importantes del circuito, los registros, son especificados de acuerdo a la función a modelar.

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

Capítulo 2. Conceptos teóricos y herramientas

PROYECTO FIN DE CARRERA. NICOLÁS AGUIRRE DOBERNACK 24

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.

Nivel de Abstracción Valores Medidas

Sistema Relaciones entre subsistemas, sincronización y protocolos.

Ancho de banda, MIPS.

Algorítmico Estructuras abstractas. Se usan las dependencias en lugar del tiempo.

Latencia, cadencia de datos, número de módulos.

RT (Register Transfer) Palabras con valores discretos. Control y procesamiento en tiempo discreto.

Tiempos de ciclo, márgenes y puertas equivalentes.

Lógico Valores lógicos. Computación en tiempo continuo.

Tiempos de conmutación, Skew y áreas equivalentes.

Circuito Valores continuos. Todo es electrónica en tiempo continuo.

Tiempos de subida, bajada y consumos de área.

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].

2.2 El lenguaje VHDL

PROYECTO FIN DE CARRERA. NICOLÁS AGUIRRE DOBERNACK 25

2.2.4 Características generales de VHDL

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.

Figura 2.5. Dupla Entidad-Arquitectura en VHDL.

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.

Uso de variables y constantes, para almacenar valores que pueden cambiar o valores que no cambian durante la ejecución del programa, respectivamente.

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.

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.

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.

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.

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.

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

Capítulo 2. Conceptos teóricos y herramientas

PROYECTO FIN DE CARRERA. NICOLÁS AGUIRRE DOBERNACK 26

una señal de entrada. También es posible generar archivos de salida, o enviar mensajes en la pantalla.

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.

Además de las variables y constantes, en VHDL aparece el concepto de señal. Éstas pueden considerarse como segmentos de cable que conectan la salida de un componente con la entrada de otro. Las variables son representaciones que se usan para la escritura del programa en VHDL, después de la síntesis generan ya sea registros o "cables", de acuerdo a su ubicación en el programa de VHDL. Tanto para señales como para variables existe el concepto de tipo, usado para definir los valores que se les pueden asignar. Existen tipos de datos como bit, boolean, integer y character. Su uso es parecido al de los lenguajes de programación. Solo hay que tomar en cuenta cómo serán sintetizadas las señales o variables de acuerdo al tipo. Por ejemplo una señal tipo bit o boolean generan un "cable", pero una señal tipo integer con valores de 0 a 255, genera un bus de 8 líneas. Una variable de tipo integer con valores de 0 a 255 también puede generar un registro de 8 bits.

[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.

2.3 Fases de desarrollo y diseño

A continuación se describen las cinco fases del proceso de diseño en FPGAs, que son [9]:

Diseño

Simulación

Síntesis

Implementación

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.

En esta fase, además, se deberán tener en consideración los siguientes puntos:

Tener claro lo que se quiere diseñar y saber cómo hacerlo.

Seleccionar la FPGA más adecuada para la aplicación que se desea diseñar.

Conocer el paquete de herramientas que se utilizarán para todo el proceso de diseño.

Especificar las restricciones que deben cumplirse, y los posibles caminos críticos.

2.3 Fases de desarrollo y diseño

PROYECTO FIN DE CARRERA. NICOLÁS AGUIRRE DOBERNACK 27

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 vez finalizado el diseño, se debe comprobar que funciona adecuadamente. Usualmente la simulación puede hacerse en tres de las cinco fases del desarrollo: en el diseño, en la síntesis y en la implementación. Sin embargo, la mayor parte de las simulaciones se realizan tras el diseño, y no sobre el Netlist producido en las fases de síntesis o la implementación.

Figura 2.6. Diferentes modos de simulación en el proceso de diseño [9].

Capítulo 2. Conceptos teóricos y herramientas

PROYECTO FIN DE CARRERA. NICOLÁS AGUIRRE DOBERNACK 28

La simulación es el proceso de aplicar estímulos o entradas a nuestro diseño, y comprobar que las salidas sean las correctas, realizando de esta forma las funciones esperadas. En algunos casos, las herramientas de simulación vienen integradas en el paquete de herramientas de diseño y síntesis. Estas herramientas proporcionan una forma de simular las entradas y señales que se quieren aplicar al diseño y muestran una lista, en tablas o de manera gráfica, con las salidas que proporcionaría dicho circuito.

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.

Figura 2.7. Ejemplo de Testbench de una memoria [9].

2.3.3 Síntesis

La síntesis consiste en interpretar una descripción realizada en un lenguaje de alto nivel de abstracción, y realizar los pasos necesarios para convertirla en un Netlist a un nivel de puertas lógicas que pueda ser implementado en una FPGA. Así, una descripción de un circuito realizado en VHDL es analizada y posteriormente convertida en una lista de conexiones (Netlist de nivel medio, ya que aún no sirve para programar la FPGA) entre los elementos lógicos de la FPGA, compuertas, registros, multiplexores, multiplicadores, etc.

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:

1. La descripción del circuito.

2. Los recursos disponibles en el dispositivo seleccionado.

3. Las directivas de síntesis seleccionadas por el diseñador.

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”

2.3 Fases de desarrollo y diseño

PROYECTO FIN DE CARRERA. NICOLÁS AGUIRRE DOBERNACK 29

debe hacerlo. Cuando se describe el funcionamiento de un circuito, existen muchas formas de hacer las mismas operaciones, y todas ellas darán lugar a distintas formas de implementación. Así por ejemplo, describir el diseño de un sumador de ocho bits utilizando cuatro módulos que utilicen propagación de bits de acarreo entre ellos, no se realizaría de igual forma internamente que un circuito que describe dicha suma de forma paralela sin utilizar retroalimentación. En cualquier caso, se obtendrían dos circuitos que realizan la misma función a nivel externo, pero internamente funcionarían de forma distinta.

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.

El flujo del proceso de síntesis pasa por los siguientes puntos:

1. Comprobación del diseño y asociación de recursos:

Revisión de la sintaxis.

Revisión de la síntesis.

Asociación de las componentes del diseño con los Cell/Blocks.

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.

El proceso de síntesis genera muchos tipos de archivo diferentes. Algunos de ellos se utilizan posteriormente en el desarrollo, y otros son utilizados solamente por la herramienta. Los ficheros generados más útiles son los informes, las Netlist y el archivo de visualización de esquemáticos de RTL y Tecnología. Algunos de ellos pueden ser utilizados por software de distintos fabricantes, como el caso del formato estándar EDIF (Electronic Design Interchange Format), que proporciona una forma de intercambiar Netlists.

2.3.4 Implementación

La implementación también se conoce como Place And Route (PAR) si el proceso de síntesis se realiza para un diseño en FPGA, y consiste en encontrar la forma de situar las ecuaciones obtenidas en el paso previo utilizando las celdas lógicas del dispositivo. La implementación transforma las Netlist de nivel medio creadas en la síntesis, y las mapea en la superficie de la FPGA, usando la lógica y los recursos internos disponibles. Las fases en las que se realiza la implementación son:

Capítulo 2. Conceptos teóricos y herramientas

PROYECTO FIN DE CARRERA. NICOLÁS AGUIRRE DOBERNACK 30

1. Traducción (Translate). El proceso de traducción toma la Netlist creada en la síntesis y la fusiona con la base de restricciones (Constraints) para crear un Netlist de salida llamado NGD (Native Generic Database). Este NGD describe el diseño lógico en términos de primitivas de Xilinx. Si durante la traducción se encuentra algún error, la herramienta se detiene y tras corregirlo se deberá empezar el proceso desde el principio. La traducción también es la encargada de la extracción de manera automática de características del circuito, como por ejemplo la resistencia y la capacidad eléctrica entre interconexiones.

2. Mapeo o planeamiento de la superficie (floorplanning). En esta fase se toma la Netlist NGD y se mapea, intentando distribuir los recursos lógicos en una forma óptima sobre una zona de la superficie del dispositivo, interconectando los bloques entre sí, y minimizando en una primera aproximación, tanto el área física como los retardos de propagación de las señales. El proceso de mapeado genera un archivo de descripción nativa de circuito (NCD, Native Circuit Description).

3. Colocación (Placement). En esta fase la herramienta toma decisiones sobre la colocación de las primitivas sobre los bloques lógicos. Se considera la mejor ubicación para cada bloque lógico, y se realiza una segunda aproximación para eliminar los retardos críticos. Como entrada, recibe el archivo NCD generado en el mapeo.

4. Rutado (Routing), se encarga de proponer la mejor opción entre rutas cortas o largas para la interconexión física de los bloques lógicos dentro de la FPGA.

5. Generación del archivo de programa .bit. El archivo final es un Bitstream (.bit) que será el fichero final que se cargará en la FPGA. Al proceso de cargar en la FPGA el fichero bitstream se le llama configuració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].

2.4 Procesadores Soft-Core incrustados

PROYECTO FIN DE CARRERA. NICOLÁS AGUIRRE DOBERNACK 31

2.4 Procesadores Soft-Core incrustados

Un procesador soft-core (SCP, también llamado soft microprocessor o soft processor), es la descripción de un circuito microprocesador, que puede ser implementado en diferentes dispositivos lógicos programables como CPLDs o FPGAs, o incluso puede ser incluido en un diseño para ASIC [10]. Los procesadores soft-core suelen distribuirse en forma de código fuente, principalmente VHDL o Verilog, aunque algunos SCPs comerciales se distribuyen en formatos propietarios.

Los principales fabricantes de dispositivos lógicos programables tienen su propio soft-core comercial especialmente diseñado y optimizado para funcionar en sus propias FPGAs. Así por ejemplo, Xilinx dispone de los soft-cores PicoBlaze [11], MicroBlaze [12] y PowerPC [25]. Altera proporciona el Nios II [13], y Lattice distribuye su LatticeMico32 [14].

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 es un microcontrolador RISC (Reduced Instruction Set Computing) que trabaja con instrucciones y datos de 8 bits. Fue desarrollado por Xilinx y optimizado para sus FPGAs. Está optimizado para ocupar muy poca área, y puede llegar a ejecutar entre 44 y 100 millones de instrucciones por segundo, dependiendo del Speedgrade y la familia de FPGA sobre la que se implemente. Las principales características del PicoBlaze son:

16 Registros de propósito general de 8 bits cada uno.

1024 palabras de instrucciones en memoria on-chip que se cargan al programarse la FPGA.

256 puertos de entrada y 256 de salida para conectar lógica o periféricos externos.

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].

Figura 2.9. Estructura interna del microcontrolador PicoBlaze [11].

Capítulo 2. Conceptos teóricos y herramientas

PROYECTO FIN DE CARRERA. NICOLÁS AGUIRRE DOBERNACK 32

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.

Las características más destacadas de este SCP son:

Instrucciones de 32 bits, cada uno con 2 modos de direccionamiento y 3 operandos.

Dispone de un Bus de direcciones de 32 bits.

Posee 32 registros de propósito general de 32 bits cada uno.

Pipeline configurable de 3 o 5 etapas.

FPU, barrel-shifter y multiplicador y/o divisor de enteros opcionales.

Módulo de depuración opcional.

Caché de instrucciones y caché de datos opcionales.

3 interfaces de bus disponibles para conectar distintos tipos de periféricos:

o LMB [21] (Local Memory Bus): Bus síncrono de alta velocidad utilizado principalmente para conectar los bloques de memoria interna de la FPGA.

o OPB [22] (On-Chip Peripheral Bus): Bus síncrono utilizado para conectar periféricos con tiempos de acceso variables. Tiene soporte para hasta 8 maestros. Actualmente sustituido por el bus PLB (Processor Local Bus) [158].

o FSL [23] (Fast Simplex Link): Canales punto a punto dedicados, para streaming de datos. Dispone de 8 canales, cada uno con un puerto de entrada y otro de salida.

Figura 2.10. Estructura interna del microcontrolador MicroBlaze [12]

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 Procesadores Soft-Core incrustados

PROYECTO FIN DE CARRERA. NICOLÁS AGUIRRE DOBERNACK 33

Figura 2.11. Interfaz de la herramienta Xilinx Platform Studio.

Una de las características más importantes de MicroBlaze es la amplia librería de IPs (Intellectual Property) ya diseñadas y listas para integrarse en cualquier diseño. Estos bloques IP suelen ser versátiles en cuanto a configuración, y están preparados para conectarse a los buses de control de MicroBlaze. También traen sus propias funciones software, plantillas y manuales de usuario (datasheet) para facilitar su uso e implementación.

El catálogo es amplio, y existen IPs para todo tipo de aplicaciones: controladores de memoria (SRAM, SDRAM, DDR y DDR2), dispositivos de comunicación serie (bus I2C, UART16550), controladores Ethernet y Ethernet Lite, Video Frame Buffer, Bloques de procesamiento de imágenes, de propósito general (GPIO), entre otros.

Figura 2.12. Catalogo de IPs para XPS

Capítulo 2. Conceptos teóricos y herramientas

PROYECTO FIN DE CARRERA. NICOLÁS AGUIRRE DOBERNACK 34

La herramienta, además de ayudar y simplificar la parte de diseño hardware de un sistema basado en el procesador MicroBlaze, también ofrece un entorno para el desarrollo del software necesario, y proporciona drivers para los distintos periféricos. Así mismo, esta herramienta pone en manos del diseñador todo un conjunto de herramientas de desarrollo software (compilador, depurador, bootloader, etc.), un micro kernel con interfaz de hilos POSIX y diversas librerías, facilitando mucho la tarea del programador de aplicaciones.

2.4.3 PowerPC

Los procesadores PowerPC no pertenecen al conjunto de soft-core processor, pero sin embargo, dada su importancia, requieren mención en este apartado. PowerPC, como homólogo a MicroBlaze, es un procesador “hard” integrado de fábrica en algunas familias Virtex de Xilinx (Virtex-II PRO, Virtex-5).

Las principales ventajas de PowerPC sobre MicroBlaze son su costo cero de implementación, ya que viene integrado de fábrica en el silicio de la FPGA, mientras que Microblaze se debe implementar a costa de los recursos disponibles de la FPGA. También, su mayor velocidad de proceso (puede operar a frecuencias de hasta 400Mhz frente a los 150Mhz de MicroBlaze) y su capacidad para operar a 64 bits. Por contrapartida, los modelos de FPGA que incorporan PowerPC son más caros, y se utilizan sobre todo para aplicaciones de alto rendimiento [25].

2.5 Herramientas de desarrollo de Xilinx

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:

Para el diseño lógico: Xilinx ISE® Foundation™ [26], Xilinx PlanAhead™ [33]

Para procesadores incrustados: Xilinx Embedded Development Kit (EDK) [34]

Diseños DSP: Xilinx System Generator for DSP [39]

Verificación On-Chip: Xilinx ChipScope™ Pro Tool [40]

También se proveerá información de las herramientas más importantes que trabajan en capas inferiores del software listado en el párrafo anterior.

2.5 Herramientas de desarrollo de Xilinx

PROYECTO FIN DE CARRERA. NICOLÁS AGUIRRE DOBERNACK 35

2.5.1 Xilinx ISE® Foundation™

El Entorno de Software Integrado (ISE, Integrated Software Environment) [26] es la herramienta de diseño lógico, que ofrece una solución completa para el desarrollo y la configuración de FPGAs. ISE controla todos los aspectos de la cadena de diseño a través de una interfaz de navegación, que permite añadir archivos fuente, o crearlos desde la herramienta, a través de los asistentes y plantillas que proporciona.

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.

Como se comentó en apartados anteriores, la simulación a nivel funcional no tiene en cuenta los retardos provocados por el hardware y a nivel temporal simula el diseño teniendo en cuenta el tipo de FPGA y las restricciones añadidas.

En resumen, ISE nos permite realizar las siguientes actividades:

Crear desde cero proyectos de sistemas lógicos.

Añadir fuentes desde muchos tipos de archivos (Esquemáticos, sistemas embebidos, VHDL, etc..)

Describir sistemas a través de múltiples entidades y sus conexiones con sus entidades top-level.

Comprobar la sintaxis del código y tareas de depuración.

Simular nuestro diseño a través de bancos de prueba (TestBench).

Importar bloques configurables a través de CORE Generator.

Añadir restricciones a nuestro diseño (Constraints).

Configurar el Hardware que se usará para la configuración de la FPGA.

Realizar esquemáticos y análisis de tiempo de los diseños.

Sintetizar el diseño y configurar la FPGA a través de iMPACT.

Figura 2.13. Desarrollo de sistemas para FPGA con ISE [166].

Una guía completa de la última versión hasta el momento de esta herramienta se puede encontrar en [27], [28] y [29].

Capítulo 2. Conceptos teóricos y herramientas

PROYECTO FIN DE CARRERA. NICOLÁS AGUIRRE DOBERNACK 36

2.5.2 Xilinx PlanAhead™

Este software dinamiza los pasos de la implementación correspondientes a la síntesis y al Place And Route, permitiendo dividir un diseño grande en bloques más manejables centrando su esfuerzo en optimizar cada bloque por separado. Esta metodología resulta en diseños de mayor calidad, con mejoras considerables en el rendimiento del diseño completo [33].

PlanAhead proporciona un entorno integrado e intuitivo para todo el proceso de diseño en FPGA. Este software permite realizar mejoras de rendimiento mediante el análisis de los esquemáticos RTL (Register Transfer Level), los Netlists sintetizados y los resultados de la implementación.

A continuación se presentan sus características principales:

Permite experimentar con distintas opciones de implementación, aplicar restricciones temporales y otras limitaciones físicas de floorplanning, para mejorar los resultados del diseño.

Permite una metodología basada en bloques diseño incremental que pueden ayudar a reducir los tiempos de ejecución y de Place And Route.

Diseño e implementación a partir de un entorno basado en esquemáticos RTL.

Estimación de tiempos estáticos.

Editor de restricciones (Constraints).

Planificación de pines de Entrada / Salida.

En definitiva, PlanAhead puede usarse en varios puntos en la cadena de desarrollo sobre FPGA, ya sea para tomar un diseño ya realizado y optimizarlo desde sus esquemáticos RTL, controlar de forma más detallada el proceso de síntesis e implementación, experimentar con estrategias de implementación, o simplemente asignar pines de entrada y salida.

Figura 2.14. Desarrollo con la herramienta PlanAhead [33]

2.5 Herramientas de desarrollo de Xilinx

PROYECTO FIN DE CARRERA. NICOLÁS AGUIRRE DOBERNACK 37

2.5.3 Xilinx Embedded Development Kit (EDK)

EDK es el entorno de desarrollo integrado para el diseño de sistemas que incluyen procesadores incrustados. Este Kit se compone de dos herramientas:

Xilinx Platform Studio (XPS)

Software Development Kit (SDK) for MicroBlaze and PowerPC

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í.

El Kit EDK intenta simplificar en la medida de lo posible esta tarea de diseño, proporcionando dos herramientas por separado, tanto para la realización del hardware y sus interconexiones, como el software que correrá en el procesador.

Xilinx Platform Studio (XPS), es la herramienta de desarrollo que se encarga de la parte hardware del sistema. Desde XPS se configuran las características el procesador que se quiere incrustar en el diseño, se indican los periféricos que se incluirán así como sus propiedades, y se realiza una interconexión de todos los elementos con el procesador, a través de los buses. XPS trabaja en armonía con ISE, proporcionando un entorno completo donde se podrán crear bloques propios en ISE, para luego importarlos en XPS y conectarlos con el procesador.

Entre sus características podemos destacar:

Interfaz para la creación rápida de sistemas incrustados gracias a la herramienta Base System Builder (BSB) wizard, cuyo objetivo es crear de forma rápida un sistema base para poder comenzar un proyecto.

Entorno gráfico para la conexión de los periféricos a los buses del procesador, generación de mapas de memoria.

Diagrama de bloques de las conexiones del sistema.

Acceso al catálogo de bloques IP desde la aplicación, junto a toda la documentación.

La herramienta Simulation Model Generation Tool (Simgen) genera modelos de simulación de nuestro sistema incrustado.

Creación de nuevos periféricos y sus conexiones con el procesador a través del Peripheral Wizard.

Capítulo 2. Conceptos teóricos y herramientas

PROYECTO FIN DE CARRERA. NICOLÁS AGUIRRE DOBERNACK 38

Figura 2.14. Diagrama de bloques de un sistema base creado con BSB

Software Development Kit (SDK) es la herramienta de desarrollo complementaria a XPS, y se usa para la programación e integración de software en C/C++ en el sistema. SDK ofrece una solución completa para la programación, verificación y tareas de depuración en el procesador incrustado. Entre sus características podemos destacar:

Basado en el entorno Eclipse [34].

Contiene un editor de código basado en C/C++, compilador, manejo de memoria Flash, integración de tareas de depuración a través de JTAG/GDB, y varias herramientas de ayuda al desarrollo.

Librerías y drivers de dispositivos a medida.

Soporte Multi-core.

Figura 2.15. Cadena de desarrollo con EDK [38].

Para el desarrollo con XPS y SDK, se pueden tomar como referencia los siguientes pasos:

Diseñar el sistema embebido usando XPS.

Exportar los ficheros necesarios del diseño hardware desde XPS a SDK [38].

2.5 Herramientas de desarrollo de Xilinx

PROYECTO FIN DE CARRERA. NICOLÁS AGUIRRE DOBERNACK 39

Ejecutar SDK y crear un proyecto con el fichero importado desde XPS.

Crear o añadir un Package que contenga una librería de rutinas que nuestro sistema pueda usar.

Programar la aplicación necesaria para el sistema.

Utilizar SDK linker script para generar o modificar el mapa de memoria de nuestra aplicación.

Descargar la aplicación en la FPGA ya configurada a través del bus de debug, usando la herramienta Xilinx® Microprocessor Debugger (XMD).

[34], [35], [36] y [37] ofrecen sólida documentación de referencia sobre el uso de la herramienta EDK.

2.5.4 System Generator for DSP

Esta herramienta permite el desarrollo de sistemas procesadores de señal (DSP) de alto rendimiento sobre las FPGA de Xilinx, usando los productos de MathWorks, Inc. (MATLAB / Simulink) [39].

Sus características principales son:

Creación de sistemas de alto rendimiento sobre FPGAs de Xilinx.

Modelado de sistemas sobre MATLAB / Simulink, con generación automática de código.

Gran capacidad y automatización para el diseño de sistemas de procesamiento de señal (FFT, FIR, codificadores aritméticos, tratamiento de errores en señales, etc..)

Datos en punto flotante de precisión simple, doble o definida por el usuario.

Herramienta Hardware Co-Simulation, que permite simulación en hardware del sistema creado en Simulink / System Generator. Esto permite construir el hardware equivalente de ese sistema y realizar las simulaciones en la FPGA directamente.

System Generator for DSP permite el diseño de hardware a través de Simulink, proporcionando un alto nivel de abstracción que puede ser automáticamente compilado en una FPGA. Aún así, no se debe perder de vista los aspectos hardware de la implementación sobre FPGA, sobre todo las cuestiones relativas al paralelismo y el pipelining, ya que esta herramienta no reemplaza el lenguaje VHDL, sino que intenta proporcionar una capa de abstracción superior para permitir al ingeniero centrar su atención en los aspectos de diseño. Es por ello que System Generator ofrece también la posibilidad de trabajar en los bloques de más bajo nivel, útil en los casos de configuraciones de relojes y aspectos de tiempos.

Capítulo 2. Conceptos teóricos y herramientas

PROYECTO FIN DE CARRERA. NICOLÁS AGUIRRE DOBERNACK 40

Figura 2.16. Ejemplo de un sistema creado con System Generator.

2.5.5 Xilinx ChipScope™ Pro Tool

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.

Esta herramienta añade a nuestro diseño analizadores lógicos, analizadores de sistemas y pines de entrada y salida virtuales donde visualizar cualquier nodo interno del diseño. Sus características más destacadas son:

Análisis de cualquier señal interna en la FPGA, incluido los buses del procesador.

Inserción de bloques de bajo nivel configurables para el análisis.

Captura de señales con nivel de disparo configurable.

Consola y monitor de sistema para las familias Virtex-5 y Virtex-6 para acceder a parámetros como sensores de temperatura y voltaje.

Cambio de puntos de prueba sin necesidad de re-implementar el diseño.

Depuración remota desde Internet.

Figura 2.17. Ejemplo captura de señales usando ChipScope Pro Tools [167].

2.5 Herramientas de desarrollo de Xilinx

PROYECTO FIN DE CARRERA. NICOLÁS AGUIRRE DOBERNACK 41

2.5.6 Otros

Las herramientas de desarrollo de Xilinx hacen uso del siguiente software para los aspectos de implementación.

iMPACT: [30] Tiene como función principal la programación de dispositivos a partir de un archivo bitstream. Otras funciones son: configuración de más de un dispositivo, dispositivos con memorias PROM / FLASH, verificación de los datos de configuración, entre otros.

Xilinx Synthesis Technology (XST): [31] Es el software de síntesis de Xilinx, y subyace en casi todas las herramientas proporcionadas por este fabricante (ISE, EDK, etc..). ISE no impide el uso de otras herramientas de síntesis además de XST, y permite configurar este parámetro en las propiedades de cualquier proyecto. XST es el encargado de analizar el código VHDL, comprobar la sintaxis, hacer la optimización de bajo nivel y generar el Netlist conocido como NGC, así como los esquemáticos RTL y de tecnología. El software a su vez invoca distintas herramientas según la fase de la implementación [32]:

Fase de traducción. Esta etapa invoca la herramienta NGDBuild, transformando la salida EDIF (creada en el proceso de síntesis) en la base de datos nativa (NGD). En este proceso, esta herramienta también es la encargada de comprobar que el diseño es adecuado para la FPGA objetivo.

Fase de Mapeo. Esta etapa invoca la herramienta Xilinx Map Tool, mapeando el fichero NGD en la FPGA objetivo. Como salida, genera el fichero NCD (Native Circuit Description).

Place And Route. Esta etapa invoca la herramienta Xilinx PAR Tool, tomando como entrada el fichero NCD y generando un fichero que podrá manejar la herramienta que crea el bitstream.

Fase de análisis de tiempos. En la etapa de verificación de tiempos se invoca la herramienta Xilinx Trace Tool, el cual verifica las restricciones de nuestro diseño y realiza un análisis de tiempos para verificar que se cumplen todas las condiciones, generando un informe.

Creación del fichero BIT. En esta etapa se invoca la herramienta Xilinx BitGen Tool, para generar a partir del archivo NCD un fichero capaz de configurar la FPGA objetivo.

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.