Quand peut-on utiliser des FPGA et pas des microcontrôleurs / DSP?

28

Je dois choisir entre un cours sur les microcontrôleurs avancés et un cours sur les FPGA avancés.

J'ai suivi des cours d'introduction dans les deux matières, et ce qui me trouble maintenant, c'est que je suis déjà assez bon en développement de micrologiciels pour microcontrôleurs, et je ne vois pas quels produits / projets je peux faire avec un FPGA et ne peux pas avec un microcontrôleur / DSP.

Pouvez-vous proposer des applications / produits / projets où un microcontrôleur ou DSP ne serait pas suffisant, et pourquoi?

Appareils photo? Caméras haute vitesse? Traitement d'image haute vitesse?

Jolle
la source
4
Les principales raisons sont à peu près 1. des réactions déterministes à 100%, 2. un énorme potentiel de parallélisme. Cependant, de nombreuses conceptions intègrent un processeur à cœur de tri dans le FPGA, car il est beaucoup plus facile de programmer une logique folle pour un processeur que pour du matériel.
Dzarda
La distinction entre ce qui est possible avec chaque appareil n'est pas très claire. Chacun a des avantages et il existe des solutions aux problèmes de chaque côté. Je n'ai pas suivi de cours d'introduction sur chacun, je suppose que vous comprenez cela, alors je me demande exactement ce que vous demandez.
Phil Frost
Je recherche des applications où un microcontrôleur dans la plupart des cas ne serait pas suffisant, ou où un FPGA serait le choix évident.
Jolle
4
Lequel avez-vous trouvé le plus facile à comprendre lors de votre cours d'introduction? Choisissez ensuite l'avancé de l'autre, car (peut-être) vous pourrez étudier le plus facile par vous-même.
woliveirajr du
stackoverflow.com/questions/7458850/…
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件

Réponses:

21

Voir aussi FPGA vs Microcontrôleurs

Le traitement d'images ou de vidéos à haute vitesse en est un bon exemple. Ou en traitant des «images» qui ne sont pas des images optiques simples, comme les systèmes radar ou laser.

L'élément clé à considérer est les exigences de débit et de latence . Un microcontrôleur peut effectuer une interruption (très approximativement) une fois par microseconde. Il ne peut traiter qu'une seule interruption à la fois. Si vous devez le traiter de manière élaborée, cela limite le nombre de services que vous pouvez entretenir à un moment donné.

Avec un FPGA, vous pouvez généralement répondre immédiatement à un événement d'entrée (enfin, au prochain cycle d'horloge). Vous pouvez avoir de nombreuses unités de traitement en parallèle. Si vous savez que votre filtre prend 20 cycles, cela est totalement indépendant de tout ce qui se passe.

Le calcul intensif entier très parallèle fonctionne mieux sur les FPGA, surtout s'il y a des dépendances de données complexes. Cependant, ils n'ont pas beaucoup de mémoire embarquée; vous pouvez ajouter de la DRAM sur le côté mais au prix d'une latence.

Vous pouvez également en vouloir un pour les périphériques ou pour parler d'un bus numérique à haute vitesse. Vous ne pouvez pas faire de signaux HDMI dans ou hors d'un microcontrôleur. Vous ne pouvez pas construire une carte PCI autour d'une carte.

pjc50
la source
16

Eh bien, je fais du traitement en temps réel de la vidéo HD dans les FPGA. Une partie de ce que je fais pourrait se faire dans une puce GPU, mais pas sur un microcontrôleur ou DSP. Le FPGA est plus flexible.

De nombreux systèmes combinent FPGA et MCU / DSP pour tirer le meilleur parti des deux mondes. Un projet sur lequel je travaillerai bientôt implique la reconnaissance d'objets dans un flux vidéo. Les étapes préliminaires (élimination du bruit, normalisation, détection des bords, etc.) sont mieux effectuées dans le FPGA, mais la logique de niveau supérieur qui décide quelles fonctionnalités de bas niveau font partie des objets reconnus est mieux effectuée sur un CPU (soit à l'intérieur ou à l'extérieur du FPGA).

En fin de compte, vous voudrez être familier dans les deux domaines, il ne s'agit donc que de celui que vous faites en premier.

Dave Tweed
la source
14

En bref, les FPGA sont bons là où vous devez effectuer un petit traitement sur beaucoup de données, et les CPU sont bons là où vous devez effectuer beaucoup de traitement sur peu de données.

Un flux vidéo HDMI représente beaucoup de données. Cela peut être fait par un CPU, un GPU ou un ASIC dans le cas général de la vidéo, mais si vous devez y travailler un peu (ajouter une superposition, par exemple), vous pouvez choisir un FPGA.

Un flux audio n'est pas beaucoup de données, mais si vous avez besoin d'effectuer une reconnaissance vocale, vous préférerez un processeur à un FPGA.

Bien que vous puissiez faire de la radio définie par logiciel dans un CPU, vous pouvez traiter une partie beaucoup plus large du spectre avec un FPGA plus facilement que dans un CPU.

Bien que vous puissiez fabriquer un contrôleur de clavier à partir d'un FPGA, un microcontrôleur sera moins cher, consommera moins d'énergie et plus facile à développer un logiciel de clavier avancé (macros, fonctions de jeu, remappage) qu'un FPGA.

Bien sûr, vous pouvez faire n'importe quoi dans n'importe lequel d'entre eux, avec des compromis, mais si vous maîtrisez les deux, vous pourrez peser les compromis plus efficacement et éviter le coût plus élevé des pièces ou du temps de développement que vous encourriez à choisir le mauvaise solution à un problème donné.

Adam Davis
la source
12

Généralement, vous utilisez un microcontrôleur quand il peut faire le travail. Un microcontrôleur exécute la logique en exécutant des instructions séquentielles.

Un FPGA exécute la logique car ses portes matérielles sont logiquement câblées pour le faire. Cela signifie qu'il peut faire les choses beaucoup plus rapidement, et un certain nombre de ces choses en même temps. Il est généralement plus compliqué et difficile de créer et de déboguer la même logique dans un FPGA que dans un micro, vous utilisez donc un FPGA lorsque la vitesse supplémentaire et la faible latence sont nécessaires.

Olin Lathrop
la source
8

Une application que je n'ai pas encore vue mentionnée est l'ingénierie microélectronique ou la conception de puces MCU / CPU / GPU / ASIC elles-mêmes. Ces puces sont souvent prototypées en les concevant en HDL puis implémentées dans un FPGA. Cela les rend plus faciles, moins chers et plus rapides à tester et à modifier avant d'utiliser enfin le HDL pour créer la configuration nécessaire à la production du silicium réel dans le processeur ou l'ASIC.

Un intervenant l'a mentionné sous la forme de puces à noyau souple (bien qu'elles aient une faute de frappe et les aient appelées puces à noyau de tri). Vous pouvez prendre un ARM / 8051 / etc. soft-core et tous les périphériques soft-core dont vous avez besoin et concevez essentiellement votre propre microcontrôleur personnalisé implémenté dans un FPGA. Ensuite, en supposant que vous ayez les ressources, vous pourriez avoir cette fabrique dans votre propre microcontrôleur.

Si ce type d'application vous intéresse, jetez un œil à OpenCores pour voir ce qui est possible.

embedded.kyle
la source
6

Nous construisons des instruments radar (principalement des ouvertures synthétiques) qui utilisent largement les FPGA. Je ne pense pas que les contraintes de temps serrées puissent être satisfaites par un microcontrôleur facilement. Je crois que beaucoup d'instruments LIDAR utilisent également des FPGA.

Fondamentalement, tout ce qui nécessite des délais dans les nanosecondes nécessite des FPGA ou des ASIC.

LeoR
la source
5

Un microcontrôleur ne peut traiter les données que séquentiellement, une instruction à la fois, donc si vous avez une opération très coûteuse, vous voudrez peut-être rendre votre calcul parallèle en quelque sorte. Le traitement audio / vidéo en est un bon exemple. Pour répondre à ce besoin, des processeurs de signaux numériques ont été développés qui peuvent effectuer certaines tâches en parallèle, mais ils ne sont pas suffisamment généralisés pour implémenter un algorithme arbitraire, de sorte que ces processeurs fonctionneront pour de nombreuses tâches mais pas pour toutes. Un FPGA est un matériel généralisé. Puisque vous pouvez définir, essentiellement, la conception de votre propre matériel, puis le télécharger sur le FPGA, il peut implémenter n'importe quel algorithme imaginable, étant donné qu'il dispose de suffisamment de ressources pour le faire.

Un exemple concret: Ken Perlin suggère une implémentation matérielle de son algorithme de bruit simplex. Cela peut être fait relativement rapidement avec un processeur ou un microcontrôleur traditionnel, mais peut être rendu super rapide avec du matériel personnalisé. Comme je doute qu'un DSP fonctionnerait pour cela, le plus simple serait un FPGA. La manière la plus difficile, bien sûr, serait d'avoir une puce physique réelle fabriquée pour vous, ce qui est incroyablement cher. http://www.csee.umbc.edu/~olano/s2002c36/ch02.pdf

Void Star
la source
5

Une réponse qui n'est pas là est l'acquisition de données. Si vous souhaitez utiliser un ADC pour échantillonner un signal (par exemple, un signal RF) à 200 MHz et le traiter, un microcontrôleur ne sera tout simplement pas en mesure de traiter les données assez rapidement. Une carte FPGA DAQ typique recevra, filtrera, effectuera un DDC et transmettra les données RF à un processeur à une fréquence beaucoup plus basse. Les FPGA peuvent également effectuer des FFT et des opérations de canalisation sur le spectre RF.

Une autre application est le routage de paquets, par exemple un périphérique qui gère une (ou plusieurs) interfaces Ethernet XAUI fonctionnant à 10 Gbit / s chacune. Ces FPGA filtrent et planifient les files d'attente de paquets pour différentes destinations. Un microcontrôleur / CPU conventionnel ne serait pas en mesure de gérer la bande passante de ces interfaces.

Stanri
la source
4

La raison fondamentale pour laquelle les microprocesseurs et microcontrôleurs peuvent faire tellement avec une quantité de circuits relativement petite est que si le micro n'a besoin d'effectuer que quelques calculs complexes 1000 fois par seconde et qu'il faut 20 microsecondes (le micro travaillera donc sur le calcul 2 % du temps), la plupart du matériel qui serait utilisé pour ce calcul peut être utilisé à d'autres fins les 98% de temps restants. Les microcontrôleurs peuvent ainsi utiliser une quantité modeste de matériel pour effectuer un très grand nombre de fonctions distinctes, tant que les fonctions ne sont pas nécessaires simultanément.

La quantité de circuits dans un FPGA sera souvent comparable à celle d'un microcontrôleur (les FPGA varient en taille de quelques ordres de grandeur, tout comme les microcontrôleurs, mais les plages se chevauchent). Contrairement à un microcontrôleur, cependant, dont les éléments de circuit seront connectés de manière à faciliter leur utilisation pour de nombreuses tâches non simultanées, un FPGA sera conçu pour consacrer des parties de ses circuits à diverses tâches "à plein temps". Si l'on voulait qu'un microcontrôleur compte le nombre d'impulsions qui se produisent sur chacune des 100 entrées, il se limiterait à compter des impulsions suffisamment lentes pour que le contrôleur puisse les gérer séquentiellement, individuellement - si toutes les entrées pouvaient pulser indépendamment, même un contrôleur rapide aurait du mal à compter plus de quelques milliers d'impulsions par seconde par entrée. Par contre,

supercat
la source
1

Le FPGA implémente un circuit logique matériel ou un bloc fonctionnel, en théorie il peut implémenter tout ce que vous voulez. Et ces blocs fonctionnent simultanément, peu probable qu'un MCU conventionnel exécute la programmation ligne par ligne. Par conséquent, les performances du FPGA sont bien meilleures que celles du MCU, mais cela nécessite de connaître le langage HDL ou VHDL qui diffère du langage de programmation en termes de syntaxe, de style et de concept.


Comme je l'ai dit, il peut implémenter n'importe quoi, donc, il n'est pas surprenant que vous puissiez implémenter un MCU avec un bloc fonctionnel pour faciliter votre développement avec de hautes performances.Il y a un bloc fonctionnel fourni par Xilinx pour vous au MCU intégré, appelé Microblaze. Par conséquent, vous pouvez également exécuter un programme système intégré dans FPGA.


Par exemple, vous souhaitez implémenter un égaliseur audio programmable et la partie de calcul la plus lourde telle que la FFT peut être implémentée par bloc fonctionnel au lieu d'exécuter un calcul logiciel. Mais certaines des tâches simples telles que LCD, interface d'E / S peuvent être effectuées par MCU. Et le FPGA vous permet d'avoir simultanément des blocs fonctionnels intégrés de système et matériel MCU.

Lee Timothy
la source