FPGA's vs Microcontrollers [fermé]

36

J'ai travaillé sur la famille Arduino (en particulier le Sanguino), construit quelques dispositifs simples et un phototrope simple. Je suis donc assez à l'aise avec les microcontrôleurs, en particulier ceux d'Atmel. Je suis curieux de savoir en quoi les FPGA diffèrent des microcontrôleurs standard. Je viens d’un milieu technique (programmation C / C ++) et j’aimerais donc recevoir des réponses techniques. Gardez simplement à l'esprit que je suis un débutant (par rapport à mon expérience de s / w) dans le domaine de l'électronique. :)

Je suis passé par cette requête et c'était bon mais je cherche des détails plus profonds.

Merci! Sushrut.

Sushrut J Mair
la source
Addendum - Existe-t-il dans le monde réel de bons exemples utilisant des architectures hybrides, c'est-à-dire combinant des fpga avec des microcontrôleurs?
Sushrut J Mair
Sushrut J Mair - En général, lorsque vous avez un FPGA et que vous avez besoin d’un Micro, le micro est implémenté dans le FPGA.
Connor Wolf
Oui, faux nom, d'accord. Cependant, je cherchais des cas concrets dans lesquels des FPGA et des MCU sont utilisés pour concevoir un système. L'idée étant que la partie FPGA de la conception est utilisée pour implémenter un h / w 'évolutif' qui répond et se transforme en fonction des modifications apportées aux entrées du système, tandis que le traitement logique principal est effectué par la MCU.
Sushrut J Mair

Réponses:

48

La conception pour un FPGA nécessite un langage de description matérielle (HDL). Les HDL ne ressemblent en rien à C. Alors qu'un programme C est une suite d'instructions séquentielle qui doit se contourner pour pouvoir exécuter une exécution en parallèle, un HDL décrit un circuit concurrent et doit se contourner pour réussir une exécution séquentielle. C'est un monde très différent et si vous essayez de construire un circuit dans un FPGA en pensant comme un développeur de logiciel, cela vous fera mal.

Un MCU est limité dans le temps. Afin d'accomplir plus de travail, vous avez besoin de plus de cycles de traitement. Les horloges ont des limites très réelles à leurs fréquences, il est donc facile de heurter un mur informatique. Cependant, un FPGA est limité dans l'espace. Afin d'accomplir plus de travail, vous ajoutez simplement plus de circuits. Si votre FPGA n'est pas assez grand, vous pouvez en acheter un plus grand. Il est très difficile de créer un circuit qui ne puisse pas tenir dans le plus grand FPGA, et même si vous le faites, des notes d'application expliquent comment connecter en série des FPGA.

Les FPGA se concentrent beaucoup plus sur l'exécution parallèle. Parfois, vous devez vous demander combien de temps l’ISR de votre MCU met à traiter l’interruption et si vous serez en mesure d’atteindre vos limites en temps réel. Cependant, dans le FPGA, de nombreuses machines à états finis (FSM) fonctionnent tout le temps. Ils sont comme des "femto-contrôleurs", comme des petits nuages ​​de logique de contrôle. Ils fonctionnent tous en même temps, alors ne vous inquiétez pas de rater une interruption. Vous avez peut-être un FSM pour interfacer avec un CAN, un autre FSM pour relier un bus de données / adresse d'un microcontrôleur, un autre FSM pour diffuser des données vers un codec stéréo, encore un autre FSM pour mettre en tampon le flux de données du CAN vers le codec ... besoin d'utiliser un simulateur pour s'assurer que tous les FSM chantent en harmonie.

Les FPGA sont le rêve humide des concepteurs de circuits imprimés. Ils sont extrêmement configurables. Vous pouvez avoir de nombreuses interfaces logiques différentes (LVTTL, LVCMOS, LVDS, etc.), de tensions variables et même de forces de commande (vous n'avez donc pas besoin de résistances de terminaison en série). Les broches sont échangeables; Avez-vous déjà vu un bus d’adresse MCU où les broches étaient dispersées autour de la puce? Votre concepteur de circuits imprimés doit probablement supprimer un grand nombre de vias pour lier correctement tous les signaux. Avec un FPGA, le concepteur de circuits imprimés peut ensuite envoyer les signaux dans la puce dans à peu près n'importe quel ordre pratique, puis la conception peut être rétro-annotée dans la chaîne d'outils FPGA.

Les FPGA ont aussi beaucoup de beaux jouets fantaisistes. L'un de mes favoris est le gestionnaire d'horloge numérique dans les puces Xilinx. Vous lui transmettez un signal d'horloge, et il peut en extraire quatre autres en utilisant une grande variété de multiplicateurs de fréquence et de diviseurs, le tout avec un facteur de marche de 50% et une phase à 100% ... et il peut même prendre en compte le décalage d'horloge provient de retards de propagation externes à la puce!

EDIT (réponse à l'addenda):

Vous pouvez placer un "noyau souple" dans un FPGA. Vous connectez littéralement un circuit de microcontrôleur, ou plutôt vous laissez probablement tomber le circuit de quelqu'un d'autre dans votre conception, comme le PicoBlaze ou le MicroBlaze de Xilinx ou le Nios d'Altera. Mais comme les compilateurs C-> VHDL, ces cœurs ont tendance à être un peu gonflés et lents par rapport à l’utilisation d’un FSM et d’un datapath, ou d’un microcontrôleur réel. Les outils de développement peuvent également ajouter une complexité importante au processus de conception, ce qui peut être une mauvaise chose lorsque les FPGA sont déjà des puces extrêmement complexes.

Il existe également des FPGA intégrant des «cœurs durs», comme la série Virtex4 de Xilinx, qui sont entourés d’une véritable matrice IBM PowerPC dédiée à la technologie FPGA.

EDIT2 (réponse au commentaire):

Je pense que je vois maintenant ... vous parlez de la connexion d'un MCU discret à un FPGA; soit deux jetons séparés. Il y a de bonnes raisons de le faire; Les FPGA qui ont des noyaux durs et ceux qui sont assez gros pour supporter des noyaux mous décents sont généralement des monstres avec des centaines de broches nécessitant un paquet BGA, ce qui multiplie par 10 la difficulté de concevoir un circuit imprimé.

C étant beaucoup plus facile, les MCU ont donc tout à fait leur place en parallèle avec un FPGA. Comme il est plus facile d’écrire en C, vous pouvez écrire le "cerveau" ou l’algorithme central dans la MCU, tandis que le FPGA peut implémenter des sous-algorithmes nécessitant une accélération. Essayez de mettre les choses qui changent dans le code C, car il est plus facile de changer, et laissez le FPGA être un type de texte plus dédié qui ne changera pas souvent.

Les outils de conception MCU sont également plus faciles à utiliser. Il faut plusieurs minutes aux outils de conception pour créer le fichier bit FPGA, même dans le cas de conceptions assez simples, mais les programmes MCU complexes prennent généralement quelques secondes. Il y a beaucoup, beaucoup moins de problèmes avec le MCU, donc ils sont aussi plus faciles à déboguer ... Je ne peux pas sous-estimer la complexité des FPGA. Vous devez vraiment obtenir la fiche technique de celle que vous avez et essayer de lire chaque page de celle-ci. Je sais, ça fait quelques centaines de pages ... faites-le quand même.

Le meilleur moyen de les connecter consiste à utiliser un MCU avec une adresse externe et un bus de données. Ensuite, vous pouvez simplement mapper en mémoire les circuits FPGA dans la MCU et ajouter vos propres "registres", chacun ayant sa propre adresse. Maintenant, le FPGA peut ajouter des périphériques personnalisés, comme un minuteur 32 bits qui peut verrouiller tous les 4 octets à la fois lorsque le premier octet est lu, pour éviter les débordements entre lectures 8 bits. Vous pouvez également l'utiliser comme logique de collage pour mapper en mémoire davantage de périphériques d'autres puces, comme un CAN séparé.

Enfin, certains MCU sont conçus pour être utilisés avec un "maître externe" tel qu'un FPGA. Cypress fabrique quelques MCU USB dotés d’un 8051, mais l’intention est que les données USB soient produites / utilisées, par exemple par un FPGA.

ajs410
la source
C'est une bonne information, merci. J'ai entendu parler de compilateurs C / C ++ à HDL. Avez-vous essayé du tout?
Sushrut J Mair
Ils sont ... d'accord. Pour un seul bloc logique, ce n'est pas si mal. Mais je n’écrirais pas tout un dessin avec ce genre de compilateur. Ils ne sont pas très efficaces, car les langues sont incroyablement différentes ... vous devez utiliser des conventions spéciales, elles ne prennent pas seulement un ancien code ANSI C.
ajs410
Merci, c'est utile. J'ai commandé le kit de développement XP2 Brevia de Lattice Semiconductor. J'ai l'intention d'essayer des compilateurs HDL to C une fois que je suis à l'aise avec les concepts de base de la conception des FPGA.
Sushrut J Mair
Je viens de voir la réponse à mon addenda dans la requête initiale. Merci - vous dites donc qu'en pratique (du moins avec la technologie actuelle), une architecture hybride d'un MCU standard + d'un FPGA a très peu de valeur ajoutée pour être réellement utilisable dans des situations réelles?
Sushrut J Mair
Impressionnant. Merci ajs410. J'espère passer quelques semaines à me lancer dans les fpga avant d'entrer dans les possibilités excitantes des systèmes hybrides!
Sushrut J Mair
10

"Des exemples dans le monde réel ... combinant des FPGA avec des microcontrôleurs?"

En principe, un FPGA suffisamment grand seul peut faire tout ce qu'un FPGA et un microcontrôleur peuvent faire - peut-être en implémentant un processeur souple dans le FPGA. En pratique, un niveau de performance donné a souvent un coût en pièces plus bas et nécessite moins d'énergie lorsqu'il est implémenté avec un FPGA et un microcontrôleur séparé par rapport aux FPGA seuls (ou aux MCU seuls). Voici quelques-uns des appareils les plus célèbres dotés de FPGA et de microcontrôleurs:

  • La caméra Elphel ; Le Wiki du projet Elphel est doté d’un FPGA Xilinx (R) Spartan 3e 1200K et d’un processeur ETRAX FS fonctionnant sous GNU / Linux.
  • Le TS-7500 est doté d’un FPGA réseau LUT 5000 et d’un processeur Cavium ARM9 à 250 MHz pouvant fonctionner sous Linux.
  • La carte ballon possède un FPGA Xilinx Spartan et un processeur ARM
  • plusieurs SBC Linux Teeny weeny incluent à la fois un FPGA et un processeur
  • Le wiki du projet Armadeus documente quelques cartes avec un FPGA Xilinx Spartan-3 et un processeur ARM9 à 400 MHz.
  • La carte Blackfin Handy Board comprend à la fois un FPGA Xilinx Spartan 3e et un processeur Blackfin® ADSP-BF537 à 600 MHz. (Il n’a pas de MMU, il ne peut donc pas fonctionner sous Linux, mais il peut aussi utiliser uClinux).
  • Le "Minimig" (mini Amiga) comprend un FPGA Xilinx Spartan-3, un processeur M68000 et un petit MCU PIC servant de contrôleur de disque par intérim.
Davidcary
la source
4

Les FPGA sont souvent utilisés spécifiquement pour effectuer des tâches qu'un microcontrôleur ne peut pas effectuer efficacement, telles que des opérations fortement parallèles ou à faible latence, fonctionnant dans plusieurs domaines d'horloge ou réalisant une logique personnalisée à des vitesses matérielles. En tant que tels, ils feront le gros du travail et vous aurez rarement besoin d'un MCU pour être au cœur de la conception - ils peuvent être déplacés vers des postes de gestion, tels que le chargement du train de bits de configuration. Un exemple de ceci est le PIC ou ARM dans le Minimig , qui implémente l'interface de stockage.

Quelques produits brouillent cependant les lignes. Quelques exemples:

  1. Les grands FPGA ont généralement des processeurs durs intégrés (les grands projets en ont souvent besoin de toute façon), tout comme ils disposent de la RAM et de blocs multiplicateurs
  2. Certains microcontrôleurs visent des opérations parallèles (XMOS XS1, Atmel Xmega, GreenArray, Parallax Propeller).
  3. Certaines puces sont conçues comme des hybrides (PSoC Cypress, FPSLIC Atmel)

Venant d’un contexte de programmation impératif, c’est tout un ajustement de la conception matérielle, car vous devez bénéficier des avantages des FPGA. Vous trouverez l'expérience utile ailleurs aussi, cependant.

Yann Vernier
la source
1

Il n'y a pas vraiment de différence entre un MCU comme un AVR et un programmé dans un FPGA. Le site OpenCores a un code VHDL pour un AVR pouvant être utilisé dans un FPGA. Vous pouvez l'étudier et voir comment cela fonctionne, et même l'essayer vous-même dans un simulateur sans acheter de carte FPGA appropriée.

Leon Heller
la source
1
Je trouve souvent que les FPGA doivent fonctionner à une vitesse d'horloge plus lente pour le même MCU, sinon ils seront beaucoup plus coûteux. Dans le cas le plus coûteux, vous pouvez facilement implémenter du matériel supplémentaire entre le contrôleur et les broches externes, ce qui en vaut souvent la peine.
Kortuk
De toute façon, si un FPGA est nécessaire dans le système, la MCU est "libre".
Leon Heller
1

Les microcontrôleurs sont des circuits numériques qui exécutent des commandes à partir de la mémoire programme séquentiellement. Le circuit matériel numérique d'un microcontrôleur est fixe et les interconnexions entre les différentes portes constituant le circuit numérique sont permanentes et gravées sur le silicium. Là où les FPGA peuvent être considérés comme un pool de portes numériques (en réalité, les luts sont présents à la place) qui ont des interconnexions programmables. Maintenant, n'importe quel circuit numérique (même un microcontrôleur) peut être créé sur le fpga en programmant les interconnexions.

Trempé
la source