Was ist ein FPGA?

Ich habe schon viele Leute gesehen, die über FPGAs gesprochen haben, und ich weiß, dass es für Field Programmable Gate Array steht, aber wie funktioniert es und was ist der Zweck der Verwendung eines FPGAs?

Antworten (5)

Sie sind elektronische Komponenten, die Ihren Schaltungen Logik hinzufügen (sie ähneln also Mikrocontrollern). Aber der Designansatz ist dann ein ganz anderer als beim uC (Mikrocontroller). In einem uC können Sie das interne uC-Design nicht ändern; Sie können darauf nur "klassische" Programme ausführen. Das Programmieren von FPGAs ist eher wie das Erstellen neuer Hardware. Sie erstellen neue Verbindungen zwischen logischen Gattern und erstellen einen neuen, spezialisierten Prozessor. Und das alles bei Ihnen zu Hause, auf Ihrem Schreibtisch und Ihrem PC.

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 auf intelligente Weise entwerfen und mehr Operationen in einem Taktzyklus ausführen).

Nützliche Links:

Beispielverwendung: http://nsa.unaligned.org/

Ich werde anmerken, dass viele FPGAs groß genug sind, um mehrere CPU-Kerne zu enthalten, wodurch das FPGA ein ganzer Computer für sich sein kann.
Als Anmerkung denke ich, dass niedrigere Taktraten irreführend sein können. im Vergleich zu einem PC, ja. Im Vergleich zu einem pic16 können sie schneller sein, aber das hängt von den Kosten ab. Die meisten billigeren, die ich in die Hände bekommen habe, laufen mit 40 MHz, aber auch hier gibt es Variationen von Produkt zu Produkt.

Ein FPGA ist buchstäblich ein Array von Logikgattern, die vor Ort programmiert werden können. Flip-Flops, Multiplexer, 4-Bit-Nachschlagetabellen usw., die mit einer C-ähnlichen Sprache (Verilog) beliebig verbunden werden können.

Ein uC, wie ein AVR, besteht ebenfalls aus ähnlichen Logikgattern, aber sie werden konfiguriert, wenn das Gerät hergestellt wird. Sicher, es hat RAM und Flash, so dass Sie Software schreiben können, um Eingänge zu lesen und Ausgänge zu steuern, aber Sie können die tatsächlichen Anordnungen der Gates nicht ändern. Die Gates werden immer in einer ALU, einem Speichercontroller, einer seriellen Schnittstelle usw. angeordnet.

Der Vorteil des uC besteht darin, 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. Damit eine Eingabe eine Ausgabe steuert, könnte man im einfachsten Fall schreiben:

void loop () {buttonState = digitalRead (buttonPin); Wenn (ButtonState == HIGH) {
digitalWrite (ledPin, HIGH);
} Sonst {digitalWrite (ledPin, LOW); } }

Das würde in ein Dutzend Montageanweisungen umgewandelt werden, sodass die Schleife ungefähr eine Mikrosekunde benötigen würde, um diesen einen Ausgang von einem Eingang zu steuern. Und es braucht den ganzen uC-Chip, um das so schnell zu machen. Sicher, Sie können viel, viel mehr tun, aber dann wird Ihre Fähigkeit, diese Ausgabe zu steuern, langsamer, wenn der uC damit beschäftigt ist, andere Dinge zu tun.

In einem FPGA könnte ich die Gates so konfigurieren, dass ein Eingang einen Ausgang in 1 Takt steuert. Die Ausgabe würde also der Eingabe mit einer Verzögerung von vielleicht 25 Nanosekunden folgen. Das ist 40-mal schneller und verwendet die gleiche Taktperiode. Und die restlichen Gatter im FPGA stehen für viele andere Dinge zur Verfügung, die die Geschwindigkeit dieser kleinen Funktion nicht beeinträchtigen.

Der Code für das FPGA wäre ein einfaches Flip-Flop:

immer @ (gestellte Uhr) ledPin <= buttonPin;

Dies würde nur 1 FPGA-Zelle, etwa 40 Gatter, von Zehntausenden in einem FPGA benötigen.

Ich kann mein FPGA neu programmieren, um etwas anderes zu tun, zum Beispiel die LED basierend auf einer Kombination von vier Eingängen zu steuern, immer noch in einem Takt, immer noch mit dieser 1 FPGA-Zelle. Oder steuern Sie die LED basierend auf einem seriellen Strom vom Eingang in einigen FPGA-Zellen, was Hunderte von Gattern wären. So könnte ich die LED basierend auf seriellen Daten steuern, sagen wir "EIN" oder "AUS", mit dem seriellen Strom mit einer sehr hohen Rate (leicht 20 MHz) und trotzdem nur einen winzigen Bruchteil der FPGA-Kapazität nutzen.

Der Vorteil eines FPGA ist also eindeutig die Geschwindigkeit. Es kann alles tun, was ein uC tun kann, und es kann es viel schneller tun, da alles parallel ausgeführt wird. Komplexe Dinge, die ein uC in Millisekunden erledigen würde, könnte ein FPGA in Mikrosekunden oder weniger erledigen. Solange Gatter im FPGA übrig sind, kann ich weitere Funktionen hinzufügen, ohne die Geschwindigkeit oder den Betrieb vorheriger Funktionen im FPGA zu beeinträchtigen. Ein FPGA kann übrigens sehr gut mit 20MHz Taktrate laufen.

Kosten sind kein Unterscheidungsmerkmal. Ich kann ein FPGA kaufen, das fast jedes Arduino-Design implementieren kann, das ich je gesehen habe, und zwar für etwa 5 US-Dollar, ungefähr so ​​viel wie ein Arduino AVR-Chip. Es gibt auch kostenlose Toolchains (IDE, Compiler, Debugger) für FPGAs.

Macht ist kein Unterscheidungsmerkmal. Da ich das 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 (nicht verwendete Gates verbrauchen nur Leckleistung), kann ein FPGA die Leistung von fast jedem uC-basierten schlagen Design.

Der größte Nachteil eines FPGA ist, dass es viel komplexer und zeitaufwändiger ist, ein nicht-triviales FPGA-Design zu definieren, zu schreiben und zu debuggen als ein uC-Programm. Ein typisches uC-Projekt, das Sie an einem Abend durchführen, könnte auf einem FPGA Tage dauern.

Andere, möglicherweise behebbare Probleme bestehen darin, dass die meisten Menschen in der Softwareprogrammierung geschult sind, aber nur wenige die Hardwareprogrammierung verstehen. Sie können Verilog ziemlich einfach lernen. Aber Sie müssten auch in Hardware- statt in Softwaredesign denken. Die Designmuster sind sehr unterschiedlich.

Ein weiteres Problem ist, dass FPGAs nicht in kleinen DIP-Gehäusen mit 8 bis 20 Pins erhältlich sind. Sie werden in der Regel in oberflächenmontierten Gehäusen mit 100 Pins oder größer geliefert, sodass der Bau der Platinen schwieriger ist.

Und ein letztes Problem ist, dass eine ganze Menge interessanter Projekte in diesen einfach zu bedienenden uCs problemlos implementiert werden können, also warum sich mit einem FPGA herumschlagen?

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

Wenn Sie mit einfachen Logikgattern vertraut sind, sollten Sie wissen, dass sie praktisch verzögerungsfrei sind. Die Operation A und B ODER C ändert sich sofort, wenn sich A, B oder C ändern.

Ein FPGA ist (sozusagen) eine Matrix aus programmierbaren Logikgattern. Sie können die Eingänge 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 sind großartig für Video, DSP, Kryptografie...

Das ist der Hauptvorteil. Moderne FPGAs sind jetzt mit Speicher geeignet und es gibt uC/FPGA-Hybride.

Ich kenne viele praktizierende EEs mit langjähriger Erfahrung, die oft nur ein FPGA in das Design integrieren, anstatt ein uC, wo Sie früher uC gesehen haben. Ich denke wirklich, dass sie großartig für die Handhabung von Schnittstellen sind.
Ja, ich denke, das ist ein nettes Beispiel: armadeus.com/english/index.html . Besonders interessant für mich ist ein Servosteuerungsbeispiel: marwww.in2p3.fr/~duval/wiki_html_dump/articles/m/o/t/…
Bemerkenswert ist auch, dass es immer mehr "C to VHDL"- oder "C to 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 Sie mich fragen (und wenn Sie den Teig dafür haben).

Sie werden verwendet, um Verschlüsselungsschlüssel viel schneller zu knacken, als es ein Allzweckcomputer könnte. :D

Haha, ich genoss Ihre sehr funktionale Beschreibung. Sie sind absolut erstaunlich bei der parallelen Verarbeitung.
Ein Codebrecher-Projekt: copacobana.org

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

  1. Sorgen Sie sich zutiefst um Macht oder
  2. Bauen eine Reihe von ihnen (sagen wir > 10.000 Einheiten)

Die Fixkosten (NRE) für die Herstellung eines ASIC machen es unerschwinglich.

Da Sie ein FPGA einfach ändern können, müssen Sie das Design weniger simulieren und kommen schneller ins Labor. Sie können auch einen partiellen Entwurf erstellen und darauf aufbauen, wie bei einer Software.