Quelles sont les différences et les similitudes entre FPGA, ASIC et les microcontrôleurs généraux?


25

J'ai lu ce post et il ne répond pas à ma question dans son intégralité:

Je pense à un microcontrôleur comme tout ce qui a de la mémoire, des registres et peut traiter un ensemble d'instructions telles que LOAD, STORE et ADD. Il contient des portes logiques et autres pour remplir son rôle, mais sa tâche principale est d'être un processeur universel de bits. Je pense à un microcontrôleur comme un système de conceptions ASIC interconnectées pour créer la capacité de stocker et de traiter des instructions.

Je pense à un périphérique ASIC comme un circuit qui a été spécifiquement construit à l'aide de composants logiques et électriques pour effectuer une seule tâche, sans autre tâche à l'esprit ni matériel supplémentaire inclus.

Je pense à un périphérique FPGA comme un périphérique ASIC (un périphérique de bas niveau) + un tas de trucs inutilisés, utilisés pour implémenter une table de vérité particulière.

Malgré son nom, un FGPA se sent très "spécifique à l'application", car il doit être recâblé pour effectuer une tâche nouvelle et différente. Cela conduit à une confusion avec l'ASIC. Cependant, dans le cas du recâblage d'un FPGA, tout le matériel nécessaire doit être présent. De plus, les FPGA sont censés être programmables, mais n'est-ce pas à cela que sert un microcontrôleur?

Le post ci-dessus que j'ai référencé mentionne également HDL, que je connais bien. Le HDL ne peut-il pas être utilisé à la fois pour ASIC et FPGA, et par proxy pour concevoir un microcontrôleur complet?


1
Ce n'est pas très clair quelle est votre question. Avez-vous lu des questions connexes sur FPGA vs ASIC? HDL est en effet utilisé pour concevoir des implémentations ASIC et FPGA, et vous pouvez concevoir un microcontrôleur en HDL.
pjc50

3
Altera propose un ebook gratuit appelé FPGAs for Dummies , qui explique bien la différence entre les FPGA, les ASIC et les microcontrôleurs.
kkrambo

@kkrambo Vous Callin' moi un mannequin? :) Désolé, je n'ai pas pu résister ... Je vais vérifier.
user58446

J'ai ajouté le mot `` similitudes '' au titre de la question, car il semble qu'il y ait de minuscules détails techniques dans le jargon qui peuvent perturber la relation entre les trois appareils différents: par exemple, un appareil peut contenir l'un des deux autres appareils, ou il peut en contenir plusieurs composants similaires mais diffèrent par certains aspects importants. Cela a déjà été abordé par certaines des réponses existantes. Merci.
user58446

Réponses:


28

ASIC vs FPGA

Un réseau de portes programmables sur site peut être considéré comme l'étape de prototypage de circuits intégrés spécifiques à une application: les ASIC sont très chers à fabriquer, et une fois fabriqués, il n'y a pas de retour en arrière (car le coût fixe le plus cher est les masques [sorte de fabrication ") "] et leur évolution). Les FPGA sont reprogrammables plusieurs fois, mais du fait qu'un tableau générique de portes est connecté pour atteindre votre objectif, il n'est pas optimisé comme les ASIC. De plus, les FPGA sont des périphériques nativement dynamiques en ce sens que si vous l'éteignez, vous perdez non seulement l'état actuel mais également votre configuration. Il existe désormais des cartes qui ajoutent une puce FLASH et / ou un microcontrôleur pour charger la configuration au démarrage, ce qui tend à être un argument moins important. Les ASIC et les FPGA peuvent être configurés avec les langages de description du matériel, et parfois des FPGA sont utilisés pour le produit final. Mais généralement, les ASIC interviennent lorsque la conception est fixée.

FPGA vs microcontrôleur

Quant à la différence entre un microcontrôleur et un FPGA, vous pouvez considérer un microcontrôleur comme un ASIC qui traite fondamentalement le code en FLASH / ROM séquentiellement. Vous pouvez fabriquer des microcontrôleurs avec des FPGA même s'ils ne sont pas optimisés, mais pas l'inverse. Les FPGA sont câblés comme des circuits électroniques afin que vous puissiez avoir des circuits véritablement parallèles, pas comme dans un microcontrôleur où le processeur passe d'un morceau de code à un autre pour simuler un parallélisme suffisant. Cependant, comme les FPGA ont été conçus pour des tâches parallèles, il n'est pas aussi facile d'écrire du code séquentiel que dans un microcontrôleur.

Par exemple, généralement si vous écrivez en pseudocode "soit C soit A XOR B", sur un FPGA qui sera traduit en "construisez une porte XOR avec les briques lego contenues (tables de recherche et verrous), et connectez A / B comme entrées et C en sortie "qui sera mis à jour à chaque cycle d'horloge, que C soit utilisé ou non. Alors que sur un microcontrôleur qui sera traduit en "instruction de lecture - c'est un XOR de variables à l'adresse A et à l'adresse B de la RAM, résultat à stocker à l'adresse C. Charger les registres des unités logiques arithmétiques, puis demander à l'ALU de faire un XOR, puis copier le registre de sortie à l'adresse C de la RAM ". Côté utilisateur, les deux instructions étaient constituées d'une ligne de code. Si nous devions faire cela, PUIS autre chose, en HDL, nous aurions à définir ce qu'on appelle un processus pour faire artificiellement des séquences - distinct du code parallèle. Alors que dans un microcontrôleur, il n'y a rien à faire. D'un autre côté, pour obtenir le "parallélisme" (accordage et déconnexion vraiment) d'un microcontrôleur, vous devrez jongler avec des threads, ce qui n'est pas anodin. Différentes façons de travailler, différentes finalités.

En résumé:

ASIC vs FPGA: fixe, plus cher pour un petit nombre de produits (moins cher pour des volumes élevés), mais plus optimisé.

ASIC vs microcontrôleur: certainement comme comparer un outil avec un marteau.

FPGA vs microcontrôleur: non optimisé pour le traitement de code séquentiel, mais peut également effectuer des tâches vraiment parallèles très facilement. Généralement les FPGA sont programmés en HDL, les microcontrôleurs en C / Assembly

Chaque fois que la vitesse des tâches parallèles est un problème, prenez un FPGA, faites évoluer votre conception et enfin faites-en un ASIC si cela vous coûte moins cher à long terme (production de masse). Si les tâches séquentielles sont correctes, prenez un microcontrôleur. Je suppose que vous pourriez faire un IC encore plus spécifique à cette application si cela vous revient moins cher à long terme. La meilleure solution sera probablement un peu des deux.

Quelle recherche rapide après avoir écrit ceci m'a donné: entrez la description de l'image ici entrez la description de l'image ici

FPGA vs Microcontrollers, sur ce même forum


14

Les FPGA peuvent être «recâblés» par reprogrammation. Un FPGA charge sa configuration dans ses cellules logiques configurables lorsqu'il est alimenté . Cela signifie qu'il peut être reprogrammé sans modification du matériel.

Les ASIC ne peuvent être recâblés qu'en modifiant les masques photolitographiques de la fonderie de silicium.

Un microcontrôleur est un type d'ASIC, qui exécute un programme et peut donc faire des choses génériques. Cependant, si vous souhaitez modifier le jeu d'instructions ou faire quelque chose de similaire, vous devez modifier la disposition réelle du circuit intégré de silicium.


La différence entre un FPGA et un MCU est plus floue. Fondamentalement, ce qu'est un FPGA, au niveau matériel, c'est beaucoup de petites cellules SRAM, toutes connectées à une matrice dense de multiplexeurs. Fondamentalement, un FPGA est un tas de logique discrète qui peut être «recâblé» électroniquement ** simplement en reprogrammant les multiplexeurs et les cellules SRAM.

En tant que tel, vous pouvez réellement implémenter un MCU dans un FPGA, car un MCU n'est qu'une certaine configuration de cellules logiques. En fait, les FPGA sont très couramment utilisés dans le processus de conception des microcontrôleurs.

Un microcontrôleur est une implémentation d'une certaine configuration logique. La raison pour laquelle nous les avons est qu'en implémentant un MCU directement dans le silicium, la quantité globale d'espace de puce de silicium requise peut être considérablement optimisée, et certaines optimisations de performances peuvent être apportées que la «génériquesité» requise d'un FPGA interdit. Cela permet de réduire considérablement les coûts de production d'un MCU et, par conséquent, le MCU commun est beaucoup moins cher qu'un FPGA capable de contenir la logique équivalente.


Les FPGA sont utiles dans certaines applications, car ils peuvent implémenter des structures logiques d'une manière que les MCU ne peuvent pas. Par exemple, si vous devez ajouter X1 + Y1, X2 + Y2, X3 + Y3 et X4 + Y4, le MCU devra effectuer chaque opération dans l'ordre *. Un FPGA peut simplement avoir 4 ALU distinctes en même temps , il peut donc effectuer la même opération en un quart de temps (en supposant que les deux appareils sont cadencés au même rythme).

C'est là que les FPGA (ou ASIC conçus pour la même tâche) peuvent vraiment briller, dans le fait que vous pouvez faire beaucoup, beaucoup de choses simultanément , ce qu'un seul processus ne peut faire que séquentiellement.

* (note: j'ignore certaines choses comme SIMD ici)


Je ne pense pas que la distinction FPGA / ASIC soit floue; dans un FPGA, les circuits dont le "câblage" peut être modifié fonctionnent simultanément et indépendamment. Une unité MCU possède une grande quantité de circuits dont le câblage ne peut pas être modifié, dont le comportement est contrôlé par le biais d'informations accessibles de manière fragmentaire à partir d'une matrice de mémoire programmable. À tout moment, un processeur ne pourra généralement effectuer qu'une seule opération parmi une liste de quelques milliers à quelques milliards de choix, mais le MCU sera conçu de telle sorte que le regroupement de ces opérations en séquence permettra de faire travail utile.
supercat

Merci. TRÈS proche de devenir la réponse ... quoique 10 mois plus tard. +1 pour réparer.
user58446

6

C'est une bonne question,

Fondamentalement, un microcontrôleur et un ASIC ont du matériel (souvent appelé silicium) qui est gravé dans la pierre et ne peut pas être changé. Un FPGA peut être configuré pour représenter de nombreux types de matériel différents (cela peut inclure des microcontrôleurs).

Vous pouvez penser qu'un microcontrôleur peut être fait pour faire beaucoup de choses différentes, mais cela se fait en exécutant différents programmes - techniquement des logiciels mais parfois appelés micrologiciels - le matériel lui-même ne change pas essentiellement, il fait les mêmes opérations mais dans un ordre différent avec différentes entrées.

Les FPGA sont généralement utilisés pour générer les conceptions qui sont dédiées aux ASIC, la différence entre eux est que si vous vouliez mettre à jour le fonctionnement interne d'un FPGA ou ajouter / supprimer des blocs fonctionnels, tout ce que vous avez à faire est de mettre à jour son firmware, cela ne peut pas être fait sur les ASIC car le fonctionnement interne a été engagé sur le silicium, il n'est pas reconfigurable.

Donc, en bref, avec un microprocesseur, vous utilisez le même matériel pour exécuter différents programmes, avec un FPGA, vous reconfigurez le matériel pour effectuer différentes fonctions et les ASIC sont comme un microcontrôleur en ce sens que le matériel ne peut pas être changé mais est généralement conçu pour fonctionner une seule fonction extrêmement efficace.

Les ASIC et les FPGA peuvent contenir des micro-contrôleurs et s'ils le font, vous pouvez écrire des programmes pour eux comme vous le feriez pour un micro-contrôleur autonome, un exemple de ceci est le processeur intégré NIOS II d'Altera.

Si cela prête toujours à confusion, faites-moi savoir ce qui n'est pas clair et je ferai de mon mieux pour clarifier ma réponse.

gitan


3

Eh bien, aucun FPGA n'est programmé par des signaux électriques s'il se comporte comme une collection spécifique de portes, certains FPGA incluent une mémoire flash pour stocker cette configuration, d'autres non et doivent être reprogrammés après chaque réinitialisation de l'alimentation.

Un ASIC sort de la ligne de production déjà configuré.

Les bugs FPGA peuvent être corrigés avec une mise à niveau du firmware, les bugs ASIC ne peuvent pas être réparés économiquement.


2

Malgré son nom, un FGPA se sent très "spécifique à l'application", car il doit être recâblé pour effectuer une tâche nouvelle et différente.

C'est l'opposé de ce que signifie "spécifique à l'application". Vous pouvez utiliser un FPGA pour plusieurs applications en le recâblant. Vous ne pouvez pas modifier un ASIC, il ne peut donc être appliqué qu'à une seule tâche (cette tâche peut implémenter un microcontrôleur).

Cependant, dans le cas du recâblage d'un FPGA, tout le matériel nécessaire doit être présent.

Je ne sais pas ce que cela signifie. Il existe généralement une interface logicielle pour reprogrammer un FPGA. C'est un ASIC qui nécessite des millions de [unités monétaires] de matériel.

Les FPGA sont censés être programmables, mais n'est-ce pas à cela que sert un microcontrôleur?

Un microcontrôleur vous permet de programmer un logiciel séquentiel pour un matériel fixe. Tout comme un ordinateur normal, mais très petit et aux ressources limitées. Un FPGA vous permet de programmer tout matériel que vous souhaitez en utilisant un HDL.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.