Está en la página 1de 23

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.

PROYECTO FIN DE CARRERA. NICOLÁS AGUIRRE DOBERNACK 19


Capítulo 2. Conceptos teóricos y herramientas

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.

PROYECTO FIN DE CARRERA. NICOLÁS AGUIRRE DOBERNACK 20


2.1 Arquitectura de una FPGA

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.

PROYECTO FIN DE CARRERA. NICOLÁS AGUIRRE DOBERNACK 21


Capítulo 2. Conceptos teóricos y herramientas

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:

x VHDL
x Verilog
x 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:

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.

PROYECTO FIN DE CARRERA. NICOLÁS AGUIRRE DOBERNACK 22


2.2 El lenguaje VHDL

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:

x Dominio de Comportamiento.
x Dominio de Flujo de Datos (RTL).
x 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

PROYECTO FIN DE CARRERA. NICOLÁS AGUIRRE DOBERNACK 23


Capítulo 2. Conceptos teóricos y herramientas

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

Relaciones entre subsistemas,


Sistema Ancho de banda, MIPS.
sincronización y protocolos.

Estructuras abstractas. Se usan


Latencia, cadencia de datos,
Algorítmico las dependencias en lugar del
número de módulos.
tiempo.

Palabras con valores discretos.


Tiempos de ciclo, márgenes y
RT (Register Transfer) Control y procesamiento en
puertas equivalentes.
tiempo discreto.

Valores lógicos. Computación en Tiempos de conmutación, Skew y


Lógico
tiempo continuo. áreas equivalentes.

Valores continuos. Todo es Tiempos de subida, bajada y


Circuito
electrónica en tiempo continuo. 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].

PROYECTO FIN DE CARRERA. NICOLÁS AGUIRRE DOBERNACK 24


2.2 El lenguaje VHDL

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.

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

PROYECTO FIN DE CARRERA. NICOLÁS AGUIRRE DOBERNACK 25


Capítulo 2. Conceptos teóricos y herramientas

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

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.

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

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


x Seleccionar la FPGA más adecuada para la aplicación que se desea diseñar.
x Conocer el paquete de herramientas que se utilizarán para todo el proceso de diseño.
x Especificar las restricciones que deben cumplirse, y los posibles caminos críticos.

PROYECTO FIN DE CARRERA. NICOLÁS AGUIRRE DOBERNACK 26


2.3 Fases de desarrollo y diseño

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

PROYECTO FIN DE CARRERA. NICOLÁS AGUIRRE DOBERNACK 27


Capítulo 2. Conceptos teóricos y herramientas

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”

PROYECTO FIN DE CARRERA. NICOLÁS AGUIRRE DOBERNACK 28


2.3 Fases de desarrollo y diseño

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:

PROYECTO FIN DE CARRERA. NICOLÁS AGUIRRE DOBERNACK 29


Capítulo 2. Conceptos teóricos y herramientas

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

PROYECTO FIN DE CARRERA. NICOLÁS AGUIRRE DOBERNACK 30


2.4 Procesadores Soft-Core incrustados

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:

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


x 1024 palabras de instrucciones en memoria on-chip que se cargan al programarse la
FPGA.
x 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].

PROYECTO FIN DE CARRERA. NICOLÁS AGUIRRE DOBERNACK 31


Capítulo 2. Conceptos teóricos y herramientas

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:

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


x Dispone de un Bus de direcciones de 32 bits.
x Posee 32 registros de propósito general de 32 bits cada uno.
x Pipeline configurable de 3 o 5 etapas.
x FPU, barrel-shifter y multiplicador y/o divisor de enteros opcionales.
x Módulo de depuración opcional.
x Caché de instrucciones y caché de datos opcionales.
x 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.

PROYECTO FIN DE CARRERA. NICOLÁS AGUIRRE DOBERNACK 32


2.4 Procesadores Soft-Core incrustados

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

PROYECTO FIN DE CARRERA. NICOLÁS AGUIRRE DOBERNACK 33


Capítulo 2. Conceptos teóricos y herramientas

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:

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]

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.

PROYECTO FIN DE CARRERA. NICOLÁS AGUIRRE DOBERNACK 34


2.5 Herramientas de desarrollo de Xilinx

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:

x Crear desde cero proyectos de sistemas lógicos.


x Añadir fuentes desde muchos tipos de archivos (Esquemáticos, sistemas embebidos,
VHDL, etc..)
x Describir sistemas a través de múltiples entidades y sus conexiones con sus entidades
top-level.
x Comprobar la sintaxis del código y tareas de depuración.
x Simular nuestro diseño a través de bancos de prueba (TestBench).
x Importar bloques configurables a través de CORE Generator.
x Añadir restricciones a nuestro diseño (Constraints).
x Configurar el Hardware que se usará para la configuración de la FPGA.
x Realizar esquemáticos y análisis de tiempo de los diseños.
x 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].

PROYECTO FIN DE CARRERA. NICOLÁS AGUIRRE DOBERNACK 35


Capítulo 2. Conceptos teóricos y herramientas

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:

x 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.
x 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.
x Diseño e implementación a partir de un entorno basado en esquemáticos RTL.
x Estimación de tiempos estáticos.
x Editor de restricciones (Constraints).
x 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]

PROYECTO FIN DE CARRERA. NICOLÁS AGUIRRE DOBERNACK 36


2.5 Herramientas de desarrollo de Xilinx

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:

x Xilinx Platform Studio (XPS)


x 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:

x 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.
x Entorno gráfico para la conexión de los periféricos a los buses del procesador,
generación de mapas de memoria.
x Diagrama de bloques de las conexiones del sistema.
x Acceso al catálogo de bloques IP desde la aplicación, junto a toda la documentación.
x La herramienta Simulation Model Generation Tool (Simgen) genera modelos de
simulación de nuestro sistema incrustado.
x Creación de nuevos periféricos y sus conexiones con el procesador a través del
Peripheral Wizard.

PROYECTO FIN DE CARRERA. NICOLÁS AGUIRRE DOBERNACK 37


Capítulo 2. Conceptos teóricos y herramientas

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:

x Basado en el entorno Eclipse [34].


x 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.
x Librerías y drivers de dispositivos a medida.
x 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:

x Diseñar el sistema embebido usando XPS.


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

PROYECTO FIN DE CARRERA. NICOLÁS AGUIRRE DOBERNACK 38


2.5 Herramientas de desarrollo de Xilinx

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


x Crear o añadir un Package que contenga una librería de rutinas que nuestro sistema
pueda usar.
x Programar la aplicación necesaria para el sistema.
x Utilizar SDK linker script para generar o modificar el mapa de memoria de nuestra
aplicación.
x 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:

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


x Modelado de sistemas sobre MATLAB / Simulink, con generación automática de
código.
x 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..)
x Datos en punto flotante de precisión simple, doble o definida por el usuario.
x 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.

PROYECTO FIN DE CARRERA. NICOLÁS AGUIRRE DOBERNACK 39


Capítulo 2. Conceptos teóricos y herramientas

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:

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

PROYECTO FIN DE CARRERA. NICOLÁS AGUIRRE DOBERNACK 40


2.5 Herramientas de desarrollo de Xilinx

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

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

PROYECTO FIN DE CARRERA. NICOLÁS AGUIRRE DOBERNACK 41

También podría gustarte