Was ist ein FPGA?

38

Ich habe schon viele Leute gesehen, die über FPGAs gesprochen haben, und ich weiß, dass es sich um ein feldprogrammierbares Gate-Array handelt, aber wie funktioniert es und wozu dient ein FPGA?

zklapow
quelle

Antworten:

30

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/

Maciek Sawicki
quelle
3
Ich stelle fest, dass viele FPGAs groß genug sind, um mehrere CPU-Kerne aufzunehmen, sodass der FPGA für sich genommen ein ganzer Computer sein kann.
Craig Trader
3
Ich denke, dass niedrigere Taktraten irreführend sein können. im vergleich zu einem pc ja. Im Vergleich zu einem Bild 16 können sie schneller sein, aber es hängt von den Kosten ab. Die meisten der günstigeren, die ich bisher bei 40 MHz getestet habe, sind jedoch von Produkt zu Produkt unterschiedlich.
Kortuk
23

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?

SiliconFarmer
quelle
2
"Ich kann ein FPGA kaufen, das fast jedes Arduino-Design, das ich je gesehen habe, für etwa 5 US-Dollar implementieren kann." Es tut mir leid, aber was? Woher?
medivh
9

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.

ppvi
quelle
Ich kenne viele praktizierende EEs mit langjähriger Erfahrung, die oft nur über ein FPGA in das Design einfließen, anstatt über ein uC, in dem Sie früher uC sahen. Ich denke wirklich, dass sie für das Interface-Handling großartig sind.
Kortuk
Ja, ich denke, das ist ein schönes Beispiel: armadeus.com/english/index.html . Besonders interessant für mich ist das Servosteuerungsbeispiel: www.in2p3.fr/~duval/wiki_html_dump/articles/m/o/t/…
Maciek Sawicki
2
Bemerkenswert ist auch, dass es immer mehr "C zu VHDL" - oder "C zu Verilog" -Konverter gibt. Sie sind noch nicht die effizientesten Dinge, aber Sie können bereits geschriebenen Code in Hardware umwandeln, die für eine Geschwindigkeitsverbesserung verwendet werden kann. Ziemlich cool, wenn du mich fragst (und wenn du den Teig dafür hast).
Chris Gammell
5

Sie werden zum Knacken von Verschlüsselungsschlüsseln viel schneller verwendet als ein Universalcomputer. : D

Endolith
quelle
1
Haha, ich habe deine sehr funktionale Beschreibung genossen. Sie sind absolut erstaunlich bei der Parallelverarbeitung.
Kortuk
Ein Codebreaker-Projekt: copacobana.org
hhh 18.06.10
2

Um Geld und Risiko gegenüber einem ASIC zu sparen. Außer du

  1. Interessieren Sie sich tief für die Macht oder
  2. Bauen ein paar von ihnen (sagen wir> 10k Einheiten)

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.

Brian Carlton
quelle