Una matriz de puerta programable en campo (FPGA) es un tipo versátil de circuito integrado que, a diferencia de los dispositivos lógicos tradicionales, como los circuitos integrados de aplicaciones específicas (ASIC), está diseñado para ser programable (y a menudo reprogramable) para adaptarse a diferentes propósitos, en particular la computación de alto rendimiento (HPC) y la creación de prototipos.
La expresión "programable en campo" se refiere a la capacidad de una FPGA para programarse "sobre el terreno" o después de que el fabricante haya lanzado el chip. Xilinx, un fabricante de tecnología, introdujo por primera vez las FPGA en 1985.
Las FPGA pueden adaptarse para adaptarse a varios casos de uso, incluidos los emergentes o experimentales, sin necesidad de modificar o alterar físicamente su hardware. Esta versatilidad reconfigurable se logra mediante una serie de bloques lógicos programables (PLB) fijos e interconexiones flexibles que pueden configurarse para realizar operaciones complejas o para que sirvan como simples puertas lógicas. Las FPGA también incluyen elementos de memoria, desde flip-flops de un solo bit hasta matrices de memoria muy densas, para el almacenamiento de datos digitales dentro del dispositivo.
Las FPGA son muy valoradas por su combinación de alto rendimiento y extrema versatilidad. Son especialmente útiles en aplicaciones que requieren alto rendimiento, baja latencia y flexibilidad en tiempo real. Por este motivo, se utilizan habitualmente en el sector de las telecomunicaciones, el de la automoción y el aeroespacial.
Las FPGA y los ASIC tienen diferentes propósitos.
Un ASIC se desarrolla y optimiza para una aplicación específica y no se puede reconfigurar. Sus elementos de circuito interno (transistores) están dispuestos en una estructura fija con una interconexión (cableado) fija e inmutable en el medio.
Dado que un ASIC cumple solo una función, incorpora solo los elementos lógicos necesarios para ese fin; por ejemplo, si no se necesita un multiplicador de punto flotante, no se incorpora al diseño.
Por el contrario, una FPGA puede configurarse y reconfigurarse para cualquier aplicación potencial. Al igual que un ASIC, los elementos de su circuito interno están dispuestos en una estructura fija (bloques lógicos programables o PLB) pero con interconexiones reconfigurables en el medio. Los elementos lógicos de una FPGA se seleccionan para ser compatibles con una amplia variedad de aplicaciones, pero sufren el problema de “úselo o piérdalo” cuando no se utilizan elementos lógicos específicos. Si no se necesita un multiplicador de punto flotante para una aplicación en particular, pero la FPGA contiene uno, ese recurso no está conectado y representa "espacio desperdiciado" dentro de la FPGA.
Aunque ambos dispositivos pueden contener cientos de millones de transistores, un ASIC puede usar estos para ofrecer una alta eficiencia y rendimiento a expensas de la flexibilidad. Los costes iniciales de la NRE para desarrollar un ASIC pueden ser exorbitantes, mientras que los costes unitarios pueden ser relativamente bajos.
Una FPGA utiliza sus transistores para ofrecer una alta eficiencia y un alto rendimiento, pero con una enorme flexibilidad. Los costes iniciales de la NRE para desarrollar una FPGA pueden ser extremadamente bajos, mientras que los costes unitarios son generalmente más altos. Es importante señalar que no se trata de reglas rígidas. En el ámbito del rendimiento, por ejemplo, las FPGA recientes han evolucionado para ofrecer velocidades de reloj de más de 500 MHz y, por lo general, se fabrican con geometrías de proceso de silicio de última generación. En resumen, la frontera entre las FPGA y los ASIC se vuelve cada vez más difusa con cada nueva generación de FPGA.
Una FPGA se convierte en un dispositivo de hardware personalizado configurando sus PLB e interconexiones mediante un lenguaje de descripción de hardware (HDL) estándar como Verilog o VHDL.
Las funciones específicas basadas en FPGA, así como las interconexiones entre esas funciones, se "describen" en un HDL. La descripción se compila para producir un archivo de configuración de FPGA. Mediante un lenguaje de descripción de hardware, es posible utilizar los recursos integrados de la FPGA (matrices de memoria, núcleos PCI y muchos más), así como crear circuitos lógicos personalizados (sumadores, multiplexores y otras funciones específicas de la aplicación) a partir de elementos más primitivos de la FPGA.
En un proceso conocido como síntesis, el código HDL se traduce en una lista de redes, una descripción eficaz de las puertas lógicas y las interconexiones necesarias para implementar el código HDL. A continuación, la lista de conexiones se asigna a los PLB e interconexiones que forman físicamente el circuito único.
Las FPGA modernas producidas por fabricantes como Intel y Altera ofrecen una amplia gama de características digitales y analógicas, que incluyen impresionantes densidades lógicas, memoria flash, procesadores integrados y bloques de procesamiento digital de señales (DSP). Las FPGA pueden configurarse y reconfigurarse modificando las entradas y los outputs eléctricos, eligiendo qué recursos internos se utilizan y determinando cómo se conectan estos a través de recursos de enrutamiento configurables, siendo el resultado final una solución de hardware dedicada para resolver un problema concreto.
Al igual que con el software, el desarrollo de diseños complejos de FPGA podría racionalizarse mediante el uso de bibliotecas prediseñadas de diversas funciones y circuitos digitales, denominados núcleos de propiedad intelectual (PI). Estas bibliotecas están disponibles para su compra o alquiler a proveedores de FPGA y proveedores externos que a menudo se especializan en el desarrollo de diversas funciones.
Además de los componentes de circuitos tradicionales como microcontroladores y convertidores, para lograr sus funciones reconfigurables, los dispositivos FPGA modernos utilizan una combinación de varios elementos programables.
Estos elementos programables son principalmente bloques lógicos configurables (CLB), interconexiones programables, enrutamiento programable, bloques de entrada/salida programables (IOB), memoria en chip y bloques de procesamiento digital de señales (DSPs).
Los bloques lógicos configurables (CLB) son el componente principal de las FPGA. Los CLB generalmente contienen algunos elementos lógicos primitivos (puertas lógicas, pequeñas tablas de búsqueda, flip-flops, multiplexores y muchos más). Dentro del CLB, un flip-flop generalmente sirve como el principal elemento de almacenamiento de datos, aunque las familias de dispositivos más nuevas también pueden incorporar elementos de memoria poco profundos dentro del CLB.
Los enlaces construidos a partir de segmentos de cable unidos por interruptores programables eléctricamente proporcionan vías de enrutamiento entre el bloque lógico de la FPGA. Las cajas de interruptores que contienen varios interruptores semiconductores básicos se utilizan habitualmente para establecer la interconexión programable de una FPGA. Estas interconexiones permiten enlazar las salidas de una unidad específica o un pad de entrada con cualquier otra célula o pad dentro del circuito.
Los segmentos de cables prefabricados se unen entre sí (o se dejan sin conectar) mediante las interconexiones programables para ofrecer una infraestructura de enrutamiento totalmente programable dentro de una FPGA. Los recursos de enrutamiento son de naturaleza jerárquica, con una combinación de cables largos, medios y cortos que abarcan varias longitudes dentro de la FPGA. Esta infraestructura de enrutamiento programable, habilitada por las interconexiones programables, permite a los usuarios configurar los recursos de la FPGA para la implementación de una tarea o aplicación concreta.
La interfaz entre una FPGA y otros dispositivos externos se realiza mediante bloques de entrada/salida (IOB). Los IOB son recursos de entrada y salida programables que se configuran para que coincidan con los protocolos de cualquier dispositivo externo al que se conecte la FPGA. Todas las señales que entran o salen de la FPGA lo hacen a través de los pines del dispositivo y los IOB asociados.
Las primeras FPGA usaban solo flip-flops (FF) para integrar la memoria en los bloques lógicos de la FPGA. Sin embargo, a medida que aumentaban las capacidades de las FPGA, los diseños cada vez más complejos requerían una memoria dedicada en el chip para el almacenamiento en búfer y la reutilización de los datos. Las FPGA modernas utilizan grandes matrices de memoria SRAM, tablas de búsqueda (LUT) más pequeñas y elementos flip-flop tradicionales para proporcionar el almacenamiento necesario para una aplicación específica.
En las primeras FPGA, los únicos recursos aritméticos disponibles eran sumadores simples; cualquier cosa más compleja se construía a partir de elementos lógicos más primitivos. Sin embargo, a medida que avanzaba la tecnología del silicio, se incorporaron recursos aritméticos más complejos a las FPGA, que culminaron en el moderno bloque FPGA DSP. Los bloques DSP proporcionan recursos altamente optimizados (multiplicadores, acumuladores y muchos más) para la implementación de funciones aritméticas de alto rendimiento.
Su uso elimina la necesidad de implementar estas funciones en los CLB de propósito general, liberando así los CLB para otros fines. Operaciones como el filtrado digital, la convolución, las transformadas de Fourier, las operaciones trigonométricas y muchas más pueden aprovechar estos recursos para obtener un rendimiento en tiempo real en aplicaciones que van desde el procesamiento de radares, la formación de haces, el reconocimiento de patrones y muchas más.
Las FPGA están disponibles en distintas variedades que ofrecen diversos tipos de configurabilidad, consumo energético, elementos programables y memoria en chip.
Versátiles por naturaleza, las FPGA se adaptan bien a muchas aplicaciones diferentes.
Las FPGA son las preferidas para el procesamiento de señales y la adquisición de datos debido a sus capacidades de procesamiento paralelo de alta velocidad.
Los algoritmos de procesamiento de señales de alta velocidad hacen que las FPGA sean adecuadas para realizar tareas de control de vuelo, procesamiento de sensores y comunicación utilizadas en aeronaves no tripuladas como los drones.
Los sistemas de control industrial utilizados para monitorizar infraestructuras como redes eléctricas, refinerías de petróleo y plantas de tratamiento de agua utilizan FPGA que pueden optimizarse con facilidad para satisfacer las necesidades únicas de diversos sectores. En estos sectores cruciales, las FPGA pueden utilizarse para implementar varias automatizaciones y funciones de cifrado basadas en hardware para una ciberseguridad eficiente.
Aunque las FPGA son soluciones útiles para tareas que requieren flexibilidad, los ASIC específicos de tareas suelen ser más adecuados para operaciones estandarizadas. A medida que se desarrollan nuevos sistemas, las FPGA son valiosas para desarrollar y crear prototipos de nuevos ASIC para tecnologías emergentes.
Las FPGA añaden valor a los centros de datos al facilitar servidores, redes e infraestructuras de almacenamiento de gran ancho de banda y baja latencia.
IBM® Storage FlashSystem proporciona ciberresiliencia y capacidades mejoradas de almacenamiento de datos.
IBM Storage es una familia de hardware de almacenamiento de datos, almacenamiento definido por software y software de gestión de almacenamiento.
IBM Technology Expert Labs proporciona servicios de infraestructura para servidores, mainframes y almacenamiento de IBM.