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?
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/
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?
la source
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.
la source
Ils sont utilisés pour casser des clés de chiffrement beaucoup plus rapidement qu'un ordinateur polyvalent. :RÉ
la source
Pour économiser de l'argent et des risques par rapport à un ASIC. À moins que vous
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.
la source