Guía Hardware

FPGA: qué es, cómo funciona, y para qué sirve este dispositivo

Actualizado a: 16 de abril de 2024

Un FPGA es un tipo de chip bastante interesante y que pocos saben realmente lo que es y qué puede aportar. Por ejemplo, te podría permitir crear tu propia CPU, tu memoria RAM, tu GPU, o cualquier otro circuito sin necesidad de tenerlo que fabricar, de forma barata, tan solo usando un lenguaje de descripción de hardware para su implementación. Incluso podrías hacer uso de proyectos de código abierto ya existentes para poder crearlo o modificarlo, como los existentes en algunos sitios como GitHub.

¿Qué es un ASIC?

Un ASIC (Application-Specific Integrated Circuit) es un tipo de circuito integrado diseñado y fabricado para desempeñar una función o tarea específica dentro de un dispositivo electrónico o sistema. Es decir, los ASICs se diseñan para cumplir un propósito muy definido y concreto. Por ejemplo, pueden contener memorias ROM, RAM, CPU, etc.

Los ASICs se crean utilizando herramientas y procesos de diseño digital muy especializados, lo que les permite ofrecer un alto nivel de optimización para una aplicación particular. Esto puede incluir circuitos lógicos, memorias, bloques analógicos y otros componentes, todos dispuestos de manera eficiente para lograr la función deseada. Debido a esta especialización, los ASICs pueden ser más eficientes en términos de consumo de energía, rendimiento y tamaño en comparación con soluciones basadas en circuitos integrados genéricos.

Los ASICs se utilizan en una amplia variedad de aplicaciones, desde dispositivos electrónicos de consumo hasta equipos industriales y sistemas embebidos. Algunos ejemplos incluyen chips de control de motores, procesadores de señales específicos, chips de seguridad y criptografía, y componentes personalizados para dispositivos médicos. La creación de un ASIC suele requerir una inversión significativa en términos de tiempo y recursos, ya que el proceso de diseño y fabricación es altamente especializado y costoso.

Ventajas y desventajas del ASIC

Entre las ventajas de un ASIC tenemos que destacar:

  • Rendimiento optimizado: al estar diseñado específicamente para una tarea particular, un ASIC puede ofrecer un rendimiento excepcional para esa función en particular. Esto puede incluir altas velocidades de procesamiento, baja latencia y todas las funciones necesarias para una aplicación.
  • Eficiencia energética: dado que un ASIC está diseñado para realizar una tarea específica, puede ser altamente eficiente en términos de consumo de energía. No lleva componentes innecesarios que se encuentran en circuitos integrados más generales, como ocurre con otros chips que se diseñan para una amplia variedad de tareas.
  • Tamaño reducido: al eliminar elementos no esenciales, un ASIC puede ser mucho más compacto en comparación con soluciones basadas en componentes genéricos. Esto permite un menor coste de fabricación, ya que se ahorra espacio en el silicio, pudiendo fabricar más chips por cada oblea.
  • Costes reducidos: en aplicaciones de gran volumen, un ASIC puede reducir los costos a largo plazo al ofrecer un rendimiento y una eficiencia superiores, lo que puede resultar en menores costos operativos.
  • Seguridad: al ser diseñado para una tarea específica, puede ser más resistente a ciertos tipos de ataques y vulnerabilidades. Es decir, son más restringidos, por lo que habrá menos posibles vulnerabilidades o vectores de ataque.

Sin embargo, tenemos algunas desventajas como:

  • Costos iniciales elevados: el diseño de un ASIC requieren una inversión inicial significativa en términos de tiempo y recursos. Esto puede hacer que los ASICs sean prohibitivos para aplicaciones de bajo volumen o para particulares que necesitan un dispositivo barato. Y mucho más prohibitiva será su fabricación, ya que tendría que encargarse en foundries que aceptan MPW para que fuese algo menos caro.
  • Falta de flexibilidad: debido a su diseño específico, un ASIC no es fácilmente adaptable para realizar otras funciones. Cualquier cambio en la función requerirá un nuevo diseño y fabricación.
  • Tiempo de desarrollo Largo: el proceso de diseño y validación de un ASIC puede ser largo y complejo. Puede llevar meses o incluso años desde la concepción hasta la producción.
  • Riesgo de obsolescencia: si la tecnología subyacente o los requisitos de la aplicación cambian, un ASIC puede quedar obsoleto y requerir un rediseño.
  • Escalabilidad limitada: Un ASIC diseñado para una tarea específica puede no ser escalable para otras aplicaciones o tareas. Esto puede limitar su utilidad a medida que cambian los requerimientos del mercado.

PAL: el punto de partida

Un PAL (Programmable Array Logic) se refiere a dispositivos semiconductores programables que se utilizan para incorporar funciones lógicas en circuitos digitales. Fue introducido inicialmente por Monolithic Memories, Inc. (MMI) en marzo de 1978. MMI obtuvo una marca registrada para el término PAL, en la actualidad, esta marca registrada está en manos de Lattice Semiconductor.

Es un tipo de dispositivo lógico programable que se utiliza para implementar funciones lógicas en circuitos digitales. Es un tipo de circuito integrado que se configura mediante la programación de sus conexiones internas para realizar una tarea lógica específica. Para que esto sea posible, la estructura básica de un PAL consiste en un conjunto de entradas, un conjunto de salidas y una matriz de puertas lógicas específicas, permitiendo al programador configurar las conexiones para definir la lógica deseada.

Esto se logra a través de una configuración programable que se establece utilizando software y herramientas de diseño proporcionadas por el fabricante. Una vez que se ha programado un PAL con la función lógica requerida, el dispositivo actúa como un circuito lógico específico para esa tarea.

También hay que citar a los llamados GAL (Generic Array Logic). Fue una innovación del PAL y fue inventado por Lattice Semiconductor. El GAL representó una mejora respecto al PAL, ya que un solo tipo de dispositivo podía reemplazar a muchos tipos de dispositivos PAL o incluso tener funcionalidad que no estaba cubierta por la gama original de dispositivos PAL. Sin embargo, su beneficio principal era que era borrable y reprogramable, lo que facilitaba la creación de prototipos y los cambios de diseño para los ingenieros.

¿Qué es un PLD? El antecesor del FPGA

Un PLD o CPLD (Complex Programmable Logic Device) es un dispositivo lógico programable con una complejidad entre la de los PAL y las modernas FPGA. También su arquitectura puede estar entre ambos dispositivos.

El componente principal del CPLD es una macrocelda o macrocell, que contiene lógica que implementa expresiones en forma normal disjuntiva y operaciones lógicas más especializadas. Por tanto, una macrocelda es una unidad lógica básica que puede ser programada para realizar una función lógica específica. Puede configurarse para realizar operaciones lógicas como AND, OR, NOT, XOR, entre otras.

La macrocelda suele consistir en una combinación de elementos lógicos más simples, como puertas lógicas, flip-flops y multiplexores. Estos elementos se pueden conectar y configurar internamente para implementar una lógica personalizada según las necesidades del diseño.

La programación de una macrocelda se realiza mediante el establecimiento de sus conexiones internas a través de herramientas de diseño (software) proporcionadas por el fabricante del PLD. Al configurar la macrocelda, los diseñadores definen cómo se comportará dentro del circuito lógico más amplio del PLD.

Para tener una idea más clara de lo que es un PLD, vamos a exponer algunas características compartidas con los PALs vistos en el punto anterior:

  • Memoria de configuración no volátil. No son reprogramables, ya que una vez «quemadas» las conexiones, no se podían modificar. No obstante, con el tiempo fueron evolucionando y aparecieron los EPLD, es decir, los Erasable PLD, que se podían borrar para volver a configurarlo con otra lógica diferente.
  • Para muchos dispositivos CPLD heredados, la limitación de enrutamiento hace que la mayoría de los bloques lógicos tengan señales de entrada y salida conectadas a pines externos, lo que reduce las oportunidades para el almacenamiento de estados internos y la lógica profundamente estratificada. Esto generalmente no es un factor en CPLD más grandes y en familias de productos CPLD más recientes.

Sin embargo, al ser los PLDs más avanzados que los PAL, también podemos destacar algunas características que comparte con las FPGA:

  • Gran cantidad de puertas disponibles para programar. Los CPLD tienen miles a decenas de miles de puertas lógicas, lo que permite la implementación de dispositivos de procesamiento de datos moderadamente complejos. Los PAL generalmente tienen solo unas pocas centenas como máximo, mientras que las FPGA generalmente oscilan entre decenas de miles a varios millones.
  • Algunas disposiciones para lógica más flexible que expresiones de suma de productos, incluidas rutas de retroalimentación complicadas entre las macroceldas y lógica especializada para implementar varias funciones de uso común, como la aritmética entera.

¿Qué es un FPGA?

Un FPGA (Field-Programmable Gate Array) es un circuito integrado diseñado para ser configurado después de su fabricación. La configuración de la FPGA generalmente se especifica mediante un lenguaje de descripción de hardware (HDL), similar al utilizado para un circuito integrado específico de aplicación (ASIC).

Las FPGAs contienen una matriz de bloques lógicos programables y una jerarquía de interconexiones reconfigurables que permiten conectar los bloques entre sí. Los bloques lógicos se pueden configurar para realizar funciones combinacionales complejas o actuar como compuertas lógicas simples como AND y XOR. En la mayoría de las FPGAs, los bloques lógicos también incluyen elementos de memoria, que pueden ser simples flip-flops o bloques de memoria más completos. Muchas FPGAs se pueden reprogramar para implementar diferentes funciones lógicas, lo que permite una computación reconfigurable flexible similar a la realizada en el software. Por ejemplo, podrías implementar una CPU en el FPGA y más tarde eliminar ésta para implementar otro circuito diferente, como podría ser una memoria, etc.

Dado que los diseños de FPGA emplean tasas de E/S muy rápidas y buses de datos bidireccionales, se convierte en grandes aliados para los que desean crear un circuito lógico digital poderoso, e incluso se pueden implementar algunas características o funciones analógicas.

También son comunes la implementación de algunas funciones extra en el FPGA que se pueden usar, como osciladores de cuarzo para generar frecuencia de reloj, etc. Algunas FPGAs de señal mixta tienen convertidores analógico a digital (ADC) y convertidores digital a analógico (DAC) periféricos integrados con bloques de acondicionamiento de señales analógicas que les permiten funcionar como un SoC.

¿Cómo funciona un FPGA?

La unidad básica del FPGA, al igual que la del PLD era la macrocell, es el CLB (Configurable Logic Block). Es el recurso lógico básico que se repite en un FPGA, pudiendo tener decenas de miles o millones de ellos. Cuando se enlazan mediante recursos de enrutamiento (que básicamente son memorias reprogramables que generan o eliminan el enlace), los componentes dentro de los CLB ejecutan funciones lógicas complejas, como podría ser una CPU, una GPU, una memoria RAM, o un SoC completo…

Los CLB contienen componentes más pequeños, que incluyen flip-flops, tablas de búsqueda (LUTs) y multiplexores.

Para el enlace, como he dicho, se usan sistemas programables. Generalmente muchos de los FPGAs del mercado están basados en celdas SRAM CMOS, pero esto los hace volátiles, borrándose el diseño una vez se deja de alimentar el circuito. Sin embargo, existen nuevas alternativas a la SRAM volatil, como:

  • Fuse o fusible: es un método ya obsoleto, y que empleaba fusibles que durante la programación se fundían para generar los enlaces necesarios y eliminar las conexiones que no se querían. Sin embargo, el problema de este método era que no se podía reconfigurar.
  • Antifuse: es un método creado por Actel, para programar de forma similar al anterior. Implica líneas conductoras paralelas, generalmente de aluminio, cubiertas por una fina capa de dieléctrico, que suele ser dióxido de silicio. Encima del óxido se coloca otra capa de líneas conductoras perpendiculares a las anteriores. Esta configuración permite la creación de múltiples capas de antifusibles superpuestas, lo que ahorra espacio en el silicio para los transistores. La programación se lleva a cabo al aplicar una tensión elevada entre dos líneas que se cruzan. Esta tensión supera la rigidez dieléctrica del óxido y rompe el campo eléctrico. En consecuencia, se produce un pequeño arco entre las dos pistas, que las funde parcialmente y las conecta de manera permanente. Es decir, similar a una ROM, pero aplicando tensión en vez de corriente.
  • PROM: se emplean celdas Programmable Read-only Memory para generar la programación del FPGA.
  • EPROM: similar a la anterior, pero en este caso es una «erasable» o borrable, por lo que se puede reprogramar borrando mediante luz UV o ultravioleta, a través de una pequeña ventana en el chip. Este método también ha quedado obsoleto.
  • EEPROM: es una memoria eléctricamente borrable, como puede ser la flash, que es el sistema más ampliamente usado en la actualidad por sus ventajas, su precio, el pequeño tamaño de las células y la capacidad de borrar fácilmente las conexiones y generar otras diferentes.

Ventajas y desventajas

Los FPGAs y los ASICs son dos enfoques diferentes para la implementación de circuitos integrados. Cada uno tiene sus propias ventajas y desventajas en función de las necesidades del diseño y las aplicaciones. Entre las ventajas del FPGA se encuentran:

  • Flexibilidad y reconfigurabilidad: una de las mayores ventajas de los FPGAs es su capacidad de ser reprogramados y reconfigurados después de la fabricación. Esto permite adaptarse a cambios en el diseño, correcciones de errores y actualizaciones sin la necesidad de fabricar un nuevo chip. Tan solo tienes que grabar el diseño HDL en el FPGA para tener el circuito que quieras, luego podrás borrarlo y grabar otro diferente. El FPGA, mientras esté programado, se comportará como el circuito que has implementado.
  • Prototipado rápido: son ideales para prototipado rápido y desarrollo de hardware en etapas tempranas del diseño. Los diseñadores pueden iterar y experimentar con diferentes configuraciones antes de tomar decisiones finales. Por ejemplo, les puede servir a los diseñadores de una CPU para implementar ésta y probarla físicamente para ver si tiene algún problema antes de comenzar con los engineering samples o la fabricación del chip en masa.
  • Tiempo de desarrollo Más Corto: debido a la flexibilidad y la posibilidad de evitar el proceso de fabricación de ASICs, los FPGAs pueden reducir el tiempo de desarrollo del producto.
  • Bajo costo de prototipado: e costo de desarrollo inicial para FPGAs es generalmente menor que el de ASICs, ya que no requieren la fabricación de máscaras costosas, y de pagar decenas de miles de euros por cada oblea fabricada en una foundry.

Sin embargo, un FPGA no es la panacea, también tiene desventajas frente al ASIC:

  • Mayor consumo de energía: debido a su naturaleza programable, los FPGAs tienden a consumir más energía que los ASICs diseñados específicamente para una tarea. Ten en cuenta que tienen más bloques que un ASIC, y que habrá que alimentar.
  • Rendimiento limitado: aunque los FPGAs son altamente configurables, pueden no ser tan eficientes en términos de rendimiento y velocidad como los ASICs especializados para una tarea particular. No es un ASIC creado y optimizado para una tarea específica, por lo que no puedes esperar un rendimiento igual.
  • Tamaño físico mayor: pueden requerir más espacio físico en una placa de circuito impreso en comparación con ASICs optimizados para la misma función. Ten en cuenta que suelen ser un mar o matriz de bloques configurables, y no solo las puertas lógicas necesarias para implementar un circuito particular.
  • Limitaciones en aplicaciones críticas: en aplicaciones de misión crítica que requieren alta velocidad, bajo consumo de energía y tamaño compacto, los ASICs diseñados específicamente pueden superar a los FPGAs.

Aplicaciones

Una FPGA puede servir para multitud de aplicaciones diferentes, y gracias al avance que ha habido en este campo, y el desarrollo conjunto de software de programación y desarrollo y del hardware necesario, se ha permitido una gran flexibilidad:

  • Desarrollo de chips: se pueden usar para implementar el diseño en la FPGA y probar su funcionamiento.
  • Desarrollo de software: al tener un diseño de hardware funcional, también se podría desarrollar y probar software en etapas tempranas de diseño.
  • Creación de circuitos a medida: los FPGAs también permiten que los particulares, que no disponen de medios como una foundry ni el dinero suficiente para fabricar un chip, puedan implementar su diseño y probarlo. Por ejemplo, actualmente son bastante usados en la creación de módulos de seguridad por hardware específicos.
  • Producción de bajos volúmenes: cuando no se desea crear chips de forma masiva, es más barato usar un FPGA para implementar los diseños. Por ejemplo, Gigabyte Technology creó una tarjeta i-RAM que utilizaba una FPGA de Xilinx, ya que un chip personalizado sería más económico en grandes cantidades.
  • DSA: actualmente también se están empleando para implementar Domain SPecific Accelerators, es decir, aceleradores de cargas de trabajo específicas para que trabajen junto con la CPU. Por ejemplo, se podrían programar para acelerar cargas específicas en un centro de procesamiento de datos, como puede ser acelerar las cargas de IA, DSP, NPU, VPU, etc.
  • Chipsets: el futuro de los chipsets también podría pasar por los FPGAs, en los que fabricantes como Intel o AMD tienen un gran interés. Y es que estos FPGAs, a diferencia de los chipsets implementados en ASICs, podrían actualizarse mediante la reprogramación para corregir fallos, implementar mejoras, nuevas funciones, etc. Un ejemplo de este uso par aacelerar IA es Project Catapult de Microsoft para su nube Azure.
  • Implementar núcleos IP o softcore: existen diseños softcore de procesadores creados mediante un HDL, como MicroBlaze, que podrías implementar en un FPGA para usarlos, o también emplear núcleos IP para agregar procesadores ARM y otros diseños al FPGA.
  • Aplicaciones espaciales: es muy frecuente que los FPGAs estén presentes en multitud de vehículos y naves, como las enviadas al espacio. No obstante, estas aplicaciones aeroespaciales y militares implican un FPGA endurecido frente a radiación.
  • Otros…

Ejemplos de FPGAs comerciales

Para finalizar, vamos a ver algunos ejemplos de FPGAs comerciales que puedes comprar para comenzar a crear tus primeros diseños. Algunos destacados son:

  • Xilinx (ahora parte de AMD): es uno de los principales fabricantes de FPGAs y ofrece una variedad de familias y modelos, incluyendo la serie Virtex, la serie Kintex y la serie Artix. Ejemplos específicos son Virtex UltraScale+, Kintex-7 y Artix-7.
  • Altera (ahora parte de Intel): también es un jugador importante en el mercado de FPGAs y ofrece FPGAs bajo la marca Intel FPGA. Sus familias incluyen Stratix, Cyclone y Arria. Ejemplos incluyen Stratix 10, Cyclone V y Arria 10.
  • Lattice Semiconductor: ofrece FPGAs de baja potencia y bajo costo, adecuados para aplicaciones específicas. Sus familias incluyen iCE40, ECP5 y CrossLink. Ejemplos son iCE40 UltraPlus, ECP5 y CrossLink-NX.
  • Microchip (anteriormente Microsemi, Actel, Atmel): bajo la marca SmartFusion y PolarFire. Estas FPGAs a menudo se utilizan en aplicaciones industriales y aeroespaciales.
  • QuickLogic: se centra en FPGAs de baja potencia para aplicaciones móviles, IoT y wearables. Sus FPGAs se utilizan para tareas como procesamiento de señales y reducción de consumo de energía.
  • Aldec: ofrece FPGAs para diseño y validación de hardware, junto con herramientas de verificación y simulación. Sus FPGAs son populares para entornos de desarrollo y pruebas.
  • Achronix: se especializa en FPGAs de alto rendimiento y baja latencia para aplicaciones como redes y procesamiento de datos.
  • Silexica: aunque no es un fabricante de FPGAs en sí, Silexica ofrece herramientas de diseño y optimización de software para plataformas FPGA, lo que facilita la programación de sistemas FPGA complejos.
  • Altium

Espero que te haya servido de ayuda…

Jaime Herrera

Jaime Herrera

Ingeniero Informático apasionado por el hardware y la tecnología. Llevo más de diez años dedicándome al análisis de componentes como procesadores, tarjetas gráficas y sistemas de almacenamiento. Mi objetivo es ofrecer información clara y precisa, combinando mi experiencia técnica con un enfoque práctico para ayudar a los lectores a entender mejor el mundo del hardware.

>
Guía Hardware
Logo