Cette page est la première d'une série de cinq pages consacrée au métier de concepteur FPGA. Je commence par une vue d'ensemble et quelques suggestions pour bien débuter.
Introduction
Cette série de pages est destinée à vous qui voulez apprendre la conception FPGA — en particulier si vous visez à en faire votre métier — mais qui vous sentez perdu dans l'océan d'informations disponibles. Tant de tutoriels, billets de blog, cours vidéo et discussions de forum. Et aujourd'hui, une grande partie de ce matériel est générée par IA. Il est difficile de distinguer ce qui est écrit par quelqu'un qui connaît le chemin de ce qui n'est que paroles sans valeur mais d'apparence professionnelle.
Si vous êtes au point où tout ce qu'on vous dit devoir apprendre vous submerge, vous n'êtes certainement pas seul. La liste des choses à maîtriser est réellement longue, et il est difficile de savoir ce qui compte vraiment et ce qui n'est que du bruit.
Je ne suis pas là pour vous dire quoi faire, ni pour vous remettre un programme que vous devriez suivre à la lettre. Ce que je veux, c'est expliquer le but et l'importance de chaque compétence, afin que vous puissiez décider vous-même de ce qu'il faut prioriser et quand. C'est déjà assez difficile comme ça. Si vous pouvez vous épargner du travail inutile et atteindre votre objectif, tant mieux.
Mais si votre but est simplement de réussir un entretien d'embauche, je crains de ne pas pouvoir beaucoup vous aider. Les entretiens d'embauche sont des bêtes imprévisibles. Chaque recruteur a sa façon d'évaluer un candidat, et bien souvent il cherche une personne qui lui rappelle lui-même. Après tout, nous pensons tous être la personne la plus intelligente de la pièce, non ? Et peut-être que l'approche naïve fonctionne : si vous êtes bon, vous trouverez un travail.
À quoi servent les FPGA ?
Avant de nous plonger dans les compétences, cela vaut la peine de consacrer un moment à ce en quoi consiste réellement ce métier. Que construit-on avec des FPGA, comment et pourquoi ?
Voici la situation. Quelqu'un a besoin d'une carte de circuit imprimé pour un nouveau produit. La plupart des composants de cette carte peuvent être achetés sur le marché : mémoires, alimentations, connecteurs, etc. Mais quelque part au milieu de toute l'action, il y a une fonction qu'aucun composant au monde n'assure, du moins pas exactement comme le produit en a besoin. Vous décidez donc de concevoir votre propre puce. C'est un ASIC, et c'est vraiment, vraiment cher. Le cycle de production peut coûter plus cher qu'une maison, et si vous découvrez un bug après cela, tout ce que vous pouvez faire est de publier un rapport d'errata. Et de sortir une nouvelle version quelque temps plus tard, s'il existe une justification financière pour cela.
L'alternative à ce cycle de conception coûteux et risqué est le FPGA. Une puce de ce genre ressemble à un kit électronique sur un morceau de silicium : elle contient beaucoup de petites briques de base et de fils qui ne sont pas connectés selon un schéma particulier. Au lieu de cela, il y a un gros bloc de données qui contient des informations sur la façon dont le FPGA doit se comporter. Ces données sont appelées le flux de configuration (bitstream). Les informations dans le bitstream configurent chaque petite brique de base à l'intérieur du FPGA, et déterminent aussi comment les interconnexions internes sont réalisées.
Une fois le bitstream chargé dans le FPGA, nous obtenons quelque chose de similaire à un ASIC : c'est une puce qui se comporte comme si nous avions fabriqué le silicium pour nos propres besoins. Sauf qu'elle est plus lente, qu'elle consomme plus d'énergie, et que le composant lui-même coûte plus cher qu'un ASIC produit en grande série.
Le bitstream ne doit pas être confondu avec le logiciel. Ils se ressemblent en ce sens que si quelque chose ne va pas, il est souvent possible de corriger une ligne de code et de recompiler. Mais le FPGA n'est pas un processeur. Il ne « fait tourner » rien. Voyez le FPGA comme une immense matrice de petites machines logiques, et le bitstream indique à chacune de ces petites machines ce qu'elle doit faire.
Pour résumer ce point : le FPGA est la brique manquante d'un projet électronique. Il est utilisé là où vous aimeriez avoir un ASIC, mais préférez payer plus cher chaque composant, et obtenir des performances inférieures, afin de réduire les risques et les coûts de développement. Ceux-ci restent malgré tout élevés, mais dans une moindre mesure.
Le travail principal du concepteur FPGA réside dans les tâches de conception qui aboutissent à un bitstream. C'est comparable à un concepteur logiciel qui écrit du code et aboutit à un binaire logiciel exécutable. Mais le rôle du concepteur FPGA ne s'arrête certainement pas là, car le FPGA fait partie d'un projet électronique. J'y reviendrai plus loin.
Si le projet nécessite un processeur embarqué, cette partie est souvent intégrée au FPGA elle aussi. Dans certains projets, on choisit d'utiliser le processeur comme composant séparé. Dans un cas comme dans l'autre, le processeur peut effectuer des tâches simples ou se comporter comme un ordinateur complet faisant tourner Linux ou un autre système d'exploitation.
Mais — on a beaucoup entendu parler des FPGA utilisés comme coprocesseurs et accélérateurs matériels dans les centres de données. On a aussi parlé de FPGA pour l'IA. Et il y a encore des entreprises qui vantent cela. Je pense que ça a toujours été des balivernes, et aujourd'hui il est assez clair que les GPU sont supérieurs dans ce domaine, surtout pour tout ce qui touche à l'IA. Ne tombez donc pas dans ce piège. Le FPGA sert de brique importante manquante dans un projet électronique, parfois d'un type très sophistiqué, mais très rarement pour autre chose.
Pourquoi est-ce difficile ?
Disons-le ainsi : si j'en arrive à écrire cinq pages sur ce qu'il faut pour être un bon concepteur FPGA, c'est probablement qu'il y a beaucoup de choses à dire.
Les concepteurs FPGA sont bien payés parce que c'est un métier compliqué, et la raison est qu'il combine trois compétences à la fois.
La première compétence est l'électronique. Au final, vous développez quelque chose qui se trouve sur un PCB, et qui doit communiquer avec les autres composants de cette carte. Le projet comprend des broches, des tensions, des connecteurs, des oscillateurs d'horloge et bien d'autres choses. La logique que vous créez dialogue avec de vrais composants sur une vraie carte, à de vraies tensions et de vraies températures.
La deuxième compétence est le « logiciel ». Ce que vous écrivez et utilisez, ce sont des fichiers qui ressemblent beaucoup à du logiciel : fichiers Verilog, fichiers de contraintes, scripts de compilation. Mais il est bien plus compliqué de travailler avec ce genre de « logiciel », pour des raisons que j'aborderai plus loin. Le compilateur, pour ainsi dire, n'est pas de votre côté comme peut l'être un compilateur logiciel, et les outils de débogage non plus.
La troisième compétence est la connaissance de l'application. En tant que concepteur FPGA, vous devez souvent vous former vous-même à des sujets avancés liés au projet (ou que vous connaissez déjà par expérience ou études). Traitement du signal, protocoles réseau, protocoles d'interface avec les ordinateurs, normes d'encodage de données pour les écrans d'ordinateur, et une longue liste d'autres disciplines liées au produit réel que vous développez. Il y a toujours un nouveau protocole de communication, un nouvel ensemble de règles de sécurité, ou un nouveau composant avec ses exigences d'interface bizarres à apprendre.
Mais le véritable défi du métier de concepteur FPGA est celui-ci : le principal domaine d'expertise du projet est souvent étroitement lié à la conception FPGA elle-même. Cela signifie que vous devrez peut-être devenir expert des principales technologies utilisées par votre entreprise. Exemples typiques : filtres numériques tels que FIR et IIR, FFT, décimation et interpolation ; traitement audio et vidéo ; radio sans fil et radio logicielle ; radar ; imagerie médicale ; réseaux et traitement de paquets ; Ethernet ; PCIe et USB ; normes vidéo comme HDMI, DisplayPort, SDI et MIPI, avec toutes leurs complications de synchronisation vidéo et d'espace colorimétrique ; et systèmes de contrôle. Et cela ne s'arrête certainement pas là.
Vous n'avez pas besoin de connaître toutes ces choses pour devenir concepteur FPGA. Mais vous finirez par en apprendre beaucoup en cours de route. Donc si l'idée d'apprendre sans cesse de nouvelles technologies vous semble un cauchemar, je demanderais, euh, êtes-vous sûr de vouloir vous lancer dans les FPGA ?
Dois-je être un magicien de l'électronique ?
Voici une bonne nouvelle, peut-être : la logique dans un projet FPGA peut grossièrement se diviser en deux sortes, et l'une d'elles ne demande aucune connaissance en électronique.
La première sorte est la logique d'interface. C'est la logique qui dialogue avec des composants externes ou avec des cœurs IP (IP core), durs ou logiciels (hard ou soft). Pensez aux puces qui capturent ou produisent des signaux vidéo ou radio, aux puces RAM, etc. Ce type de logique s'interface avec ces composants, et cette interface est l'endroit où le FPGA rencontre le monde physique. Pour implémenter ce genre de logique, vous devez comprendre des choses comme les niveaux de tension, les budgets de temps (timing budgets) et la gigue (jitter).
La deuxième sorte est la logique de traitement. C'est là que les calculs réels ont lieu : amélioration d'images vidéo, filtres numériques, organisation ou analyse de flux de données selon un protocole réseau, etc. Ce genre de logique fonctionne typiquement dans l'un de deux modes. Soit elle lit des données depuis des FIFO et en écrit vers des FIFO ou d'autres éléments de mémoire, auquel cas on peut parler de projet de « logique pure ». Soit elle est synchrone avec le flux de données, comme un filtre numérique qui reçoit des échantillons (samples) d'un signal radio et produit un échantillon de sortie pour chaque échantillon d'entrée qui arrive, avec un délai de pipeline (pipeline). Ce dernier type est souvent plus difficile à implémenter, car chaque étage doit suivre le rythme du flux.
Le point important ici est que l'implémentation de logique de traitement ne demande aucune connaissance de l'électronique. Peu importe qu'il s'agisse de ce que j'ai appelé « logique pure » ou de logique synchrone avec un flux de données externe : tout se passe à l'intérieur du FPGA, et le monde extérieur n'a aucune importance pour la conception de la logique. C'est donc le chemin le plus facile pour entrer dans le monde du FPGA. Il y a toutefois un piège : il n'y a pas toujours beaucoup de ce genre de logique dans un projet. De plus, dans une petite entreprise, on attendra de vous que vous fassiez un peu de tout. Impossible d'y échapper.
Il n'y a pas de « projet typique »
Si vous cherchez des descriptions du déroulement d'un projet FPGA, vous trouverez plein de jolis diagrammes. Prenez-les avec des pincettes. La réalité est plus désordonnée, et voici pourquoi.
Tout d'abord, le PCB est souvent développé avant même qu'on sache exactement ce qu'il va faire. Cela paraît insensé, et parfois ça l'est, mais c'est aussi une conséquence de la beauté des FPGA : la flexibilité. Tant que le matériel ne verrouille pas cette flexibilité, vous pouvez décider plus tard ce que la carte devra faire.
Deuxièmement, les fonctions du projet FPGA sont presque toujours développées progressivement. D'abord une fonctionnalité minimale, puis des fonctionnalités sont ajoutées avec le temps. En partie parce que les managers veulent généralement voir quelque chose fonctionner, et en partie parce que les exigences ont tendance à changer tout le temps. Il n'est pas rare que le PCB soit modifié en même temps que le projet, pour prendre en charge de nouvelles exigences fonctionnelles et corriger des bugs matériels.
Troisièmement, il est plus courant de poursuivre un projet existant que de partir de zéro. Même les projets qui semblent flambant neufs partent souvent d'une conception FPGA existante et d'un PCB existant, adaptés aux nouvelles exigences. Si cela vous semble familier, à vous qui avez travaillé dans le développement logiciel, ce n'est pas une coïncidence.
Vous entendrez donc peut-être parler du « déroulement typique d'un projet FPGA » : spécification, architecture, RTL, simulation, synthèse, implémentation, clôture temporelle (timing closure), flux de configuration (bitstream), mise en service, vérification. Ou quelque chose comme ça. Je ne veux pas dire que c'est totalement absurde, alors je le formulerai ainsi : je n'ai jamais été dans un projet qui fonctionnait de cette façon. Certaines de ces étapes se mélangent, d'autres sont complètement sautées, et généralement toutes se produisent en même temps. Le point, quand on est un spécialiste FPGA, c'est d'être habitué à ce que tout se passe en parallèle.
Le point à retenir est celui-ci : dans une entreprise, il y a de bonnes chances que vous commenciez par ajouter des fonctionnalités à un projet existant. Et si ce projet est bien structuré (euh, c'est rarement le cas), vous n'avez pas besoin de tout savoir dès le premier jour.
Comment démarrer ?
Apprendre la conception FPGA, c'est une combinaison d'acquisition de compétences théoriques et de capacités pratiques. C'est à vous de voir si vous préférez d'abord jouer avec l'électronique, ou d'abord apprendre la théorie, ou faire un peu des deux tout au long du parcours. Les trois approches fonctionnent.
Il y a toutefois une chose dont je voudrais vous avertir : faites attention à ne pas apprendre auprès d'amateurs de FPGA. Cela peut être contre-productif, sérieusement. La principale difficulté du métier de concepteur FPGA est d'obtenir une conception fiable. Les amateurs s'en moquent généralement, parce qu'ils ne construisent pas un produit qui doit fonctionner sur le terrain pendant dix ans. Ils proposent donc souvent un chemin rapide et court, en sautant les petits détails cruciaux nécessaires à une conception FPGA professionnelle. Vous acquerrez de très mauvaises habitudes en apprenant auprès d'eux.
Comment faire la différence entre un amateur et quelqu'un auprès de qui vous voulez apprendre ? Il est difficile de savoir ce qui est correct ou incorrect avant d'avoir soi-même les connaissances. Mais vous pouvez avoir une intuition si l'auteur a la bonne attitude méticuleuse envers la conception FPGA. Je décris le bon type de personnalité dans la dernière partie de cette série.
Cela dit, voici comment je vous suggérerais de mettre les mains dans le cambouis.
Internet regorge de projets d'exemple. Il est généralement plus simple de commencer par un projet FPGA adapté à votre carte spécifique. De tels projets existent souvent dans le package, précisément pour vous encourager à acheter tel ou tel matériel.
Commencez par un simple projet de LED clignotante. Pas parce que les LED clignotantes sont intéressantes, mais parce que cela vous fait parcourir le premier cycle complet d'implémentation et de programmation du bitstream. Vous installerez les outils, vous verrez un bitstream être généré, et vous verrez quelque chose se passer sur la carte. C'est déjà un jalon en soi.
Essayez ensuite d'autres projets d'exemple. Rappelez-vous que la valeur d'un tel projet réside dans ce que vous en comprenez, et plus important encore, dans votre capacité à y apporter des modifications significatives et à observer ce qui se passe. Un projet que vous ne pouvez pas modifier est un projet dont vous n'avez rien appris.
À ce propos, méfiez-vous des projets de démonstration de fournisseurs qui viennent avec une longue liste d'instructions : cliquez ici, cliquez là, et à la fin la carte fait quelque chose d'impressionnant. Si vous n'avez rien compris en chemin, et que le projet est trop compliqué pour que vous puissiez le comprendre et le modifier, ce projet ne vaut absolument rien pour vous. C'est une démo, pas un exemple de conception.
La dernière étape, et la plus difficile, consiste à vous lancer des défis avec des projets que vous choisissez vous-même. Vous pouvez trouver plein d'inspiration dans des projets existants sur Internet, mais l'essentiel est que vous fassiez tout par vous-même. Contrairement à la plupart des projets publiés, l'idée de votre projet peut être inutile et farfelue. Faites un jeu idiot avec des LED et des boutons, transformez la carte en instrument de musique (créez des signaux de sortie de type analogique avec du PWM), faites varier l'intensité et le clignotement des LED selon différents motifs, ce qui vous passe par la tête. De tels projets ne sont généralement pas publiés, car qui veut passer du temps sur une idée farfelue au résultat sans intérêt ? Eh bien, peu importe que le résultat soit inutile quand vous le faites pour vous entraîner. L'important est que cela fonctionne correctement, et que vous y soyez arrivé en utilisant les bonnes techniques. Des LED et des boutons, grimpez vers des choses plus ambitieuses.
Les courtes vidéos sur le FPGA peuvent être utiles, en particulier celles qui montrent comment faire des choses précises avec le matériel. Les vidéos plus longues sont généralement un moyen moins efficace d'apprendre, car elles ont tendance à devenir trop verbeuses et dispersées.
Le plus important : contrôlez le processus d'apprentissage. Décidez quelle compétence vous voulez acquérir, et trouvez les ressources qui vous aident à l'acquérir. Ne vous laissez pas mener par le bout du nez avec une série de tutoriels, de vidéos ou je ne sais quoi.
Quelle carte dois-je acheter ?
Cela dépend du parcours (path) par lequel vous voulez commencer : « logique de traitement » ou un type d'expérimentations plus orienté électronique. Je discuterai chaque possibilité ci-dessous, mais je commencerai par deux conseils qui s'appliquent dans les deux cas.
Avant tout, choisissez une carte bon marché. Considérez-la comme votre première, et non votre dernière. Les principes sont les mêmes pour toutes les cartes, même les cartes simples avec de petits FPGA, peu de cellules logiques et des performances pas très impressionnantes. Les projets sophistiqués que vous pouvez réaliser sur des cartes plus chères ont généralement très peu de valeur pédagogique. Vous devez d'abord maîtriser les bases, et pratiquement n'importe quel FPGA suffit pour cela. Si et quand vous sentirez que vous avez dépassé votre première carte, vous saurez bien mieux comment choisir la suivante.
Deuxièmement, choisissez une carte avec un FPGA AMD. D'autres cartes peuvent être moins chères et techniquement meilleures, mais AMD domine le marché des FPGA, donc l'expérience avec leurs FPGA et leur suite d'outils de développement (Vivado) a le plus de chances de vous aider à l'avenir.
De plus, les autres fournisseurs de FPGA font de leur mieux pour rendre la transition depuis AMD vers leurs propres FPGA aussi fluide que possible, notamment en proposant des outils de développement similaires à Vivado. Donc même si vous finissez par travailler avec des FPGA d'un autre fournisseur, vous avez tout de même un bon départ. Je ne dis certainement pas que les FPGA AMD sont le meilleur choix pour toutes les applications, mais AMD est le meilleur point de départ pour apprendre, même si vous passez plus tard à un autre fournisseur.
Parmi les différentes familles de FPGA proposées par AMD, je conseille vraiment Artix-7 ou Spartan-7. Si vous voulez expérimenter avec un processeur ARM à l'intérieur du FPGA, je suggère la famille Zynq-7000. Les modèles les moins chers de ces dispositifs sont en fait des FPGA Artix-7 avec un processeur ARM ajouté. Donc si vous en prenez un, vous pouvez l'utiliser comme un Artix-7, ou choisir de travailler aussi avec le processeur ARM. Un Zynq-7000, c'est deux en un.
Artix-7, Spartan-7 et Zynq-7000 sont des familles FPGA assez anciennes. Cependant, les différences entre elles et les tout derniers FPGA du marché ne concernent que les performances (en particulier les fréquences d'horloge) et beaucoup de blocs logiques spécialisés qui n'ont aucune importance pour un débutant en FPGA. Si vous pouvez mener correctement un projet en utilisant toutes les fonctionnalités d'un Artix-7 (ou Spartan-7), vous avez à peu près tout couvert. Pas besoin de se lancer dans Ultrascale, Ultrascale+ et Versal.
Un autre avantage avec Artix-7, Spartan-7 et Zynq-7000 : lorsque vous ciblez ces FPGA, vous pouvez utiliser Vivado (pour Windows ou Linux) entièrement gratuitement pour générer des bitstreams depuis Verilog, programmer le FPGA et simuler votre conception. Une large gamme de blocs IP (IP blocks) est également disponible gratuitement avec ces dispositifs, et il en va de même pour le kit de développement logiciel. Vous pouvez donc aller très loin avec Vivado sans payer le logiciel. En fait, pratiquement tous les fournisseurs de FPGA permettent l'utilisation gratuite des outils de développement pour leurs familles FPGA plus simples.
Si vous voulez choisir une carte avec une famille FPGA plus récente et plus « lourde », assurez-vous de vérifier si vous avez besoin d'une licence payante pour exécuter Vivado sur ce FPGA.
Équipement pour un « vrai » apprentissage du FPGA
Si vous voulez vous lancer sérieusement dans le FPGA, vous devez vous créer un petit laboratoire d'électronique. Ce n'est vraiment pas grand-chose, et la plupart des choses à acheter sont bon marché et disponibles dans n'importe quelle boutique de bricolage électronique : petites résistances, fils Dupont, etc. Assurez-vous aussi d'avoir un simple multimètre numérique. Même le plus simple fera l'affaire. Un équipement de base pour la soudure peut aussi être une bonne idée.
La partie chère que je vous suggère d'acheter est un oscilloscope simple. Cet instrument de mesure montre la tension en fonction du temps. Cela vous permet de visualiser les signaux aux broches d'entrée et de sortie physiques du FPGA. Vous pouvez aussi observer des signaux électroniques analogiques, par exemple la tension qui pilote un haut-parleur.
Un oscilloscope est important, car vous devez apprendre à utiliser cet instrument pour vérifier et déboguer votre conception. L'option pratique est un oscilloscope autonome. Mais il existe aussi des « oscilloscopes USB » que vous connectez à un ordinateur et dont vous regardez les signaux à l'aide d'un programme exécuté sur l'ordinateur. Peu importe. Les deux options fonctionnent. Pas besoin de fonctionnalités sophistiquées non plus.
Mais assurez-vous que la bande passante analogique de l'oscilloscope est adéquate. La bande passante analogique est la limite de vitesse à laquelle le signal que vous observez peut changer. Notez que ce n'est pas la fréquence d'échantillonnage de l'oscilloscope, parfois aussi appelée « bande passante » par raccourci, peut-être pour embrouiller les acheteurs. Quand un signal numérique change à une cadence proche de la bande passante analogique, il apparaît avec des fronts lisses sur l'écran, même si la transition est nette et rapide en réalité. Les signaux numériques plus rapides peuvent ne pas être distinguables du tout.
Donc si vous voulez commencer à petit prix, prenez une bande passante analogique de 10 MHz. Cela signifie que votre conception logique ne doit pas tourner à une fréquence d'horloge supérieure à 10 MHz, sinon les signaux de sortie risquent de ne pas apparaître correctement sur l'écran de l'oscilloscope. En fait, il vaudrait mieux rester en dessous de 5 MHz. Ce sont des fréquences très basses pour un FPGA, mais cela ne pose aucun problème pour faire les premiers pas. Le seul problème est que vous pourriez vous en sortir avec une conception logique très mal faite qui ne fonctionne qu'à basse fréquence. Donc si vous suivez cette voie, essayez d'augmenter l'horloge à 100-200 MHz et vérifiez que les contraintes temporelles (timing constraints) sont respectées, juste pour vous assurer que votre conception n'est pas limitée à de très basses fréquences d'horloge.
Si vous trouvez un oscilloscope avec une bande passante analogique de 50-100 MHz sans grande différence de prix, je vous suggérerais de le prendre. Je n'achèterais pas pour mon usage personnel un oscilloscope avec moins de 100 MHz de bande passante analogique.
Une autre chose à vérifier est que l'oscilloscope possède au moins deux voies d'entrée, afin de pouvoir visualiser deux formes d'onde à la fois. Étonnamment, deux formes d'onde suffisent généralement dans la plupart des situations pratiques. Mon oscilloscope a quatre voies d'entrée, et parfois j'en utilise trois, rarement les quatre.
Et une dernière chose à propos des oscilloscopes : assurez-vous d'acheter aussi des sondes, généralement en même temps que l'oscilloscope. C'est peut-être moins crucial quand vous travaillez à 10 MHz, mais plus la fréquence est élevée, plus il est important d'utiliser des sondes.
Alors... et la carte FPGA ?
Une fois l'équipement de laboratoire en place, vous pouvez maintenant choisir quelle carte FPGA acheter. La réponse est assez simple : prenez une carte bon marché avec un FPGA d'AMD. Cela voudra très probablement dire une carte basée sur Artix-7 ou Spartan-7. Ou Zynq-7000, si vous voulez bénéficier des avantages mentionnés dans la section suivante. Je vais maintenant me concentrer sur le cadre FPGA de type électronique.
La chose la plus importante à vérifier est de savoir si la carte possède une interface USB pour programmer le FPGA. Pour expliquer cela, je vais dire quelques mots sur le JTAG.
Afin d'écrire le bitstream dans le FPGA, il y a plusieurs broches sur le FPGA destinées à un usage de laboratoire, appelées JTAG. Cette interface est aussi utile pour d'autres astuces (notamment l'ILA), mais son objectif le plus important est de transmettre le bitstream depuis l'ordinateur vers le FPGA. Autrefois, il y avait un petit boîtier séparé (souvent appelé « câble JTAG » ou « programmateur JTAG ») qui se connectait à l'ordinateur par USB. L'autre côté de ce boîtier consistait en un certain nombre de fils connectés à un connecteur à broches sur la carte FPGA.
De nos jours, beaucoup de cartes de développement FPGA intègrent cette fonctionnalité. Cela signifie que vous n'avez pas besoin de ce « programmateur JTAG », mais pouvez connecter la carte FPGA directement à l'ordinateur qui exécute Vivado, et configurer le FPGA avec le bitstream de votre conception. Simple et pratique.
Les cartes FPGA plus simples et moins chères n'ont pas cette fonctionnalité, et exigent que vous achetiez ce programmateur JTAG séparément. Le programmateur JTAG officiel est assez cher, et les non officiels peuvent fonctionner de manière plus ou moins fiable. Donc pour une première carte, je pense que cela vaut la peine de payer un peu plus pour éviter complètement ce problème. Au moins jusqu'à ce que vous soyez habitué au flux de travail. Ou choisissez une carte Zynq, qui peut lire son bitstream depuis une carte microSD à la place.
Assez parlé du JTAG. Passons maintenant aux caractéristiques proprement dites de la carte.
La carte doit avoir des E/S qui peuvent être connectées à quelque chose d'utile. Dans le processus d'apprentissage, il y a un grand bénéfice à connecter la carte à un autre petit ensemble électronique, peut-être une carte de développement pour un composant analogique ou quelque chose de ce genre. Le meilleur projet d'apprentissage est celui où vous développez réellement quelque chose vous-même. Je préfère donc les cartes qui ont des connecteurs à broches d'usage général pouvant être connectés à n'importe quoi avec des fils Dupont.
Je préfère généralement les cartes avec beaucoup de LED et de boutons-poussoirs pour une interaction directe. Pour les premiers projets, un afficheur 7 segments est aussi agréable.
Les cartes ont souvent quelques composants périphériques qui leur sont propres. Demandez-vous si vous pouvez faire un petit projet avec eux, ou si ce serait trop compliqué. Par exemple, beaucoup de cartes FPGA ont une prise de sortie HDMI. Cela permet de générer un signal de sortie qui va directement à un écran d'ordinateur classique. Vous utiliserez très probablement un bloc logique prêt à l'emploi pour traduire les pixels en signal vidéo, car c'est vraiment compliqué. La sortie HDMI ne vous aidera donc pas beaucoup à apprendre en elle-même. En revanche, vous pouvez apprendre pas mal de choses en créant des motifs vidéo sur la sortie vidéo. Peut-être un affichage de texte simple ? De l'art vidéo ? Des fractales ? Afficher une image de 100x100 pixels dans une zone de 768x768 pixels à l'écran, avec une interpolation linéaire correcte ? Faites cela correctement, et vous tenez quelque chose.
Alors quelle carte choisir ? Essayez de réfléchir à ce que vous voulez faire avec la carte, et à l'équipement dont vous disposez. Choisissez ensuite une carte qui ne coûte pas trop cher. Et encore une fois, considérez cette carte comme votre première, mais pas votre dernière.
Cartes avec un Zynq-7000
Pour ceux qui ne veulent pas tout de suite se plonger dans l'électronique, il est possible de faire des choses intéressantes avec un FPGA malgré tout. L'astuce est de faire interagir la logique avec un processeur plutôt qu'avec des signaux physiques, donc pas besoin de toucher à l'électronique. L'idée est de travailler avec un FPGA doté d'un processeur embarqué. Le Zynq-7000, par exemple.
Mais comment le processeur embarqué peut-il faciliter le point de départ ? Il le peut, si vous ne vous jetez pas tout de suite dans les problèmes liés au processeur et à son interaction avec la matrice logique (c'est-à-dire la « partie FPGA », appelée « PL »). Utilisez plutôt un kit prêt à l'emploi pour cette partie, qui vous permet d'interagir avec la logique par des moyens simples. Si vous voulez plonger dans les détails de la partie processeur, vous aurez tout le temps pour cela plus tard.
La façon la plus simple d'y parvenir est de commencer avec Xillinux. C'est un package qui permet de configurer facilement une carte microSD pour que votre carte devienne un petit ordinateur sous Linux. Vous pouvez y brancher un clavier, une souris et un écran d'ordinateur, et vous disposez d'un bureau graphique simple avec la possibilité d'ouvrir des fenêtres de terminal ainsi que des éditeurs graphiques. Vous pouvez compiler des programmes C directement sur le processeur de la carte avec gcc et des Makefiles, et exécuter des scripts sur le processeur également.
Cependant, le véritable intérêt de Xillinux est qu'il permet aussi de communiquer avec la « partie FPGA » (la logique que vous écrivez en Verilog) via une interface simple. Basé sur Xillybus, le côté logiciel utilise de simples entrées/sorties de fichiers pour envoyer et recevoir des données, et le côté logique utilise des FIFO standard pour le même usage. Le point important dans cette façon d'échanger des données est que ce n'est pas une astuce artificielle pour l'apprentissage : les FIFO sont le moyen habituel d'échanger des données dans un projet FPGA.
Donc si vous êtes intéressé par la conception de « logique de traitement » (de la logique qui reçoit des données en entrée, les traite et génère des données en sortie), vous le ferez de la bonne manière dès le début : dans les « vrais » projets FPGA, ce genre de logique reçoit généralement les données à traiter via une FIFO, et envoie ses résultats vers une autre FIFO. Dans un « vrai » projet FPGA, il y a généralement d'autres composants logiques de l'autre côté de ces FIFO. Quand vous travaillez avec Xillybus, il y a à la place un logiciel qui tourne sur le processeur. Ou simplement une commande shell simple pour copier des données depuis ou vers des fichiers directement dans les FIFO du FPGA.
Pour résumer, travailler avec Xillinux et Xillybus vous donne un démarrage en douceur, vous permettant de vous concentrer sur vos premiers morceaux de logique et de les tester facilement avec une interface de type ordinateur. En plus, ce cadre facilite le contrôle direct de la logique depuis le processeur, avec de simples programmes ou scripts. Et surtout, l'ensemble est assez naturel pour un projet qui n'implique pas d'interfaçage avec le monde extérieur.
Pour utiliser Xillinux, deux cartes de développement sont particulièrement pertinentes : Smart Zynq et Z-Turn Lite. Ce sont des cartes à faible coût qui ont des kits prêts à l'emploi pour installer Xillinux. Il y a aussi quelques pages sur ce site montrant des choses à faire avec la carte Smart Zynq.
Les personnes peu habituées à Linux peuvent trouver difficile d'utiliser le système Linux tournant sur le processeur Zynq-7000 pour interagir avec la « partie FPGA » via Xillybus. Cela peut aussi être intimidant d'utiliser cette distribution Linux relativement simple pour développer et exécuter des logiciels.
Si vous préférez un « vrai » ordinateur sous Linux ou Windows, la même configuration simple basée sur Xillybus peut être appliquée en utilisant une carte FPGA dotée d'une interface PCIe. Ces cartes sont plus chères, mais elles peuvent être branchées dans un ordinateur sous Linux ou Windows, et échanger des données avec le FPGA exactement de la même manière. Dans ce cas, Artix-7 est largement suffisant, mais vous pouvez consulter la page de téléchargement de Xillybus pour une liste des familles FPGA prises en charge.
En parlant d'Artix-7, je répète que les modèles Zynq-7000 les moins chers ne sont que des FPGA Artix-7 avec un processeur ARM dessus. Il est donc possible d'ignorer complètement le processeur, et d'utiliser une carte Zynq comme une carte Artix-7 ordinaire.
Une différence est qu'un FPGA Zynq-7000 a aussi la capacité d'obtenir son bitstream depuis une carte microSD. Par conséquent, tout ce qu'il faut pour mettre à jour le bitstream est un adaptateur microSD vers USB, si vous n'avez pas déjà cette fonctionnalité sur votre ordinateur ou portable. En fait, vous pouvez aussi récupérer le bitstream via le réseau Ethernet avec TFTP en utilisant U-Boot, mais cela nécessite de configurer un serveur, donc ce n'est pas la méthode la plus simple.
Les FPGA Zynq-7000 ont aussi une interface JTAG, comme n'importe quel FPGA, mais elle est rarement utilisée, et parfois même pas connectée à des broches sur la carte.
Cela faisait beaucoup d'informations, alors pour résumer :
- Une carte Zynq-7000 est un bon choix si vous ne voulez pas mettre les mains dans l'électronique, ou si vous voulez aussi essayer un processeur embarqué sur le FPGA.
- Envisagez une carte basée sur PCIe (avec Artix-7) si vous voulez que le FPGA dialogue avec un vrai ordinateur, et non avec le processeur embarqué.
- Une simple carte Artix-7 / Spartan-7 est ce qu'il vous faut si vous voulez seulement une expérience électronique concrète.
FPGA et IA (LLM)
Enfin, parlons de l'éléphant dans la pièce. L'IA.
L'IA apprend principalement à partir de matériel ouvert sur Internet, et la grande majorité de ce matériel est écrite par des amateurs ou par l'IA elle-même. La qualité des suggestions de l'IA dans ce domaine est donc nettement inférieure à, disons, ses réponses liées au logiciel. Ce qui n'est pas toujours phénoménal non plus, mais c'est une autre discussion.
Alors, l'IA va-t-elle tuer le métier de concepteur FPGA ? Personne ne sait ce que l'avenir réserve. Mais réfléchissons à ce que nous avons appris de l'introduction des ordinateurs et des robots dans les années 80. Il y a quelques schémas à noter.
Les ordinateurs et les robots ont remplacé les tâches stupides et répétitives. Beaucoup de gens ont effectivement perdu leur emploi, mais c'étaient les personnes qui accomplissaient ces tâches. Les humains effectuant un travail intelligent sont restés à leur poste, et sont même devenus plus efficaces et mieux payés.
En même temps, l'utilisation des machines est de loin plus étroite que ce qui est théoriquement possible. Dans les usines, des humains effectuent du travail manuel qui aurait pu être remplacé par des robots, et c'est vrai même dans la fabrication automobile. Mais c'est aussi vrai dans la construction, la menuiserie, les boulangeries, etc. Mon hypothèse sur la raison est la suivante : il y a une pénurie de personnes assez intelligentes pour utiliser des robots et des ordinateurs, et une abondance de celles qui peuvent apprendre une tâche en utilisant leurs propres mains.
L'adoption de l'IA basée sur les LLM suivra probablement le même chemin. Les tâches répétitives et stupides seront remplacées par l'IA, mais les tâches intelligentes seront accomplies par des humains utilisant l'IA comme outil.
Donc la conclusion pour vous, futur concepteur FPGA, est simple : assurez-vous d'apprendre le métier en profondeur. Savoir Verilog ne suffit pas. Être concepteur FPGA n'a jamais consisté uniquement à coder en Verilog. L'IA peut aussi écrire du Verilog, si on lui donne des instructions très précises. La conception FPGA consiste principalement à prendre les décisions judicieuses qui produisent ces instructions. Les transformer en code est la partie la plus facile.
C'est la compréhension profonde et le bon jugement que l'IA ne peut pas remplacer, du moins pour l'instant. Et même s'il devenait un jour possible de remplacer le jugement humain par une machine, ce serait la dernière chose à être remplacée. Si l'IA est adoptée de la même manière que les technologies précédentes, le jugement humain restera encore le fait des humains.
Et une chose de plus : même si l'IA écrit le code Verilog, les contraintes temporelles (timing constraints), et effectue toutes les autres tâches, un humain sera toujours nécessaire pour vérifier que ce qui a été fait est correct, et que c'est la bonne voie à suivre. Les LLM, étant une sorte de simulateur de l'activité cérébrale, ont aussi une tendance humaine à faire des erreurs. Cela exige un humain compétent et sage, à la fois pour guider l'IA et pour vérifier que sa production est adéquate. Cela signifie que le concepteur de demain devra être encore plus professionnel que l'ingénieur d'aujourd'hui. Les ingénieurs médiocres peuvent être remplacés par l'IA, mais cela ne fonctionne que si un excellent ingénieur la contrôle. Et comme ces ingénieurs sont difficiles à trouver, il se pourrait très bien que l'IA ne soit pas utilisée à grande échelle dans cette industrie — exactement comme il y a encore des gens qui font du travail manuel dans l'industrie traditionnelle.
En résumé : quoi que vous choisissiez d'apprendre, faites-le à fond et en profondeur, sinon un LLM vous bottera les fesses un jour. Peut-être que ce jour est déjà arrivé.
Ceci conclut la première page de cette série. La page suivante traite des compétences théoriques que je juge importantes, et explique aussi pourquoi je pense qu'elles valent la peine d'être apprises.