FPGA: qué es, cómo funciona y para qué se usa

FPGA: qué es, cómo funciona y para qué se usa. Guía práctica sobre diseño digital, HDL (VHDL/Verilog), reconfiguración y aplicaciones en electrónica y sistemas embebidos.

Autor: Leandro Alegsa

Una matriz de puertas programables en campo (a menudo abreviada como FPGA) es un componente electrónico utilizado para construir circuitos digitales reconfigurables. Esto significa que una FPGA no tiene una función fija como una puerta lógica tradicional: su función se define mediante una configuración que se carga después de la fabricación. Antes de que la FPGA pueda ser utilizada en un circuito, debe ser programada o reconfigurada con el diseño deseado.

Los FPGA pertenecen a la categoría de dispositivos lógicos programables (PLD). Dentro de los PLD, las FPGA son los más flexibles y, a menudo, los de mayor rendimiento, pero también pueden ser más costosos en términos de área y consumo cuando se comparan por función con soluciones ASIC o diseños dedicados. Una característica importante de muchas FPGA es que su memoria de configuración es volátil (por ejemplo, basada en SRAM): al quitar la alimentación, la FPGA pierde su diseño y necesita recargar la configuración desde una memoria externa cuando se reinicia. Por eso, es habitual que en un sistema con FPGA exista un chip de memoria de configuración (SPI flash, EEPROM) o mecanismos de carga a través de JTAG/u-boot para reconfigurar la FPGA al encenderla. Algunas familias ofrecen tecnología no volátil (flash, antifuse) que conserva la configuración sin alimentación.

Arquitectura interna: de qué se compone una FPGA

Una FPGA integra varios bloques y recursos repetitivos y algunos bloques fijos. Los elementos típicos son:

  • Bloques lógicos configurables (CLBs/Logic Blocks). Contienen LUTs (Look-Up Tables) y flip-flops que implementan funciones lógicas y almacenamiento temporal.
  • Matrices de interconexión (routing). Redes programables que conectan los bloques lógicos entre sí y con las entradas/salidas.
  • Bloques de entrada/salida (I/O). Pines configurables que soportan estándares como LVCMOS, LVDS, SSTL, etc.
  • Memoria embebida (BRAM). RAM de bloques para buffers, FIFOs y almacenamiento local.
  • Bloques DSP. Módulos especializados para multiplicaciones, acumulaciones y operaciones aritméticas (útiles en señales e IA).
  • Relojes y gestión de reloj (PLLs, MMCMs). Generan y distribuyen relojes con control de fase y multiplicación/división.
  • Transceptores de alta velocidad. Interfaces serdes para comunicaciones a velocidades de Gb/s (Ethernet 10G, PCIe, SATA, etc.).
  • Recursos fijos o “hard cores”. Núcleos integrados como controladores Ethernet, interfaces PCIe, o incluso CPUs basadas en ARM en familias SoC.

Tecnologías de FPGA

Según la tecnología de implementación y la retención de configuración, existen varias familias:

  • SRAM-based (la más común). Altamente reconfigurables, rápidas, pero requieren cargar la configuración en cada arranque.
  • Flash-based. No volátiles, mantienen la configuración sin alimentación, suelen consumir menos energía en reposo.
  • Antifuse. Configuración permanente tras programación; usados donde se requiere alta seguridad o robustez frente a radiación.

Cómo se diseña y programa una FPGA

El flujo de trabajo típico incluye varias etapas y herramientas que proporcionan los fabricantes:

  • Descripción del diseño. Se escribe la lógica en un Lenguaje de Descripción de Hardware (HDL) como VHDL o Verilog. También existen herramientas de nivel más alto: HLS (High-Level Synthesis) que traducen C/C++ o OpenCL a lógica, y flujos gráficos para usuarios principiantes.
  • Simulación. Se simula el comportamiento funcional (y más tarde temporal) para verificar la lógica antes de sintetizar.
  • Síntesis lógica. El software convierte el HDL en una netlist mapeada a los recursos de la FPGA.
  • Implementación (place & route). Se asignan físicamente los bloques lógicos y rutas en la FPGA y se realiza la optimización de tiempo.
  • Generación de bitstream. El resultado final es un archivo binario (bitstream) que describe la configuración de la FPGA.
  • Programación (carga del bitstream). Se hace a través de JTAG, SPI, interfaces dedicadas o cargadores en la memoria de configuración para arranque automático.

El proceso también incluye pasos de restricción de tiempo (timing constraints), análisis de integridad de señal, y verificación en circuito (pruebas en hardware). Para programar la FPGA se emplea normalmente un programador USB conectado al puerto JTAG o mediante carga desde la memoria de configuración.

FPGA vs. microprocesador/microcontrolador

Una FPGA en su forma básica no es capaz de “ejecutar software” como un microprocesador: su función es hardware definido por la configuración. Sin embargo, una FPGA puede implementar una arquitectura de procesador dentro de su lógica (procesadores “blandos” o “soft cores”) o integrar un procesador “duro” en el mismo chip (SoC FPGAs). Cuando la FPGA contiene un procesador (por ejemplo, MicroBlaze, Nios II o núcleos ARM en Zynq), entonces sí puede ejecutar software en ese procesador.

Núcleos (cores) y SoC FPGAs

Los fabricantes pueden incluir bloques fijos o proveer núcleos predefinidos (IP cores) para acelerar el diseño: controladores Ethernet, puentes PCIe, controladores de memoria DDR, stacks de protocolo y más. En las FPGA de tipo SoC, un procesador ARM o similar se integra físicamente con la FPGA, facilitando el desarrollo de sistemas heterogéneos que combinan software y lógica programmable.

Casos de uso

Las FPGA se usan en muchos sectores por su flexibilidad y alto paralelismo:

  • Prototipado de ASICs y validación de hardware.
  • Aceleración de algoritmos en centros de datos (AI/ML, búsquedas, bases de datos).
  • Comunicaciones y redes (routers, switches, SDR – radio definida por software).
  • Procesamiento de señales e imágenes en tiempo real.
  • Control industrial, automoción, aeroespacial y defensa (donde se valora la reconfigurabilidad y latencia determinista).
  • Electrónica embebida con necesidades específicas de rendimiento y consumo.

Ventajas y desventajas

Ventajas

  • Reconfigurabilidad: permite actualizar o corregir el diseño después del despliegue.
  • Paralelismo masivo: ejecución de muchas operaciones en paralelo para latencia baja y alto rendimiento.
  • Determinismo temporal: ideal cuando se requieren tiempos de respuesta predecibles.
  • Rápida iteración: permite probar arquitecturas antes de un ASIC.

Desventajas

  • Coste por unidad relativamente alto para producción en masa comparado con ASIC.
  • Consumo energético y tamaño pueden ser mayores que diseños dedicados para una misma función.
  • Curva de aprendizaje: diseño hardware/HDL y verificación requieren conocimientos distintos a la programación tradicional.
  • Algunas FPGA requieren memoria externa para la configuración (volatilidad).

Seguridad y fiabilidad

La seguridad del bitstream y la protección intelectual son consideraciones importantes. Muchas FPGA ofrecen cifrado del bitstream, firmas y elementos de seguridad para evitar copias o cargas no autorizadas. En entornos críticos (espacio, radiación), se usan tecnologías y diseño resistentes a errores por radiación (TMR, antifuse o versiones rad-hard).

Fabricantes y herramientas

Los principales fabricantes incluyen: AMD (Xilinx), Intel (Altera), Lattice, y Microchip (Microsemi). Cada fabricante ofrece suites de herramientas para desarrollo (Vivado/AMD, Quartus/Intel, Radiant/Lattice, Libero/Microchip) que cubren síntesis, place & route, simulación y generación de bitstreams. Existen también herramientas de terceros y proyectos de código abierto para ciertos flujos.

Consejos para quien empieza

  • Comienza con una placa de desarrollo para principiantes (kits con documentación y ejemplos).
  • Aprende VHDL o Verilog y práctica con simulaciones simples (contadores, FSMs, interfaces SPI/I2C).
  • Estudia el flujo completo: simulación funcional, síntesis, constraints y timing, y pruebas en hardware.
  • Explora HLS si vienes del mundo del software y quieres mapear algoritmos a hardware sin aprender todo el HDL de inmediato.
  • Lee la hoja de datos y guías del fabricante para entender límites eléctricos y límites de temporización.

En resumen, una FPGA es una herramienta poderosa para implementar funciones digitales de forma reconfigurable. Su arquitectura modular y recursos especializados permiten soluciones desde prototipos hasta productos finales en dominios que van desde la investigación hasta la industria y los centros de datos. Elegir la FPGA adecuada implica valorar rendimiento, consumo, coste, capacidad de I/O, recursos de memoria/DSP y las necesidades de seguridad y fiabilidad del proyecto.

Zoom


Estructura interna

Las FPGAs se construyen generalmente sobre elementos lógicos programables e interconexiones programables. Un bloque de construcción de elementos lógicos es una tabla de consulta programable (LUT). Una LUT puede programarse para dar salida a cualquier valor dados los valores de entrada. De este modo, una LUT puede programarse para ser cualquier tipo de lógica con el mismo número de entradas y salidas. Por ejemplo, una LUT de 2 entradas y 1 salida puede programarse para emular la lógica de una AND, OR, NAND, NOR, XOR de 2 entradas, etc. La salida de esta LUT puede guardarse mediante un registro o conectarse a la entrada de otras LUTs. Utilizando un mux programable, la FPGA puede ser programada para elegir la salida registrada o no registrada. Esta combinación de una LUT, un registro y un mux es la estructura general de un elemento lógico.

Para conectar estos elementos lógicos entre sí, se utilizan transistores de paso. El transistor puede ser programado para conectar o no una señal, dando así a la FPGA la capacidad de conectar muy específicamente los elementos lógicos entre sí. Por ejemplo, si la salida de un elemento lógico va a alimentar la entrada de otro, el transistor de paso puede programarse para conectar estos dos cables entre sí y hacer coincidir la lógica especificada. Entre los elementos lógicos y los transistores de paso, un compilador puede tomar una descripción de hardware de un HDL, crear la lógica para los elementos lógicos y conectarlos entre sí utilizando los transistores de paso.

Preguntas y respuestas

P: ¿Qué es una matriz de puertas programable sobre el terreno (FPGA)?


R: Una matriz de puertas programable sobre el terreno (FPGA) es un componente electrónico utilizado para construir circuitos digitales reconfigurables. Tiene una función indefinida en el momento de su fabricación y debe programarse, o reconfigurarse, antes de que pueda utilizarse en un circuito.

P: ¿En qué se diferencia una FPGA de una puerta lógica?


R: Un FPGA se diferencia de una puerta lógica porque una puerta lógica tiene una función fija, mientras que un FPGA tiene una función indefinida en el momento de su fabricación.

P: ¿Qué tipo de circuito integrado es una FPGA?


R: Un FPGA es un circuito integrado de la categoría de los dispositivos lógicos programables o PLD.

P: ¿Cuáles son los inconvenientes de utilizar FPGA en comparación con otros PLD?


R: Uno de los inconvenientes de utilizar FPGAs en comparación con otros PLDs es que no recuerdan su diseño cuando se les quita la alimentación, por lo que necesitan un chip de memoria de configuración independiente que mantenga el diseño. También son más caros que otros tipos de PLD.

P: ¿Cómo se programa una FPGA?


R: Para programar una FPGA, los ingenieros utilizan software de ingeniería para Windows o Linux para desarrollar diseños escritos en lenguajes de descripción de hardware como VHDL y Verilog. A continuación, el software traduce este código a los elementos lógicos disponibles en las FGPA seleccionadas y los posiciona con procesos de colocar y encaminar, lo que crea un archivo de bits que puede programarse en la memoria de configuración o directamente en la propia FGPA con un programador USB conectado a su puerto JTAG.

P: ¿Los microprocesadores y los microcontroladores son similares a los FGPA?


R: No, los microprocesadores y microcontroladores son diferentes de los FGPA porque en su forma básica no pueden ejecutar software; sólo cuando se les da una configuración que contenga la arquitectura del procesador tienen esta capacidad.


Buscar dentro de la enciclopedia
AlegsaOnline.com - 2020 / 2025 - License CC3