Antworten:
Sie sind elektronische Komponenten, die Ihren Schaltkreisen Logik hinzufügen (ähnlich wie Mikrocontroller). Der Designansatz ist dann aber völlig anders als beim uC (Micro Controller). In einem uC können Sie das interne uC-Design nicht ändern. Sie können nur "klassische" Programme darauf ausführen. Das Programmieren von FPGAs ähnelt eher dem Erstellen neuer Hardware. Sie erstellen neue Verbindungen zwischen logischen Gattern und erstellen einen neuen, spezialisierten Prozessor. Und Sie können alles zu Hause, auf Ihrem Schreibtisch und Ihrem PC erledigen.
Hört sich cool an? Ja, aber es gibt einige Nachteile. Zum Beispiel Preis (aber ich denke, es ist schwer zu vergleichen), höherer Stromverbrauch und niedrigere Taktraten (aber Sie können Ihre Anwendung intelligent gestalten und mehr Operationen in einem Taktzyklus ausführen).
Nützliche Links:
Anwendungsbeispiel: http://nsa.unaligned.org/
Ein FPGA ist buchstäblich ein Array von Logikgattern, die vor Ort programmiert werden können. Flip-Flops, Multiplexer, 4-Bit-Look-Up-Tabellen usw., die mit einer C-ähnlichen Sprache (Verilog) beliebig verbunden werden können.
Ein uC wie ein AVR besteht ebenfalls aus ähnlichen Logikgattern, diese werden jedoch bei der Herstellung des Geräts konfiguriert. Sicher, es hat RAM und Flash, so dass Sie Software schreiben können, um Eingänge und Steuerausgänge zu lesen, aber Sie können die tatsächlichen Anordnungen der Tore nicht ändern. Die Gates werden immer in einer ALU, einem Speichercontroller, einer seriellen Schnittstelle usw. angeordnet.
Der Vorteil von uC ist, dass Sie es vor Ort (an Ihrem Schreibtisch) mit einer einfach zu verwendenden, vertrauten Hochsprache wie C programmieren können. Das Problem ist, dass Software "langsam" ist. Wenn Sie möchten, dass eine Eingabe eine Ausgabe steuert, können Sie im einfachsten Fall schreiben:
void loop () {buttonState = digitalRead (buttonPin); if (buttonState == HIGH) {
digitalWrite (ledPin, HIGH);
} else {digitalWrite (ledPin, LOW); }}
Das würde in ein Dutzend Montageanweisungen umgewandelt, sodass die Schleife etwa eine Mikrosekunde benötigt, um diesen einen Ausgang von einem Eingang aus zu steuern. Und es braucht den ganzen uC-Chip, um das so schnell zu erledigen. Natürlich können Sie noch viel mehr tun, aber dann verlangsamt sich Ihre Fähigkeit, diese Ausgabe zu steuern, wenn die Benutzeroberfläche andere Aufgaben ausführt.
In einem FPGA könnte ich die Gates so konfigurieren, dass ein Eingang einen Ausgang in 1 Takt steuert. Die Ausgabe würde also mit einer Verzögerung von vielleicht 25 Nanosekunden auf die Eingabe folgen. Das ist 40-mal schneller bei gleicher Taktperiode. Die übrigen Gates im FPGA können viele andere Aufgaben ausführen, die die Geschwindigkeit dieser kleinen Funktion nicht beeinträchtigen.
Der Code für das FPGA wäre ein einfaches Flip-Flop:
immer @ (posedge clock) ledPin <= buttonPin;
Dies würde nur 1 FPGA-Zelle, etwa 40 Gates, von Zehntausenden in einem FPGA benötigen.
Ich kann mein FPGA neu programmieren, um etwas anderes zu tun, zum Beispiel die LED auf der Basis einer Kombination von vier Eingängen steuern, die immer noch in einem Takt sind und immer noch diese 1 FPGA-Zelle verwenden. Oder steuern Sie die LED anhand eines seriellen Datenstroms vom Eingang in einigen FPGA-Zellen, bei denen es sich um Hunderte von Gattern handelt. So konnte ich die LED basierend auf seriellen Daten, beispielsweise "EIN" oder "AUS", mit dem seriellen Datenstrom mit einer sehr hohen Rate (leicht 20 MHz) steuern und immer noch nur einen winzigen Bruchteil der Kapazität des FPGAs nutzen.
Der Vorteil eines FPGA ist also eindeutig die Geschwindigkeit. Es kann alles, was ein uC kann, und es kann es viel schneller tun, wenn alles parallel ausgeführt wird. Komplexe Dinge, die ein uC in Millisekunden erledigen würde, ein FPGA in Mikrosekunden oder weniger. Solange im FPGA noch Gates vorhanden sind, kann ich weitere Funktionen hinzufügen, ohne die Geschwindigkeit oder den Betrieb der vorherigen Funktionen im FPGA zu beeinträchtigen. Übrigens kann ein FPGA sehr einfach eine Taktrate von 20 MHz ausführen.
Die Kosten sind kein Unterscheidungsmerkmal. Ich kann ein FPGA kaufen, das fast jedes Arduino-Design, das ich je gesehen habe, für ungefähr 5 US-Dollar umsetzen kann, ungefähr das gleiche wie ein Arduino-AVR-Chip. Es gibt auch kostenlose Toolchains (IDE, Compiler, Debugger) für FPGAs.
Macht ist kein Unterscheidungsmerkmal. Da ich den FPGA mit einer viel niedrigeren Taktrate betreiben kann, um die gleiche Funktion wie ein uC zu erhalten, und einen kleinen Teil seiner Gates verwenden kann (unbenutzte Gates verbrauchen nur Verlustleistung), kann ein FPGA die Leistung von fast jedem uC-basierten Prozessor übertreffen Design.
Der größte Nachteil eines FPGA ist, dass das Definieren, Schreiben und Debuggen eines nicht trivialen FPGA-Designs viel komplexer und zeitaufwendiger ist als bei einem uC-Programm. Ein typisches uC-Projekt, das Sie an einem Abend durchführen, kann auf einem FPGA Tage dauern.
Andere potenziell behebbare Probleme sind, dass die meisten Menschen in der Softwareprogrammierung geschult sind, aber nur wenige die Hardwareprogrammierung verstehen. Sie können Verilog ziemlich leicht lernen. Sie müssten aber auch in Bezug auf Hardware-Design statt Software-Design denken. Die Designmuster sind sehr unterschiedlich.
Ein weiteres Problem ist, dass FPGAs nicht in kleinen 8 bis 20-poligen DIP-Paketen geliefert werden. Sie werden in der Regel in Aufputzgehäusen mit 100-poligen oder größeren Steckern geliefert, sodass der Aufbau der Platinen schwieriger ist.
Und ein letztes Problem ist, dass eine ganze Reihe interessanter Projekte in diesen benutzerfreundlichen UCs problemlos umgesetzt werden können. Warum sollten Sie sich also mit einem FPGA befassen?
Wenn Sie mit grundlegenden Logikgattern vertraut sind, sollten Sie wissen, dass sie praktisch augenblicklich sind. Die Operation A und B ODER C ändert sich sofort, wenn sich A, B oder C ändern.
Ein FPGA ist eine Art Matrix aus programmierbaren Logikgattern. Sie können die Ein- und Ausgänge (als Kombination der Eingänge) definieren.
In einem uC würde A + B / C * sqrt (D) mehrere Taktzyklen und etwas Speicher benötigen. In einem FPGA ist das Ergebnis fast unmittelbar.
Sie eignen sich hervorragend für Video, DSP, Kryptografie ...
Das ist der Hauptvorteil. Moderne FPGAs sind jetzt mit Speicher ausgestattet und es gibt uC / FPGA-Hybride.
Sie werden zum Knacken von Verschlüsselungsschlüsseln viel schneller verwendet als ein Universalcomputer. : D
Um Geld und Risiko gegenüber einem ASIC zu sparen. Außer du
Die fixen (NRE) Kosten für einen ASIC machen ihn unerschwinglich.
Da Sie ein FPGA leicht ändern können, können Sie das Design weniger simulieren und kommen schneller ins Labor. Sie können auch einen Teilentwurf durchführen und darauf aufbauen, wie in der Software.