Una matriz de puertas programables en campo (FPGA) es un tipo versátil de circuito integrado que, a diferencia de los dispositivos lógicos tradicionales, como los circuitos integrados específicos de la aplicación (ASIC), está diseñado para ser programable (y a menudo reprogramable) para adaptarse a diferentes propósitos, notablemente la computación de alto rendimiento (HPC) y la creación de prototipos.
La frase "programable en campo" se refiere a la capacidad de un FPGA para programar "en el campo" o después de que el fabricante liberó el chip. Xilinx, un fabricante de tecnología, introdujo por primera vez los FPGA en 1985.
Los FPGA se pueden ajustar para adaptarse a múltiples casos de uso, incluidos fines emergentes o experimentales, sin la necesidad de modificar o alterar físicamente su hardware. Esta versatilidad reconfigurable se logra a través de una matriz de bloques lógicos programables (PLB) fijos e interconexiones flexibles que se pueden configurarse para realizar operaciones complejas o para servir como puertas lógicas simples. Los FPGA también incluyen elementos de memoria, que van desde flip-flops de un solo bit hasta matrices de memoria muy densas, para el almacenamiento de datos digitales dentro del dispositivo.
Los FPGA son muy valorados por su combinación de alto rendimiento y extrema versatilidad. Son particularmente útiles en aplicaciones que requieren alto rendimiento, baja latencia y flexibilidad en tiempo real. Por esta razón, se emplean comúnmente en las industrias de telecomunicaciones, automotriz y aeroespacial.
Los FPGA y los ASIC sirven para diferentes propósitos.
Un ASIC se desarrolla y optimiza para una aplicación específica y no puede reconfigurarse. Sus elementos de circuito internos (transistores) están dispuestos en una estructura fija con interconexión (cableado) fija e inmutable entre ellos.
Dado que un ASIC cumple una sola 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 configurar y reconfigurarse para cualquier aplicación potencial. Al igual que un ASIC, sus elementos de 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 en un FPGA se seleccionan para admitir una amplia variedad de aplicaciones, pero sufren de "úselo o piérdalo" cuando no se emplean elementos lógicos específicos. Si no se requiere un multiplicador de punto flotante para una aplicación en particular, pero el FPGA contiene uno, entonces ese recurso está desconectado y representa "espacio desperdiciado" dentro del FPGA.
Aunque ambos dispositivos pueden contener cientos de millones de transistores, un ASIC puede emplear esos transistores para ofrecer alta eficiencia y rendimiento a expensas de la flexibilidad. Los costos iniciales de desarrollo de un ASIC pueden ser exorbitantes, mientras que los costos unitarios pueden ser relativamente bajos.
Un FPGA emplea sus transistores para ofrecer una alta eficiencia y un alto rendimiento, pero con una enorme flexibilidad. Los cargos iniciales de NRE para desarrollar un FPGA pueden ser extremadamente bajos, mientras que los costos unitarios son generalmente más altos. Es importante tener en cuenta que estas no son reglas estrictas ni rápidas. En el ámbito del rendimiento, por ejemplo, los FPGA recientes evolucionaron para ofrecer velocidades de reloj de más de 500 MHz y generalmente se fabrican en geometrías de procesos de silicio de última generación. En resumen, el límite entre FPGA y ASIC se vuelve cada vez más borroso con cada nueva generación de FPGA.
Un FPGA se convierte en un dispositivo de hardware personalizado al configurar sus PLB e Interconnect a través de 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. Usando un lenguaje de descripción de hardware, es posible utilizar recursos FPGA incorporados (arreglos de memoria, núcleos PCI y muchos más), así como crear circuitos lógicos personalizados (agregadores, multiplexores y otras funciones específicas de la aplicación) a partir de elementos FPGA más primitivos.
En un proceso conocido como síntesis, el código HDL se traduce en una lista de redes, una descripción efectiva de las puertas lógicas y las interconexiones necesarias para implementar el código HDL. A continuación, la lista de redes se asigna a los PLB y se interconecta para formar físicamente un circuito único.
Los FPGA modernos producidos por fabricantes como Intel y Altera ofrecen una amplia gama de características digitales y analógicas, que incluyen densidades lógicas impresionantes, memoria flash, procesadores integrados y bloques de procesamiento de señales digitales (DSP). Los FPGA se pueden configurar y reconfigurar modificando las entradas y salidas eléctricas, eligiendo qué recursos internos se emplean y determinando cómo se conectan estos recursos a través de recursos de enrutamiento configurables; el resultado final es una solución de hardware dedicada para resolver un problema en particular.
Al igual que con el software, el desarrollo de diseños complejos de FPGA podría optimizarse mediante el uso de bibliotecas prediseñadas de diversas funciones y circuitos digitales, denominados núcleos de propiedad intelectual (IP). Estas bibliotecas están disponibles para su compra o arrendamiento de 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 emplean 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 de señales digitales (DSP).
Los bloques lógicos configurables (CLB) son el componente principal de los 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 superficial 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 del FPGA. Las cajas de conmutación que contienen múltiples interruptores semiconductores básicos se emplean comúnmente para establecer una interconexión programable de un FPGA. Estas interconexiones permiten vincular las salidas de una unidad específica o un pad de entrada a cualquier otra celda o pad dentro del circuito.
Los segmentos de cable prefabricados se unen entre sí (o se dejan sin conectar) mediante interconexiones programables para brindar una infraestructura de enrutamiento totalmente programable dentro de un FPGA. Los recursos de enrutamiento son de naturaleza jerárquica, con una combinación de cables largos, medianos y cortos que abarcan varias “longitudes” dentro del FPGA. Esta infraestructura de enrutamiento programable, habilitada por las interconexiones programables, permite a los usuarios configurar recursos FPGA para la implementación de una tarea o aplicación en particular.
La interfaz entre un FPGA y otros dispositivos externos está habilitada por bloques de entrada/salida (E/S) (IOB). Las IOB son recursos de entrada y salida programables que están configurados para coincidir con los protocolos de cualquier dispositivo externo al que se conecta el FPGA. Todas las señales que entran o salen del FPGA lo hacen a través de pines de dispositivos y IOB asociadas.
Las primeras FPGA empleaban únicamente flip-flops (FF) para integrar la memoria en los bloques lógicos del FPGA. Sin embargo, a medida que aumentaban las capacidades del 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 datos. Los FPGA modernas emplean grandes matrices de memoria SRAM, tablas de consulta (LUT) más pequeñas y elementos de flip-flop tradicionales para proporcionar el almacenamiento necesario para una aplicación específica.
En los primeros 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 los 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 CLBs de propósito general, liberando así los CLBs para otros propósitos. 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 rendimiento en tiempo real en aplicaciones que van desde el procesamiento de radar, la formación de haces, el reconocimiento de patrones y muchas más.
Los FPGA están disponibles en variedades diferentes que ofrecen varios tipos de configuración, consumo de energía, elementos programables y memoria en chip.
Versátiles por naturaleza, los FPGA son adecuados para muchas aplicaciones diferentes.
Los FPGA son los preferidos 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 los FPGA sean adecuados para realizar tareas de control de vuelo, procesamiento de sensores y comunicación empleadas en aeronaves no tripuladas como los drones.
Los sistemas de control industrial empleados para monitorear infraestructuras como redes eléctricas, refinerías de petróleo y plantas de tratamiento de agua emplean FPGA que pueden optimizarse fácilmente para satisfacer las necesidades únicas de diversas industrias. En estas industrias críticas, los FPGA se pueden emplear para implementar diversas automatizaciones y características de cifrado basadas en hardware para una ciberseguridad eficiente.
Si bien los 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, los FPGA son valiosos para desarrollar y crear prototipos de nuevos ASIC para tecnologías emergentes.
Los FPGA agregan valor a los centros de datos al facilitar servidores de ancho de banda alto y latencia baja, redes e infraestructura de almacenamiento.
IBM® Storage FlashSystem proporciona resiliencia cibernética 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.