Électronique numérique programmable Qu'est-ce que le FPGA ?

Notre Blog
Exemple d'un FPGA sur une carte électronique

Définition et construction d’un FPGA ou d’un composant électronique numérique programmable

Les FPGA, pour Field-Programmable Gate Array, sont une génération de composants logiques programmables. Ceux-ci sont des circuits électroniques intégrés logiques, qui peuvent être (re)programmés après leur fabrication. Concrètement, ils prennent la forme d’une puce située sur une carte électronique, contenant de nombreuses ressources réintégrées à cette puce. Le rôle d’un développeur FPGA sera alors de configurer cette puce pour réaliser les fonctions souhaitées.

Un FPGA est construit avec des périphériques d’entrées et de sorties (les IO sur la figure 2 ci-dessous) et des éléments programmables tels que des cellules logiques (les CLB – figure 2), des blocs de type mémoire (les Memory – figure 2) et des blocs plus complexes de multiplication par exemple (DSP – figure 2). Tous ces blocs sont agençables et reliés par des routes. L’objectif est alors de configurer ces blocs et ces routes afin que la puce réalise une fonction globale. Fonction qui accueille une information arrivant en entrée, la transforme à l’intérieur et la fait sortir pour qu’elle permette une action.

Dans la figure 2 ci-dessous, sur l’image de droite, on peut s’apercevoir de toutes les cellules configurées – en bleu plus foncé – et reliées aux multiples routes utilisées – en bleu-vert.

Les applications du FPGA

On retrouve ces puces un peu partout et notamment chez soi. Par exemple, il est sans doute arrivé à beaucoup de voir son décodeur TV accepter une mise à jour, avec comme message « mise à jour firmware X.X ». Cette manipulation est en fait une reprogrammation d’un FPGA à l’intérieur du décodeur. Mais la valeur ajoutée du FPGA s’exprime également dans des secteurs stratégiques comme le spatial, l’aéronautique ou la défense. In fine, on peut retrouver des FPGA un peu partout, grâce à sa qualité première qui est la mise à jour à distance de manière infinie afin de réaliser des activités différentes – ou corriger une erreur sans avoir à rappeler tout le matériel.

Le deuxième gros avantage du FPGA étant la rapidité des calculs et des traitements, on les retrouve ainsi dans les clouds, où les FPGA permettent l’accélération de certains traitements. Typiquement, les FPGA vont être utiles aux clouds pour le chiffrement. Aujourd’hui lorsque l’on crée un VPN, entre un point A et un point B, on va vouloir chiffrer des données. Auparavant, seul un CPU en était capable, en récupérant dans le serveur des données et en procédant à des calculs – souvent longs – pour les chiffrer. À la différence du microprocesseur, le FPGA est une configuration matérielle de nombreux éléments unitaires qui fonctionneront de concert. À chaque cycle d’horloge, chaque petit élément effectuera alors une tâche, là où le CPU ne sera capable d’en effectuer qu’une seule. Un chiffrement via FGPA ne pourrait ainsi prendre qu’un cycle d’horloge contre une multitude via un microprocesseur.

représentations schématiques et en 3D d’un FPGA
Communication électrique entre différents composants

Performances et intérêt du FPGA

Pour prendre une analogie, la différence entre un microprocesseur et un FGPA est un peu comme la différence entre un garagiste changeant les roues d’une voiture, et une équipe de mécaniciens de formule 1. Là où le garagiste – le CPU – s’attachera à toutes les tâches une à une, c’est-à-dire dévisser, enlever la roue, mettre une nouvelle roue, revisser, passer à la deuxième, etc. une équipe de mécaniciens de formule 1 – le FPGA – aura une personne dédiée à chaque tâche pour chaque roue. Ce qui optimisera évidemment le temps global du projet, même si un CPU sera plus souple et plus rapide en fréquence d’horloge.

On pourrait rétorquer que les CPU sont capables de multithreading, c’est-à-dire du séquençage de phases en parallélisation. Mais bien souvent, c’est parallélisation est de façade. Pour reprendre l’analogie précédente, ce multithreading correspond bien souvent à dévisser un écrou sur une roue, puis un autre sur la deuxième, etc. Or, l’interrogation du CPU lors de cycle régulier donne l’impression que les choses avancent de concert – deux écrous ont été enlevés sur chaque roue – mais finalement, le microprocesseur ne fait qu’effectuer les tâches les unes après les autres, dans un séquençage où les tâches effectuées le sont par groupes similaires. Donc même en prenant en compte la rapidité par tâche supérieure du CPU, bout à bout, les FPGA seront plus rapides qu’un microprocesseur, grâce à leur fonctionnement mono-tâche.

Rapporté à la fréquence, un FPGA oscillera entre 200 et 300 mégahertz à son maximum, mais les projets classiques nécessiteront en général 100 Mhz. Tandis que les microprocesseurs auront une fréquence avoisinant les 3 gigahertz. Pourtant, afin de réaliser un ensemble de tâches, un CPU enchaînera aux alentours d’une trentaine d’instructions en dix périodes d’horloge, là où les FPGA pourront tenir 100, 1 000 voire 10 000 instructions en continu sur une seule période d’horloge.

Codage VHDL et Simulation

Le rôle du développeur FPGA ?

Un projet FPGA se déroule en plusieurs phases assez traditionnelles. La première sera la phase de spécification. Particulièrement longue et challengeante, elle va permettre de choisir ce que l’on veut intégrer au FPGA, en termes de fonctionnalités de base et de taille notamment. La deuxième phase correspondra au codage (figure 3), en langage VHDL pour l’Europe, Verilog pour les USA. Elle aboutira à la construction de l’architecture qui va être interprétée et synthétisée, puis routée sur le FPGA.

La troisième phase consistera en la vérification en simulation. Le développeur observera ainsi l’exécution du traitement avant de l’intégrer à une puce FPGA. Cette phase permet ainsi d’aller voir à l’intérieur de tous les liens et signaux pour étudier leur comportement et ainsi d’avoir la vision globale du fonctionnement du FPGA. Et dès que la maturité est jugée suffisante sur ces simulations, le développeur effectuera des tests sur carte des différentes fonctions afin de vérifier qu’elles sont bien présentes et que les spécifications initiales sont respectées.

Toutes ces phases sont réalisées en lien avec les équipes hardware, qui définissent le besoin de comportement de leur carte électronique, et également des équipes logiciel dans le cadre des communications entre CPU et FPGA (voir plus loin la notion de SoC).

Comme un développeur IT, le développeur FPGA peut s’appuyer sur des bibliothèques (appelées composants en langage électronique), en langage VHDL, qui regroupent des outils de base permettant de faire des conversions de type de signaux ou du calcul de base. Pour des fonctions réimplémentées, plus complexes, le développeur se tournera vers les IP (pour Intellectual Property soit propriété intellectuelle). Ce sont des composants logiciels, avec leurs entrées et leurs sorties, qui peuvent être soit ouverts, écrit en VHDL, soit fermés, ou on aura une description en VHDL des entrées et sorties et au milieu une boîte noire qui sera appelée par l’outil de placement routage pour positionner les cellules précompilées et les mettre à la place souhaitée. Ces IP pourront être disponibles en open source ou payantes.

Ingénieur construisant une carte électronique

FPGA ou composant électronique numérique programmable : une solution d’avenir ?

Les dernières années avaient vu les projets FPGA se réduire, notamment à cause des performances de calcul toujours plus grandes des microprocesseurs. Mais aujourd’hui, on observe un regain d’intérêt pour le FPGA grâce au SoC (System On-Chip). Le on-chip est un FPGA auquel on va rajouter des éléments hardware en dur ou en soft. Typiquement, on peut rajouter en interne ou à côté des matrices FPGA un CPU afin de tirer avantage des deux unités électroniques. Le CPU va ainsi commander les différentes configurations du FPGA.

La matrice FPGA comportera alors plusieurs parties : la partie programmable logique, avec le code VHDL ; et des parties CPU ou dédiées à certaines interfaces. On pourra donc réaliser sur une seule puce ce qu’on pouvait réaliser avant sur plusieurs ou sur la totalité d’une carte.

Outre le fait de centraliser les qualités de chacun, cela permet aussi de concentrer tous les composants en un endroit et donc de réduire le temps de circulation des signaux et de gagner un temps précieux, évitant ainsi soudures, pistes longues, adaptations ralentissant les électrons.

Enfin, grâce aux instructions programmées dans les FPGA, on peut se servir du CPU pour en quelque sorte le reprogrammer en lui donnant des tâches spécifiques au besoin.

 

Finalement et vu son coût (de 1 à 3000$ la puce), le FPGA seul aura un intérêt en fonction des spécifications de la carte électronique. Pour les grandes séries, le CPU seul pourrait être le plus indiqué, mais si on souhaite lui apporter de la flexibilité, on peut se tourner vers le SoC. Et si on veut faire des petites séries, alors le FPGA sera idéal, car il aura le meilleur rapport qualité/prix et le meilleur ROI. En effet, outre son temps de développement, une puce CPU dédiée (ce qu’on appelle un ASIC) prendra environ 6 mois à être fabriquée dans les usines de silicium. Et ceci sans le droit à l’erreur car non reprogrammable.