FPGA dans l'univers Arduino : utiliser le module Snō d'Alorium pour des blocs IP préconfigurés et personnalisés
Avec la contribution de Rédacteurs nord-américains de DigiKey
2019-05-01
Les réseaux de portes programmables par l'utilisateur (FPGA) fournissent un moyen de résoudre en temps réel les problèmes de conception embarquée avec le matériel lorsque le micrologiciel s'exécutant sur un microcontrôleur ou un microprocesseur est trop lent. Ils permettent également une flexibilité périphérique. Cependant, l'utilisation de FPGA implique l'apprentissage de nouveaux langages de programmation (généralement Verilog ou VHDL), l'apprentissage d'un tout nouveau flux de développement pour générer des trains de bits FPGA et éventuellement un investissement important pour une carte de développement FPGA.
En raison de ces obstacles, de nombreux ingénieurs de conception sont réticents à l'utilisation de FPGA, même s'il s'agit d'un outil très pratique dans la boîte à outils de conception. Pour lutter contre cette réticence, certains fournisseurs s'efforcent de réduire la courbe d'apprentissage des FPGA. Par exemple, Arduino a lancé la carte de développement FPGA Arduino ABX00022 MKR Vidor 4000 (voir l'article relatif à l'application simple et rapide de FPGA avec l'Arduino MKR Vidor 4000). L'Arduino MKR Vidor 4000 ajoute un moyen permettant de programmer le FPGA qui s'intègre de façon transparente avec le très populaire environnement de développement intégré (IDE) Arduino, tout en obtenant des performances de niveau FPGA en utilisant des extensions de bibliothèque Arduino spéciales.
Il existe désormais une nouvelle alternative aux offres précédentes, qui incluent la carte Arduino MKR Vidor 4000. Alorium Technology a développé un moyen assez différent d'ajouter des performances FPGA dans l'univers de développement embarqué Arduino. L'approche d'Alorium prévoit à la fois des blocs de propriété intellectuelle (IP) préconfigurés pour l'accélération des E/S et des blocs IP personnalisés.
Cet article aborde brièvement les moyens traditionnels d'utiliser les FPGA. Il examine ensuite en profondeur les modules FPGA compatibles Arduino XLR8R22M08V5U0DI et Snō SNOR20M16V3 d'Alorium. L'article explique comment Alorium a ajouté sa touche personnelle en matière d'utilisation des FPGA dans le continuum Arduino, à la fois en utilisant des blocs IP préconfigurés et en créant des blocs IP personnalisés, et comment les concepteurs peuvent commencer à appliquer les modules FPGA.
Comment accélérer une solution Arduino
Des centaines de milliers de concepteurs, d'ingénieurs, de développeurs, d'amateurs de DIY et de fabricants utilisent maintenant diverses versions de la série de cartes de développement Arduino pour développer des systèmes embarqués pour un large éventail d'applications. Les cartes Arduino et l'IDE Arduino sont devenus si populaires parce qu'ils sont très faciles à utiliser et à programmer.
À mesure que les utilisateurs Arduino ont continué à utiliser l'architecture Arduino d'origine dans des applications plus complexes, ils ont été confrontés à des problèmes de performances. Une partie du problème de performances était liée à l'architecture 8 bits simple du microcontrôleur Arduino d'origine. Une autre partie du problème concerne la façon dont le système logiciel Arduino implémente de nombreux périphériques en temps réel en utilisant le logiciel, alors que le microcontrôleur embarqué d'Arduino ne dispose pas d'un bloc matériel équivalent.
Un moyen de résoudre ce problème de performances est d'utiliser davantage de microcontrôleurs puissants, mais les capacités du logiciel sont limitées dans un environnement en temps réel. Il faut simplement implémenter quelques périphériques temps réel à haute vitesse dans le matériel. Il est également possible de spécifier des microcontrôleurs avec davantage de périphériques matériels, mais la bonne combinaison de périphériques varie d'un projet à l'autre.
Les fabricants de microcontrôleurs ont répondu au besoin d'utiliser différentes combinaisons de périphériques en offrant des dizaines (parfois des centaines) de variations dans une gamme de microprocesseurs. Cependant, cette approche n'est pas viable pour les produits niveau carte, comme Arduino, en raison du besoin de connecteurs embarqués avec suffisamment de broches E/S pour répondre à toutes les exigences. Bien qu'il existe maintenant de nombreuses variantes de carte Arduino, elles ne suffisent pas encore à répondre aux besoins de chaque projet embarqué.
Les FPGA comblent le besoin d'une combinaison de périphériques diversifiés
En mettant un matériel programmable à la disposition du concepteur de systèmes embarqués, les FPGA peuvent répondre au besoin de disposer d'une combinaison de périphériques variant d'un projet à un autre. Un moyen d'ajouter la fonctionnalité FPGA à une carte de microcontrôleur embarqué consiste à ajouter simplement un FPGA à une conception existante. Il s'agit de l'approche adoptée par Arduino lors de la conception de la carte Arduino MKR Vidor 4000. La carte combine le microcontrôleur basse consommation SAMD21 ATSAMD21G18A-AUT basé sur Arm® Cortex®-M0+ 32 bits de Microchip Technology avec le FPGA 10CL016YU484C6G Cyclone 10 d'Intel.
Arduino a ajouté plusieurs blocs IP matériels à l'IDE Arduino spécifiquement pour la carte MKR Vidor 4000. Ces périphériques sont disponibles par l'intermédiaire de deux bibliothèques principales : VidorPeripherals et VidorGraphics. Ces blocs IP matériels sont automatiquement construits dans le FPGA Cyclone 10 d'Intel sur l'Arduino MKR Vidor 4000 lorsque la bibliothèque de périphériques correspondante est incluse dans le sketch Arduino—le nom utilisé par Arduino pour un programme ou une unité de code. La liste actuelle des blocs IP périphériques inclut les éléments suivants :
- Ports I2C
- Ports SPI
- UART
- Contrôleurs PWM haute fréquence
- Temporisateurs haute vitesse
- Décodeurs en quadrature haute vitesse
- Contrôleur LED intelligent RVB adressable Neopixel d'Adafruit Industries
Certains de ces périphériques, comme I2C et SPI, étaient déjà disponibles en tant que blocs IP logiciels pour les cartes Arduino précédentes. La différence entre ces implémentations logicielles précédentes et les blocs IP équivalents implémentés sur le FPGA de la carte Arduino MKR Vidor 4000 est que les versions FPGA de ces périphériques fournissent de bien meilleures performances. Par exemple, chaque instanciation I2C et SPI est implémentée avec des blocs matériels programmables distincts dans le FPGA de la carte. De ce fait, il n'y a aucune perte de performances lors de l'instanciation de plusieurs de ces types de ports série.
En implémentant des blocs périphériques en tant que matériel FPGA et en les mettant à disposition à l'aide du même mécanisme de bibliothèque avec lequel les créateurs de sketch Arduino sont déjà familiarisés, la carte Arduino MKR Vidor 4000 facilite l'utilisation des FPGA. Il n'existe aucun nouveau langage de description de matériel (HDL), comme VHDL ou Verilog, à apprendre. En réalité, les périphériques basés sur des FPGA ressemblent à n'importe quel autre objet C++ du point de vue du programmeur. Arduino prévoit d'ajouter d'autres périphériques de bloc IP matériel de ce type ultérieurement.
La carte Arduino MKR Vidor 4000 n'est pas encore une carte de développement FPGA à usage général du fait qu'elle ne dispose pas de la prise en charge de programmation directe pour le FPGA Cyclone 10 embarqué en utilisant un code HDL. Arduino prévoit d'autoriser davantage d'utilisateurs expérimentés à réaliser d'autres installations à partir du FPGA de la carte Arduino MKR Vidor 4000 en utilisant l'outil de développement HDL Quartus d'Intel pour les FPGA de la société.
Alorium passe au niveau supérieur
Alorium est déjà passé au niveau supérieur avec sa méthodologie OpenXLR8 et les blocs d'accélération XB (Xcelerator Blocks) pour ses cartes de développement FPGA XLR8R22M08V5U0DI et Snō SNOR20M16V3 compatibles Arduino (Figure 1 et Figure 2, respectivement). Ces deux cartes sont basées sur des versions différentes de la gamme de FPGA MAX 10 d'Intel avec une mémoire de configuration Flash intégrée. La carte XLR8 combine le 10M08SAU169C8G MAX 10 d'Intel avec un microcontrôleur compatible avec un jeu d'instructions ATmega328 8 bits. Elle utilise le même format que la carte de développement Arduino Uno d'origine. Elle est ainsi compatible avec les nombreux shields et accessoires Arduino.

Figure 1 : La carte de développement XLR8R22M08V5U0DI d'Alorium Technology combine un FPGA MAX 10 d'Intel avec un microcontrôleur compatible avec un jeu d'instructions ATmega328 8 bits, le tout dans un format Arduino Uno. (Source de l'image : Alorium Technology)
Le module FPGA Snō d'Alorium est une carte de développement beaucoup plus petite, qui mesure 17,8 mm x 43,2 mm, selon la Figure 2. Même si la carte de développement FPGA Snō est plus petite physiquement, elle intègre une version plus grande du FPGA MAX 10 d'Intel avec deux fois plus d'éléments logiques : 16 000 dans un FPGA MAX 10 10M16SAU169C8G contre 8000 dans un dispositif 10M08 sur la carte XLR8. Elle possède également plus de deux fois le nombre de broches E/S (32 contre 14 pour la carte XLR8).

Figure 2 : Comme la carte de développement XLR8, la carte de développement FPGA Snō d'Alorium Technology combine un microcontrôleur compatible avec un jeu d'instructions ATmega328 8 bits avec un Intel MAX 10, dans ce cas le FPGA 10M16SAU169C8G. Cependant, la carte de développement FPGA Snō est beaucoup plus petite. (Source de l'image : Alorium Technology)
Alorium propose également la carte Breakout SNOMAKRR10 qui accepte un module FPGA Snō et le transforme en une carte présentant un format Arduino légèrement surdimensionné avec un port USB et des broches de dérivation E/S supplémentaires provenant du FPGA. Certaines broches du module FPGA Snō sont routées vers les embases de shield compatibles Arduino de la carte Breakout SnōMAKR, tandis que les autres sont acheminées vers une embase supplémentaire le long du bord de la carte à l'opposé du connecteur USB (Figure 3).

Figure 3 : La carte Breakout SNOMAKRR10 d'Alorium convertit la carte de développement FPGA Snō de la société en un format compatible Arduino avec un port USB et un régulateur embarqué permettant au câble USB d'alimenter directement la carte de développement. (Source de l'image : Alorium Technology)
Les cartes de développement FPGA XLR8 et Snō implémentent le microcontrôleur 8 bits et ses périphériques matériels dans une puce—un FPGA MAX 10 d'Intel. La Figure 4 illustre la réalisation de cette configuration.

Figure 4 : Les cartes de développement FPGA XLR8 et Snō implémentent le microcontrôleur compatible Atmel AVR en tant que cœur de processeur logiciel dans le FPGA MAX 10. (Source de l'image : Alorium Technology)
Le cœur de microcontrôleur compatible AVR (en bas à gauche de la Figure 4) est le même microcontrôleur AVR 8 bits Atmel ATmega328 qui a été utilisé dans les cartes de développement Arduino d'origine. Cependant, au lieu d'être installée sur une puce distincte, la version d'Alorium du microcontrôleur AVR est implémentée en tant que cœur de processeur logiciel dans le FPGA.
Cinq blocs XB Alorium (XB1 à XB5) s'affichent au-dessus du cœur de microcontrôleur dans la Figure 4. Les blocs XB sont des blocs IP implémentés à l'aide de ressources sur puce du FPGA. Le microcontrôleur AVR communique avec les blocs XB sur puce par l'intermédiaire d'une interface de registre adressable. Les cartes de développement XLR8 et Snō sont fournies avec des blocs XB préinstallés (également disponibles sur GitHub) qui correspondent aux périphériques dont les développeurs Arduino ont fréquemment besoin, y compris :
- Décodage en quadrature
- Contrôle de servomoteur
- Contrôle LED RVB NeoPixel
- CAN 12 bits amélioré
- Mathématiques en virgule flottante
Notez que le dernier bloc XB de la liste ci-dessus ne correspond pas véritablement à un bloc périphérique E/S : il s'agit d'un accélérateur mathématique en virgule flottante. Les blocs XB peuvent être tout type d'accélérateur matériel. Ils ne sont pas limités aux E/S.
Choisir un bloc, n'importe quel bloc
Les cartes de développement FPGA XLR8 et Snō peuvent être mises à jour sur le terrain en sélectionnant différents blocs XB (ou plusieurs copies du même bloc XB) à instancier dans le FPGA à l'aide du flux de développement OpenXLR8 d'Alorium. Les développeurs peuvent également créer des blocs XB personnalisés à l'aide du flux OpenXLR8 d'Alorium (Figure 5).

Figure 5 : Le flux de développement OpenXLR8 d'Alorium permet aux concepteurs de créer de nouveaux blocs matériels à l'aide des outils de conception Quartus Prime d'Intel et de les ajouter à l'IDE Arduino. (Source de l'image : Alorium Technology)
La création d'un bloc XB personnalisé nécessite la connaissance pratique des langages de description de matériel Verilog ou VHDL et une maîtrise de la suite d'outils FPGA Quartus d'Intel, particulièrement la version 17.1 du logiciel Quartus Prime Lite Edition, et des outils de simulation ModelSim de Mentor Graphics. Les langages HDL sont requis pour le développement de FPGA, car ils permettent au concepteur d'exprimer l'exécution parallèle de plusieurs tâches selon une méthode standard bien définie. Les langages de haut niveau (HLL), tels que C et C++ sont des langages intrinsèquement séquentiels.
Les compilateurs HLL prennent le code source HLL et le traduisent en longues séquences d'instructions machine, qui sont généralement exécutées une par une. C'est pour cela que les FPGA sont bien plus rapides que les processeurs : les FPGA peuvent exécuter des milliers de tâches simultanément, avec un FPGA suffisamment grand. Il existe des compilateurs HLL qui peuvent traduire du code rédigé en C ou C++ en langage HDL, qui est alors traité par des outils FPGA conventionnels, mais ces compilateurs HLL ne font actuellement pas partie du flux de conception OpenXLR8 d'Alorium.
Toutefois, une fois qu'un bloc XB a été conçu et débogué à l'aide d'un langage HDL et d'outils de développement FPGA, il peut être utilisé dans l'IDE Arduino comme tout autre bloc de bibliothèque Arduino. En outre, Alorium est actuellement en train de développer des blocs XB supplémentaires pour ses bibliothèques d'IDE Arduino.
Conclusion
En créant leurs cartes de développement FPGA respectives, Arduino et Alorium Technology reconnaissent le besoin croissant des concepteurs en matière de performances embarquées accrues pour ces cartes de développement économiques. Bien que ces deux sociétés aient adopté des méthodes assez différentes, elles tendent vers le même objectif final : trouver un moyen de rendre les FPGA plus accessibles à davantage de développeurs de systèmes embarqués. Au niveau le plus simple, les approches d'Arduino et d'Alorium réduisent la conception matérielle à la sélection de blocs et à l'exécution de scripts.
Actuellement, le flux de conception complet n'a pas encore été simplifié au maximum. Arduino n'a pas encore mis son flux de développement FPGA complet à la disposition des développeurs HDL. Le flux de conception d'Alorium accepte la conception HDL, mais requiert une connaissance des outils et des langages de conception FPGA Verilog ou VHDL.
Cependant, ces produits ont ouvert la voie et montrent qu'il est au moins théoriquement possible de tirer parti d'autres avancées de développement FPGA, notamment les compilateurs matériels C et C++. En attendant, il est possible d'extraire une partie des performances des FPGA à l'aide de méthodes simples développées par Alorium Technology et Arduino pour ajouter ces capacités à l'IDE Arduino.
Avertissement : les opinions, convictions et points de vue exprimés par les divers auteurs et/ou participants au forum sur ce site Web ne reflètent pas nécessairement ceux de DigiKey ni les politiques officielles de la société.




