domingo, 16 de agosto de 2015

Arquitectura de una FPGA: DCM


6. Generación de Reloj y su Distribución

Los FPGA tienen unos bloques de lógica dedicados exclusivamente a funciones de control y generación de señales de reloj. En los FPGAs de Xilinx a estos bloques genéricamente se los llama Digital Clock Managers (DCMs) (Gestores de Reloj Digitales). La cantidad de estos bloques disponibles en un FPGA depende del tamaño del mismo, puede haber desde 2 DCMs en los FPGAs más pequeños hasta 12 DCMs en los FPGA grandes.

Los DCMs integran capacidades avanzadas del reloj, dentro de la red de distribución dedicada del reloj del FPGA. Las principales funciones del DCM se pueden resumir en:
  1. Eliminar el sesgo del reloj (clock skew), ya sea dentro del FPGA o con componentes externos. De este modo se mejora el rendimiento del sistema y se eliminan los retardos de ruteo del reloj.
  2. Producir corrimiento de fase (Phase shifting) de una señal de reloj, ya sea por una fracción del periodo de reloj o por incrementos fijos. 
  3. Multiplicar o dividir la frecuencia de entrada del reloj, generando una frecuencia completamente nueva.
  4. Acondicionar la señal de entrada del reloj, asegurando un reloj limpio, con un ciclo de trabajo del 50%.
  5. Amplificar de nuevo (rebuffer) una señal de reloj, normalmente para eliminar el sesgo (deskew) y convertir la señal de entrada a un estándar diferente, por ejemplo, de LVDS a LVTTL.
La Figura 1 detalla gráficamente las distintas funcionalidades del DCM explicadas en los puntos anteriores (excepto el corrimiento de fase).

Figura 1. Diferentes opciones de uso del DCM

Tal como se explicó anteriormente, la señal de reloj usa rutas de conexión dedicadas, cuya distribución dentro del FPGA es bastante particular, tal como se puede ver en la Figura 2. El FPGA se divide en cuatro cuadrantes, los cuales pueden tener como máximo 8 relojes. Multiplexers dedicados seleccionan las señales de reloj que se van a usar en cada cuadrante. Las líneas de ruteo de reloj son líneas dedicadas de muy bajo retardo, de casi nula distorsión del ciclo de trabajo, con jitter (oscilación) mínimo y llegan a todos los elementos sincrónicos del FPGA.


Figura 2. Distribución de los DCMs y rutas de reloj en un FPGA Spartan

Los buffers de entrada (A-H) son buffers con características especiales, como, por ejemplo, conexión directa con el DCM (para evitar retardos de ruteo). De todos modos, una señal de reloj externa puede entrar a través del buffer de entrada y ser ruteado a los flip-flops del FPGA sin pasar por el DCM.

Para configurar un DCM se usa un software del fabricante del FPGA. En el caso de Xilinx se llama CoreGen (Core Generator) el cual tiene una interfaz grafica que facilita la configuración del DCM de acuerdo a las necesidades del diseño.

6.1. Ejemplo de uso del DCM- Eliminando el sesgo del reloj

Se detallará un ejemplo de uso del DCM como supresor del sesgo del reloj del sistema.

En todo sistema sincrónico existe inherentemente sesgo de reloj. Aún la señal de reloj más precisa llega en tiempos diferentes a los diferentes puntos del sistema, ya sea en un mismo dispositivo o a los diferentes dispositivos conectados a la fuente de reloj. Esa diferencia en el tiempo de llegada se conoce como sesgo de reloj (clock skew).

La Figura 3 detalla un ejemplo de un sistema simple que consta de un FPGA y otro dispositivo, que puede ser, por ejemplo, un microcontrolador, un ASIC, o lógica discreta. El reloj entra al FPGA (punto A) a través de un buffer de entrada, por ende sufre un cierto retardo. Usando ruteo dedicado (mínimo retardo, pero retardo al fin) llega a los flip-flops del FPGA (punto B). Luego de un cierto retardo, llamado ∆b en la Figura 3, sale a través de un buffer de salida (más retardo). Además, se le debería sumar también el retardo que sufre la señal a través de la línea de conexión del circuito impreso. Así, cuando el reloj llega al otro dispositivo (punto C) tiene un cierto retardo, creando un cierto desfasaje (sesgo) con el reloj original y con el reloj interno del FPGA (llamado ∆C en la Figura 3). El retardo es tal, que si se quieren transmitir datos desde el FPGA al dispositivo (punto D) se corre el riesgo de violar los tiempos del establecimiento o sostenimiento en el flip-flop del dispositivo receptor.

Figura 3.  Sistema con sesgo de reloj

Este problema del sesgo del reloj en la jerga técnica se conoce como "el ladrón del rendimiento del sistema". Como consecuencia de todos estos retardos, se incrementan los tiempos de establecimientos y los tiempos de retardo de los flip-flops (clock to output) y por lo tanto, se incrementa el periodo de reloj del sistema. De forma análoga, en algunos casos también puede que se requieran tiempos de mantenimiento más largos. Todos esto lleva a que necesariamente se deba buscar una solución a este problema.

Afortunadamente los DCMs internos de un FPGA ofrecen una manera sencilla de eliminar el sesgo de reloj de un sistema. La Figura 4 muestra un ejemplo de uso de dos DCMs del FPGA, un DCM tiene como función eliminar el sesgo del reloj dentro del FPGA, y el otro DCM elimina al sesgo del sistema, resultando prácticamente un alineamiento ideal del reloj en los distintos puntos (A, B, C, D) del sistema.

Figura 4. Uso de DCMs para eliminar sesgo de reloj dentro del FPGA y del sistema

¿Cómo se elimina el sesgo del reloj?. Se debe recordar primero que el sesgo es provocado por los retardos en el camino del reloj (buffers, ruteo, etc). En la Figura 4 el reloj en el punto B está retardado por ∆B y el reloj en el punto C está retardado por ∆C. Qué pasaría si existiera un modo de proveer en el punto B una versión ‘adelantada’ por el tiempo ∆B del reloj?, y otro modo de proveer al punto C una versión ‘adelantada’ por un tiempo ∆C del reloj? El resultado sería que todos los relojes arribarían a su destino perfectamente alineados tal como muestran las formas de ondas de la Figura 4-B. En realidad, el DCM lo que hace es retardar la señal de entrada de modo que parece estar adelantada en el tiempo. Por ejemplo en la Figura 4-C, el reloj en el punto B parece estar adelantado en el tiempo por el retardo ∆B. Sin embargo, la realidad es que el reloj está retardado por T (periodo del reloj)- ∆B. Del mismo modo para el reloj en punto C, el cual es retardado por T-∆C.

Una ventaja aún mayor al usar el DCM es que no es necesario conocer los valores de ∆B y ∆C, es decir no hace falta ni calcularlos ni medirlos, sino que el mismo DLL dentro del DCM constantemente monitorea el retardo por medio del lazo de realimentación (feedback loop) tal como se muestra en la Figura 4-A. Al usar los DCMs la performance total del sistema es óptima, anulando cualquier inherencia del sesgo del reloj en la misma.

Arquitectura de una FPGA: Interconexiones

5. Interconexiones en los FPGAs

Además de las celdas de lógica programable, los FPGAs tienen celdas de interconexión programables. Estas definen el camino (ruta) a seguir por cada señal interna del FPGA. La tecnológica de configuración y la arquitectura de la celda lógica determinan la estructura y complejidad de la interconexión. La Figura 1 muestra cómo se distribuyen las rutas de interconexión entre los CLBs. A la izquierda se muestra más en detalle cómo es la conexión interna entre las diferentes rutas de conexión, programable a través de transistores,

Figura 1.  Interconexión entre distintos caminos de ruteo

La programabilidad de la interconexión, si bien es una gran ventaja, agrega retardos a la señal que pasa por el transistor. Así, si una señal debe pasar por varios elementos de interconexión la suma total de los retardos puede ser considerable y debe ser tenida en cuenta en diseños de alta frecuencia. Por ello, a fin de no ir sumando demasiados retardos en cada interconexión, existe lo que se llaman rutas largas. De este modo, si una señal tiene que pasar por más de medio dispositivo puede hacerlo usando estas rutas largas, evitando las interconexiones intermedias. Del mismo modo, existen también las rutas cortas, llamadas conexiones directas, que comunican un bloque lógico con sus bloques vecinos.

Dentro del FPGA también existen lo que se llaman rutas dedicadas, que se usan para las señales que tienen mucha cargabilidad de salida (fan-out) en el sistema que se está diseñando. Las señales que más comúnmente usan las rutas dedicadas son el reloj y la habilitación del reloj (clock enable). Estas rutas tienen buffers especiales que hacen que la señal no se distorsione con la carga. Por ejemplo, en diseños grandes es fácil encontrar una señal de reloj que llegue a 2000 flip-flops.

Hay una relación directa entre la cantidad de interconexiones y el tamaño físico del FPGA. Por ello es que no se implementan físicamente todas las interconexiones posibles, así como, no todos los bloques lógicos están interconectados entre sí. A raíz de esto, para poder conectar la salida de un bloque lógico con la entrada de otro a veces se pasa por diversas interconexiones que conectan diferentes rutas para poder llegar a destino. Por suerte para el diseñador, el software del fabricante del FPGA realiza automáticamente todas las interconexiones. Es una tarea totalmente transparente al diseñador, siempre y cuando se cumplan los requisitos de tiempo estipulados por las especificaciones del sistema implementado. De lo contrario, el diseñador deberá optimizar algunos parámetros de la herramienta de ruteo (llamada Place and Route) para que pueda cumplir con las especificaciones de tiempo requeridas.

Figura 2. Vista macroscópica a vista microscópica de las interconexiones de un FPGA de Xilinx

La Figura 2 detalla las interconexiones en un FPGA de Xilinx. Se destacan las líneas verticales y horizontales que corren entres los bloques lógicos. La matriz de interconexiones programable (Programmable Switching Matrix, PSM) conecta las diferentes rutas dentro del FPGA a través de los transistores de paso. Se observan también las rutas largas (long lines) que cruzan todo el FPGA. Las rutas de conexión directa saltan sobre las matrices de interconexión para conectar directamente bloques lógicos adyacentes. Se destacan también los transistores que conectan las entadas y salidas de los bloques lógicos a las rutas generales de interconexiones, llamados puntos de interconexión programables (Programmable Interconnection Points, PIP). La Figura 3 detalla cómo se conectan dos bloques lógicos por medio de las matrices de conexión programables (PSM) y los puntos de interconexión programables (PIP).


Figura 3. Ejemplo de ruteo entre dos bloques lógicos a través de PIPs y PSMs

Finalmente, la Figura 4 resalta la importancia de las interconexiones de ruteo en un diseño. Es decir, del total de los recursos de un FPGA usados en este diseño, el 31% corresponde a recursos de interconexión, que es el porcentaje más elevado de recursos usados en este caso. Es por ello que este tema de las interconexiones y el ruteo son de gran importancia, realizándose estudios complejos para obtener algoritmos de optimización del ruteo, a fin de obtener resultados óptimos y evitar el congestionamiento de las rutas de conexión que derivan en una reducción del rendimiento general del FPGA.

Figura 4. Este gráfico resalta la importancia del retardo en los conectores de ruteo (Dr. G. Lemieux, UBC)

viernes, 7 de agosto de 2015

Arquitectura de una FPGA: Bloques DSP

4. Bloques de Multiplicación – Bloques DSP

Las aplicaciones de procesamiento digital de señales (DSP, Digital Signal Processing) basan sus cálculos básicamente en dos elementos: multiplicadores y sumadores. Para cálculos complejos se requiere un gran número de estos elementos, cuya implementación en LUTs resultaría muy compleja, consumiendo gran cantidad de la lógica disponible en el FPGA. Por ello, las generaciones nuevas de FPGAs incluyen en su arquitectura elementos lógicos configurables dedicados a la multiplicación (Spartan 3E) o los FPGAs más avanzados, que permiten hacer la multiplicación y la suma en paralelo (Virtex 4/5/6).

Figura 1. Bloque de Multiplicación en el Spartan 3E

La familia de FPGAs Spartan 3 provee en cada FPGA de 4 a 36 multiplicadores dedicados, detallados en la Figura 1, Estos multiplicadores están localizados cerca de los bloques de memoria RAM a fin de tener un mínimo retardo para la lectura y/o escritura de los datos. Cada multiplicador ejecuta la multiplicación P = A x B, donde A y B son datos de 18 bits en complemento a dos, y P es el resultado de 36 bits, también en C2. Los registros AREG, BREG y PREG son opcionales, pero su uso en una configuración tipo pipelining beneficia el rendimiento total del sistema.

En el rango de los FPGAs de más alto rendimiento, y por ello mucho más caros, se encuentran disponibles bloques más complicados llamados bloques DSP, o más precisamente DSP48 (ya se entenderá porque). La Figura 22 detalla la lógica interna del DSP48 de un Virtex-5 (similar al disponible en el Virtex-6).

Figura 22 - Bloque DSP en un Virtex-5/6

Viendo en detalle la Figura 2, se observa que consiste en un multiplicador de 25x18 bits en C2 y un acumulador de 48 bits. En conjunto pueden llegar trabajar a frecuencias de hasta 550MHz, lo que hace al FPGA un dispositivo muy adecuado para el cálculo en tiempo real de variables aritméticas complejas. Si se tiene en cuenta que un FPGA tipo Virtex-5 puede tener hasta 1056 bloques DSP y, más importante aún, es que pueden trabajar todos al mismo tiempo en paralelo. En muchas aplicaciones el FPGA a desplazados a los procesadores dedicados DSP por su paralelismo y alto rendimiento. Cuando se necesitan hacer cálculos complejos, por ejemplo Correlaciones, Filtros FIR, Convoluciones, etc.; se usa un flujo de diseño que comienza en MatLab-SimuLink y termina con la herramienta del fabricante del FPGA. Esto facilita enormemente el proceso de implementación de cálculos matemáticos complejos y aprovecha toda la capacidad del FPGA.

miércoles, 5 de agosto de 2015

Arquitectura de una FPGA: Bloque de Memoria RAM (BRAM)


3. Bloques de Memoria RAM (BRAM) 

    Para aplicaciones que requieren acceso a memoria, ya sea para escritura y lectura (tipo RAM) o sólo lectura (tipo ROM), los FPGAs tienen bloques de memoria RAM (BRAM) disponibles para usarlos de acuerdo a la necesidad. Aún cuando no se usen estos bloques, siguen estando dentro del FPGA. La cantidad de bloques disponibles depende del tamaño del FPGA. En la familia Spartan, por ejemplo, el rango de bloques de RAM disponibles va desde 4 hasta 100 bloques. Cada bloque de RAM contiene 18.432 bits de RAM estática rápida, de los cuales 16K son dedicados para datos, y los otros 2K para bits de paridad o para algunos bits extras de los datos almacenados. 

Se pueden conectar diferentes BRAMs en cascada, ya sea para tener un mayor ancho de la palabra de datos, para tener un mayor tamaño de la memoria o bien para ambas cosas (ancho + tamaño). En este caso el retardo es mínimo gracias a las conexione, ya que se usan recursos dedicados de ruteo. La Figura 1 muestra ejemplos de distintos tamaños de bloques de memoria que se pueden implementar usando un simple BRAM.

Figura 1. Diferentes configuraciones de relación datos/direcciones que se pueden implementar en los BRAMs

    Los BRAM son bloques configurables de acuerdo a las necesidades del diseño, es decir el mismo bloque puede ser configurado para que funciones como RAM, ROM, FIFO (First Input First Output), convertidor de ancho de palabra, buffers circulares y registros de desplazamientos. A su vez, cada una de estas configuraciones soporta diferentes anchos de la palabra de datos y diferentes tamaños del bus de direcciones.

Figura 2. BRAM de 18Kb como a) dual port y b) single port

    Tal como muestra la Figura 2, físicamente el bloque RAM (BRAM), tiene dos puertos de acceso completamente independientes, llamados Puerto A y Puerto B. La estructura es totalmente simétrica. Cada puerto de memoria tiene su propia señal de reloj, habilitación de reloj y habilitación de escritura. Por ello, cada puerto de memoria es sincrónico con su propio reloj, habilitación de reloj y habilitación de escritura. La lectura de la memoria es sincrónica y requiere un reloj y una habilitación de reloj.

Entre las principales aplicaciones de los BRAM se pueden destacar las siguientes:
  1. Almacenamiento de programas para procesadores embebidos en el FPGA.
  2. Rd/Wr variables durante cálculos matemáticos, por ej. Coeficientes para filtros FIR.
  3. Buffers circulares.
  4. Registros de desplazamiento o muy largos o muy anchos.
  5. Líneas de retardo.
  6. Realización de MEF usando técnicas de microprogramación.
  7. Contadores muy largos.
  8. Memorias Direccionables por Contenido (CAM) de alto rendimiento de Rd/Wr
  9. Almacenamiento de formas de onda o tablas de funciones trigonométricas para generar salidas tipo Direct Digital Synthesis (DDS) (Síntesis Digital Directa).
    Cabe aclarar que lo detallado con respecto al tamaño y cantidad de los BRAMs corresponde a la familia Spartan-3. Por otro lado, el Virtex-5 tiene algunas diferencias al respecto. Por ejemplo, cada bloque BRAM es de 36Kb, se puede configurar para disponer de código corrector de error tipo Hamming (usando 8 bits), las FIFOs tienen construidas la lógica de banderas dentro del BRAM, y así, otras características que por algo hacen a la V-5 más cara, pero de mayor rendimiento.

    Finalmente es necesario recordar algo ya analizado en el post anterior: Rebanadas (SLICE) de un CLB, para implementar pequeñas memorias se hace uso de los SLICEM, que tienen la opción de ser configurados como bloques de memoria de 16x1. Concatenando varios SLICEM se pueden tener memorias de tamaño pequeño y de rápido acceso.

lunes, 3 de agosto de 2015

Arquitectura de una FPGA: Bloque de Entrada/Salida (IOB)

2. Bloque de Entrada/Salida (Input/Output Block, IOB)

    Para poder recibir y transmitir señales digitales, los FPGAs disponen de un bloque de E/S bastante elaborado que posibilita usarlos con muy diversos rangos de tensiones, frecuencias de trabajo, estándares de señales digitales, etc, lo que los hace muy adaptables a las necesidades del sistema del que forman parte.

    Existe un bloque E/S por cada terminal de E/S del FPGA. Así cada terminal puede ser configurado como entrada, como salida o bidireccional. En cada bloque E/S existe un buffer que tiene diversas funciones configurables por el diseñador que permiten adaptar el FPGA en un sistema complejo trabajando con diferentes tensiones y corrientes, en un circuito impreso con muchos problemas de integridad de señal (signal integrity).

Figura 1. IOB de un Xilinx Spartan FPGA

En la Figura 1 se observa un diagrama de la estructura interna de un IOB. Se puede observar que hay tres caminos posibles para una señal:

a) Camino de entrada, que conecta el IO Pad (terminal del circuito integrado) a la lógica interna del FPGA. Esta conexión puede ser:
  • Directa, a través de un elemento de retardo (opcional).
  • Con registro usando el flip-flop IFF1
  • Con registro usando el flip-flop IFF2
    Las tres salidas del IOB, I, IQ1 e IQ2, se conectan al ruteo general interno del FPGA. El par de flip-flops IFF1 e IFF2 se usan para interfaces tipo DDR (dual data rate). De modo que el dato de entrada sea capturado en ambos flancos con distintos flip-flops. El flip-flop IFF1 suele ser usado como registro de entrada para reducir al mínimo el tiempo de establecimiento de la señal de entrada. Se observa también que cada entrada tiene un par equivalente (IO Pin from adjacent IOB) para el caso que se utilice una configuración de entrada diferencial, tales como LVDS.

b) Camino de salida, comunica la lógica interna con el IO Pad del FPGA. Entra al IOB por medio de O1 u O2, pasa a través de un multiplexor y del buffer de salida llegando al IO Pad. El par de flip-flops OFF1 y OFF2 se usan para transmitir datos en ambos flancos del reloj (DDR). También estos flip-flops se usan para poner registros en las señales de salida del FPGA, de modo de reducir al mínimo el tiempo de retardo de flip-flop (Clock to Output, Tco). Además, si se usan los IOB flip-flops en todas las señales de salida de un sistema, se reducen los diferentes tiempos de propagación entre las distintas salidas, generando una transición de las salidas “casi” al mismo tiempo.

c) Camino de alta impedancia, comunica la señal de control de alta impedancia con el buffer de salida. Esta ruta también dispone de un par de flip-flops para interfaces tipo DDR o para registrar en este bloque la señal de control de alta impedancia. Se observa también una realimentación de la señal que controla la alta impedancia del buffer de salida.

2.1. Buffer de E/S

  El buffer de Entrada/Salida del IOB es un buffer configurable de acuerdo al estándar de la Entrada/Salida que se desea. La Tabla 2 detalla los diferentes estándares de E/S disponibles en un FPGA, con sus respectivas tensiones de entrada y de salida, como así también, si se necesita alguna tensión de referencia o de terminación.

    En el caso del buffer de entrada, se puede configurar para trabajar con cualquiera de los estándares de E/S detallados en la Tabla 1. En algunos de estos estándares el buffer de entrada utiliza una tensión de referencia o disparo (threshold), VREF, que se suministra por un terminal determinado del FPGA. VREF normalmente se usa para generar las tensiones de referencia de estándares como diferencial HSTL (High Speed Transceiver Logic) y SSTL (Stub Series Terminal Logic). Este ultimo usado en las interfaces de memorias tipo DDR y DDR2.

    En el caso del buffer de salida, también se puede configurar para un amplio rango de estándares de E/S, tal como detalla Tabla 1. Pero también se puede configurar su corriente de salida (drive strength) y la pendiente de la señal de salida (slew control). Con estos dos controles se pueden minimizar los efectos de rebote de señal (ringing) y las emisiones de alta frecuencia.

Tabla 1. Estándares de E/S soportados por el Bloque E/S (IOB)

    Se puede observar en la Figura 1 que cada IOB tiene un diodo de protección a Vcco y otro a GND. Dispone de resistencias tipo pull-up y pull-down configurables, como así también un circuito de retención de bus (bus keeper o bus holder).

2.2. Bancos de E/S

    Los bloques de E/S (IOBs) están agrupados en lo que se llaman bancos de bloques de E/S (grupos de IOBs). Dependiendo del FPGA, cada banco puede tener entre 20 y 40 IOBs. Cada banco de IOBs tiene su propia tensión de alimentación (VCCO) y su propia tensión de referencia VREF que son comunes a todos los IOBs. Es por esta disposición de tensiones de VCCO y VREF por banco, que si se quieren usar diferentes estándares de E/S con diferente VCCO, se deberán usar diferentes bancos de E/S.

La Figura 2 muestra la división de los IOBs en 8 bancos de E/S en un FPGA Virtex 2.

Figura 2. Bancos de E/S

    Las herramientas usadas cuando se implementa un diseño en un FPGA automáticamente asignan terminales de diferentes bancos cuando los estándares E/S usados necesitan diferentes VCCO o VREF. De todos modos, el diseñador también tiene control suficiente para asignar terminales específicos de E/S a señales específicas de su diseño.

    Otra característica disponible en los IOBs es la de control digital de impedancia (no representada en la Figura 1), que permite controlar la impedancia de entrada o la de salida de los terminales del IOB. Una aplicación típica es, por ejemplo, adecuar la impedancia de salida del FPGA a la impedancia de la traza del circuito impreso (típicamente 50 ohms), para evitar o reducir al mínimo las posibles reflexiones de la señal digital. Esta función es configurable en un esquema banco por banco de IO, es decir cada banco puede tener su propia adaptación de impedancia.

viernes, 31 de julio de 2015

Arquitectura de una FPGA: Bloques Lógicos Configurables (CLB)

1. Bloque Lógico Configurable (CLB)

    Conocidos comúnmente como Bloque Lógico Configurable, (Configurable Logic Block, CLB), estos bloques son la parte lógica mayoritaria dentro de un FPGA. Su estructura macroscópica se detalla en la Figura 1, donde se puede ver que un CLB está constituido por 4 rebanadas (Slices), SLICEM S0, SLICEM S1, SLICEL S2 y SLICEL S3, rutas de conexión para el acarreo matemático, Cin y Cout (carry in, carry out), conexiones a la matriz de conexiones (Switch Matrix) que proveen acceso a las rutas de conexiones generales y conexiones locales entre las rebanadas del mismo CLB y CLBs vecinos.

Figura 1. Esquema de un CLB y su conexióna la matriz de conexión

    Tal como se aprecia en Figura 1 los SLICES se individualizan en coordenadas, desde al más abajo a la izquierda como SLICE X0Y0, hasta el superior derecho identificado como SLICE X1Y1. Del mismo modo para el CLB. Cada CLB se identifica con coordinadas XY dentro del arreglo matricial. Donde XY igual a 00 identifica el primer CLB en la esquina inferior izquierda de la matriz de CLBs, la coordenada del CLB suprior derecho dependerá del tamaño de la matriz, es decir del tamaño del FPGA.

1.1. Rebanadas (SLICE) de un CLB

Hay dos tipos de rebanadas (SLICEs) dentro de un CLB:

SLICEM: además de las funciones lógicas que se pueden implementar en el SLICE, ofrece opciones para implementar pequeñas memorias.
SLICEL: solo puede implementar funciones lógicas.

Figura 2. Vista simplificada de un SLICEL de un FPGA Spartan/ FPGAVirtex

La Figura 2 muestra una vista simplificada de un SLICEL, en la que se destaca lo siguiente:
  1. Dos tablas de búsquedas (Look-Up Tables)
  2. Dos flip-flops
  3. Cuatro salidas, dos combinacionales y dos con registros
  4. Tiene entradas de control para los flip-flops
  5. Entradas para las LUTs
  6. Entrada y salida para la cadena de acarreo (Carry Chain)
1.2. Tablas de Búsqueda - Look-up Tables (LUTs)

    En un FPGA toda la lógica combinacional se implementa utilizando tablas de búsqueda, LUT, es decir la función lógica se almacena en una tabla de verdad de 16x1 (para las LUTs de 4 entradas). En cierta literatura a las LUTs también se les llama “Generadores de Funciones” (Function Generators). La Figura 3 detalla la similitud entre una tabla de verdad y una LUT. La columna de valores Z, valores de la función combinacional, son los valores que realmente se almacenan en la LUT de 16x1. Vale recordar que, a menos que por alguna razón se quiera hacerlo manualmente, el almacenamiento de los valores en las LUTs lo realiza el Software del fabricante del FPGA, siendo el proceso totalmente transparente al diseñador del sistema digital.

Figura 3. Cómo se implementa una función combinacional en una LUT.

    Una característica que a veces es de mucha utilidad, sobre todo para sistemas de muy alta frecuencia, es que el retardo a través de la LUT es constante e independiente de la función implementada. Para implementar funciones lógicas de más de cuatro entradas en una LUT, se usan multiplexores dedicados que están distribuidos en el SLICE(L/M) y en el CLB para poder implementar cualquier función con un mayor número de entradas. Por ejemplo, para implementar cualquier función lógica de cinco entradas se usa el multiplexer F5Mux, que multiplexa las salidas de las dos LUTs (4 entradas) y la quinta entrada funciona como señal de selección del F5Mux. Si bien estos multiplexores dedicados podrían ser implementados en las LUTs, al ser dedicados son más eficientes y dejan las LUTs disponibles para otras funciones. Estos multiplexores no se pueden ver en la Figura 2, al ser una vista simplificada de un SLICE. Pero sí se pueden ver en la Figura 4, donde se destacan
los siguientes multiplexores:
  • F5Mux: multiplexa las salidas de las LUTs dentro del SLICE
  • F6Mux: multpilexa las salidas de los F5Mux de un SLICE
  • F7Mux: multiplexa las salidas de los F6Mux de un CLB
  • F8Mux: multiplexa las salidas de los F7Mux de dos CLBs

Figura 4. Multiplexores dedicados y sus conexiones dentro de un CLB.

    Como se puede ver en la Figura 4, cada SLICE tiene un F5Mux, y un segundo multiplexor llamado genéricamente FiMux. Esto se debe a que este multiplexor puede funcionar como F6Mux, F7Mux o F8Mux dependiendo de su ubicación y su conexión con los otros multiplexores. Se destaca que las conexiones entre los multiplexores se hacen a través de rutas de conexiones dedicadas a tal fin, con retardo cero. De todos modos, las salidas de estos multiplexores también están disponibles en la salida combinacional del CLB para acceder a las conexiones de ruteo general.

Nota: en la última versión de Spartan y Virtex, versión 6, las LUTs son de 6 entradas. Esto fue implementado después de trabajos de investigación llevados a cabo por Xilinx tratando de encontrar cual era el número óptimo de entradas para las LUTs. De todos modos, todo lo explicado en este punto para LUTs de 4 entradas, se aplica también para LUTs de 6 entradas.

1.3. Elementos de Almacenamiento. Flip-Flops

Figura 5. Detalle de la lógica del Registro/Cerrojo en un SLICE

    La Figura 5 detalla las posibles configuraciones del elemento de almacenamiento y sus respectivas señales de control. Cada SLICE posee dos elementos de almacenamiento programables que pueden funcionar como flip-flop D, o cerrojo (latch) transparente. El elemento de almacenamiento ubicado en la parte superior del SLICE se denomina FFY, mientras que el de la parte inferior se denomina FFX. Ambos elementos de almacenamiento tienen un multiplexor de selección para la entrada D, pudiendo seleccionar entre la salida de la respectiva LUT, DY o DX, o una entrada externa al SLICE, llamada BY para el elemento FFY y BX para el FFX.

    Se observa también que las señales de reloj, habilitación del reloj y reset (limpiar) son comunes al par de flip-flops en cada SLICE. El flip-flop tiene construido en su lógica interna la opción de poder poner en cero (reset) el flip-flop de manera sincrónica o asincrónica. La entrada REV (reverse) se usa
cuando se desea invertir el valor lógico de activación de la señal de reset.

1.4. Lógica de Acarreo (Carry)

     El CLB tiene lógica dedicada exclusivamente para el acarreo de la suma aritmética con el objeto de mejorar el rendimiento de sumadores, contadores, comparadores y funciones lógicas relacionadas. En la Figura 6 se detalla la lógica, descrita en compuertas, de cada bit de un sumador total. Mientras que la Figura 7 muestra la analogía entre la lógica del sumador total y la lógica disponible en un SLICE para implementar el sumador total de una manera más eficiente que si fuera implementado solo con LUTs.

Figura 6. Detalle de la lógica del Registro/Cerrojo en un SLICE

Figura 7. Relación entre la lógica de acarreo en un SLICE y el sumador total

La lógica de acarreo disponible en los CLB está constituida por los siguientes elementos, detallados en la Figura 7:
  • Compuertas lógicas dedicadas sólo para el acarreo
  • Multiplexores dedicados
  • Ruteo y conexiones dedicadas
1.5. Componentes del SLICE

    Después de haber visto en detalle los distintos componentes de un SLICE, es hora de ver como se utilizan e interconectan dentro del mismo. La Figura 8 muestra una vista generalizada de los componentes sin sus interconexiones.

Figura 8. Componentes de un SLICEM y SLICEL, sin sus interconexiones

    Como ya de detalló en 1.1, los FPGA de Xilinx tienen los SLICELs y los SLICEMs. Tal como se ve en la parte izquierda de la Figura 8, el SLICEM permite implementar bloques de memoria, registros de desplazamiento y lógica combinacional en una especie de LUT-multifunción. En los dispositivos actuales, aproximadamente un 50% del total de los CLBs de un FPGA contienen SLICEM y el otro 50% SLICEL. En versiones anteriores de FPGAs, el 100% de los CLBs eran SLICEM, pero esto fue cambiando hasta llegar a la relación actual de 50-50. Esto se debe principalmente a dos motivos: primero, si bien el SLICEM es más genérico, físicamente ocupa más lugar que el SLICEL y por ende,
hace el dispositivo más costoso. Segundo, se llevaron a cabo intensos estudios del uso del CLB, y rara vez se usaba más del 50% de ellos como SLICEM.

    La Figura 9 muestra todos los bloques vistos anteriormente por separado (excepto las funciones unidas por líneas de puntos que no se han descripto todavía), ahora juntos en un SLICEM. Se procederá a describir la mitad inferior del SLICE (que es exactamente igual a la mitad superior).

Figura 9. Detalle de un SLICEM

    Cuatro líneas de señal de entradas, F(4:1), entran directamente a la LUT o Generador de Funciones F. Tal como se detalló antes, en la LUT o GF se genera la lógica combinacional necesaria. La salida de la LUT o GF, llamada D, tiene cuatro caminos posibles:
  1. Salir en forma directa o negada (XORF) por la salida X, pasando por el multiplexor FXMUX.
  2. Entrar por la entrada de datos D al elemento de almacenamiento FFX, cuya salida es XQ.
  3. Controlar el mutliplexor CYMUXF de la cadena de acarreo.
  4. Entrada de datos al multiplexor F5Mux para implementar funciones combinacionales de más de 4 entradas.
Otras entradas al SLICE son BY y BX, conocidas como Bypass Y y Bypass X. Estas pueden tener una de las siguientes funciones:
  1. Eludir (bypass) la LUT y entrar a la entrada D del elemento de almacenamiento. De este modo, en una mitad de un SLICE se puede tener al mismo tiempo una función combinacional y otra secuencial.
  2. Controlar el multiplexor F5Mux.
  3. Entrar a la cadena de acarreo.
  4. BY (solamente) controla la entrada REV de FFY y FFX (ver la Figura 5).
    Se debe resaltar el hecho de que los dos elementos de almacenamiento del SLICE son controlados por el mismo reloj y las mismas señales de habilitación de reloj y de reset. También que la salida de una mitad del SLICE, por ejemplo XQ, puede entrar en la otra mitad del SLICE, por la entrada BY por ejemplo, utilizando rutas de conexión local. Esto es muy usado para sincronizar una señal asincrónica utilizando doble flip-flop, con un mínimo retardo entre ellos.

jueves, 30 de julio de 2015

Arquitectura de un FPGA


    En un post anterior se explicó que la celda de configuración es el elemento básico de cualquier FPGA y que en ella se determina la configuración de cada elemento lógico y la configuración de los elementos de ruteo y de las interconexiones. Ahora toca hablar sobre otros componentes y como estos están organizados dentro de un FPGA para que puedan realizar la función de lo que nosotros hemos programado, es decir hablaremos sobre su Arquitectura Interna.

   La arquitectura de un FPGA varía de un fabricante a otro. En realidad es una discusión permanente, en la que cada fabricante se atribuye que tiene la mejor arquitectura. Independientemente del fabricante elegido para el diseño, ciertamente el más beneficiado en esta competencia es el usuario final de los FPGAs. En la carrera por diferenciarse como el mejor, cada fabricante incluye tecnología de punta en sus dispositivos, aumenta el rendimiento, baja los costos, ofrece bloques enteros de propiedad intelectual (Intellectual Property, IP) como así también bloques en silicio dentro del FPGA para aplicaciones complejas especificas, tales como procesador(es) PowerPC, Gigabit Transceivers, PCIe, controlador Ethernet, etc.

    A pesar de tratar de diferenciarse uno del otro, en realidad los FPGAs de los diferentes fabricantes tienen muchos componentes en común, tales como bloques lógicos programables, bloques de memoria de doble puerto (dual port), bloques para ejecución de MACs ( Multiplicador–Acumulador o bloques DSPs), bloques de control de reloj (generación de frecuencias a partir de una frecuencia base, corrimiento de fase), bloques de entrada/salida, etc. Debido a su similitud con otros FPGAs, en este blog se verá en detalle la arquitectura de uno de los fabricantes, los FPGAs de Xilinx.

    La empresa Xilinx ofrece al mercado dos tipos de FPGAs: una de bajo costo, performance media y otra de alto costo, performance alta-muy alta. La primera se denomina la familia de los FPGA Spartan, y la segunda los FPGA Virtex. A su vez, y debido a la gran competitividad del mercado, estas familias se van renovando cada dos o tres años. Tal es así que, por ejemplo, la familia Spartan fué evolucionando como Spartan, Spartan 2, Spartan 3 y la recientemente lanzada Spartan 6. Del mismo modo para la Virtex, comenzando con Virtex, Virtex-E, Virtex 2, Virtex 2Pro, Virtex 4, Virtex 5 y la reciente Virtex 6.

Figura 1. Arquitectura de un FPGA Spartan 3

    Por ejemplo, la Figura 1 muestra cómo están organizados los distintos componentes en un FPGA Spartan 3. Se puede observar el anillo de bloques de E/S (Input/Output Blocks, IOBs) que rodea el arreglo matricial de los bloques lógicos configurables (Configurable Logic Blocks, CLBs). Los bloques de memoria RAM en realidad constan de varios bloques de memoria RAM de 18K bits. Cada
bloque de memoria RAM está asociado a un multiplicador dedicado. Los controladores de reloj (Digital Clock Manager, DCM) están distribuidos de manera que hay dos en la parte superior, dos en la inferior y uno en cada uno de los costados del FPGA. En la Figura no se muestran la gran cantidad de recursos destinados a la interconexión de los diferentes componentes del FPGA.

Los seis elementos funcionales programables que componen la arquitectura de un FPGA modelo Spartan III son los siguientes:
  1. Bloques Lógicos configurables (Configurable Logic Blocks – CLBs): Contienen Look-Up Tables basadas en tecnología RAM (LUTs) para implementar funciones lógicas y elementos de almacenamiento que pueden ser usados como flip-flops o como latches. 
  2. Bloques de entrada/salida (Input/Output Blocks – IOBs): Controlan el flujo de datos entre los pines de entrada/salida y la lógica interna del dispositivo. Soportan flujo bidireccional más operación tri-estado y un conjunto de estándares de voltaje e impedancia controlados de manera digital.
  3. Bloques de memoria RAM (Block RAM): Proveen almacenamiento de datos en bloques de 18 Kbits con dos puertos independientes cada uno.
  4. Bloques de multiplicación: Aceptan dos números binarios de 18 bit como entrada y entregan uno de 36 bits.
  5. Celdas de Interconexión: Son celdas que definen el camino (ruta) a seguir por cada señal interna del FPGA. 
  6. Administradores digitales de reloj (Digital Clock Managers – DCMs): Estos elementos proveen funciones digitales auto calibradas, las que se encargan de distribuir, retrazar arbitrariamente en pocos grados, desfasar en 90, 180, y 270 grados, dividir y multiplicar las señales de reloj de todo el circuito.

martes, 28 de julio de 2015

Elemento Básico de un FPGA: Celda de Configuración

    El elemento básico de un FPGA desde el punto de visto no-lógico, es decir que no tiene una función digital lógica, es la celda de configuración. Esta celda es la que va determinar la configuración de cada elemento lógico, por ejemplo si un flip-flop se va usar o no, y en caso de usarlo, si se configura como D o T. La celda de configuración también determina la configuración de los elementos de ruteo y de las interconexiones.

Existen en la actualidad cuatro tipos de celdas de configuración de un FPGA:
  • Celdas SRAM, para mantener la configuración de cada parte configurable del FPGA de forma volatil.
  • Una Celda llamada anti-fuse (anti-fusible), que consiste en una estructura microscópica la que, a diferencia de un fusible regular, esta normalmente abierta.
  • Celdas tipo Flash, que a diferencia de las SRAM, permiten mantener la configuración aún después de desconectada la alimentación del dispositivo (No Volátil). 
  • Celdas Combinadas de tipo Flash y SRAM. Las celdas Flash se usan para mantener los datos de configuración del FPGA y las SRAM para la configuración lógica del FPGA. 
FPGAs basados en celdas SRAM

Figura 1. Celda básica SRAM de configuración de los FPGAs de Xilinx

    La celda de configuración tipo SRAM se usa para mantener la configuración de cada parte configurable del FPGA. La gran ventaja de los FPGA basados en celdas SRAM es que utilizan un proceso de fabricación estándar. La ‘fabrica’ de FPGA-SRAM tiene un procedimiento de fabricación muy conocido, que es el usado en la fabricación de memorias SRAM, lo que debido a la enorme cantidad de memorias SRAM que se producen para el mercado digital, permite lograr costos de producción muy bajos, muy alta performance y trabajar con un proceso de fabricación muy amortizado y de gran rendimiento (yield).

     Como es sabido las celdas de memoria tipo SRAM pueden ser reprogramadas un sinnúmero de veces, del mismo modo un FPGA basado en celdas de configuración SRAM puede ser reprogramado un infinito número de veces, aún cuando el FPGAs ya esté montado y soldado en un circuito impreso (PCB). Esta reprogramación en PCB se denomina Programable En Circuito (In-Circuit Programmable, ISP). Esta tecnología SRAM es muy útil también para llevar a cabo una actualización rápida del sistema digital dentro del FPGA. Por ejemplo, algunos sintonizadores de televisión satelital usan FPGAs en su sistema para sus diversas funciones. Cuando por alguno motivo se necesita actualizar el sistema dentro del FPGA, se envía por satélite un nuevo archivo de configuración. La lógica del sintonizador, que interpreta el comando de actualización, procede a actualizar el archivo de configuración del FPGA (auto-actualización), evitando de este modo tener que cambiar el sintonizador. 

     La gran desventaja de las celdas SRAM es que son volátiles, lo que significa que aún un simple pulso espúreo (glitch) en la tensión de alimentación borraría la configuración del FPGA, quedando prácticamente sin ninguna funcionalidad hasta que se lo configure de nuevo. Otra desventaja es que, debido a que la selección del camino de conexión entre los diferentes bloques lógicos (llamado ruteo), se basa en celdas SRAM, se provocan grandes retardos de ruteo, lo que es un problema en diseños que requieren un rendimiento muy alto. Una desventaja más de estos dispositivos es que, en el producto final, una vez que el FPGA está en el PCB y listo para ser comercializado, necesita de una memoria externa pequeña (tipo Flash, serie o paralela) que mantiene el archivo de configuración del FPGA. El FPGA tiene una pequeña MEF que, cuando se le da tensión de alimentación, le indica al FPGA que tiene que ir a buscar la configuración del mismo a una memoria externa. Luego lee la información de la memoria y configura las celdas SRAM. Para algunas aplicaciones, como sistemas médicos de emergencia, este tiempo de lectura de la memoria y configuración es muy largo (50 ~ 500ms). Para otras aplicaciones, como interfaces series, este tiempo pasa desapercibido. 

FPGAs basados en celdas Anti-Fuse 

Figura 2. Vista microscópica del anti-fuse de Actel

   Otro tipo de FPGA usa una celda llamada anti-fuse (anti-fusible) como celda básica de configuración. Esta celda consiste en una estructura microscópica que, a diferencia de un fusible regular, está normalmente abierta. Está compuesta de tres capas, las conductoras arriba y abajo, y la aisladora en el medio (Metal-Insulator-Metal, MIM). Para configurar el dispositivo se hace circular una cierta cantidad de corriente (~5mA), lo que causa una gran potencia de disipación en un área muy pequeña, provocando el derretimiento del aislante dieléctrico (tipo Oxide-Nitride-Oxide, ONO) entre los dos electrodos conductores (SiO2, Dióxido de Silicio) formando una unión permanente muy fina de unos 20nm. La estructura anti-fuse fue creada y se usa habitualmente en ciertas familias de los FPGAs de la empresa ACTEL. Esta estructura es conocida como Programmable Logic Interconnect Circuit Element (PLICE). 

    La principal ventaja de los FPGA-Anti-Fuse es que no son volátiles, lo que para algunas aplicaciones es sumamente crítico, por ejemplo aplicaciones espaciales y aplicaciones médicas. También, debido a esta tecnología, los retardos de conexión entra los bloques lógicos son muy reducidos, por lo que el rendimiento de estos dispositivos es bastante elevado.

     Como desventajas se tienen: primero, que requieren un proceso de fabricación específico, bastante complejo, lo que lleva a que el costo de los mismos sea bastante elevado comparado con los FPGA-SRAM (como mínimo 200 veces más caros). También requieren un programador especial para poder programar el anti-fusible, y la mayor desventaja es que una vez que se han configurado con cierta lógica, ésta no se puede cambiar, lo que es conocido técnicamente como One Time Programmable (OTP). El hecho de que estos FPGAs sean OTP crea un proceso de verificación muy meticuloso de la lógica a ser programada, a fin de no tener que descartar este dispositivo tan caro por errores de diseño.

     Una de las principales aplicaciones de este tipo de FPGA es para sistemas espaciales, ya que estos FPGAs son tolerantes a las radiaciones de partículas de alta energía (los bits de configuración no pueden cambiar si son golpeados por una partícula). Como para tener una idea, un FPGA anti-fusible de término medio cuesta cerca de U$S2.000, mientras que uno de similares características tipo SRAM puede rondar los U$S 100. La diferencia de costos es abrumadora, claro que sí, está en juego la estabilidad, seguridad y confiabilidad de un satélite que puesto en órbita cuesta cerca de U$S270.000.000. No hay muchas opciones para elegir la tecnología a usar.

FPGAs basados en celdas FLASH

Figura 3. ACTEL Flash switch

    Los FPGA-Flash, tienen como ventaja lo mejor del FPGA-SRAM y del FGPA-Anti-Fuse, son reprogramables y no son volátiles. Sin embargo todavía son caros, ya que usan una tecnología más cara que la SRAM, y las celdas FLASH se usan no solo para guardar la configuración en si del FPGA, sino que también para todo lo que es ruteo, lo que hace que la cantidad de celdas FLASH por FPGA sea un gran número. Los procesos de fabricación de celdas FLASH recién ahora son más comunes. Actualmente en el mercado están apareciendo más opciones de estos dispositivos, sobre todo en los tamaños de FPGAs medianos-chicos, pero como la competencia es muy grande y a veces centavos marcan la diferencia, la demanda todavía no es considerable. Otra desventaja para los FPGAs FLASH es que el proceso de reconfiguración toma varios segundos.

     La Figura 3 detalla la estructura de una celda FLASH de la empresa ACTEL, que le llama FLASH Switch. Usa dos transistores que comparten la compuerta flotante, la que almacena la información de configuración. Uno es el transistor de sensado, el cual sólo se usa para escribir y verificar la tensión de compuerta flotante. El otro es el transistor de conexión (switching). Esta celda puede ser usada en el FPGA para conectar/separar rutas de conexiones o para configurar la lógica.

FPGAs basados en celdas Flash y SRAM 

    Finalmente hay algunos FPGAs que tienen celdas Flash y SRAM en el mismo dispositivo. Las celdas Flash se utilizan para guardar los datos de configuración del FPGA, mientras que las celdas SRAM para la configuración de la lógica del FPGA. Cuando se da tensión de alimentación, las celdas SRAM se configuran en forma casi instantánea desde la Flash, resultando una configuración del FPGA en menos de 1ms, a diferencia de un FPGA-SRAM cuyo tiempo de configuración típicamente va de los 50 hasta los 500 ms (dependiendo del tamaño del dispositivo). Esta disponibilidad casi instantánea del FPGA lo hace muy útil para aplicaciones críticas en tiempo. Estos FPGAs también permiten configurar solo las celdas SRAM, por ejemplo, durante el proceso de construcción del prototipo, sin tener que programar la Flash.

     Una gran ventaja, y que a veces es decisiva para el diseñador al elegir entre este tipo de FPGA o las FPGA-FLASH, es que, al no tener que acceder a un chip de memoria Flash externo, no hay una conexión física entre el FPGA y la memoria Flash que permita que la configuración del FPGA pueda ser expuesta, y de este modo vulnerada, para una posterior re-ingeniería (o ingeniería inversa) sobre el producto final. Se han descubierto muchos casos de productos copiados a través de la lectura de los datos de configuración (bitstream) disponibles en las rutas del circuito impreso que hay entre el FPGA y la memoria FLASH (éste problema también está presente en las FPGAs-SRAM). Por supuesto que estos dispositivos son un poco más caros que los FPGA-SRAM, pero más baratos que los FPGA-FLASH, ya que en este caso las celdas FLASH solo se usan para guardar la configuración, por lo que la cantidad de estas celdas es mucho menor que en el caso de FPGA FLASH. 

Ejemplos y Comparación 

Ejemplos de FPGA-SRAM: 

Xilinx Spartan/Virtex
Altera Cyclon/Stratix
Lattice EP/SC

Ejemplos de FPGA-Flash 

Actel Fusion/Igloo (ultra low power)

Ejemplos de FPGA-FLASH-SRAM 

Lattice XP family
Xilinx Spartan 3AN

Ejemplos de FPGA-Anti-Fuse 

Actel Sx/Mx QuicLogic pASIC

La Tabla 1 presenta una comparación entre las distintas tecnologías y las principales características de un FPGA.

Principales Caracteristicas de un FPGA



     Los FPGAs son dispositivos orientados a satisfacer una muy amplia gama de aplicaciones, desde simple lógica combinacional hasta sistemas con microprocesador embebido, transmisión tipo Ethernet, transmisión de datos series a 3.5Gb/s, todo con el mismo dispositivo. Por ello los FPGAs tienen características diversas, pero se podría decir que las principales son las siguientes:
  1. Gran cantidad de terminales de E/S. Desde 100 hasta unos 1400 terminales de E/S 
  2. Buffers de E/S programables: control de sesgo, control de corriente, configuración del estándar de E/S , pull-up y pull-down configurables 
  3. Gran cantidad de Flips-Flops, los dispositivos mas grandes tienen unos 40.000 FFs 
  4. Gran cantidad de Tablas de Búsqueda (Look-Up Tables), ~100.000 
  5. Bloques de Memoria (BRAM) de doble puerto, puerto simple, de hasta 18Mbits, configurables como RAM, ROM, FIFO y otras configuraciones 
  6. Bloques dedicados de Multiplicación 
  7. Transceptores para transmisión serie de muy alta velocidad , entre 1.5 a- 10.0Gb/s 
  8. Procesador en hardware embebido, tal como el Power-PC, ARM9 
  9. Procesadores descriptos en software, HDL, tales como el 8051, ARM3 
  10. Controladores de reloj tipo Delay Lock Loop (DLL) y Phase Lock Loop (PLLs) de hasta 550MHz. De 2 a 8 controladores por dispositivo 
  11. Control de impedancia programable por cada terminal de E/S 
  12. Interface DDR/DDR2 SDRAM soportando interfaces de hasta 800 Mb/s 
  13. Interfaz con estándares de E/S tipo diferencial tales como LVDS, SSTL diferencial, etc.
Nota: Algunas de estas terminologias pareceran complejas y dificiles de comprender, pero a medida que avancemos con la parte teorica sobre FPGA seran mas faciles de asimilar. Asi que esten pendientes de todas las entradas que se realizaran en el blog.

domingo, 26 de julio de 2015

Introducción a la Tecnologia FPGA

¿Qué es una FPGA?

     Las siglas FPGA significan Field Programmable Gate Array. Como su nombre indica, se trata de un dispositivo compuesto por una serie de bloques lógicos (compuertas, registros, memorias, flip/flops, etc) programables, es decir, la interconexión entre estos bloques lógicos y su funcionalidad no viene predefinida sino que se puede programar y reprogramar. Al utilizar bloques de lógica preconstruidos y recursos para ruteo programables, uno podrá configurar estos chips para implementar funcionalidades personalizadas en hardware sin tener que utilizar una taba de nodos o un cautín. Sólo deberá desarrollar código de programacion, para luego compilarlos en un archivo de configuración o bitstream que contenga información de cómo deben conectarse los componentes y programarlos en el dispositivo.

     Los FPGA surgen de los conceptos desarrollados en los PAL y los CPLD. Este tipo de dispositivo está a medio camino entre los circuitos de propósito específico (ASIC) y los procesadores de propósito general en prestaciones, posibilidad de optimización, consumo de potencia, etc. Su principal ventaja frente a los diseños específicos es que son reprogramables, por lo que proporcionan una gran flexibilidad de diseño, que los costes de desarrollo y adquisición sean muy económicos, que el tiempo de desarrollo sea mucho menor y que exista la posibilidad de realizar reconfiguraciones dinámicas (durante el funcionamiento del dispositivo) del diseño.

    La adopción de chips FPGA en la industria ha sido impulsada por el hecho de que los FPGAs combinan lo mejor de los ASICs y de los sistemas basados en procesadores. Ofrecen velocidades temporizadas por hardware y fiabilidad, pero sin requerir altos volúmenes de recursos para compensar el gran gasto que genera un diseño personalizado de ASIC. El silicio reprogramable tiene la misma capacidad de ajustarse que un software que se ejecuta en un sistema basado en procesadores, pero no está limitado por el número de núcleos disponibles. A diferencia de los procesadores, los FPGAs llevan a cabo diferentes operaciones de manera paralela, por lo que éstas no necesitan competir por los mismos recursos. Cada tarea de procesos independientes se asigna a una sección dedicada del chip, y puede ejecutarse de manera autónoma sin ser afectada por otros bloques de lógica. Como resultado, el rendimiento de una parte de la aplicación no se ve afectado cuando se agregan otros procesos.

Los Cinco Beneficios Principales de la Tecnología FPGA



1. Rendimiento


     Aprovechando del paralelismo del hardware, los FPGAs exceden la potencia de cómputo de los procesadores digitales de señales (DSPs) rompiendo el paradigma de ejecución secuencial y logrando más en cada ciclo de reloj. El controlar entradas y salidas (E/S) a nivel de hardware ofrece tiempos de respuesta más veloces y funcionalidad especializada que coincide con los requerimientos de una aplicación.

2. Tiempo en llegar al mercado

     La tecnología FPGA ofrece flexibilidad y capacidades de rápido desarrollo de prototipos para enfrentar los retos de que un producto se libere tarde al mercado. Se puede probar una idea o un concepto y verificarlo en hardware sin tener que pasar por el largo proceso de fabricación por el que pasa un diseño personalizado de ASIC. Posteriormente se podrá implementar cambios y realizar iteraciones de un diseño FPGA en cuestión de horas en vez de semanas. También existe hardware comercial listo para usarse (COTS) con diferentes tipos de E/S ya conectados a un chip FPGA programable por el usuario. El aumento en disponibilidad de herramientas de software de alto nivel disminuye la curva de aprendizaje con niveles de abstracción. Estas herramientas frecuentemente incluyen importantes núcleos IP (funciones pre-construidas) para control avanzado y procesamiento de señales.

3. Precio 

    El precio de la ingeniería no recurrente de un diseño personalizado ASIC excede considerablemente al de las soluciones de hardware basadas en FPGA. La fuerte inversión inicial de los ASICs es fácilmente justificable para los fabricantes de equipos originales que embarcan miles de chips por año, pero muchos usuarios finales necesitan la funcionalidad de un hardware personalizado para decenas o cientos de sistemas en desarrollo. La misma naturaleza programable del silicio implica que no hay precio de fabricación o largos plazos de ejecución de ensamblado. Los requerimientos de un sistema van cambiando con el tiempo, y el precio de cambiar incrementalmente los diseños FPGA es insignificante al compararlo con el precio de implementar cambios en un ASIC antes de su lanzamiento.

4. Fiabilidad

     Mientras que las herramientas de software ofrecen un entorno de programación, los circuitos de un FPGA son una implementación segura de la ejecución de un programa. Los sistemas basados en procesadores frecuentemente implican varios niveles de abstracción para auxiliar a programar las tareas y compartir los recursos entre procesos múltiples. El software a nivel driver se encarga de administrar los recursos de hardware y el sistema operativo administra la memoria y el ancho de banda del procesador. El núcleo de un procesador sólo puede ejecutar una instrucción a la vez, y los sistemas basados en procesadores están siempre en riesgo de que sus tareas se obstruyan entre sí. Los FPGAs, que no necesitan sistemas operativos, minimizan los retos de fiabilidad con ejecución paralela y hardware preciso dedicado a cada tarea.

5. Mantenimiento a largo plazo

    Como se mencionó, los chips FPGA son actualizables en campo y no requieren el tiempo y el precio que implica rediseñar un ASIC. Los protocolos de comunicación digital por ejemplo, tienen especificaciones que podrían cambiar con el tiempo, y las interfaces basadas en ASICs podrían causar retos de mantenimiento y habilidad de actualización. Los chips FPGA, al ser reconfigurables, son capaces de mantenerse al tanto con modificaciones a futuro que pudieran ser necesarias. Mientras el producto o sistema se va desarrollando, usted puede implementarle mejoras funcionales sin la necesidad de invertir tiempo rediseñando el hardware o modificando el diseño de la tarjeta.

Escoger una FPGA

     Al examinar las especificaciones de un chip FPGA, se tiene que observar que generalmente están divididos en bloques de lógica configurables como segmentos o células de lógica, funciones fijas de lógica como multiplicadores, y recursos de memoria como RAM en bloque embebida. El chip FPGA tiene otros componentes, pero éstos son generalmente los más importantes cuando se seleccionan y comparan FPGAs para una aplicación en particular. 


     La Tabla 1 muestra especificaciones de recursos usados para comparar chips FPGA dentro de varias familias de Xilinx. El número de compuertas ha sido una forma típica de comparar el tamaño de los chips FPGA contra la tecnología ASIC, pero no describe realmente el número de componentes individuales dentro de un FPGA. Ésta es una de las razones por las cuales Xilinx no especificó el número de compuertas de sistema equivalentes en la nueva familia Virtex-5.

¿Cómo se programa una FPGA para que realice las funciones que nosotros deseamos?

     Programar una FPGA es muy parecido a programar un procesador de propósito general, se realiza mediante un programador, el cual define la función lógica que realizará cada uno de los bloques lógicos de la FPGA e interconectarlos. Para ello debe utilizar alguno de los entornos de desarrollo especializados en el diseño de sistemas sobre FPGA. Si se trata de un diseño sencillo puede hacerse con un esquemático, si no, habrá que utilizar un lenguaje de programación especial HDL (Hardware Description Language) como VHDL o Verilog.

    En los últimos años han aparecido lenguajes para diseñar sistemas en FPGA de un nivel mucho más alto, por lo que un diseñador poco experimentado tendrá mucho más fácil su trabajo. Con lenguajes como SystemC o HandelC, pasar de la implementación software en C de una aplicación a su diseño sobre una FPGA es mucho más rápido y sencillo.