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.