Comment fonctionne la programmation FPGA ?



La frontière entre matériel et logiciel est parfois ténue. Lors de la conception d’éléments matériels pour des appareils tels que les ordinateurs, il est crucial de s’assurer qu’ils puissent exécuter du code efficacement.

Les réseaux de portes programmables sur site (FPGA) représentent une architecture matérielle qui offre aux utilisateurs la capacité de personnaliser les circuits à tout moment et en tout lieu.

Comprendre le fonctionnement de la programmation FPGA est un atout majeur pour ceux qui aspirent à une carrière dans l’informatique ou la technologie.

Cet article explore la programmation FPGA, son fonctionnement, ses applications et présente des ressources pour approfondir ce sujet.

La programmation des FPGA

Un FPGA est un circuit intégré (CI) doté de blocs logiques configurables et d’un ensemble de fonctionnalités qui peuvent être programmés et reprogrammés par l’utilisateur.

L’expression « programmable sur site » signifie que les capacités d’un FPGA ne sont pas figées, mais plutôt ajustables. Les utilisateurs ont la possibilité de modifier les fonctions du circuit à tout moment pour répondre aux besoins spécifiques de leurs projets.

La programmation FPGA consiste à créer des solutions informatiques en utilisant des FPGA.

Le programmeur doit planifier, concevoir et mettre en œuvre l’architecture des portes logiques afin de créer un circuit fonctionnel répondant aux exigences des utilisateurs. L’objectif final de la programmation FPGA est de concevoir un circuit matériel qui génère une sortie spécifique lorsqu’il est alimenté.

Les circuits imprimés d’un FPGA sont conçus pour reproduire le comportement des circuits du monde réel. Ils sont donc largement utilisés par les équipes d’assurance qualité pour tester de nouveaux produits. Un système FPGA intègre divers composants matériels.

Au niveau fondamental, les portes logiques sont les éléments constitutifs des FPGA. Elles réalisent des opérations booléennes sur les données d’entrée et de sortie. Des ressources de routage sont également présentes pour acheminer les signaux d’un point à un autre.

Applications de la programmation FPGA

La programmation FPGA a gagné en popularité auprès des développeurs contemporains.

Voici quelques exemples d’applications :

#1. Conception d’ASIC

Les développeurs peuvent créer des circuits intégrés spécifiques à une application (ASIC). Ces ASIC sont devenus très prisés dans le domaine du minage de Bitcoin.

La conception à base de FPGA facilite la correction des erreurs. L’avantage d’un FPGA est qu’il peut servir de modèle pour d’autres projets, permettant ainsi de réaliser des économies de temps et de ressources sur le long terme.

#2. Secteur des énergies renouvelables

Les énergies renouvelables, issues du vent et du soleil, sont de plus en plus utilisées face au défi du réchauffement climatique. Les sous-stations de transport et de distribution (T&D) nécessitent des réseaux électriques efficaces pour un fonctionnement optimal des réseaux intelligents.

Les FPGA jouent un rôle crucial dans l’amélioration de l’évolutivité et des performances des réseaux intelligents, tout en maintenant une faible consommation d’énergie.

#3. Aérospatiale et défense

Les avions sont parfois exposés à des environnements difficiles. Les entreprises de fabrication produisent donc des FPGA résistants aux radiations, offrant une fiabilité et des performances supérieures aux solutions ASIC traditionnelles, tout en respectant les contraintes de cycle de vie dans ces environnements extrêmes.

#4. Applications serveur

Les centres de données/serveurs sont devenus incontournables avec l’augmentation constante de la demande de vitesse de traitement des données. Ces données doivent être traitées en temps réel, même avec des contraintes d’espace et de temps limitées.

Grâce à la mémoire vive bloc (BRAM), le FPGA peut assurer la connectivité avec des éléments de stockage de données externes, accélérant ainsi le traitement des données sur les puces.

Avantages de la programmation FPGA

  • Les FPGA sont reconfigurables. Leur souplesse d’utilisation est un atout majeur. On peut les configurer, puis les reconfigurer pour une autre application.
  • Les FPGA nécessitent moins d’interventions manuelles. Les tâches de routage, de synchronisation et de placement sont gérées par le logiciel dans un environnement FPGA. Ces tâches peuvent être longues et complexes si elles sont réalisées manuellement.
  • Les FPGA sont comme des toiles vierges. Contrairement aux ASIC traditionnels avec des fonctionnalités prédéfinies, les FPGA peuvent être reprogrammés pour différentes utilisations. Un ingénieur peut ainsi programmer un tel système pour diverses applications en utilisant des langages de description matérielle (HDL).
  • Prototypage. La fabrication d’ASIC est coûteuse, et une simple erreur peut entraîner des dépenses importantes. Avant de lancer un ASIC sur le marché, il est essentiel de s’assurer que le système est fonctionnel et répond aux objectifs pour lesquels il a été conçu. Les FPGA sont reprogrammables, ce qui permet de réaliser des tests jusqu’à obtention de la conception souhaitée.

Comment programmer un FPGA

Les conceptions utilisées pour faire fonctionner les FPGA sont principalement codées dans des langages de description matérielle (HDL) tels que SystemVerilog, Verilog et VHDL.

#1. Verilog

Verilog est idéal pour programmer des FPGA avec un minimum de code. Ce langage est comparable au C, bien qu’il soit conçu pour l’architecture matérielle. Verilog a été créé pour rendre les HDL plus flexibles et robustes.

#2. System Verilog

SystemVerilog est une extension de Verilog. C’est à la fois un langage de vérification et de description matérielle. Il permet de décrire des modèles matériels, de les convertir en code numérique, puis de les télécharger dans un système FPGA pour réaliser des tâches spécifiques.

#3. VHDL

VHDL est l’abréviation de « Very High-Speed Integrated Circuit Hardware Description Language ». Ce langage permet de décrire le matériel d’un FPGA, ce qui offre aux utilisateurs la possibilité de le modéliser et de le simuler avant de l’implémenter dans le matériel réel.

La programmation avec VHDL facilite l’identification des erreurs potentielles dans le circuit. Les utilisateurs peuvent ainsi les corriger avant l’implémentation finale. Le VHDL permet d’écrire du code structuré.

La synthèse de haut niveau (HLS), où la conception est réalisée dans un sous-ensemble du langage C, et le compilateur transforme le code en Verilog, est une approche populaire pour les développeurs qui souhaitent programmer des FPGA.

Les développeurs peuvent ainsi utiliser les langages qu’ils maîtrisent pour concevoir des FPGA via des plateformes logicielles unifiées.

#4. Python

Ce langage de programmation polyvalent peut être utilisé pour programmer des FPGA. Pour ce faire, Python utilise PYNQ, un projet open source qui facilite le travail avec les plateformes AMD.

#5. C et C++

Les langages basés sur le C sont idéaux pour la conception de FPGA en raison de la synthèse de haut niveau (HLS). Le compilateur AMD Vivado™ HLS offre un environnement de programmation partageant des technologies clés avec des processeurs spécialisés et standard, ce qui optimise les programmes basés sur le C.

#6. Plateformes d’IA telles que TensorFlow et PyTorch

Les ingénieurs utilisent des modèles d’apprentissage profond entraînés avec Pytorch ou TensorFlow pour compiler en vue d’une accélération sur FPGA. Cette approche élimine le besoin de programmation matérielle de bas niveau tout en permettant une compilation très rapide.

Le code écrit dans des langages de programmation courants, comme Python, C ou C++, est synthétisé et converti en descriptions d’interconnexions propriétaires via des outils de synthèse.

Le fichier résultant contenant la description de l’interconnexion est appelé flux binaire. Un flux binaire décrit comment configurer un FPGA (comment connecter les bascules, les portes logiques et divers éléments de circuits numériques via la matrice d’interconnexion du FPGA).

Les FPGA disposent d’une configuration intégrée qui lit le fichier de flux binaire et configure le FPGA en conséquence. Le circuit de configuration peut lire ce fichier via diverses approches, telles que la mémoire flash parallèle, JTAG et la mémoire flash série.

Les fabricants de cartes FPGA fournissent des logiciels/instructions pour permettre aux développeurs de configurer/programmer les systèmes.

La plupart des systèmes FPGA peuvent être reprogrammés autant de fois que nécessaire. La seule limite est lorsque ces systèmes sont endommagés par des conditions hors spécifications telles que l’usure, la température ou la haute tension.

Vous trouverez ci-dessous des ressources d’apprentissage pour approfondir vos connaissances sur la programmation FPGA :

Ressources d’apprentissage

#1. Programmation FPGA pour débutants

Ce livre vous initie au monde de la programmation FPGA à l’aide de SystemVerilog. L’approche pédagogique est basée sur des projets, vous permettant de développer des applications concrètes telles qu’un clavier et une calculatrice.

Le livre présente l’architecture FPGA avant d’explorer l’écriture en SystemVerilog RTL. Il aborde également les bases des mathématiques informatiques, du pipelining et du parallélisme. Des sujets avancés tels que AXI et l’interfaçage clavier avec PS/2 sont également traités.

Ce livre est idéal pour les programmeurs, les ingénieurs et les développeurs de systèmes embarqués qui souhaitent se familiariser avec la programmation FPGA et SystemVerilog. Cette ressource convient également aux concepteurs de FPGA qui recherchent une expérience pratique dans la réalisation de projets réels.

#2. FPGA pour les programmeurs logiciels

Ce livre introduit les ingénieurs logiciels au monde des FPGA et de la technologie reconfigurable. Il commence par présenter le FPGA et son modèle de programmation. Il est également recommandé pour ceux qui souhaitent découvrir comment les FPGA mettent en œuvre diverses applications sans processus de conception matérielle de bas niveau.

Le livre offre une vision réaliste des problèmes adaptés aux FPGA et explique comment mettre en œuvre des solutions du point de vue d’un ingénieur logiciel. L’approche orientée utilisateur de ce livre facilite la compréhension des domaines d’application de la technologie FPGA. Les lecteurs cibles de ce livre sont les concepteurs de logiciels et les ingénieurs concepteurs de FPGA.

#3. Démarrer avec FPGA : Programmation Métal

Ce livre enseigne aux lecteurs comment utiliser BeMicro MAX 10 pour construire un capteur de température, un capteur de mouvement, un capteur de température et un écran de voiture KITT de Knight Rider. Il est adapté aux débutants, même sans compétences en programmation ni diplôme d’ingénieur en électronique.

Le livre présente les FPGA et explique leurs différences avec les microcontrôleurs ou les ASIC. C’est également la ressource idéale pour découvrir comment configurer une chaîne d’outils et utiliser le VHDL pour programmer un FPGA. Ce livre est parfait pour les passionnés d’électronique et de Raspberry Pi qui souhaitent une introduction pratique au monde des FPGA.

#4. Programmation de FPGA : Premiers pas avec Verilog

Ce livre est parfait si vous n’avez jamais utilisé Verilog ni de FPGA. C’est un bon point de départ si la programmation FPGA est un concept nouveau pour vous. Des exemples typiques, tels que les compteurs et les affichages à 7 segments, permettront aux apprenants de se familiariser avec le sujet.

Le livre présente Verilog aux apprenants et propose divers exemples intermédiaires comme le VGA. Cette ressource n’est peut-être pas idéale si vous avez déjà des connaissances sur Verilog et les FPGA. Ce livre est disponible en version Kindle et Broché.

Conclusion

Les FPGA peuvent parfois dépasser les GPU en termes de performances dans les applications d’apprentissage en profondeur à faible latence. La programmation FPGA est une compétence essentielle car les FPGA sont utilisés dans l’électronique grand public, l’automatisation industrielle et les applications militaires, entre autres. Les FPGA sont en constante évolution, et on peut s’attendre à les voir affinés pour une utilisation plus large et de meilleures performances.