Ich habe diesen Beitrag gelesen und er beantwortet meine Frage nicht vollständig:
Ich stelle mir einen Mikrocontroller vor, der über Speicher verfügt, sich registriert und Befehle wie LOAD, STORE und ADD verarbeiten kann. Es enthält logische Gatter und dergleichen, um seine Rolle zu erfüllen, aber seine Hauptaufgabe ist es, ein universeller Prozessor für Bits zu sein. Ich stelle mir einen Mikrocontroller als ein System aus miteinander verbundenen ASIC-Designs vor, mit denen Anweisungen gespeichert und verarbeitet werden können.
Ich stelle mir ein ASIC-Gerät als eine Schaltung vor, die speziell unter Verwendung logischer und elektrischer Komponenten konstruiert wurde, um eine einzelne Aufgabe auszuführen, ohne dass eine andere Aufgabe in Betracht gezogen oder zusätzliche Hardware enthalten wäre.
Ich stelle mir ein FPGA-Gerät als ein ASIC-Gerät (ein Low-Level-Gerät) + ein Bündel unbenutzter Dinge, die zum Implementieren einer bestimmten Wahrheitstabelle verwendet werden.
Trotz seines Namens fühlt sich ein FGPA sehr "anwendungsspezifisch" an, da es neu verkabelt werden muss, um eine neue und andere Aufgabe auszuführen. Dies führt zu Verwechslungen mit ASIC. Bei einer Neuverdrahtung eines FPGAs sollte jedoch die gesamte erforderliche Hardware vorhanden sein. FPGAs sollen auch programmierbar sein, aber ist das nicht das, wofür ein Mikrocontroller gedacht ist?
In dem Beitrag, auf den ich oben verwiesen habe, wird auch HDL erwähnt, mit dem ich vertraut bin. Kann HDL nicht sowohl für ASIC als auch für FPGA und als Proxy zum Entwerfen eines gesamten Mikrocontrollers verwendet werden?
quelle
Antworten:
ASIC vs FPGA
Ein vor Ort programmierbares Gate-Array kann als Prototyping-Stadium für anwendungsspezifische integrierte Schaltkreise angesehen werden: ASICs sind sehr teuer in der Herstellung, und wenn sie erst einmal hergestellt sind, gibt es kein Zurück mehr (da die Masken die teuersten Fixkosten sind) "] und ihre Entwicklung). FPGAs sind viele Male umprogrammierbar. Da jedoch ein generisches Array von Gattern angeschlossen ist, um Ihr Ziel zu erreichen, wird es nicht wie ASICs optimiert. FPGAs sind von Haus aus dynamische Geräte. Wenn Sie sie ausschalten, verlieren Sie nicht nur den aktuellen Status, sondern auch Ihre Konfiguration. Es gibt jetzt jedoch Boards, die einen FLASH-Chip und / oder einen Mikrocontroller hinzufügen, um die Konfiguration beim Start zu laden. Daher ist dies eher ein weniger wichtiges Argument. Sowohl ASICs als auch FPGAs können mit Hardware Description Languages konfiguriert werden. und manchmal werden FPGAs für das Endprodukt verwendet. Aber in der Regel setzen ASICs ein, wenn das Design feststeht.
FPGA vs Mikrocontroller
Was den Unterschied zwischen einem Mikrocontroller und einem FPGA betrifft, können Sie einen Mikrocontroller als einen ASIC betrachten, der im Grunde Code in FLASH / ROM sequentiell verarbeitet. Sie können Mikrocontroller mit FPGAs erstellen, auch wenn diese nicht optimiert sind, aber nicht umgekehrt. FPGAs sind wie elektronische Schaltkreise verdrahtet, sodass Sie wirklich parallele Schaltkreise haben können, nicht wie bei einem Mikrocontroller, bei dem der Prozessor von einem Codeteil zum nächsten springt, um eine hinreichend gute Parallelität zu simulieren. Da FPGAs jedoch für parallele Aufgaben entwickelt wurden, ist es nicht so einfach, sequentiellen Code zu schreiben wie in einem Mikrocontroller.
Wenn Sie beispielsweise im Pseudocode schreiben, dass "C A XOR B sein soll", wird auf einem FPGA, das in "Bauen eines XOR-Gatters mit den enthaltenen Legosteinen (Nachschlagetabellen und Latches)" übersetzt wird, A / B als Eingaben verbunden 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 einen "Lesebefehl" übersetzt wird - es ist ein XOR von Variablen an der Adresse A und der Adresse B des RAM, das Ergebnis an der Adresse C zu speichern. Lade arithmetische Logikeinheitenregister und fordere dann die ALU auf, ein XOR durchzuführen Kopieren Sie das Ausgangsregister an die Adresse C des RAM ". Auf der Benutzerseite waren beide Anweisungen eine Codezeile. Wenn wir dies tun würden, DANN etwas anderes, müssten wir in HDL definieren, was als Prozess bezeichnet wird, um Sequenzen künstlich auszuführen - getrennt vom parallelen Code. Während in einem Mikrocontroller nichts zu tun ist. Andererseits müsste man mit Threads jonglieren, um "Parallelität" (wirklich ein- und ausschalten) von einem Mikrocontroller zu bekommen, was nicht trivial ist. Unterschiedliche Arbeitsweisen, unterschiedliche Zwecke.
Zusammenfassend:
Was für eine schnelle Suche nach dem Schreiben gab mir:
FPGA vs Microcontroller, in diesem Forum
quelle
FPGAs können durch Neuprogrammierung "neu verkabelt" werden. Ein FPGA lädt seine Konfiguration unter Spannung in seine konfigurierbaren Logikzellen . Dies bedeutet, dass es ohne Änderungen an der Hardware neu programmiert werden kann.
ASICs können nur durch Modifizieren der photolitografischen Masken in der Siliziumgießerei neu verdrahtet werden.
Ein Mikrocontroller ist eine Art ASIC, der ein Programm ausführt und dadurch generische 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. Grundsätzlich besteht ein FPGA auf Hardwareebene aus vielen kleinen SRAM-Zellen, die alle mit einer dichten Matrix von Multiplexern verbunden sind. Grundsätzlich ist ein FPGA ein ganzer Haufen diskreter Logik, die elektronisch "neu verdrahtet" werden kann **, indem die Multiplexer und SRAM-Zellen neu programmiert werden.
Als solches können Sie eine MCU tatsächlich in einem FPGA implementieren , da eine MCU nur eine bestimmte Konfiguration von Logikzellen ist. Tatsächlich werden FPGAs sehr häufig im Entwurfsprozess von MCUs verwendet.
Ein Mikrocontroller ist eine Implementierung einer bestimmten Logikkonfiguration. Der Grund dafür liegt darin, dass durch die Implementierung einer MCU direkt im Silizium der Gesamtbedarf an Silizium-Chip-Platz erheblich optimiert werden kann und bestimmte Leistungsoptimierungen vorgenommen werden können, die die erforderliche "Generizität" eines FPGA verbietet. Auf diese Weise können die Produktionskosten einer MCU drastisch gesenkt werden. Infolgedessen ist die herkömmliche MCU viel billiger als ein FPGA, das die entsprechende Logik enthält.
FPGAs sind in bestimmten Anwendungen nützlich, da sie Logikstrukturen auf eine Weise implementieren können, die MCUs nicht können. Zum Beispiel, wenn Sie X1 + Y1, X2 + Y2, X3 + Y3 und X4 + Y4 hinzufügen müssen, wird die MCU hat jede Operation zu tun in Folge *. Ein FPGA kann einfach 4 separate ALUs gleichzeitig haben , sodass in einem Viertel der Zeit derselbe Vorgang ausgeführt werden kann (vorausgesetzt, die beiden Geräte werden mit der gleichen Taktrate getaktet).
Hier können FPGAs (oder ASICs, die für dieselbe Aufgabe entwickelt wurden) wirklich glänzen, da Sie viele, viele Dinge gleichzeitig ausführen können , die ein einzelner Prozess nur nacheinander ausführen kann.
* (Anmerkung: Ich ignoriere hier einige Dinge wie SIMD)
quelle
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 er viele verschiedene Arten von Hardware repräsentiert (dies kann Mikrocontroller umfassen).
Sie denken vielleicht, dass ein Mikrocontroller viele verschiedene Aufgaben ausführen kann, aber dies wird alles durch Ausführen verschiedener Programme erreicht - technisch gesehen Software, aber manchmal auch als Firmware bezeichnet - die Hardware selbst ändert sich nicht wesentlich, sie führt dieselben Vorgänge aus, aber in einer unterschiedliche Reihenfolge mit unterschiedlichen Eingaben.
FPGAs werden normalerweise verwendet, um die Designs zu generieren, die für ASICs festgeschrieben sind. Der Unterschied zwischen ihnen besteht darin, dass Sie zum Aktualisieren der Funktionsweise eines FPGAs oder zum Hinzufügen / Entfernen von Funktionsblöcken lediglich die Firmware aktualisieren müssen. Dies ist nicht möglich auf ASICs durchgeführt werden, da das Innenleben auf Silizium festgelegt wurde, ist es nicht rekonfigurierbar.
Kurz gesagt, mit einem Mikroprozessor verwenden Sie dieselbe Hardware, um verschiedene Programme auszuführen, und mit einem FPGA konfigurieren Sie die Hardware neu, um verschiedene Funktionen auszuführen. ASICs ähneln einem Mikrocontroller dahingehend, dass die Hardware nicht geändert werden kann, sondern in der Regel für die Ausführung ausgelegt ist eine einzige Funktion äußerst effizient.
Sowohl ASICs als auch FPGAs können Mikrocontroller enthalten. In diesem Fall können Sie Programme für diese wie für einen eigenständigen Mikrocontroller schreiben. Ein Beispiel hierfür ist der eingebettete NIOS II-Prozessor von Altera.
Wenn dies immer noch verwirrend ist, lassen Sie mich wissen, was unklar ist, und ich werde mein Bestes tun, um meine Antwort zu klären.
Zigeuner
quelle
Nun, ein FPGA wird nicht durch elektrische Signale programmiert, wenn er sich wie eine bestimmte Sammlung von Gattern verhält. Einige FPGAs enthalten einen Flash-Speicher zum Speichern dieser Konfiguration. Einige müssen nach jedem Neustart der Stromversorgung neu programmiert werden.
Ein ASIC wird von der bereits konfigurierten Produktionslinie ausgeliefert.
FPGA-Fehler können mit einem Firmware-Upgrade behoben werden, ASIC-Fehler können nicht wirtschaftlich repariert werden.
quelle
Das ist das Gegenteil von dem, was "anwendungsspezifisch" bedeutet. Sie können ein FPGA für mehr als eine Anwendung verwenden, indem Sie es neu verkabeln. Sie können einen ASIC nicht ändern, sodass er nur auf eine Task angewendet werden kann (diese Task implementiert möglicherweise einen Mikrocontroller).
Nicht sicher, was das bedeutet. Normalerweise gibt es eine Softwareschnittstelle zur Neuprogrammierung eines FPGA. Es ist ein ASIC, der Millionen von [Währungseinheiten] Hardware benötigt.
Mit einem Mikrocontroller können Sie sequentielle Software für eine feste Hardware programmieren. Genau wie ein normaler Computer, aber sehr klein und ressourcenbeschränkt. Mit einem FPGA können Sie jede gewünschte Hardware mit einem HDL programmieren.
quelle