Extrait de l'émission CPU release Ex0233 : FPGA, deuxième partie.
Tu vois, Tuco, il y a deux sortes de tutoriels sur les FPGA : ceux qui t’apprennent à programmer un FPGA sans que tu comprennes ce que tu fais, et ceux qui t’expliquent [emphase pompeuse] encyclopédiquement la circuiterie contenue dans un FPGA, au risque de te faire décrocher avant d’arriver à la première ligne de code.
[énervé] Dans une prochaine chronique, je case anticonstitutionnellement, j’vous jure qu’je l’fais !
Une question qui taraude les softeux se mettant au FPGA, voire ceux qui ont foiré un filetage en se trompant de vis au remontage, c’est quel est l’équivalent FPGA de la quantité de mémoire programme d’un microcontrôleur, ou encore, comment comparer un nombre de lignes de code VHDL avec un nombre de lignes de code Python.
[Révélation] C’est les LUT ! Oubliez la block RAM.
Dans un FPGA, la block RAM ne sert pas à stocker le code, mais seulement des données. On peut y mettre une mémoire vidéo, une file de port série, une trame réseau, un tampon d’accès disque, mais pas un programme, [À la Jeremy Clarkson] non non non !
C’est parce qu’un FPGA n’est pas un stored-program computer… un ordinateur à programme enregistré, le concept génialissime du non moins génial Alan Turing qui nous a donné tous nos ordinateurs, anciens comme modernes… vous n’aurez qu’à rechercher architecture de von Neumann
.
Un FPGA, ce n’est pas un ordinateur… ou pas forcément… ou du moins, pas encore. Non, c’est comme une carte électronique entière dont vous choisiriez chaque circuit intégré, mais condensée dans une seule puce.
[Benoît, professoral] — Donc, la bonne mesure, ce serait une sorte d’équivalent du nombre de circuits intégrés simples, comme un 74HC00 qui contient 4 portes non-et.
[Da Scritch] — Mais c’est quoiiii, une porte non-et
?
[Benoît] — Très simple : c’est une porte dont la sortie vaut faux seulement lorsque toutes ses entrées valent vrai.
[Da Scritch, façon Serge Karamazov bourré] — … j’ai riiiin compris.
[Benoît] — Nan mais tu l’fais exprès, t’es juste bourré parce qu’on n’est plus en Janvier !
[Da Scritch] — Oooouuuiiiii !
[Benoît] — Alors qu’une porte NAND, t’arrives à en construire une, tu peux refaire toute l’informatique, à partir de ça !
[Da Scritch] — Naaaan… Et ?
[Moment de flottement, Benoît vient de comprendre qu'il a marché dedans] — ah ouais je vois l’problème… En électronique, un circuit c’est un agencement de composants dont un courant électrique fait le tour ; d’où le terme circuit
. Un circuit numérique, c’est un circuit qui manipule seulement deux valeurs de voltage, pour représenter vrai et faux, ou 0 et 1, ce qui est bien commode pour compter en binaire.
[Da Scritch] — compter en binaire c’est pas commode…
[Benoît] — t’as bien raison, je préfère compter en hexadécimal. Mais on s’égare…
[Da Scritch] — Promis, j’me concentre.
[Benoît] — En électronique numérique, une porte logique c’est un petit circuit qui combine deux entrées binaires en une sortie. Il y a des portes et
, des portes non
aussi appelées inverseurs (il y a un piège : une seule entrée), des portes ou-exclusif
, etc… On appelle ça la logique booléenne ou algèbre de Boole, et non mon p’tit Da Scritch, ce n’est pas sale ! C’est comme la méthode à Gilles, c’est la logique à George Boole, un mathématicien anglais du XIXème siècle.
Donc il faut dire quelle fonction est calculée par la porte logique. Comme il n’y a pas beaucoup de combinaisons possibles, une méthode simple et universelle est de juste donner la liste, de ces combinaisons…
…dans une table,
…une table qu’on consulterait à chaque évaluation de la porte logique,
…une table de consultation, quoi ! Les angliches appellent ça une look-up table
.
[Da Scritch] — Aaaaaaah ! Une L. U. T.
! une LUT, hein ? [rire débile]
[Benoit se facepalm et reprend] — Bon, on a assez perdu de temps !
Donc mon FPGA, c’est une réplication en grande quantité de blocs logiques élémentaires dont on peut programmer la fonction et les interconnexions après que le silicium ait été fabriqué. Et quand je dis réplication, c’est au sens propre, physique : c’est la juxtaposition, dans le plan de la galette de silicium, de N fois la même tuile. C’est trop bien !
La fonction de chaque bloc logique élémentaire est comparable à une poignée de puces de la famille 7400 : mettons deux-trois portes logiques et un registre, qui est un élément mémoire de 1 bit. C’est la fonction de transfert calculée par ces quelques portes logiques qu’on encode dans une LUT. C’est purement combinatoire, c’est-à-dire qu’il n’y a pas de stockage d’information, juste une combinaison de l’état courant des entrées. Le stockage, c’est le registre qui s’en charge.
[Da Scritch, sarcastique] — Il a dit deux-trois portes logiques
, pas très précis comme unité de mesure…
[Benoît] — Tu as parfaitement raison : c’est une unité marketing !
Déjà, certains FPGA anciens avaient des LUT3, c’est-à-dire à 3 entrées, tandis que le consensus moderne serait plutôt à la densification, à l’aide de LUT6. Ensuite tous les FPGA ne sont pas architecturés pareil : leurs blocs logiques élémentaires ne sont pas strictement comparables en terme de quantité de fonctionnalité exprimable.
Toutefois, la communauté s’est plus ou moins mise d’accord pour approximer la taille de chaque FPGA en quelques nombres : l’équivalent LUT4, la quantité de Block RAM, et éventuellement la quantité de fonctions spécialisées comme des tranches DSP qui contiennent des multiplieurs câblés, ou des Ser-Des pour implémenter des liaisons PCIexpress.
[Da Scritch, hystérique, serrant des dents] — …oui mais combieeeeen ?
[Benoît] — Dans un FPGA à 5 €, quelques milliers de LUT à tout casser, mais ça peut tenir dans 1 mm². Dans un FPGA haut-de-gamme à 5 000 €…
[Da Scritch, à la Tchéky Karyo] — Combien ??
[Benoît] — …plus d’un million.
Textes : Benoit
Voix complémentaire : Da Scritch
Photo : DE0-Nano FPGA Development and Education Kit, pack-shot promotionnel d'un kit de développement Cyclone IV par Terasic. D.R.