Fundamentos de FPGA: Conceptos básicos de los arreglos de compuertas programables en campo

Información general

Las matrices de puertas programables en campo (FPGA) son Circuits integrados que se pueden reconfigurar para satisfacer las necesidades de los diseñadores. Los chips FPGA contienen una serie de bloques lógicos programables, y la adopción generalizada de chips está impulsada por su flexibilidad, velocidad y fiabilidad cronometradas por hardware y paralelismo.

Contenido

A diferencia de los procesadores, los FPGAs son verdaderamente paralelos por naturaleza, así diferentes operaciones de procesamiento no tienen que competir por los mismos recursos. Cada tarea de procesamiento independiente es asignada a una sección dedicada del chip y puede funcionar de manera autónoma sin ser afectada por otros bloques de lógica. Como resultado, el rendimiento de una parte de la aplicación no se ve afectado cuando se agregan otros procesos.

Lógica de aplicación fpga

Figura 1: Uno de los beneficios de las FPGA sobre los sistemas basados en procesadores es que la lógica de aplicación se implementa en circuitos de hardware en lugar de ejecutarse sobre un sistema operativo, controladores y software de aplicación.

Definición de las partes de un chip FPGA

Cada chip FPGA se compone de un número finito de recursos predefinidos con interconexiones programables para implementar un circuito digital reconfigurable y bloques de E/S para permitir que el circuito acceda al mundo exterior.

Partes de un chip fpga

Figura 2: Las diferentes partes de una FPGA

Las especificaciones de recursos de FPGA a menudo incluyen el número de bloques lógicos configurables, el número de bloques lógicos de función fija, como los multiplicadores, y el tamaño de los recursos de memoria, como la RAM de bloques incrustados. De las muchas especificaciones de FPGA, estas son típicamente las más importantes al seleccionar y comparar FPGA para una aplicación en particular.

Los bloques lógicos configurables (CLB) son la unidad lógica básica de una FPGA. A veces denominados slices o celdas lógicas, los CLB se componen de dos componentes básicos: flip-flops y tablas de búsqueda (LUT). Varias familias de FPGA difieren en la forma en que los Flip-Flops y las LUT se empaquetan juntos, por lo que es importante entender los Flip-Flops y las LUT.

Flip-Flops

Los biestables son registros de desplazamiento binarios que se utilizan para sincronizar la lógica y guardar los estados lógicos entre los ciclos de reloj dentro de un circuito FPGA. En cada flanco del reloj, un biestable retiene el valor 1 o 0 (VERDADERO o FALSO) en su entrada y mantiene ese valor constante hasta el siguiente flanco del reloj.

símbolo del flip-flop

Figura 3: Símbolo del biestable

Los biestables son registros de desplazamiento binarios que se utilizan para sincronizar la lógica y guardar los estados lógicos entre los ciclos de reloj dentro de un circuito FPGA. En cada flanco del reloj, un biestable retiene el valor 1 o 0 (VERDADERO o FALSO) en su entrada y mantiene ese valor constante hasta el siguiente flanco del reloj.

Tablas de búsqueda (LUT)

Lut de cuatro entradas

Figura 4: LUT de cuatro entradas

Gran parte de la lógica en un CLB se implementa usando cantidades muy pequeñas de RAM en forma de LUT. Es fácil suponer que el número de puertas del sistema en una FPGA se refiere al número de puertas NAND y puertas NOR en un chip en particular. Pero, en realidad, toda la lógica combinatoria (AND, OR, NAND, XOR, etc.) se implementa como tablas de verdad dentro de la memoria LUT. Una tabla de verdad es una lista predefinida de salidas para cada combinación de entradas.

Aquí está el repaso rápido de la clase de lógica digital.

La operación booleana AND, por ejemplo, se muestra en la Figura 5:

LabVIEW booleano y operación

Figura 5: NI LabVIEW Booleano Y Operación

La tabla de verdad correspondiente para las dos entradas de una operación AND se muestra en la Tabla 1.

Entrada 1

Entrada 2Salida

0

0

0

0

1

0

1

0

0

1

1

1

Tabla 1: Tabla de Verdad para Booleano Y Operación

Multiplicadores y segmentos DSP

Función de multiplicación de LabVIEW

Figura 6: Función de multiplicación de NI LabVIEW

La tarea aparentemente simple de multiplicar dos números juntos puede llegar a ser extremadamente intensiva en recursos y compleja de implementar en circuitos digitales. Para proporcionar algún marco de referencia, la Figura 6 muestra el dibujo esquemático de una forma de implementar un multiplicador de 4 bits por 4 bits usando lógica combinatoria.

Dibujo esquemático de un multiplicador de 4 bits por 4 bits

Figura 7 Dibujo esquemático de un multiplicador de 4 bits por 4 bits

Ahora imagina multiplicar dos números de 32 bits juntos, y terminarás con más de 2000 operaciones para una sola multiplicación. Debido a esto, las FPGA han preconstruido circuitos multiplicadores para ahorrar en el uso de LUT y biestables en aplicaciones de procesamiento de señales y matemáticas.

Muchos algoritmos de procesamiento de señales implican mantener el total de números en funcionamiento multiplicado, y, como resultado, las FPGA de mayor rendimiento como las FPGA Xilinx Virtex-5 han preconstruido circuitos multiplicadores-acumulativos. Estos bloques de procesamiento preconstruidos, también conocidos como segmentos DSP48, integran un multiplicador de 25 bits por 18 bits con circuitos sumadores.

RAM en bloque

Los recursos de memoria son otra especificación clave a tener en cuenta al seleccionar FPGAs. RAM definida por el usuario, incrustada en todo el chip FPGA, es útil para almacenar conjuntos de datos o pasar valores entre tareas paralelas. Dependiendo de la familia FPGA, puede configurar la RAM integrada en bloques de 16 o 36 kb. Todavía tiene la opción de implementar conjuntos de datos como matrices usando biestables; sin embargo, las matrices grandes se vuelven rápidamente costosas para los recursos lógicos de FPGA. Una matriz de 100 elementos de números de 32 bits puede consumir más del 30 por ciento de los biestables en una FPGA Virtex-II 1000 o ocupar menos del 1 por ciento de la RAM de bloque incrustada. Los algoritmos de procesamiento de señales digitales a menudo necesitan realizar un seguimiento de todo un bloque de datos, o los coeficientes de una ecuación compleja, y sin memoria integrada, muchas funciones de procesamiento no encajan dentro de la lógica configurable de un chip FPGA.

La ejecución paralela inherente de las FPGA permite que piezas independientes de la lógica de hardware sean impulsadas por diferentes relojes. Pasar datos entre lógicas que se ejecutan a diferentes velocidades puede ser complicado, y la memoria integrada a menudo se usa para suavizar la transferencia usando búferes de memoria primero en entrar primero en salir (FIFO).

Diseño de FPGA en un sistema

Si bien las FPGA tienen muchas ventajas, como la rapidez, la fiabilidad y la flexibilidad, también hay compensaciones asociadas con las FPGA. Las FPGA no tienen el ecosistema de controladores y la base de código/IP que tienen las arquitecturas de microprocesador y los sistemas operativos. Además, los microprocesadores acoplados con los sistemas operativos proporcionan la base para las estructuras de archivos y la comunicación con los periféricos utilizados para muchas tareas, a menudo esenciales, como el registro de datos en el disco.

Como resultado, en la última década ha surgido una arquitectura híbrida, a veces llamada arquitectura heterogénea, en la que un microprocesador se empareja con una FPGA que luego se conecta a E/S. Las FPGA modernas a menudo combinan puertas lógicas con procesadores en un solo chip llamado Sistema en Chip (SoC) para aumentar el rendimiento informático. Este enfoque aprovecha los beneficios que ofrecen ambos objetivos.

National Instruments ha implementado esta potente arquitectura de microprocesador más FPGA en sus dispositivos habilitados para FPGA. Estos dispositivos abarcan muchos factores de forma diferentes, desde sistemas robustos hasta sistemas de alto rendimiento, todos basados en esta misma arquitectura.

El hardware habilitado para FPGA de NI incluye la siguiente tecnología:

Herramientas de diseño FPGA

Ahora que conoces los bloques de construcción de un chip FPGA, puedes preguntarte: "¿Cómo configurar todos estos millones de componentes para construir la lógica que necesitas ejecutar?"

La respuesta es que defina las tareas de computación digital en el software utilizando herramientas de desarrollo y luego compílelas en un archivo de configuración o flujo de bits que contenga información sobre cómo deben conectarse los componentes. El desafío en el pasado con la tecnología FPGA era que las herramientas de diseño de bajo nivel de FPGA solo podían ser utilizadas por ingenieros con un profundo conocimiento del diseño de hardware digital. Sin embargo, el auge de los instrumentos de diseño de síntesis de alto nivel, como LabVIEW, modifica las normas de programación del FPGA y ofrece nuevas tecnologías que convierten los diagramas de bloques gráficos en circuitos de equipo digital.

Herramientas de diseño FPGA tradicionales

Durante los primeros 20 años de desarrollo de FPGA, los lenguajes de descripción de hardware (HDL) como VHDL y Verilog evolucionaron a los lenguajes principales para diseñar los algoritmos que se ejecutan en el chip FPGA. Estos lenguajes de bajo nivel integran algunos de los beneficios que ofrecen otros lenguajes textuales con la comprensión de que en una FPGA, usted está diseñando un circuito. La sintaxis híbrida resultante requiere que las señales se mapeen o conecten desde puertos de E/S externos a señales internas, que finalmente se conectan a las funciones que albergan los algoritmos. Estas funciones se ejecutan secuencialmente y pueden hacer referencia a otras funciones dentro de la FPGA. Sin embargo, la verdadera naturaleza paralela de la ejecución de tareas en un FPGA es difícil de visualizar en un flujo secuencial línea por línea. Los HDL reflejan algunos de los atributos de otros lenguajes textuales, pero difieren sustancialmente porque se basan en un modelo de flujo de datos donde la E/S está conectada a una serie de bloques de funciones a través de señales.

Para luego verificar la lógica creada por un programador de FPGA, es práctica común escribir bancos de pruebas en HDL para envolver y ejercitar el diseño de FPGA afirmando entradas y verificando salidas. El banco de pruebas y el código FPGA se ejecutan en un entorno de simulación que modela el comportamiento de temporización de hardware del chip FPGA y muestra todas las señales de entrada y salida al diseñador para su validación de prueba. El proceso de creación del banco de pruebas HDL y la ejecución de la simulación a menudo requiere más tiempo que la creación del diseño HDL original de FPGA en sí.

Una vez que haya creado un diseño FPGA con HDL y lo haya verificado, debe alimentarlo a una herramienta de compilación que toma la lógica basada en texto y, a través de varios pasos complejos, sintetiza su HDL en un archivo de configuración o flujo de bits que contiene información sobre cómo deben conectarse los componentes. Como parte de este proceso manual de varios pasos, a menudo se requiere que especifique una asignación de nombres de señal a los pines del chip FPGA que está utilizando.

Figura 8: Diseño simple del contador FPGA en VHDL

En última instancia, el desafío en este flujo de diseño es que la experiencia requerida para programar en HDL tradicionales no está generalizada, y como resultado, la tecnología FPGA no ha sido accesible para la gran mayoría de los ingenieros y científicos.

Herramientas de diseño de síntesis de alto nivel

La aparición de herramientas de diseño gráfico HLS, como LabVIEW, ha eliminado algunos de los principales obstáculos del proceso tradicional de diseño HDL. El entorno de programación LabVIEW es especialmente adecuado para la programación de FPGA porque representa claramente el paralelismo y el flujo de datos, por lo que los usuarios con experiencia y sin experiencia en los procesos de diseño tradicionales de FPGA pueden aprovechar la tecnología FPGA. Además, para que no se pierda la propiedad intelectual (IP) anterior, puede usar LabVIEW para integrar VHDL existentes en sus diseños FPGA LabVIEW. Debido a que LabVIEW FPGA está altamente integrado con hardware, no hay necesidad de reescribir código en VHDL para cumplir con las limitaciones de tiempo o recursos, como puede ser el caso en muchos generadores de código HLS.

Figura 9 A la izquierda está LabVIEW, que es una herramienta de diseño de alto nivel para FPGAs. Proporciona abstracción para la complejidad de bajo nivel que a menudo se encuentra al crear y escalar diseños VHDL.

Luego, para simular y verificar el comportamiento de su lógica FPGA, LabVIEW ofrece funciones directamente en el entorno de desarrollo. Sin conocimiento del lenguaje HDL de bajo nivel, puede crear bancos de pruebas para ejercer la lógica de su diseño. Además, la flexibilidad del entorno LabVIEW ayuda a los usuarios más avanzados a modelar el tiempo y la lógica de sus diseños exportando a simuladores de ciclo preciso como Xilinx ISim.

Las herramientas de compilación LabVIEW FPGA automatizan el proceso de compilación, por lo que puede iniciar el proceso con un clic en un botón y recibir informes y errores, si los hay, a medida que se completan las etapas de compilación. Si se producen errores de temporización debido a su diseño de FPGA, LabVIEW resalta estas rutas críticas gráficamente para acelerar el proceso de depuración.

Conclusión

La adopción de la tecnología FPGA sigue aumentando a medida que los instrumentos de nivel superior como LabVIEW hacen que los FPGA sean más accesibles. Sin embargo, sigue siendo importante mirar dentro de la FPGA y apreciar cuánto está sucediendo realmente cuando se compilan diagramas de bloques para ejecutarlos en silicio. Comparar y seleccionar objetivos de hardware basados en biestables, LUT, multiplicadores y RAM de bloques es la mejor manera de elegir el chip FPGA adecuado para su aplicación. Comprender el uso de los recursos es extremadamente útil durante el desarrollo, especialmente cuando se optimiza el tamaño y la velocidad. Este documento no pretende ser una lista exhaustiva de todos los componentes fundamentales de la FPGA. Puede obtener más información sobre los FPGA y el diseño de hardware digital en los recursos a continuación.