Notas:
El texto marcado en amarillo es considerado de gran importancia. En cambio, el texto marcado en celeste se
considera solamente de interés informativo, conocimiento adicional no critico.
FPGA
Un conjuntos de puertas programables en campo o FPGA (Field Programmable Gate Array) es un complejo
circuito integrado digital programable compuesto por bloques lógicos configurables (CLB) y puertos de
entrada/salida (IOB), cuya interconexión y funcionalidad puede ser programada mediante un lenguaje de
descripción especializado o HDL(High Definition Languaje).
Su principal característica y ventaja es que pueden reprogramarse para un trabajo específico o cambiar sus
requisitos después de haberse fabricado. Esto también implica que en muchos casos se pueden hacer cambios
físicos sin hacer modificaciones costosas en la placa que lo soporta.
Básicamente, una FPGA es un conjunto de múltiples circuitos (lógicos y de otros tipos) dispuestos
matricialmente, cuyas interconexiones son programables por el usuario para la aplicación requerida. En una
FPGA se programa su hardware, a diferencia de los microcontroladores / microprocesadores, en los que solo
existe un hardware fijo y se programa su software (firmware).
Históricamente, las FPGA fueron inventadas en el año 1984 por Ross Freeman y Bernard Von Der Schmitt,
cofundadores de la empresa Xilinx, fabricante de las mismas. Como resultado de numerosas evoluciones, la
compañía produjo la primera familia de dispositivos lógicos programables por el usuario, de propósito general.
Las FPGA, además de contener puertas lógicas AND y OR, tienen memoria RAM, controladores de reloj, etc.,
por lo que son muy apropiadas para el diseño de sistemas embebidos con microprocesador. La compañía Xilinx
ha evolucionado dicha tecnología hasta convertirla en un nuevo concepto a tener en cuenta en ciertos entornos
de trabajo.
Las FPGA se aplican en funciones similares a los ASICs. Un ASIC (application-specific integrated circuit) es un
circuito integrado hecho a la medida para un uso en particular, en vez de ser concebido para propósitos de uso
general. Por ejemplo, un chip diseñado únicamente para ser usado en un teléfono móvil es un ASIC. Las FPGAs
son más lentas, consumen más energía y no son capaces de abarcar sistemas tan complejos como ellos. Sin
embargo, frente a los ASIC tienen la ventaja de ser reprogramables. Además, tienen un menor coste de
desarrollo y adquisición y su tiempo de desarrollo también es menor.
Ciertos fabricantes desarrollan FPGAs que sólo pueden programarse una vez, colocando sus ventajas e
inconvenientes a medio camino entre los ASIC y las FPGA programables.
No obstante, la programación de una FPGA está solamente limitada por las características de la tarjeta y de la
plataforma. También es necesario un software especial diseñado por el propio fabricante, como por ejemplo,
la herramienta Xilinx Platform Studio diseñado por la compañía Xilinx para cargar la configuración de sus FPGAs
Muchas FPGA modernas soportan la reconfiguración parcial del sistema, permitiendo que una parte del diseño
sea reprogramada, mientras las demás partes siguen funcionando. Este es el principio de la idea de la
computación reconfigurable, o los sistemas reconfigurables.
Arquitectura de los circuitos
Una FPGA se compone de una gran cantidad de elementos denominados Bloques Lógicos Configurables (CLB)
-también llamados Logic Cells (LC)- que están interconectados por una serie de uniones programables llamadas
Fabric (tejido), que sirven de buses (rutas) para el intercambio de señales entre CLBs. La interfaz que controla
la comunicación entre la FPGA y los dispositivos externos está compuesta por los bloques de entrada/salida
(I/O).
Componentes principales de una FPGA
Cada CLB está compuesto de varios Bloques Lógicos. En la siguiente figura se muestra la arquitectura básica
de una FPGA.
Los tipos de Bloques Lógicos que constituyen una FPGA, y que son configurables cuando esta es programada,
son:
1. Look Up Tables (LUT). Almacena una lista, predefinida por el usuario, de salidas y entradas lógicas. Se carga
con valores relevantes para la FPGA según sus instrucciones específicas. Una LUT es como una RAM que se
carga cada vez que se conecta la FPGA. Cuando se configura una FPGA, los bits de la LUT se cargan con unos
o ceros, en función de la configuración de la tabla de verdad deseada. En lugar de conectar numerosas
puertas lógicas, para crear la tabla de verdad, esto se simula en un tipo especial de RAM. Las LUT con cuatro
a seis bits de entrada son ampliamente utilizadas.
2. Multiplexores (MUX). Son circuitos combinacionales con varias entradas y una única salida de datos.
Disponen de entradas de control capaces de seleccionan una sola de las entradas de datos existentes. La
FPGA los emplea como dispositivo para recibir varias entradas y transmitirlas por un medio de transmisión
compartido, dividiendo el medio de transmisión en múltiples canales.
3. Flip-Flops tipo D (DFF). Son registros binarios que se utilizan para sincronizar la lógica y guardar estados
lógicos entre ciclos de reloj dentro de una FPGA. En cada flanco de reloj, un flip-flop bloquea el valor 1 o 0
en su entrada y mantiene ese valor constante hasta el siguiente flanco de reloj. Se utiliza para mantener el
estado dentro del chip.
[Link] Adders (FA). Realiza operaciones aritméticas en la FPGA, sumando o restando dígitos binarios.
HDL
Un lenguaje HDL para descripción de hardware (HDL: Hardware Description Language) es una herramienta que
nos permite describir el uso y la estructura de sistemas de diseño digital mediante un esquema textual de
codificación. Utilizando HDL el diseñador puede describir la operación del sistema con niveles de abstracción.
Para transformar toda la multitud de Bloques Lógicos en la configuración correcta y ejecutar la aplicación, el
diseño comienza definiendo las tareas requeridas en la herramienta de desarrollo y luego compilándolas en
un archivo de configuración que contiene información sobre cómo conectar los CLB y otros módulos. El proceso
es similar a un ciclo de desarrollo de software, excepto que el objetivo es diseñar el propio hardware en lugar
de un conjunto de instrucciones para ejecutar en una plataforma de hardware predefinida.
Existen tres tipos de lenguajes HDL:
1. De bajo nivel: Permiten definir un circuito a nivel de arquitectura (Flip Flops, compuertas básicas, ecuaciones
lógicas) como son los lenguajes: – PALASM, CUPL, ABEL
2. De nivel medio: permiten definir un circuito en modo jerárquico, así como la generación condicional/iterativa
de hardware; en ciertos permiten el uso de descripciones de comportamiento (funciones aritméticas,
máquinas de estado), como es el lenguaje: – AHDL
3. De alto nivel: no sólo posibilitan mayor nivel de abstracción, sino que también son usados para la simulación,
para la síntesis del generador de estímulos y el monitor de salidas, como son los lenguajes: -VHDL, VERILOG.
Los lenguajes de descripción de hardware (HDL) normalmente utilizados para programar una FPGA son VHDL
o Verilog.
Los HDLs poseen herramientas de síntesis lógica y de alto nivel, entendiéndose por síntesis al proceso, que a
partir de la descripción del comportamiento de un circuito se genera automáticamente otro a nivel estructural,
capaz de ser “acomodado” en el dispositivo de destino, es decir, la descripción del circuito (en cualquier modelo
de descripción) se convierte en un circuito de compuertas lógicas optimizado para finalmente ser
implementado en una tecnología escogida (PLDs, CPLDs,, FPGAs, celdas estándar etc.
La descripción de hardware, en sus inicios, fue mediante esquemas, que son representaciones gráficas de los
circuitos. Posteriormente se utilizaron instrucciones simples, que permitían la descripción total de un circuito,
a este proceso se le denominó Netlist. Básicamente, el Netlist consistía en dar una lista de los componentes y
sus interconexiones, mas no describe cómo funciona el circuito, por lo que no es un lenguaje de alto nivel. El
Netlist es la primera forma que apareció de describir un circuito mediante un lenguaje, este diseño resultó ser
complejo para diseños con un gran número de componentes.
A partir de eso, surgió el interés para describir circuitos utilizando directamente un lenguaje de alto nivel, en
lugar de simples esquemas o instrucciones Netlist. Mientras las herramientas de diseño se volvían más
sofisticada, eran más viables la posibilidad de desarrollar circuitos digitales, mediante dispositivos
programables. Una opción fue la descripción de circuitos con el uso de un lenguaje de alto nivel de abstracción
que permitiera, no solo la simulación, sino la síntesis de circuitos.
VHDL
VHDL es un lenguaje de especificación definido por el IEEE (Institute of Electrical and Electronics Engineers)
(ANSI/IEEE 1076-1993) utilizado para describir circuitos digitales y para la automatización de diseño electrónico,
a estos lenguajes se les suele llama lenguajes de descripción de hardware.
VHDL es acrónimo proveniente de la combinación de dos acrónimos: VHSIC (Very High Speed Integrated Circuit)
y HDL (Hardware Description Language). Aunque puede ser usado de forma general para describir cualquier
circuito digital se usa principalmente para programar PLD (Programable Logic Device - Dispositivo Lógico
Programable), FPGA (Field Programmable Gate Array), ASIC y similares.
Originalmente, el lenguaje VHDL fue desarrollado por el departamento de defensa de los Estados Unidos a
inicios de los años 80 basado en el lenguaje de programación ADA con el fin de simular circuitos eléctricos
digitales. Posteriormente se desarrollaron herramientas de síntesis e implementación en hardware a partir de
los archivos VHD.
Mas información sobre el lenguaje VHDL en [Link]
CGRA
Las CGRA(Coarse-Grain Reconfigurable Arrays) o arquitectura reconfigurable de grano grueso son la evolución
natural de las FPGA. Los FPGA son reconfigurables a nivel de bits, mientras que los CGRA son reconfigurables
a nivel de palabras.
Se puede implementar una CGRA en una FPGA. Por ejemplo, en una FPGA puede diseccionar una señal HDMI
en todos sus bits y realizar una manipulación muy precisa en esa señal; una CGRA generalmente solo permite
cambiar las rutas de datos de ciertas maneras y aplicar operaciones a nivel de palabras, como la suma o la
multiplicación.
Los CGRA constan de una matriz de una gran cantidad de unidades funcionales (FU) interconectadas por una
red de estilo malla. Los archivos de registro se distribuyen en todas las CGRA para contener valores temporales
y solo son accesibles para un subconjunto de FU. Las FU pueden ejecutar operaciones comunes a nivel de
palabras, incluidas suma, resta y multiplicación. A diferencia de los FPGA, los CGRA tienen tiempos de
reconfiguración cortos, características de bajo retardo y bajo consumo de energía, ya que se construyen a
partir de implementaciones de celdas estándar. Por lo tanto, se sacrifica la Re-configurabilidad a nivel de
puerta, pero el resultado es un gran aumento en la eficiencia del hardware.
Un buen compilador es esencial para explotar la abundancia de recursos informáticos disponibles en un CGRA.
Sin embargo, la escasa conectividad y los archivos de registro distribuidos presentan desafíos difíciles para la
fase de programación de un compilador. La escasa conectividad hace que recaiga en el compilador la carga de
enrutar los operandos de los productores a los consumidores. Los programadores tradicionales que
simplemente asignan una FU y una hora a cada operación del programa no son adecuados porque no tienen
en cuenta la enrutabilidad. Los valores de los operandos deben enrutarse explícitamente entre las UF
productoras y consumidoras. Además, no se proporcionan recursos de enrutamiento dedicados. Más bien,
una FU puede servir como recurso informático o como recurso de enrutamiento en un momento dado. Por lo
tanto, un programador compilador debe gestionar el cálculo y el flujo de operandos en todo el conjunto para
asignar eficazmente aplicaciones a CGRA.
Proyección a futuro - Aplicaciones de las FPGA y CGRA
Tienen un amplio espectro de aplicaciones: como industria automotriz, reconocimiento de voz, controladores
de dispositivos, sistemas militares, radiotransmisores/receptores gestionados por software, computación de
alto rendimiento, sistemas de emulación de hardware, equipos de investigación en medicina, etc. Además,
tienen un papel notable en el desarrollo de sistemas integrados debido a su capacidad para iniciar el desarrollo
de software (SW) del sistema simultáneamente con el hardware (HW), permitir simulaciones de rendimiento
del sistema en una fase muy temprana del desarrollo, pudiendo realizar varias particiones del sistema (SW y
HW), ensayos e iteraciones antes de la congelación final de la arquitectura del sistema.
La tendencia es incluir componentes con tecnología System-On-Chip (SoC), que integran la arquitectura de la
FPGA/CGRA con un microprocesador CPU en un único componente. En comparación con los dispositivos
separados, un SoC FPGA/CGRA proporciona una mayor integración, menor consumo, una comunicación de
mayor ancho de banda entre bloques y ahorro de espacio en la placa de circuito impreso.
En la actualidad, las FPGA/CGRA están adquiriendo suma importancia de cara al diseño de sistemas debido al
notable incremento de la velocidad de proceso en comparación con el uso de microprocesadores /
microcontroladores, lo que las convierte en componentes de muy indicada aplicación en Inteligencia Artificial
o, en general, en aplicaciones donde la optimización de la eficiencia sea primordial.
FPGA vs CGRA
Tanto los FPGA como los CGRA son tipos de hardware reconfigurable. Permiten a los usuarios programar o
reconfigurar la lógica de un dispositivo después de su fabricación. Sin embargo, existen algunas diferencias
clave entre los dos:
1. Los FPGA se componen de una gran cantidad de bloques lógicos configurables (CLB) e interconexiones
programables, que se pueden utilizar para crear circuitos digitales personalizados.
2. Los CGRA, por otro lado, se componen de una cantidad menor de elementos de procesamiento (PE)
prediseñados más grandes que se pueden configurar para realizar tareas específicas.
3. Los FPGA son generalmente más flexibles que los CGRA, ya que se pueden usar para crear una Amplia gama
de circuitos digitales.
4. Los CGRA, por otro lado, son más especializados y generalmente se usan para tipos específicos de
aplicaciones, como procesamiento de señales y procesamiento de imágenes.
5. En términos de rendimiento, los FPGA tienden a tener un menor consumo de energía y áreas de matriz más
pequeñas, mientras que los CGRA tienden a tener mayor rendimiento y mejor soporte para procesamiento
paralelo.
6. En general, los FPGA y CGRA son herramientas poderosas para crear circuitos digitales personalizados, pero
tienen diferentes fortalezas y son adecuados para diferentes tipos de aplicaciones.
Xilinx
La empresa Xilinx es líder en la fabricación de FPGA, destacándose productos como las Virtex, esta es la familia
insignia de los productos desarrollados por Xilinx. Otras líneas de productos actuales incluyen Kintex (gama media)
y Artix (bajo costo), cada uno incluyendo configuraciones y modelos optimizados para diferentes aplicaciones.
Los FPGAs de Virtex suelen programar en lenguajes de descripción de hardware como VHDL o Verilog, utilizando
el software de Xilinx ISE o Vivado Design Suite.4 Los productos de FPGAs de Xilinx han sido reconocidos por EE
Times, EDN y otros por su innovación e impacto en el mercado.
La serie de FPGAs Virtex se basa en bloques lógicos configurables (CLBs), donde cada CLB es equivalente a
múltiples puertas ASIC.89 Cada CLB se compone de varios sectores, que difieren en la construcción entre las
familias Virtex.
Los FPGA de Virtex incluyen un bloque I/O de control de pines de entrada/salida en el chip Virtex, que soporta una
gran variedad de normas de señalización. Los pines I/O se agrupan en bancos de I/O, donde cada banco puede
soportar una tensión diferente.
Además de la lógica FPGA configurable, los FPGA de Virtex incluyen hardware de función fija para los
multiplicadores, la memoria, los núcleos de microprocesadores, FIFO y lógicas ECC, bloques DSP, controladores
de PCI Express, bloques de Ethernet MAC, y transceptores de serie de alta velocidad.
Algunos miembros de la familia Virtex (como el Virtex-5QX ) están disponibles en envases resistentes a la radiación,
para aplicaciones del espacio exterior.13
Intel
La empresa Intel fabrica varios modelos de FPGA, enmarcados en las familias Agilex 9, 7, 5 y 3, unificados mediante
una arquitectura única, mejorados con diseño, software y fabricación propios de Intel, con optimizaciones en
todos los niveles de desempeño, eficiencia energética y factor de forma para abordar una amplia variedad de
cargas de trabajo.
A continuación se relacionan las especificaciones de las FPGA Agilex por familia.
Bibliografía
[Link]
[Link]/fpga/#:~:text=Una%20FPGA%20(Field%20Programmable%20Gate,un%20lenguaje%20de%20d
escripci%C3%B3n%20especializado.
[Link]
[Link]