Was sind die Unterschiede und Gemeinsamkeiten zwischen FPGA, ASIC und allgemeinen Mikrocontrollern?

Ich habe diesen Beitrag gelesen und er beantwortet meine Frage nicht vollständig:

Ich denke an einen Mikrocontroller als alles, was etwas Speicher hat, registriert und eine Reihe von Anweisungen wie LOAD, STORE und ADD verarbeiten kann. Es enthält Logikgatter und dergleichen, um seine Rolle zu erfüllen, aber seine Hauptaufgabe besteht darin, ein universeller Prozessor von Bits zu sein. Ich stelle mir einen Mikrocontroller als ein System miteinander verbundener ASIC-Designs vor, um die Fähigkeit zu schaffen, Anweisungen zu speichern und zu verarbeiten.

Ich stelle mir ein ASIC-Gerät als eine Schaltung vor, die speziell unter Verwendung logischer und elektrischer Komponenten konstruiert wurde, um eine einzige Aufgabe auszuführen, ohne dass eine andere Aufgabe im Sinn oder zusätzliche Hardware enthalten ist.

Ich stelle mir ein FPGA-Gerät als ein ASIC-Gerät (ein Low-Level-Gerät) + einen Haufen ungenutzter Dinge vor, die übrig bleiben, um eine bestimmte Wahrheitstabelle zu implementieren.

Trotz seines Namens fühlt sich ein FGPA sehr "anwendungsspezifisch" an, da er neu verdrahtet werden muss, um eine neue und andere Aufgabe zu erfüllen. Dies führt zu Verwechslungen mit ASIC. Allerdings sollte im Fall der Neuverdrahtung eines FPGAs die gesamte erforderliche Hardware vorhanden sein. Außerdem sollen FPGAs programmierbar sein, aber ist das nicht das, wofür ein Mikrocontroller gedacht ist?

Der obige Beitrag, auf den ich verwiesen habe, erwähnt auch HDL, mit dem ich vertraut bin. Kann HDL nicht sowohl für ASIC als auch für FPGA und per Proxy zum Entwerfen eines ganzen Mikrocontrollers verwendet werden?

Es ist nicht ganz klar, was Ihre Frage ist. Haben Sie verwandte Fragen zu FPGA vs. ASIC gelesen? HDL wird tatsächlich zum Entwerfen von ASICs und FPGA-Implementierungen verwendet, und Sie können einen Mikrocontroller in HDL entwerfen.
Altera bietet ein kostenloses E-Book namens FPGAs for Dummies an, das den Unterschied zwischen FPGAs, ASICs und Mikrocontrollern gut erklärt.
@kkrambo Du nennst mich einen Dummy? :) Entschuldigung, ich konnte nicht widerstehen ... Ich werde es mir ansehen.
Ich habe dem Fragentitel das Wort „Ähnlichkeiten“ hinzugefügt, da es scheint, dass es winzige Details im Fachjargon gibt, die die Beziehung zwischen den drei verschiedenen Geräten verwirren können: Beispielsweise kann ein Gerät eines der beiden anderen Geräte enthalten, oder es kann viele enthalten ähnliche Komponenten, unterscheiden sich aber in einigen wichtigen Aspekten. Dies wurde bereits in einigen der vorhandenen Antworten angesprochen. Danke schön.

Antworten (7)

ASIC vs. FPGA

Ein feldprogrammierbares Gate-Array kann als Prototyping-Phase anwendungsspezifischer integrierter Schaltungen angesehen werden: ASICs sind sehr teuer in der Herstellung, und wenn sie einmal hergestellt sind, gibt es kein Zurück mehr (da die teuersten Fixkosten die Masken [eine Art Herstellungs-"Schablone "] und ihre Entwicklung). FPGAs sind viele Male neu programmierbar, da jedoch ein generisches Array von Gattern verbunden ist, um Ihr Ziel zu erreichen, ist es nicht wie ASICs optimiert. Außerdem sind FPGAs von Natur aus dynamische Geräte, da Sie beim Ausschalten nicht nur den aktuellen Status, sondern auch Ihre Konfiguration verlieren. Mittlerweile gibt es jedoch Boards, die einen FLASH-Chip und/oder einen Mikrocontroller hinzufügen, um die Konfiguration beim Start zu laden, sodass dies eher ein weniger wichtiges Argument ist. Sowohl ASICs als auch FPGAs können mit Hardwarebeschreibungssprachen konfiguriert werden, und manchmal werden FPGAs für das Endprodukt verwendet. Aber im Allgemeinen greifen ASICs ein, wenn das Design festgelegt ist.

FPGA vs. Mikrocontroller

Was den Unterschied zwischen einem Mikrocontroller und einem FPGA betrifft, können Sie einen Mikrocontroller als einen ASIC betrachten, der im Wesentlichen Code in FLASH/ROM sequentiell verarbeitet. Sie können Mikrocontroller mit FPGAs herstellen, auch wenn sie nicht optimiert sind, aber nicht das Gegenteil. FPGAs sind genau wie elektronische Schaltungen verdrahtet, sodass Sie wirklich parallele Schaltungen haben können, nicht wie in einem Mikrocontroller, bei dem der Prozessor von einem Codeabschnitt zum nächsten springt, um eine ausreichend gute Parallelität zu simulieren. Da FPGAs jedoch für parallele Aufgaben entwickelt wurden, ist es nicht so einfach, sequenziellen Code zu schreiben wie in einem Mikrocontroller.

Wenn Sie beispielsweise in Pseudocode schreiben, "lass C ein XOR B sein", auf einem FPGA, wird dies übersetzt in "Baue ein XOR-Gatter mit den enthaltenen Legosteinen (Lookup-Tabellen und Latches) und verbinde A/B als Eingänge und C als Ausgabe", die bei jedem Taktzyklus aktualisiert wird, unabhängig davon, ob C verwendet wird oder nicht. Während auf einem Mikrocontroller, der in "Lesebefehle" übersetzt wird, es sich um ein XOR von Variablen an Adresse A und Adresse B des RAM handelt, wird das Ergebnis an Adresse C gespeichert. Laden Sie die Register der Arithmetik-Logik-Einheiten und bitten Sie dann die ALU, ein XOR durchzuführen Kopieren Sie das Ausgangsregister an Adresse C des RAM". Auf der Benutzerseite waren beide Anweisungen jedoch 1 Codezeile. Wenn wir dies tun würden, DANN etwas anderes, müssten wir in HDL einen sogenannten Prozess definieren, um Sequenzen künstlich auszuführen – getrennt vom parallelen Code. Während in einem Mikrocontroller nichts zu tun ist. Andererseits müssten Sie, um "Parallelität" (wirkliches Ein- und Ausschalten) aus einem Mikrocontroller herauszuholen, mit Threads jonglieren, was nicht trivial ist. Unterschiedliche Arbeitsweisen, unterschiedliche Zwecke.

In Summe:

ASIC vs. FPGA: fest, teurer für eine kleine Anzahl von Produkten (billiger für große Stückzahlen), aber optimierter.

ASIC vs. Mikrocontroller: sicherlich wie der Vergleich eines Werkzeugs mit einem Hammer.

FPGA vs. Mikrocontroller: nicht für sequentielle Codeverarbeitung optimiert, kann aber auch wirklich parallele Aufgaben sehr einfach erledigen. Generell werden FPGAs in HDL programmiert, Mikrocontroller in C/Assembly

Wann immer die Geschwindigkeit paralleler Aufgaben ein Problem ist, nehmen Sie ein FPGA, entwickeln Sie Ihr Design weiter und machen Sie es schließlich zu einem ASIC, wenn es für Sie auf lange Sicht billiger ist (Massenproduktion). Wenn sequentielle Aufgaben in Ordnung sind, nehmen Sie einen Mikrocontroller. Ich denke, Sie könnten daraus einen noch anwendungsspezifischeren IC machen, wenn es auf lange Sicht auch billiger für Sie ist. Die beste Lösung wird wahrscheinlich ein bisschen von beidem sein.

Was für eine schnelle Suche, nachdem ich das geschrieben hatte:Geben Sie hier die Bildbeschreibung ein Geben Sie hier die Bildbeschreibung ein

FPGA vs Mikrocontroller, in genau diesem Forum

FPGAs können durch Neuprogrammierung "neu verdrahtet" werden. Ein FPGA lädt seine Konfiguration in seine konfigurierbaren Logikzellen, wenn es mit Strom versorgt wird . Dies bedeutet, dass es ohne Änderungen an der Hardware neu programmiert werden kann.

ASICs können nur neu verdrahtet werden, indem die fotolitografischen Masken in der Siliziumgießerei modifiziert werden.

Ein Mikrocontroller ist eine Art ASIC, der ein Programm ausführt und als Ergebnis allgemeine Dinge tun kann. Wenn Sie jedoch den Befehlssatz ändern oder etwas Ähnliches tun möchten, müssen Sie das tatsächliche Silizium-IC-Layout ändern.


Der Unterschied zwischen einem FPGA und einer MCU ist unscharfer. Was ein FPGA auf Hardwareebene im Grunde ist, sind viele kleine SRAM-Zellen, die alle mit einer dichten Matrix von Multiplexern verbunden sind. Im Grunde genommen ist ein FPGA ein ganzer Haufen diskreter Logik, die elektronisch „neu verdrahtet“ werden kann, indem man einfach die Multiplexer und SRAM-Zellen umprogrammiert.

Als solches können Sie tatsächlich eine MCU in einem FPGA implementieren, da eine MCU nur eine bestimmte Konfiguration von Logikzellen ist. Tatsächlich werden FPGAs sehr häufig im Designprozess von MCUs verwendet.

Ein Mikrocontroller ist eine Implementierung einer bestimmten Logikkonfiguration. Der Grund, warum wir sie haben, ist, dass durch die Implementierung einer MCU direkt im Silizium die Gesamtmenge an benötigtem Platz auf dem Siliziumchip erheblich optimiert werden kann und bestimmte Leistungsoptimierungen vorgenommen werden können, die die erforderliche "Allgemeinheit" eines FPGA verbietet. Dadurch können die Produktionskosten einer MCU drastisch gesenkt werden, und infolgedessen ist die herkömmliche MCU viel billiger als ein FPGA, das die entsprechende Logik enthalten kann.


FPGAs sind in bestimmten Anwendungen nützlich, da sie Logikstrukturen auf eine Weise implementieren können, die MCUs nicht können. Wenn Sie beispielsweise X1 + Y1, X2 + Y2, X3 + Y3 und X4 + Y4 hinzufügen müssen, muss die MCU jede Operation der Reihe nach ausführen *. Ein FPGA kann einfach 4 separate ALUs gleichzeitig haben , sodass es die gleiche Operation in einem Viertel der Zeit ausführen kann (vorausgesetzt, die beiden Geräte werden mit der gleichen Rate getaktet).

Hier können FPGAs (oder ASICs, die für die gleiche Aufgabe entwickelt wurden) wirklich glänzen, da Sie viele, viele Dinge gleichzeitig tun können , was ein einzelner Prozess nur nacheinander tun kann.

* (Hinweis: Ich ignoriere hier einige Dinge wie SIMD)

Ich denke nicht, dass die FPGA/ASIC-Unterscheidung unscharf ist; In einem FPGA arbeiten die Schaltungen, deren "Verdrahtung" geändert werden kann, gleichzeitig und unabhängig voneinander. Eine MCU hat eine große Menge an Schaltungen, deren Verdrahtung nicht geändert werden kann, deren Verhalten durch Informationen gesteuert wird, auf die stückweise von einem programmierbaren Speicherarray zugegriffen wird. Eine CPU kann im Allgemeinen zu jedem Zeitpunkt nur eine Operation aus einer Liste von einigen Tausend bis zu einigen Milliarden Möglichkeiten ausführen, aber die MCU wird so konzipiert sein, dass das Zusammenfügen solcher Operationen nacheinander dies ermöglicht nützliche Arbeit.
Danke schön. SEHR nah dran, die Antwort zu werden ... wenn auch 10 Monate später. +1 zur Wiedergutmachung.

Das ist eine gute Frage,

Grundsätzlich haben ein Mikrocontroller und ein ASIC Hardware (oft als Silizium bezeichnet), die in Stein gemeißelt ist und nicht geändert werden kann. Ein FPGA kann so konfiguriert werden, dass es viele verschiedene Arten von Hardware darstellt (dies kann Mikrocontroller umfassen).

Sie denken vielleicht, dass ein Mikrocontroller viele verschiedene Dinge tun kann, aber dies geschieht alles durch Ausführen verschiedener Programme - technisch Software, aber manchmal auch als Firmware bezeichnet - die Hardware selbst ändert sich nicht im Wesentlichen, sie führt die gleichen Operationen aus, aber in a unterschiedliche Reihenfolge mit unterschiedlichen Eingängen.

FPGAs werden normalerweise verwendet, um die Designs zu generieren, die für ASICs bestimmt sind. Der Unterschied zwischen ihnen besteht darin, dass Sie, wenn Sie das Innenleben eines FPGA aktualisieren oder Funktionsblöcke hinzufügen/entfernen möchten, lediglich die Firmware aktualisieren müssen, dies ist nicht möglich auf ASICs durchgeführt werden, da das Innenleben auf Silizium übertragen wurde, es ist nicht rekonfigurierbar.

Kurz gesagt, bei einem Mikroprozessor verwenden Sie dieselbe Hardware, um verschiedene Programme auszuführen, bei einem FPGA konfigurieren Sie die Hardware neu, um verschiedene Funktionen auszuführen, und ASICs sind wie ein Mikrocontroller, da die Hardware nicht geändert werden kann, aber normalerweise für die Ausführung ausgelegt ist eine einzelne Funktion äußerst effizient.

Sowohl ASICs als auch FPGAs können Mikrocontroller enthalten, und wenn dies der Fall ist, können Sie Programme für sie schreiben, als würden Sie einen eigenständigen Mikrocontroller schreiben. Ein Beispiel dafür ist der eingebettete NIOS II-Prozessor von Altera.

Wenn dies immer noch verwirrend ist, lassen Sie mich wissen, was daran unklar ist, und ich werde mein Bestes tun, um meine Antwort zu klären.

Zigeuner

Nun, nein, ein FPGA wird durch elektrische Signale programmiert, wenn es sich wie eine bestimmte Sammlung von Gattern verhält. Einige FPGAs enthalten einen Flash-Speicher, um diese Konfiguration zu speichern, andere nicht und müssen nach jedem Neustart der Stromversorgung neu programmiert werden.

Ein ASIC kommt fertig konfiguriert vom Band.

FPGA-Fehler können mit einem Firmware-Upgrade behoben werden, ASIC-Fehler können nicht wirtschaftlich repariert werden.

Trotz seines Namens fühlt sich ein FGPA sehr "anwendungsspezifisch" an, da er neu verdrahtet werden muss, um eine neue und andere Aufgabe zu erfüllen.

Das ist das Gegenteil von „anwendungsspezifisch“. Sie können ein FPGA für mehr als eine Anwendung verwenden, indem Sie es neu verdrahten. Sie können einen ASIC nicht ändern, daher kann er nur auf eine Aufgabe angewendet werden (diese Aufgabe kann einen Mikrocontroller implementieren).

Allerdings sollte im Fall der Neuverdrahtung eines FPGAs die gesamte erforderliche Hardware vorhanden sein.

Nicht sicher, was das bedeutet. Normalerweise gibt es eine Softwareschnittstelle zum Umprogrammieren eines FPGAs. Es ist ein ASIC, der Millionen von [Währungseinheit]s Hardware benötigt.

FPGAs sollen programmierbar sein, aber ist das nicht das, wofür ein Mikrocontroller gedacht ist?

Ein Mikrocontroller ermöglicht es Ihnen, sequentielle Software für eine feste Hardware zu programmieren. Genau wie ein normaler Computer, aber sehr klein und ressourcenbeschränkt. Mit einem FPGA können Sie jede beliebige Hardware mit einem HDL programmieren.

Die anderen Antworten decken die Unterschiede gut genug ab. Ich wollte darauf hinweisen, dass ein Mikrocontroller wirklich ein System auf einem Chip ist. Typischerweise verfügt es über eine Art Mikroprozessor, der in C und anderen Sprachen kompilierten Code ausführen kann. Ebenfalls an Bord sind diverse Peripheriegeräte. Dazu können ADCs, DACs, PWM-Controller, Quadratur-Decoder, kapazitive Touch-Controller und viele, viele andere Dinge gehören. Es gibt eine Million verschiedene Arten dieser Dinge. Oft verfügen sie über eingebetteten Flash-Speicher und SRAM, so dass nur sehr wenig außerhalb des Chips zur Unterstützung benötigt wird. Es gibt Hochleistungs- und Niedrigleistungsversionen, Versionen mit Hunderten von Pins und andere mit 8 und alles dazwischen.

Mikrocontroller gab es schon lange, bevor sie anfingen, Peripheriegeräte (ADCs, DAC usw.) zu integrieren. Sie wurden nicht als SOCs betrachtet.
Meinetwegen. Wenn ich heute Mikrocontroller höre, denke ich an SOCs. Ich bin sicher, das liegt an meiner Berufserfahrung.
Das ist ok. Es gibt keine feste und schnelle Unterscheidung oder Trennlinie zwischen, sagen wir, Mikroprozessoren, Mikrocontrollern, SOCs usw. Sie verwandeln sich irgendwie von einem zum anderen, wenn mehr Funktionen und Fähigkeiten hinzugefügt werden und wie sie verwendet werden. Einiges davon ist auch Marketing-Hype.

Lassen Sie sich zunächst etwas klar werden. Was ist eine digitale Schaltung? Eine digitale Schaltung besteht aus logischen Gattern und Registern. Die Logikgatter implementieren boolesche Operationen, die den Regeln der booleschen Algebra folgen. Die Register können Daten speichern. Indem reale Größen in binärer Arithmetik in elektrischer Form ausgedrückt werden, können wir Schaltungen bauen, die arithmetische und logische Operationen der realen Größen ausführen und ein elektrisches Signal ausgeben.

Der so genannte Prozessor ist eine hochkomplexe digitale Schaltung, die eine CPU, einen Speicher und eine ALU enthält. Das sind alles digitale Schaltungsteile, die selbst aus Registern und Logikgattern aufgebaut sind und in einem Prozessor zusammenarbeiten. Wir können dem Prozessor ein Programm vorgeben, das er Schritt für Schritt ausführt. In jedem Schritt wird auf den Speicher zugegriffen, um Daten zu laden oder zu speichern. Es führt einige arithmetische (addieren, subtrahieren, multiplizieren, dividieren usw.) oder logische (gleich, größer als, kleiner als, ungleich) Operationen mit den Daten zwischen dem Laden und Speichern durch. Der Prozessor ist eine hochflexible digitale Schaltung. Damit der Prozessor etwas anderes macht, ändern wir einfach das Programm. Das Programm wird normalerweise in einer Hochsprache wie C geschrieben und dann in Maschinencode umgewandelt. Das Programm enthält grundsätzlich eine Folge von 0 und 1, wenn es im Programmspeicher gespeichert wird. In der Lage zu sein, die gleiche Schaltung mit wenig Aufwand so zu programmieren, dass sie etwas völlig anderes macht, ist die Leistung, die den Prozessor so wichtig macht.

So leistungsfähig und flexibel ein Prozessor nun auch ist, er ist nicht für alle Anwendungen geeignet. Es gibt viele Anwendungen, bei denen wir möchten, dass die digitale Schaltung nur eine bestimmte Sache tut, und das war's. In diesem Fall ist ein Allzweckprozessor möglicherweise nicht einmal schnell genug, um diese eine Sache zu erledigen, da er nicht über genügend Verarbeitungsbandbreite verfügt, um so viele Daten in der vorgegebenen Zeit zu verarbeiten, um die Art von Ergebnis zu liefern, die wir benötigen. In diesem Fall entwerfen wir eine digitale Schaltung für einen bestimmten Zweck.

Eine digitale Schaltung wird normalerweise unter Verwendung von Halbleitermaterialien hergestellt. Normalerweise wird hierfür Silizium verwendet. Die tatsächlichen Schritte sind für unsere Diskussion hier nicht wichtig. Der Herstellungsprozess soll Logikgatter und Register auf einem Stück Silizium erzeugen. Diese sind extrem klein, vielleicht ein paar Nanometer im Durchmesser. Der Herstellungsprozess stellt auch die elektrischen Verbindungen zwischen ihnen her. Die Herstellung einer digitalen Schaltung wie dieser ist SEHR teuer und wird nur für Produkte mit sehr hohen Stückzahlen durchgeführt, bei denen Millionen von Teilen hergestellt und verkauft werden. Einmal hergestellt, hat das Stück Silizium das Design „in Stein gemeißelt“, dh es kann nicht verändert werden, nicht einmal, um die Hardware zu debuggen. Wenn wir Änderungen vornehmen müssen, fertigen wir das Design von Grund auf neu. So werden eigentlich die Mikroprozessoren und Mikrocontroller hergestellt.

Eine Alternative zum 6-monatigen Herstellungsprozess einer digitalen Schaltung, vielleicht nur um Fehler zu finden, ist die Verwendung von etwas namens FPGA. Dies ist eine Schaltungskomponente, die eine große Anzahl von Gattern und Registern enthält, die so konfiguriert werden können, dass sie auf bestimmte Weise miteinander verbunden werden, um eine bestimmte digitale Schaltung zu realisieren, und wir können diese Verbindungsreihenfolge normalerweise ganz einfach ändern. FPGAs werden verwendet, um ein ASIC-Design zu prototypisieren, bevor es den SEHR teuren Designzyklus durchläuft. Sie werden auch als eigentliches Gerät verwendet, das die digitale Schaltung in einem Produkt mit geringer Stückzahl implementiert. Nun stellt sich die Frage, wenn FPGAs diese Fähigkeit haben, warum dann nicht einfach alles in ihnen implementieren? Ohne zu sehr ins Detail zu gehen, möchte ich sagen, dass FPGAs nicht mit sehr hohen Frequenzen wie dem GHz-Bereich betrieben werden können. Dies ist eine Einschränkung, die sich daraus ergibt, wie sie auf Silizium ausgelegt sind. Das ist der Nachteil, mit dem wir bei der hohen Flexibilität leben müssen. Dies ist jedoch nicht der einzige Grund. Sie benötigen normalerweise mehr Strom (denken Sie daran, dass sie mit Strom betrieben werden) als ein ASIC mit einer ähnlichen Anzahl von Logikgattern und Registern. Wenn wir ein Produkt haben, das in Millionen von Teilen hergestellt wird, dann ist ein ASIC pro Teil billiger als der Versand des Produkts mit FPGA.

Eine Anwendung unterliegt bestimmten Einschränkungen, die in der Regel Kosten, Markteinführungszeit, Produktionsvolumen, Verlustleistung, erforderliche Datenbandbreite und andere sind. All dies wird berücksichtigt, um zu entscheiden, ob ASIC, GPU, Mikrocontroller, Mikroprozessor oder FPGA verwendet werden sollen. Heutzutage haben wir sehr, sehr komplexe FPGAs wie das MPSoC-Gerät von Xilinx, die Multicore-ARM-Prozessoren mit programmierbarer FPGA-Logik integrieren, um das Beste aus beiden Welten zu erhalten.