FPGA: qué es y cuáles son las características de este componente

Una 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.

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.

 

Aplicaciones de las FPGA

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.

 

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:

  • 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.
  • 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.
  • 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.
  • Full Adders (FA). Realiza operaciones aritméticas en la FPGA, sumando o restando dígitos binarios.

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.

Los lenguajes de descripción de hardware (HDL) normalmente utilizados para programar una FPGA son VHDL o Verilog.

 

Proyección a futuro

La tendencia es incluir componentes con tecnología System-On-Chip (SoC), que integran la arquitectura de la FPGA con un microprocesador CPU en un único componente. En comparación con los dispositivos separados, un SoC FPGA 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 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 en proyecto AKKA

Ingenieros consultores de AKKA Technologies Spain están actualmente desarrollando proyectos que incluyen la utilización de FPGA. Como ejemplo se puede citar el diseño de un sistema aeroportado para el abastecimiento de combustible en vuelo, en el que el control específico y crítico de la velocidad de los motores eléctricos empleados se realiza mediante FPGAs. Con ellas se lleva a cabo el control de dichos motores tanto en corriente como en velocidad, además de gestionar otros muchos parámetros del sistema, lo que sería de difícil realización sin el uso de FPGAs.

Juan Manuel Manchado Ortega y Jorge Antonio García Pérez, consultores de AKKA Technologies Spain