USD

FPGA en el mundo de Arduino: utilice el módulo Snō de Alorium tanto para IP preconfiguradas como personalizadas

Por Steve Leibson

Colaboración de Editores de Digi-Key de América del Norte

Los arreglos programables de puertas en campo (FPGA) proporcionan una manera de resolver problemas de diseño integrado en tiempo real con hardware cuando el firmware que se ejecute en un microcontrolador o microprocesador sea demasiado lento. También permiten la flexibilidad periférica. Sin embargo, el uso de FPGA ha significado aprender nuevos lenguajes de programación (generalmente Verilog o VHDL), aprender un flujo de desarrollo completamente nuevo para generar flujos de bits de FPGA y posiblemente gastar una cantidad significativa de dinero en una placa de desarrollo de FPGA.

Debido a estos obstáculos, muchos ingenieros de diseño están reacios a utilizar los FPGA, aunque sean una herramienta muy útil en la caja de herramientas de diseño. Para superar esta reticencia, algunos proveedores están trabajando arduamente para acortar la curva de aprendizaje de FPGA. Por ejemplo, Arduino introdujo la placa de desarrollo de FPGA Arduino ABX00022 MKR Vidor 4000 (consulte, "Aplicar FPGA rápida y fácilmente con Arduino MKR Vidor 4000"). El Arduino MKR Vidor 4000 agrega una manera de programar el FPGA que se integra perfectamente con el muy popular entorno completo de desarrollo integrado (IDE) de Arduino al mismo tiempo que obtiene un rendimiento de nivel FPGA mediante el uso de extensiones de biblioteca especiales de Arduino.

Ahora, existe una nueva alternativa a las ofertas anteriores, incluida la placa Arduino MKR Vidor 4000. Alorium Technology ha desarrollado una forma algo diferente de agregar el rendimiento de FPGA al mundo del desarrollo integrado de Arduino. El enfoque de Alorium proporciona tanto bloques IP preconfigurados para la aceleración E/S, así como bloques IP de diseño personalizado.

Este artículo analizará brevemente las formas tradicionales de usar los FPGA. Luego, analizará en profundidad los módulos de FPGA de AloriumXLR8R22M08V5U0DI y Snō SNOR20M16V3 compatibles con Arduino. El artículo mostrará cómo Alorium ha agregado su propio giro al utilizar los FPGA en el continuo de Arduino tanto para utilizar una IP preconfigurada como para crear una IP personalizada, y cómo los diseñadores pueden comenzar a aplicar los módulos de FPGA.

Cómo acelerar un Arduino

Cientos de miles de diseñadores, ingenieros, desarrolladores, entusiastas del bricolaje y fabricantes de todo el mundo ahora utilizan varias versiones de la serie de placas DEV Arduino para desarrollar sistemas integrados para una gran variedad de aplicaciones. Las placas Arduino y el IDE de Arduino se han vuelto tan populares porque son muy fáciles de usar y programar.

A medida que los usuarios de Arduino han continuado impulsando la arquitectura original de Arduino en aplicaciones más complejas, se han encontrado con problemas de rendimiento. Parte del problema de rendimiento ha sido la arquitectura simple de 8-bit del microcontrolador Arduino original. Otra parte del problema es la forma en que el sistema de software de Arduino implementa muchos periféricos en tiempo real que utilizan software cuando el microcontrolador integrado de Arduino no tiene un bloque de hardware equivalente.

Una forma de abordar este problema de rendimiento es mediante el uso de microcontroladores más potentes, pero todavía hay mucho que el software puede hacer en un entorno de tiempo real. Algunos periféricos de alta velocidad en tiempo real simplemente deben implementarse en el hardware. También es posible especificar microcontroladores con más periféricos de hardware, pero la combinación correcta de periféricos varía de un proyecto a otro.

Los fabricantes de microcontroladores han abordado la necesidad de diferentes combinaciones de periféricos al ofrecer docenas o, a veces, incluso cientos de variaciones en una familia de microprocesadores. Sin embargo, ese no es un enfoque viable para productos de nivel de placa como Arduino debido a la necesidad de conectores en placa con suficientes clavijas E/S para satisfacer todas las necesidades. A pesar de que ahora existen muchas variantes de placa Arduino, todavía no hay suficientes para satisfacer las necesidades de cada proyecto integrado.

Los FPGA satisfacen la necesidad de una combinación de periféricos variada

Al poner el hardware programable a disposición del diseñador integrado, los FPGA pueden satisfacer la necesidad de una combinación de periféricos que varíe de un proyecto a otro. Una forma de agregar la funcionalidad de FPGA a una placa de microcontrolador integrada es simplemente agregar un FPGA a un diseño existente. Ese es el enfoque que Arduino adoptó cuando diseñó la placa Arduino MKR Vidor 4000. La placa combina el microcontrolador de baja potencia ATSAMD21G18A-AUT SAMD21 de Microchip Technology basada en Arm® Cortex®-M0+ 32-bit con FPGA Intel Cyclone 10 10CL016YU484C6G.

Arduino ha agregado diversos bloques IP de hardware al IDE de Arduino, específicamente para la placa MKR Vidor 4000. Estos periféricos están disponibles a través de dos bibliotecas principales: VidorPeripherals y VidorGraphics. Estos bloques IP de hardware se construyen automáticamente en el FPGA Intel Cyclone 10 en el Arduino MKR Vidor 4000 cuando la biblioteca de periféricos relevante se incluye en un diseño Arduino, el nombre que Arduino utiliza para un programa o unidad de código. El registro actual de bloques IP periféricos incluye:

  • Puertos I2C
  • Puertos de interfaz periférica serial (SPI)
  • Transmisores Receptores Asíncronos Universales (UART)
  • Controladores de modulación por ancho de pulsos (PWM) de alta frecuencia
  • Temporizadores de alta velocidad
  • Codificadores en cuadratura de alta velocidad
  • Controlador LED inteligente RGB direccionable Neopixel de Adafruit Industries

Algunos de estos periféricos, como I2C y SPI, ya estaban disponibles como bloques IP de software para las placas Arduino anteriores. La diferencia entre estas implementaciones de software anteriores y los bloques IP equivalentes implementados en el FPGA de la placa Arduino MKR Vidor 4000 es que las versiones de FPGA de estos periféricos ofrecen un rendimiento mucho mejor. Por ejemplo, cada instancia de I2C y SPI se implementa con bloques de hardware programables separados dentro del FPGA de la placa. Como resultado, no hay pérdida de rendimiento al crear una instancia de diversos puertos seriales.

Al implementar bloques periféricos como hardware de FPGA y ponerlos a disposición utilizando el mismo mecanismo de biblioteca que ya es familiar para los redactores de diseño de Arduino, la placa Arduino MKR Vidor 4000 hace que los FPGA sean fáciles de usar. No hay que aprender un nuevo lenguaje de descripción de hardware (HDL), como VHDL o Verilog. De hecho, los periféricos basados en FPGA se parecen a cualquier otro objeto C++ desde el punto de vista del programador. Arduino planea agregar más periféricos de bloque IP de hardware más adelante.

La placa Arduino MKR Vidor 4000 aún no es una placa de desarrollo de FPGA de propósito general porque carece de soporte para la programación directa del FPGA Cyclone 10 en placa con el código HDL. Arduino está planeando permitir que más usuarios avanzados obtengan más utilidades del FPGA de la placa Arduino MKR Vidor 4000 utilizando la herramienta de desarrollo de HDL Quartus de Intel para los FPGA de la empresa.

Alorium da el siguiente paso

Alorium ya ha dado ese paso con su metodología OpenXLR8 y Xcelerator Blocks (XB) para sus placas DEV Snō de FPGA XLR8R22M08V5U0DI y SNOR20M16V3 compatibles con Arduino (Figura 1 y Figura 2, respectivamente). Ambas placas se basan en versiones diferentes de la familia de FPGA Intel MAX 10 con memoria de configuración flash integrada. El XLR8 combina el Intel MAX 10 10M08SAU169C8G con un microcontrolador compatible con el conjunto de instrucciones ATmega328 8-bit. Utiliza el mismo factor de forma que la placa DEV original Arduino Uno. por lo que es compatible con los múltiples blindajes y accesorios Arduino.

Imagen de la placa DEV XLR8R22M08V5U0DI de Alorium Technology

Figura 1: La placa DEV XLR8R22M08V5U0DI de Alorium Technology combina un FPGA Intel MAX 10 con un microcontrolador compatible con el conjunto de instrucciones ATmega328 8-bit, todo en un factor de forma Arduino Uno. (Fuente de la imagen: Alorium Technology)

El módulo Alorium Snō de FPGA es una placa DEV mucho más pequeña, que mide 0.7 x 1.7 in, según la Figura 2. Aunque la placa DEV Snō de FPGA es físicamente más pequeña, integra una versión más grande del FPGA Intel MAX 10 con el doble de elementos lógicos: 16 K en un FPGA MAX 10 10M16SAU169C8G en comparación con 8 K en el dispositivo 10M08 en la placa XLR8. También tiene más del doble de clavijas E/S (32 en comparación con 14 de la placa XLR8).

Imagen de la placa DEV Snō de FPGA de Alorium Technology

Figura 2: Al igual que la placa DEV XLR8, la placa de desarrollo Snō de FPGA de Alorium Technology combina un microcontrolador compatible con el conjunto de instrucciones ATmega328 8-bit con un Intel MAX 10; en este caso, es el FPGA 10M16SAU169C8G. Sin embargo, la placa DEV Snō de FPGA es mucho más pequeña. (Fuente de la imagen: Alorium Technology)

Alorium también ofrece la placa de interfaz SNOMAKRR10 que acepta un módulo Snō de FPGA y la transforma en una placa de factor de forma Arduino ligeramente sobredimensionada con un puerto USB y clavijas de interfaz E/S adicionales del FPGA. Algunas de las clavijas del módulo Snō de FPGA se dirigen a las cabeceras con blindaje compatibles con Arduino de la placa de interfaz SnōMAKR, mientras que otras se dirigen a una cabecera adicional a lo largo del borde de la placa que está opuesta al conector USB (Figura 3).

Imagen de la placa de interfaz SNOMAKRR10 de Alorium

Figura 3: La placa de interfaz SNOMAKRR10 de Alorium convierte la placa DEV Snō de FPGA de la empresa en un factor de forma compatible con Arduino con un puerto USB y un regulador en la placa para que el cable USB pueda alimentar la placa DEV directamente. (Fuente de la imagen: Alorium Technology)

Las placas DEV XLR8 y Snō de FPGA implementan el microcontrolador 8-bit y sus periféricos de hardware en un chip: un FPGA Intel MAX 10. La figura 4 ilustra cómo se logra esto.

Diagrama de integración del microcontrolador compatible con AVR de Atmel

Figura 4: Las placas DEV XLR8 y Snō de FPGA implementan el microcontrolador compatible con AVR de Atmel como un núcleo suave dentro del FPGA MAX 10. (Fuente de la imagen: Alorium Technology)

El núcleo del microcontrolador compatible con AVR (abajo a la izquierda de la Figura 4) es el mismo microcontrolador AVR 8-bit Atmel ATmega328 que se utilizó en las placas DEV Arduino originales. Sin embargo, en lugar de residir en un chip separado, la versión de Alorium del microcontrolador AVR se implementa como un núcleo suave dentro del FPGA.

Cinco Alorium XB (XB1 a XB5) aparecen sobre el núcleo del microcontrolador en la Figura 4. Los XB son bloques IP que se implementan utilizando los recursos en chip del FPGA. El microcontrolador AVR se comunica con los XB en chip a través de una interfaz de registro direccionable. Las placas DEV Snō y XLR8 se envían con XB preinstalados (también disponibles en GitHub) que corresponden a los periféricos que los desarrolladores de Arduino necesitan con frecuencia, incluidos los siguientes:

Tenga en cuenta que el último XB en la lista anterior no es realmente un bloque periférico E/S; es un acelerador matemático de punto flotante. Los XB pueden ser cualquier tipo de acelerador de hardware. No se limitan a E/S.

Escoja un bloque, cualquier bloque

Tanto las placas DEV XLR8 como Snō de FPGA pueden actualizarse en el campo al seleccionar diferentes XB (o múltiples copias del mismo XB) para ilustrarse dentro del FPGA utilizando el flujo de desarrollo OpenXLR8 de Alorium. Los desarrolladores también pueden crear Xcelerator Blocks personalizados utilizando el flujo OpenXLR8 de Alorium (Figura 5).

Imagen del flujo de desarrollo OpenXLR8 de Alorium

Figura 5: El flujo de desarrollo OpenXLR8 de Alorium permite que los diseñadores creen nuevos bloques de hardware utilizando las herramientas de diseño Quartus Prime de Intel y que las agreguen al IDE de Arduino. (Fuente de la imagen: Alorium Technology)

La creación de un XB personalizado actualmente requiere un conocimiento práctico de los lenguajes de descripción de hardware Verilog o VHDL y una familiaridad con el conjunto de herramientas FPGA Intel Quartus, específicamente la versión 17.1 de Quartus Prime Lite Edition y las herramientas de simulación ModelSim de Mentor Graphics. Los HDL son necesarios para el desarrollo de FPGA porque permiten que el diseñador exprese la ejecución paralela de múltiples tareas de una manera estándar y bien definida. Los lenguajes de alto nivel (HLL) como C y C++ son inherentemente lenguajes secuenciales.

Los compiladores de HLL toman el código fuente de HLL y lo transmiten en largas secuencias de instrucciones de máquina, que generalmente se ejecutan una a la vez. Es por eso que los FPGA son mucho más rápidos que los procesadores: los FPGA pueden ejecutar miles de tareas simultáneas, dado un FPGA suficientemente grande. Existen compiladores de HLL que pueden convertir el código escrito en C o C++ en un HDL, que luego se procesa mediante herramientas de FPGA convencionales, pero estos compiladores de HLL no forman parte actualmente del flujo de diseño OpenXLR8 de Alorium.

Sin embargo, una vez que se ha diseñado y depurado un XB con herramientas de desarrollo de HDL y FPGA, se puede utilizar en el IDE de Arduino como cualquier otro bloque de la biblioteca de Arduino. Alorium también está actualmente desarrollando XB adicionales para sus bibliotecas de IDE de Arduino.

Conclusión

Al crear sus respectivas placas DEV de FPGA, tanto Arduino como Alorium Technology reconocen la creciente necesidad de los diseñadores de un mayor rendimiento integrado de estas placas DEV económicas. Aunque estas dos empresas han tomado caminos algo diferentes, ambas se dirigen hacia el mismo objetivo final: encontrar una manera de hacer que los FPGA sean más accesibles para más desarrolladores integrados. En el nivel más simple, tanto el enfoque de Arduino como el de Alorium hacen que el diseño de hardware sea tan simple como seleccionar bloques y ejecutar scripts.

Actualmente, el flujo de diseño completo aún no se ha vuelto lo más simple posible. Arduino aún no ha abierto su flujo completo de desarrollo de FPGA a los desarrolladores de HDL. El flujo de diseño de Alorium admite el diseño de HDL, pero requiere conocimiento de los lenguajes y herramientas de diseño de FPGA de Verilog o VHSL.

Sin embargo, estos productos han abierto la puerta, por lo que es al menos teóricamente posible aprovechar otros avances en el desarrollo de FPGA, incluidos los compiladores de hardware C y C++. Hasta entonces, es posible extraer parte del rendimiento de FPGA utilizando los métodos simples que Alorium Technology y Arduino han desarrollado para agregar estas capacidades al IDE de Arduino.

Descargo de responsabilidad: Las opiniones, creencias y puntos de vista expresados por los autores o participantes del foro de este sitio web no reflejan necesariamente las opiniones, las creencias y los puntos de vista de Digi-Key Electronics o de las políticas oficiales de Digi-Key Electronics.

Acerca de este autor

Steve Leibson

Steve Leibson fue ingeniero de sistemas para HP y Cadnetix, editor en jefe de EDN y Microprocessor Report, blogger tecnológico de Xilinx y Cadence (entre otros), y se desempeñó como experto en tecnología en dos episodios de "The Next Wave with Leonard Nimoy". Ha ayudado a los ingenieros de diseño a desarrollar sistemas mejores, más rápidos y más confiables durante 33 años.

Acerca de este editor

Editores de Digi-Key de América del Norte