FPGAs 101: Eine Einführung für Anfänger

Für die Binärdenker unter Ihnen, nein, Sie haben die Teile 1 bis 4 nicht verpasst. Dies ist eine kurze Einführung in mein bevorzugtes Elektronikbauteil:  das feldprogrammierbare Gate-Array (FPGA). Wenn ich über FPGAs spreche, höre ich von den Zuhören Kommentare wie „ich weiß nicht, wie die funktionieren“, „sind mir zu kompliziert“ oder „ich kann sie nicht in C programmieren“. Da diese Bauteile eine sehr große Hilfe für jeden Entwickler sein könnten, werde ich im Folgenden versuchen, einige dieser verbreiteten Bedenken auszuräumen.

Was ist ein feldprogrammierbares Gate-Array (FPGA)?

Die lange Antwort:  Aus dem Namen könnte geschlossen werden, dass es sich um eine programmierbare Struktur aus Logikgattern handelt. Dies kommt der Wahrheit nahe, ist aber nicht exakt, da das interne Logikarray überhaupt nicht mithilfe von Gattern implementiert ist. Stattdessen bezeichnen wir die Blöcke im Array als logische Elemente. Diese bestehen normalerweise aus einer Lookup-Tabelle (LUT), mit der beliebige Logikfunktionen sowie Hilfsschaltungen wie Multiplexer, Addierer und Flip-Flops implementiert werden können. Sie werden oft hören, dass dieses Array von Logikelementen als die „FPGA-Struktur“ (FPGA fabric) bezeichnet wird.

Abbildung 1: Beispiel für ein FPGA-Logikelement. (Bildquelle: Wikimedia Commons)

Um es zu vereinfachen, stelle ich mir ein FPGA gerne als eine Schachtel mit bunten, nicht markenrechtlich geschützten Bausteinen zum Erstellen digitaler Schaltungen vor. Ich kann die Blöcke in beliebiger Weise so zusammenschalten, wie ich es für meinen Zweck benötige. Wenn Sie beschreiben können, wie sich eine digitale Schaltung verhält, können Sie diese innerhalb eines FPGA mit einer entsprechenden Anzahl von Logikelementen realisieren. Sie brauchen 25 PWM-Ausgänge?  Kein Problem. Sie brauchen ein bestimmtes Kommunikationsprotokoll?  Schreiben Sie die Hardware, die damit umgehen kann.

Wozu brauche ich ein FPGA?

Mit einem FPGA wird ein digitales System implementiert, aber oft kann mit einem einfachen Mikrocontroller dieselbe Wirkung erzielt werden. Mikrocontroller sind kostengünstig und können einfach auf eine Platine aufgebracht werden. FPGAs sind mächtige Werkzeuge, sind aber möglicherweise nicht für jeden Zweck geeignet. Sie haben mehr Leistungs-, Layout- und externe Schaltungsanforderungen, die nicht unbedingt erfüllt werden können. Die Verwendung eines FPGAs, das wesentlich teurer ist und viele spezielle Anforderungen stellt, mag wie eine absurde Vorstellung erscheinen.

Sie haben vielleicht schon den wichtigsten Grund erraten, warum Sie möglicherweise einen FPGA benötigen: Flexibilität. Wenn die Logikblöcke konfigurierbar sind, sind Sie nie auf vorhandene Hardware angewiesen. Ihnen gehen nie Timer oder UARTs aus, solange Logikelemente zum Erstellen solcher Funktionen verfügbar sind. Die Möglichkeit einer kompletten Neukonfigurierung kann ebenfalls den Lebenszyklus eines Produkts verlängern, wenn sich die Technologie und die Anforderungen ändern.

Der zweite Grund ist die Geschwindigkeit. Ein Mikrocontroller führt Anweisungen einzeln nacheinander aus. Eine FPGA-Struktur ist aufgrund ihrer Hardwarebeschaffenheit von Natur aus für die Parallelverarbeitung ausgelegt. So können Dinge gleichzeitig geschehen. Dies ist für Operationen wie FFT- oder Grafikverarbeitung, die auf einem sequenziellen Prozessor sehr kostspielig sein können, ausgesprochen nützlich. FPGAs verfügen über mehr Hochgeschwindigkeits-I/O-Optionen als typische Mikrocontroller wie LVDS und Transceiver, die Protokolle wie HDMI mit mehr als 10 Gbit/s verarbeiten können.

Wie wird ein FPGA programmiert?

Für FPGAs wird ein bestimmter Typ von Programmiersprache mit der Bezeichnung HDL (Hardware Description Language, Hardwarebeschreibungssprache) verwendet Es gibt zwei Hauptvarianten: Verilog und VHDL. Fast jede Entwicklungssuite, z. B. Quartus oder Vivado, unterstützt beide, d. h., Sie können die von Ihnen bevorzugte Sprache wählen. Diese Sprachen werden dann „synthetisiert“, ein Vorgang, der dem Kompilieren bei Mikrocontrollern entspricht. Die Synthese-Tools sagen dem FPGA, wie er seine Logikelemente miteinander verbinden muss, um die von Ihrem Code beschriebene Wirkung zu erzielen. Bei Ihren ersten Schritten ist es wichtig, sich daran zu erinnern, dass Ihr Code in Hardware und nicht in CPU-Anweisungen übersetzt wird.

Zur Erleichterung der Entwicklung stellen die Hersteller von FPGAs einen Katalog von häufig verwendeten Codeblöcken bereit, die einfach in ein Design eingebracht werden können. Dazu gehören Dinge wie Multiplizierer, RAM, Kommunikationsblöcke usw. Sie können konfiguriert und in Ihr Design eingebracht werden, ohne dass Sie den beteiligten HDL-Code auch nur gesehen zu haben. Dies verkürzt die Entwicklungszeit.

Abbildung 2: Partielles Blockdiagramm mit IP-Blöcken aus dem Xilinx-Katalog und HLS. (Bildquelle: eewiki.net)

Einige Hersteller verfügen darüber hinaus über HLS-Tools (High Level Synthesis), die eine in C oder C++ geschriebene Funktion in einen Block HDL-Code übersetzen können. Dank dieser Tools wird der Einstieg von Entwicklern mit Softwarehintergrund erheblich erleichtert, da einige der Low-Level-Details abstrahiert und damit unsichtbar werden.

Noch immer nicht überzeugt?  Eine meiner Lieblingsfunktionen eines FPGA ist seine Fähigkeit, einen Software-Prozessor zu verwenden. Es handelt sich hier um einen kompletten Prozessor, der aus Logikelementen des FPGA aufgebaut ist. Damit können Sie spezifische unterstützende Hardware für diesen Prozessor generieren und Ihre Anwendung in C schreiben. Ein einfaches Software-Prozessorsystem kann in wenigen Minuten eingerichtet und programmiert werden. Wenn Sie trotzdem einen herkömmlichen Prozessor benötigen, sehen Sie sich SoCs an, bei denen ein FPGA und ein Hardware-ARM-Prozessor in einem einzigen Gehäuse integriert sind.

Zusammengefasst sind FPGAs zwar teurer und schwieriger in der Handhabung als typische Mikrocontroller, aber sie verfügen bei Bedarf über viel größere Leistungsreserven und sind erheblich flexibler. Wenn die Technologie fortschreitet und FPGAs aufgrund höherer Integration kostengünstiger werden, können sie sogar die herkömmlichen Mikrocontroller ersetzen. Wenn diese Informationen Ihr Interesse geweckt haben, sollten Sie jetzt mit FPGAs beginnen, damit Sie der Konkurrenz immer einen Schritt voraus sind. Wenn Sie eine kostengünstige Entwicklungsplatine für den Anfang suchen, sehen Sie sich die folgenden Platinen von vier unserer FPGA-Hersteller an: die DE10-Lite von Terasic, die Arty von Digilent, das „Mobile Dev Board“ von Lattice oder das Maker Kit von Microsemi.

Über den Autor

Image of Taylor Roorda Taylor Roorda, Associate Applications Engineer bei Digi-Key Electronics, ist seit 2015 im Unternehmen tätig und befasst sich hauptsächlich mit eingebetteten Systemen, programmierbarer Logik und Signalverarbeitung. Er hat einen Bachelor-Abschluss in Elektrotechnik von der North Dakota State University und verbringt seine Freizeit mit Gitarre spielen und dem Komponieren von Musik.
More posts by Taylor Roorda