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.
fpga
microcontroller
Sushrut J Mair
la source
la source
Réponses:
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.
la source
"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 source
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:
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.
la source
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.
la source
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.
la source