Qu'est-ce qu'un FPGA?

38

J'ai déjà vu beaucoup de gens parler des FPGA auparavant et je sais que cela représente un tableau de portes programmable par l'utilisateur, mais comment cela fonctionne-t-il et à quoi sert-il d'utiliser un FPGA?

Zklapow
la source

Réponses:

30

Ce sont des composants électroniques qui ajoutent de la logique à vos circuits (ils ressemblent donc à des micro-contrôleurs). Mais l’approche de conception est alors complètement différente de celle utilisée dans le microcontrôleur. En UC, vous ne pouvez pas modifier la conception interne de l’UC; vous ne pouvez y exécuter que des programmes "classiques". Programmer des FPGA revient plus à créer un nouveau matériel. Vous créez de nouvelles connexions entre les portes logiques et créez un nouveau processeur spécialisé. Et vous pouvez tout faire chez vous, sur votre bureau et sur votre PC.

Cela paraît bien? Oui, mais il y a des inconvénients. Par exemple, le prix (mais je pense qu'il est difficile de le comparer), une consommation d'énergie plus élevée et des vitesses d'horloge inférieures (mais vous pouvez concevoir votre application de manière intelligente et effectuer plus d'opérations en un seul cycle d'horloge).

Liens utiles:

Exemple d'utilisation: http://nsa.unaligned.org/

Maciek Sawicki
la source
3
Je noterai que de nombreux FPGA sont suffisamment grands pour contenir plusieurs cœurs de processeur, ce qui leur permet d’être un ordinateur complet.
Craig Trader
3
En note, je pense que des vitesses d'horloge plus basses peuvent être trompeuses. comparé à un PC, oui. Par rapport à un pic16, ils peuvent être plus rapides, mais cela dépend du coût. La plupart des produits les moins chers que j'ai testés fonctionnent à 40 MHz, mais là encore, ils varient d'un produit à l'autre.
Kortuk
23

Un FPGA est littéralement un tableau de portes logiques pouvant être programmé sur le terrain. Des tongs, des multiplexeurs, des tables de correspondance 4 bits, etc. qui peuvent être connectés à votre guise, en utilisant un langage de type C (Verilog).

Un UC, tel qu'un AVR, est également constitué de portes logiques similaires, mais elles sont configurées lors de la fabrication du périphérique. Bien sûr, il dispose de RAM et de Flash, vous pouvez donc écrire un logiciel pour lire les entrées et contrôler les sorties, mais vous ne pouvez pas modifier les arrangements réels des portes. Les portes seront toujours organisées en une ALU, un contrôleur de mémoire, un port série, etc.

L’avantage de l’uC est que vous pouvez le programmer sur le terrain (à votre bureau), avec un langage simple à utiliser, familier et de haut niveau, tel que C. Le problème, c’est que le logiciel est "lent". Pour qu'une entrée contrôle une sortie, dans le cas le plus simple, vous pouvez écrire:

boucle vide () {buttonState = digitalRead (buttonPin); if (buttonState == HIGH) {
digitalWrite (ledPin, HIGH);
} else {digitalWrite (ledPin, LOW); }}

Cela serait transformé en une douzaine d'instructions d'assemblage, de sorte que la boucle prend environ une microseconde pour contrôler cette sortie d'une entrée. Et il faut toute la puce uC pour le faire aussi vite. Bien sûr, vous pouvez faire beaucoup plus, mais votre capacité à contrôler cette sortie ralentira à mesure que le UC s'emploiera à autre chose.

Dans un FPGA, je pouvais configurer les portes pour qu’une entrée commande une sortie en une horloge. La sortie suivrait donc l'entrée avec un délai d'environ 25 nanosecondes. C'est 40 fois plus rapide, en utilisant la même période d'horloge. Et le reste des portes du FPGA sont disponibles pour faire beaucoup d'autres choses, ce qui n'affectera pas la vitesse de cette petite fonction.

Le code pour le FPGA serait une simple bascule:

toujours @ (horloge posedge) ledPin <= buttonPin;

Cela prendrait seulement 1 cellule FPGA, environ 40 portes, sur des dizaines de milliers dans un FPGA.

Je peux reprogrammer mon FPGA pour faire autre chose, par exemple contrôler la led en se basant sur une combinaison de quatre entrées, toujours dans une horloge, en utilisant toujours cette cellule 1 FPGA. Ou contrôlez la led en fonction d'un flux série depuis l'entrée, dans quelques cellules FPGA, ce qui représente des centaines de portes. Ainsi, je pouvais contrôler les voyants en fonction des données série, par exemple "ON" ou "OFF", avec un flux série à très haut débit (facilement 20 MHz), tout en n'utilisant qu'une infime fraction de la capacité du FPGA.

Donc, l'avantage d'un FPGA est clairement la rapidité. Il peut faire tout ce que peut faire un UC, et beaucoup plus rapidement, en parallèle. Un FPGA pourrait faire des choses complexes en quelques microsecondes ou moins. Tant qu'il reste des portes dans le FPGA, je peux ajouter d'autres fonctions sans affecter la vitesse ou le fonctionnement des fonctions précédentes du FPGA. À propos, un FPGA peut très facilement fonctionner à une fréquence d'horloge de 20 MHz.

Le coût n'est pas un facteur de différenciation. Je peux acheter un FPGA pouvant implémenter presque toutes les conceptions Arduino que j'ai jamais vues pour environ 5 dollars, à peu près la même chose qu'une puce Arduino AVR. Il existe également des chaînes d'outils gratuites (IDE, compilateur, débogueur) pour les FPGA.

Le pouvoir n'est pas un différentiateur. Étant donné que je peux utiliser le FPGA à une fréquence d'horloge beaucoup plus faible pour obtenir la même fonction qu'un UC, et utiliser une petite partie de ses portes (les portes inutilisées utilisent uniquement de la puissance de fuite), un FPGA peut battre la puissance de presque toutes les solutions basées sur l'UC. conception.

Le plus gros inconvénient d’un FPGA est qu’il est beaucoup plus complexe et long de définir, d’écrire le code et de déboguer un modèle FPGA non trivial qu’un programme uC. Un projet typique d'UC que vous pourriez faire en soirée pourrait prendre des jours sur un FPGA.

Parmi les autres problèmes potentiellement réparables, il y a le fait que la plupart des gens sont formés à la programmation logicielle, mais que peu comprennent la programmation matérielle. Vous pouvez apprendre Verilog assez facilement. Mais vous devez également penser en termes de conception matérielle au lieu de conception logicielle. Les modèles de conception sont très différents.

Un autre problème est que les FPGA ne viennent pas dans de petits paquets DIP de 8 à 20 broches. Ils ont tendance à être fournis dans des boîtiers à montage en surface de 100 broches ou plus, rendant la construction des cartes plus difficile.

Enfin, un dernier problème réside dans le fait que de nombreux projets intéressants peuvent être mis en œuvre parfaitement dans les UC faciles à utiliser. Pourquoi s'embêter avec un FPGA?

SiliconFarmer
la source
2
"Je peux acheter un FPGA pouvant implémenter presque tous les modèles Arduino que j'ai vus pour environ 5 $" Je suis désolé, mais ça va? Où?
medivh
9

Si vous connaissez les portes logiques de base, sachez qu’elles sont pratiquement instantanées. Les opérations A et B OU C changent instantanément lorsque A, B ou C change.

Un FPGA est (en quelque sorte) une matrice de portes logiques programmables. Vous pouvez définir les entrées et les sorties (en combinant les entrées).

En uC, A + B / C * sqrt (D) prendrait plusieurs cycles d’horloge et de la mémoire. Dans un FPGA, le résultat est presque immédiat.

Ils sont parfaits pour la vidéo, DSP, la cryptographie ...

C'est le principal avantage. Les FPGA modernes sont maintenant adaptés à la mémoire et il existe des hybrides uC / FPGA.

ppvi
la source
Je connais de nombreux EE en exercice possédant de nombreuses années d’expérience, qui se limitent souvent à un FPGA dans la conception, au lieu d’un UC où l’on avait l'habitude de le voir. Je pense vraiment qu'ils sont parfaits pour la gestion de l'interface.
Kortuk
Oui, je pense que c'est un bel exemple: armadeus.com/english/index.html . L'exemple de servocommande est particulièrement intéressant pour moi: marwww.in2p3.fr/~duval/wiki_html_dump/articles/m/o/t/…
Maciek Sawicki,
2
A noter également qu’il existe de plus en plus de convertisseurs "C vers VHDL" ou "C vers Verilog". Ce ne sont pas encore les solutions les plus efficaces, mais vous pouvez convertir du code déjà écrit en matériel pouvant être utilisé pour améliorer la vitesse. Assez cool si vous me demandez (et si vous avez de la pâte pour cela).
Chris Gammell
5

Ils sont utilisés pour casser des clés de chiffrement beaucoup plus rapidement qu'un ordinateur polyvalent. :RÉ

endolithe
la source
1
Haha, j'ai apprécié votre description très fonctionnelle. Ils sont absolument incroyables au traitement parallèle.
Kortuk
Un projet de codebreaker: copacobana.org
hhh
2

Pour économiser de l'argent et des risques par rapport à un ASIC. À moins que vous

  1. Profondément souci du pouvoir ou
  2. En construisons beaucoup (disons> 10 000 unités)

les coûts fixes (NRE) d'un ASIC le rendent prohibitif.

Comme vous pouvez facilement changer de FPGA, vous pouvez moins simuler la conception et accéder plus rapidement au laboratoire. Vous pouvez aussi faire une conception partielle et la construire, comme dans un logiciel.

Brian Carlton
la source