Pourquoi les FPGA ne sont-ils pas omniprésents?


65

Si je comprends bien, les FPGA sont des circuits à porte logique entièrement configurables. Cela étant, on peut concevoir n'importe quoi avec eux. On peut tout concevoir de la manière la plus personnalisée possible et, par conséquent, atteindre les mêmes objectifs de manière beaucoup plus efficace, ce qui peut être obtenu à l'aide d'un microcontrôleur. Ayant cela, on dirait qu'un FPGA bat un microcontrôleur à tout moment, n'importe quel jour. Donc, ma question est la suivante: si les FPGA sont vraiment aussi géniaux, qu'est-ce qui les empêche de devenir beaucoup plus répandus que les microcontrôleurs? De ce point de vue, il me semble que les FPGA auraient dû éliminer les microcontrôleurs il y a longtemps. Alors, pourquoi n'est-ce pas le cas? Est-ce le coût, la difficulté de programmer un FPGA ou tout autre chose?



Vous pouvez également vouloir lire ce fil de discussion: electronics.stackexchange.com/questions/4382/…
Tom L.

43
Les hélicoptères sont plus flexibles que les voitures, alors pourquoi quelqu'un utilise-t-il encore une voiture pour se rendre au travail?
Olin Lathrop le

15
Parce que toutes les sociétés de FPGA vous offrent des outils propriétaires extrêmement horribles qui nécessitent un temps d'apprentissage considérable et qui ne sont pas accessibles à la plupart des développeurs. Remplacez cela par une chaîne d’outils entièrement ouverte et ils seraient probablement omniprésents.
R ..

@R .. ... ou du moins, pas le choix de l'option absolue de dernier recours.
Dan Neely

Réponses:


94

Vous ignorez beaucoup de facteurs qui entrent en compte dans les choix de conception:

  1. Coût . Les FPGA sont plus chers que les micros pour la même complexité logique.

  2. Complexité logique . Le code exécutable peut implémenter une logique beaucoup plus compliquée que le même nombre de portes dans le micro utilisé directement.

  3. Facilité de développement . Il est plus facile d'écrire du code exécutable que de définir la logique pour tous les problèmes, sauf les plus petits. Même les projets de microcontrôleur modestes ont des milliers de lignes de code. Développer les définitions logiques équivalentes prendrait beaucoup plus de temps et serait beaucoup plus difficile à déboguer et à vérifier.

  4. Consommation d'énergie . Étant donné que les FPGA sont conçus pour des opérations à grande vitesse que micros ne peut pas gérer (sinon, vous utiliseriez un micro), ils ne sont pas optimisés pour une consommation réduite. Cela les rend impropres à certaines applications à faible consommation. Certains micros ont des courants de sommeil inférieurs à 1 µA et peuvent fonctionner avec seulement quelques µA à une fréquence d'horloge lente. Essayez de trouver un FPGA capable de le faire.

Les principaux avantages des FPGA par rapport aux micros sont qu’ils sont plus rapides et peuvent faire plus de choses en parallèle. Autre que cela, vous préférez utiliser un micro. Par conséquent, dans le processus de conception, vous commencez généralement par un micro, puis passez à contrecœur à un FPGA lorsque vous avez vraiment besoin de la vitesse et / ou du fonctionnement simultané à haute vitesse. Même dans ce cas, vous implémentez uniquement les composants critiques pour la vitesse dans un FPGA et laissez les fonctions de contrôle de vitesse inférieure et similaires dans le micro.


2
"Même dans ce cas, vous implémentez uniquement les composants critiques pour la vitesse dans un FPGA et laissez les fonctions de contrôle de vitesse inférieure et similaires dans le micro." Et c'est parce que le développement d'un FPGA est une douleur, non?
Utku le

2
@ Utku: Oui, c'est la raison 3 ci-dessus, bien que les raisons 1 à 2 s'appliquent généralement aussi. Les FPGA ne sont tout simplement pas aussi rentables que les micros pour la même tâche, à moins que cette tâche ne nécessite une vitesse aussi élevée qu'un micro ne puisse tout simplement pas le faire.
Olin Lathrop

4
Il est facile de dire que cette réponse est écrite du point de vue de l’unité centrale. "à contrecœur, passez à un FPGA lorsque vous avez vraiment besoin de la vitesse et / ou du fonctionnement simultané à haute vitesse". Ils ne sont pas si mauvais. Il y a des applications où l'on ne penserait même pas à utiliser un processeur plutôt qu'un FPGA.
Stanri

26
Comme je l'explique habituellement: il est difficile de faire les choses en parallèle sur un processeur et de faire les choses en série dans un FPGA.
Ben Jackson le

14
Une chose importante à retenir à propos des FPGA: la reconfigurabilité de la logique a un prix - la logique équivalente mise en œuvre par un FPGA est beaucoup moins compliquée que le FPGA lui-même. Toutes les tables de recherche, composants de matrice de routage, etc. consomment beaucoup plus de surface de silicium et de puissance que les implémentations équivalentes de la logique matérielle. Cela signifie que les performances des FPGA sont pires pour toutes les mesures de performances (consommation active et inactive, densité, vitesse d'horloge, etc.) que de créer la même fonctionnalité directement dans le silicium, comme cela est le cas avec les microcontrôleurs, les CPU à usage général et le FPGA lui-même.
alex.forencich

45

Une distinction que je n'ai pas vue développer ici est que les FPGA sont utilisés et se comportent d'une manière complètement différente des processeurs.

Un FPGA est vraiment doué pour effectuer exactement la même tâche, encore et encore. Par exemple, traiter des signaux vidéo, audio ou RF. Ou acheminer des paquets Ethernet. Ou simuler un écoulement de fluide. Toute situation dans laquelle vous recevez très rapidement le même type de données et que vous souhaitez traiter toutes ces informations de la même manière. Ou vous voulez exécuter le même algorithme à plusieurs reprises. Le FPGA n'a pas vraiment de «tâches» qui commencent et qui s'arrêtent [1], tout son travail consiste à faire la même chose pour toutes les données reçues, aussi longtemps qu'elles sont actives. Cela ne change pas de vitesse, cela ne fait rien d'autre. C'est l'ouvrier final de la chaîne de production. Il fera la même chose à plusieurs reprises, aussi vite que possible, pour toujours.

Les processeurs, par contre, sont la quintessence de la flexibilité. Ils peuvent être programmés pour faire n'importe quoi, et pour faire plusieurs choses différentes en même temps. Ils ont des tâches qui démarrent et s’arrêtent, ils changent de vitesse, multitâches, changent constamment de fonctions.

Le FPGA et la CPU sont des opposés complets. La commodité du processeur est le temps - il faut que les choses soient faites plus rapidement. Plus votre application s'exécutera rapidement, mieux ce sera.

La commodité du FPGA est l’espace. Votre FPGA n’est que très grand et il n’ya que peu de portes disponibles pour effectuer la tâche que vous souhaitez. La plupart du temps, le problème est plus grand que la vitesse [2].

Il est possible de faire en sorte qu'un FPGA se comporte comme un processeur. Vous pouvez insérer un noyau IP de processeur dans un FPGA, mais il est très difficile à justifier en raison des raisons avancées par d'autres [3]. Le FPGA et la CPU sont des opposés, chacun ayant ses propres forces et faiblesses, et ayant tous deux leur propre place.


Remarques:

1) Un FPGA peut être conçu pour effectuer différentes tâches, mais même dans ce cas, il s'agirait d'un numéro spécifique pour lequel il a été conçu.

2) La vitesse est également une spécification de conception FPGA. C'est vraiment un compromis entre vitesse et taille.

3) L'installation d'un processeur dans un FPGA est relativement fréquente, mais elle est effectuée au cas par cas, en fonction des applications spécifiques. Par exemple, si vous avez besoin d’un microcontrôleur très petit et d’un espace FPGA supplémentaire.

Et enfin: cette réponse est une grande simplifcation - les FPGA sont utilisés de manière extrêmement variée et complexe et il s’agit d’un très bref aperçu de la façon dont ils sont utilisés en général.


1
"Ou acheminer des paquets Ethernet. Ou simuler un écoulement de fluide." Bien que, à ma connaissance, l'ASIC soit généralement utilisé pour les premiers (en production de masse, au moins) et les GPU sont plus rapides, moins chers, moins gourmands en énergie et plus facilement programmables pour les seconds.
Reirab

1
@reirab Voici quelques exemples du type d'opérations que les FPGA peuvent bien faire. Ils sont venus à l'esprit car ce sont les deux applications pour lesquelles j'ai personnellement codé les FPGA. Il y a plus d'une façon de peler un chat. Le choix de l'appareil dépend de nombreux facteurs de conception.
stanri

5
@reirab tout ce qu'un FPGA peut faire, un ASIC peut le faire pour une consommation d'énergie moindre et un coût de production marginal inférieur. Les avantages du FPGA sont le prototypage et la production en faible volume car les coûts initiaux d'un ASIC sont beaucoup plus élevés; ce qui signifie que ce dernier n'a de sens que lorsque le design est finalisé et que vous en fabriquez beaucoup.
Dan Neely

Il est étrange d'affirmer qu'un processeur est plus flexible qu'un FPGA, étant donné que vous pouvez facilement l'implémenter au sein d'un FPGA (tout étudiant CS sérieux devrait le faire au moins une fois). Un FPGA est un concept beaucoup plus bas qu'un processeur, il n'est donc pas logique de les comparer directement à mon humble avis.
Voo

Cette réponse me dérange vraiment. "La commodité du processeur, c'est du temps", "La commodité des FPGA, c'est de l'espace." Hein? Les ASIC et les processeurs sont des opposés polaires, et les FPGA occupent le centre, obtenant à la fois le meilleur et le pire des deux mondes.
Jotorious

20

Comme le dit Olin, un micro est plus efficace pour de nombreuses tâches et vous trouverez presque toujours un micro utilisé partout où un FPGA apparaît. La superficie de silicium utilisée (ce qui se traduit par un coût non linéaire) et la consommation d'énergie sont bien moindres. Pour cette raison, il n'est pas rare d'implémenter un MCU «souple» sur un FPGA, mais le coût et les performances d'un tel micro sont décevants.

Certains FPGA modernes contiennent un ou plusieurs noyaux «durs» tels que la série omniprésente ARM. En outre, ils peuvent contenir des blocs de mémoire dédiés car il est vraiment inefficace de faire de la mémoire à partir de portes. Un micro-coeur 32 bits occupe une infime partie de la surface de silicium d'un FPGA typique, ce qui vous donne une idée des coûts relatifs.

Le développement est beaucoup plus difficile et l’IP a tendance à ne pas être aussi librement disponible que pour les micros et les solutions SOC dédiées - par exemple les contrôleurs LCD, les interfaces PCI, les MAC Ethernet. Cela s'explique en partie par le fait qu'en divulguant les descriptions de logique HDL, ils transfèrent la conception, pas seulement l'instanciation de la conception. Une autre raison est que les performances dépendent de la disposition de la logique dans le FPGA, ce qui nécessite beaucoup d'efforts lors du développement.

Une autre complication réside dans le fait que la plupart des FPGA complexes reposent sur une RAM pour la configuration et que les coûts de processus sont tels qu'une mémoire non volatile externe est nécessaire pour stocker la configuration et la mémoire de programme pour tout MCU embarqué. Cette mémoire doit être chargée dans la RAM lors de la mise sous tension.

Les FPGA sont des outils extrêmement utiles dans la boîte à outils, mais ils ne vont pas remplacer prochainement les MCU ou les ASIC.


10

La meilleure utilisation du silicium pour un travail est un ASIC, rien ne se perd, mais la courbe d’apprentissage, le NRE et la rigidité sont énormes.

Il existe deux manières de créer de la flexibilité dans une puce. a) Avoir une ALU optimisée en termes d'espace et l'utiliser encore et encore sur les données stockées. C'est ce qu'on appelle une MCU et nécessite une vaste zone de silicium qui «ne fait rien», la mémoire programme, les bus larges fonctionnant d'une unité à l'autre et les commutateurs d'accès au bus. b) Avoir une logique fine, avec quelques éléments optionnels optimisés pour l’espace tels que des multiplicateurs, de petites RAM et des processeurs simples. C'est ce qu'on appelle un FPGA, et nécessite une vaste zone de silicium qui «ne fait rien», des commutateurs programmables et des lignes de connexion.

De toute évidence, avec ces structures, les microcontrôleurs fonctionnent mieux pour les tâches pouvant être décomposées en blocs série, tandis que les FPGA conviennent mieux aux tâches nécessitant un fonctionnement parallèle à grande vitesse. Lorsque l'application est lourde et que le coût est dominé par le coût du silicium, c'est ainsi que les deux types seront naturellement utilisés.

Lorsque l'application est légère mais que le volume est élevé, le coût est dominé par l'emballage plutôt que par le silicium, et l'un ou l'autre type est viable. Altera dispose de très petits FPGA de très faible puissance pour rivaliser avec des MCU coûtant un dollar.

Pour les applications à faible volume, le coût de développement a tendance à dominer et les MCU gagnent, à condition qu’ils aient la vitesse


9

En termes de consommation d'énergie et d'utilisation du silicium, un FPGA est très médiocre comparé à un microprocesseur.

Un FPGA consomme une grande partie de sa surface de silicium dans les circuits de configuration logique, ce qui ne s’applique pas à un micro. Il doit y avoir beaucoup plus d'interconnexions disponibles qu'il n'en faudrait sur une implémentation dédiée d'un microprocesseur.

Le FPGA consomme plus d'énergie qu'un ASIC dédié, tel qu'un microprocesseur, car la logique n'est pas implémentée aussi efficacement.

Toute fonction pouvant être implémentée dans un FPGA peut être réalisée de manière plus efficace, à moindre coût, avec une consommation d'énergie moindre, un espace de carte réduit, etc. dans un ASIC dédié. Cela suppose que les volumes sont suffisants pour compenser le NRE.


Si l'objectif est d'implémenter l'ensemble des fonctionnalités du microprocesseur, bien sûr. Une fois que vous êtes prêt à une tâche spécifique, vous pouvez également identifier une grande quantité de silicium gaspillé dans le microcontrôleur. Ce moteur de cryptage constitue peut-être un gaspillage d'espace dans votre projet. Ou le périphérique CAN? Ou l'unité à virgule flottante? La meilleure utilisation des FPGA est inférieure, mais vous ne souffrez pas non plus d'une utilisation de 0% dans de grandes zones, contrairement à ce que fait un microcontrôleur. (Par contre, avec une synchronisation d'horloge, l'utilisation à 0% de grands circuits est très souhaitable du point de vue de la puissance)
Ben Voigt

8

Les systèmes à microprocesseur, et plus tard les microcontrôleurs, ont été en mesure d’atteindre un niveau de fonctionnalité énorme en étant capables d’utiliser un grand nombre de circuits individuels pour réaliser de nombreuses tâches différentes à des moments différents. Je trouve instructif de comparer la machine d'arcade Tank, conçue en 1976, avec le jeu Combat, qui tourne sur la deuxième machine de jeu au monde, Atari 2600, contrôlée par un microprocesseur. mettre en œuvre des jeux comme Tank à un coût minimal; le fait qu'il soit possible de jouer à différents jeux en insérant différentes cartouches de ROM était un avantage appréciable.

Le jeu Tank permet à deux joueurs de piloter des tanks autour de l'écran et de se tirer des coups de feu. Il possède des marqueurs "slip" pour les positions X et Y de chaque char, les positions X et Y des tirs de chaque joueur, les compteurs haut / bas pour l'angle de chaque joueur et l'angle de tir de chaque joueur, un compteur pour le score de chaque joueur, le faisceau tramé X et Y compteurs de position, et beaucoup de circuits de contrôle au-dessus de ces choses. Il dispose d'un matériel permettant d'extraire et d'afficher les données de lecture de la zone de lecture, ainsi que d'un matériel permettant d'extraire des formes pour les chars et les scores de la ROM des deux joueurs et de les afficher.

L'Atari 2600 possède un compteur de glissement pour les positions horizontales de chacun des objets du joueur, chacun des deux objets du missile, et un objet supplémentaire appelé "balle" qui n'est pas utilisé dans le combat mais est utilisé dans d'autres jeux. Pour chacun des objets du lecteur, il dispose d’un matériel permettant de générer un motif stocké dans un verrou à 8 bits, ainsi qu’un verrou "retardé" à huit bits pour chaque lecteur copié dans le verrou principal à 8 bits lorsque le la forme est mise à jour. Il possède également un compteur de position de faisceau horizontal et un verrou en forme de champ de jeu de 20 bits qui est transmis à l'écran deux fois par ligne de balayage, la copie de droite apparaissant sous forme de répétition ou de reflet de gauche. Il dispose de matériel pour détecter les collisions, mais ne rien faire en conséquence. Il ne pas ne possède aucun matériel pour les positions verticales des objets, ni la position verticale du faisceau de trame (!), ni aucun matériel associé à la conservation de score, à l'affichage du score, à la durée de la partie, etc.

Toutes les fonctions pour lesquelles le 2600 omet du matériel sont gérées par un logiciel intégré à la cartouche. Il suffit de vérifier la position verticale de chaque objet par rapport à la position du faisceau tramé une fois par ligne de balayage. Il suffit de mettre à jour le score du joueur et le temps de jeu restant au plus un par image. Les scores des joueurs sont stockés sur des lignes de balayage situées au-dessus du terrain de jeu. et peut donc partager le même matériel que celui utilisé pour le champ de jeu, etc.

L’approche normale pour mettre en œuvre un jeu tel que "Tank" dans un FPGA serait d’utiliser des circuits séparés pour différentes fonctions de la même manière que la machine à arcade de 1976. Une telle approche fonctionnerait, mais utiliserait une quantité importante de matériel. Une approche basée sur un microprocesseur pourrait éliminer plus de la moitié de ce matériel en contrepartie de l'ajout d'un microprocesseur, qui contiendrait probablement moins de circuits que le matériel remplacé (le 2600 pourrait implémenter des jeux bien plus sophistiqués que Tank, ce qui nécessiterait beaucoup plus de matériel s’ils n’utilisaient pas de microprocesseur).

Les FPGA sont excellents dans les cas où vous avez besoin d’un appareil capable d’exécuter simultanément de nombreuses tâches simples . Les systèmes basés sur un microprocesseur (ou sur un microcontrôleur) sont généralement meilleurs, mais dans les cas où de nombreuses tâches doivent être exécutées, mais ne doivent pas être traitées simultanément, car elles facilitent l'utilisation d'une petite quantité de circuits pour atteindre un grand nombre de fins distinctes.


Ne pourriez-vous pas poser des mines aussi? ;-)
Scott Seidman

@ScottSeidman: La machine d'arcade avait quelques mines à des positions câblées, qui ont été dessinées en tant que X. Il aurait été très difficile pour les 2600 de montrer les mines en tant que X tout en montrant les deux joueurs et les deux missiles. Si cela n’était pas gênant que les mines scintillent à 60Hz, il aurait été possible d’utiliser certaines astuces découvertes plus tard, mais nécessitant plus de code (COMBAT est une cartouche 2K pratiquement pleine, même les deux octets inutilisés). Les vecteurs BRK / IRQ à $ FFFE / FFFF sont utilisés pour tenir une table de deux octets!).
Supercat

Combat aurait probablement pu utiliser les mines sous forme de carrés clignotants s'il avait été disposé à renoncer à certaines de ses options telles que des tirs rebondissants, etc., mais je pense que Joe Decuir (programmeur) a bien choisi les options jouables. Mon seul reproche est que le biplan vs bombardier aurait pu être plus amusant si le bombardier était un sprite 2x plutôt que 4x.
Supercat

5

C'est entièrement le coût. Lorsqu'un micro peut être aussi bas que 30 centimes, un FPGA bon marché se situe dans le territoire à 5 $. Le coût ne semble peut-être pas si élevé, mais lorsque vous fabriquez un million de jouets fantaisistes à vendre à 10 $, le prix du FPGA tue vos résultats.


6
Le coût est certainement un problème, mais de dire la différence est tout à fait le coût est aussi naïf que de penser tous les micro - ordinateurs peuvent être remplacés par des FPGA.
Olin Lathrop le

@OlinLathrop si le coût n'est pas un problème, tout ce qu'un micro-ordinateur peut faire peut être effectué par un FPGA. Cela a été démontré avec la capacité d'un FPGA à contenir un noyau de microcontrôleur souple. Le problème est qu’un FPGA pouvant contenir un tel noyau est au moins et d’un ordre de grandeur plus cher que le micro dont le noyau est imité.
vini_i

Le coût peut signifier beaucoup plus que le prix unitaire, mais c'est tout ce que vous voulez inclure dans cette analyse.
Scott Seidman

2
Je ne peux pas dire si vous prétendez délibérément passer à côté de la question ou si vous êtes trop dense. De toute façon, vous répondez à quelque chose que personne n'a dit. Tous conviennent que les FPGA coûtent plus cher et que ce coût pose problème. Mais encore une fois, prétendre que c'est le seul problème est tout simplement faux. Si je vous donnais un tas de micros et de FPGA gratuits, il y aurait toujours des raisons importantes pour lesquelles vous utiliseriez les micros sur les FPGA dans de nombreux modèles.
Olin Lathrop le

4
@sleb: Non, la différence de coût n'est pas uniquement due au volume. La surface de silicium requise par porte fournie est considérablement plus grande dans un FPGA que dans une puce personnalisée telle qu'un microcontrôleur. Toute cette configurabilité au niveau de l'interconnexion de la porte nécessite une zone de silicium à mettre en œuvre. Dans des volumes élevés, le coût d’une puce dépend de sa surface en silicium.
Olin Lathrop

5

Pour ajouter d’autres très bonnes réponses, j’estime que l’adoption du FPGA relève également du domaine: par exemple, pour les dispositifs neuromorphes, les cartes FPGA sont en train de devenir omniprésentes car il existe un besoin énorme de parallélisme, ce qui est un point fort. de FPGA.

Si vous extrapolez la tendance observée pour les dispositifs neuromorphes, vous pouvez imaginer que d’autres champs basés, ou nécessitant de manière critique, le parallélisme adopteront probablement beaucoup plus les FPGA. Donc, peut-être que les FPGA ne deviendront pas omniprésents pour les produits grand public, mais cela peut l'être pour des domaines spécifiques, car il semble que cela se produit actuellement pour les dispositifs neuromorphes.


Bien que cela puisse être vrai, cela ne semble pas suffisant pour une réponse complète. Ce serait peut-être mieux comme commentaire, ou vous pourriez développer.
Null

Cela ne fournit pas de réponse à la question. Pour critiquer ou demander des éclaircissements à un auteur, laissez un commentaire sous son message.
Funkyguy

3
@Funkyguy, cela répond à la question. Ils disent essentiellement que les FPGA ne sont pas omniprésents, car les applications grand public courantes ne requièrent pas le parallélisme qui fait la force du FPGA.
Stanri
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.