Programmierbare Logikblöcke und Server-Akzeleratoren FPGA-Grundlagen: Funktionsweise und Einsatzmöglichkeiten
Anbieter zum Thema
„Field Programmable Gate Arrays“ eignen sich sehr gut für das Abarbeiten komplexer, repetetiver Aufgaben. Lesen Sie hier, wie die Chips aufgebaut sind und worauf beim Design zu achten ist.

Produkte wie 5G-Basisstationen verwenden oft Normen und Protokolle, die nicht final festgezurrt sind. Entwickler müssen daher schnell und effizient auf Änderungen in Spezifikationen reagieren können, die sich ihrer Kontrolle entziehen. Eine effektive Lösung für diese – und viele andere Applikationen – sind „Field Programmable Gate Arrays“, kurz FPGAs.
Das Herzstück eines FPGA ist ein Array programmierbarer Logikblöcke (siehe: Abbildung 1a). Jeder dieser Logikblöcke enthält verschiedene Elemente, darunter eine Look-up-Tabelle (LUT), einen Multiplexer und ein Register, die sich für je nach Anforderungen gezielt konfigurieren (programmieren) lassen (siehe: Abbildung 2).
Die meisten FPGAs haben LUTs mit 4 Eingängen, über die sich jeweils eine beliebige Logikfunktion bestimmen lässt Manche FPGAs besitzen LUTs mit 6, 7 oder sogar 8 Eingängen. Damit lassen sich breite Datenpfade besser unterstützen. Der Ausgang der LUT wird direkt mit einem Logikblock-Ausgang und mit einem der Multiplexer-Eingänge verbunden. Ein weiterer Multiplexer-Eingang ist direkt mit einem Logikblock-Eingang (e) verbunden. Über den Multiplexer lässt sich bei Bedarf einer dieser Eingänge auswählen.
Flip-Flop mit Flankensteuerung
Der Ausgang des Multiplexers ist mit dem Register-Eingang verbunden. Jedes Register kann so konfiguriert werden, dass es als Flip-Flop mit Flankensteuerung oder als vom Pegel abhängige Haltevorrichtung funktioniert. Letzteres ist in der Regel nicht empfehlenswert. Je nach Konfiguration ist das Register aktiv bei Aktiv-HIGH oder Aktiv-LOW. Genauso lässt sich der aktive Pegel der Set/Reset-Eingänge festlegen.
Diese Logikblöcke sind „Inseln programmierbarer Logik“, die in einem „Meer programmierbarer Verbindungen“ treiben. Diese Verbindungen können einen beliebigen Ausgang eines beliebigen Logikblocks mit beliebigen Eingängen anderer Logikblöcke verbinden. In gleicher Weise können die primären Eingänge des FPGA mit den Eingängen eines beliebigen Logikblocks verbunden und die Ausgänge beliebiger Logikblöcke zum Treiben der primären Ausgänge der Komponente genutzt werden.
Die Universal-Ein-/Ausgänge (GPIOs) werden auf Bänken (in Gruppen) umgesetzt. Die einzelnen Bänke lassen sich so konfigurieren, dass sie jeweils unterschiedliche Schnittstellenstandards unterstützen, etwa LVCMOS, LVDS, LVTTL, HSTL oder SSTL. Ebenfalls variabel konfigurierbar ist die Impedanz der Eingänge und die Anstiegsrate der Ausgänge. Auf der nächsthöheren Ebene enthält die FPGA-Struktur beispielsweise SRAM-Blöcke (so genanntes Block-RAM, kurz BRAM), Phasenregelkreise (Phase Locked Loops, PLLs) und Taktmanager (Bild 1b). Ein weiteres Element können Blöcke für die digitale Datenverarbeitung (Digital Signal Processing, DSP) sein. Diese DSP-Slices beinhalten konfigurierbare Multiplikatoren und einen programmierbaren Addierer, der das Durchführen von MAC-Vorgängen (multiply-accumulate, multiplizieren-sammeln) ermöglicht (siehe: Abbildung 1c).
Unterschiedliche Einsatzbereiche
Eine weitere typische FPGA-Funktion sind Hochgeschwindigkeits-SERDES-Blöcke. Diese können serielle Gigabit-Schnittstellen unterstützen.
Nicht alle FPGAs haben sämtliche beschriebene Funktionen implementiert. Vielmehr hängt die Ausstattung vom vorgesehenen Einsatzmarkt der Bausteine ab. Die programmierbare Struktur in einem FPGA eignet sich dafür, beliebige logische Funktionen abzubilden – bis hin zu einem oder mehreren Prozessorkernen. Derart implementierte bezeichnet man als „weiche Kerne“.
Andere häufig als „SoC FPGAs“ bezeichnete FPGAs beinhalten hingegen einen oder mehrere „harte Kernprozessoren“, die direkt fest im Chip integriert sind (siehe: Abbildung 1d). Diese harten Kerne können Gleitkommaeinheiten (FPUs) und einen L1/L2-Cache enthalten.
Die Funktionen von typischen Peripherieschnittstellen wie CAN, I2C, SPI, UART und USB können als Softkerne in der programmierbaren Struktur implementiert werden. In vielen FPGAs sind sie jedoch als Hartkern auf dem Chip enthalten. Die Kommunikation zwischen Prozessorkernen, Schnittstellenfunktionen und programmierbarer Struktur erfolgt typischerweise über Hochgeschwindigkeitbusse wie AMBA und AXI.
Drei Techniken zum Konfigurieren von FPGAs
Die ersten, 1985 von Xilinx vorgestellte FPGAs enthielten nur ein Array aus 8 x 8 programmierbaren Logikblöcken. Heutige FPGAs können dagegen mit Hundertausenden an Logikblöcken, Tausenden DSP-Blöcken und vielen Megabit RAM aufwarten. Sie können Milliarden Transistoren enthalten, was zwischen 10 und 100 Millionen gleichwertigen Gates entspricht, etwa NAND-Gates mit 2 Eingängen.
Die Werte in den Konfigurationszellen legen Logikblock-Funktionen und Verbindungsführung. Diese Zellen werden auch zum Bestimmen des Schnittstellenstandards, der Eingangsimpedanz, Ausgangssteilheit und mehr der GPIOs verwendet. Drei Konfigurationstechniken herrschen vor:
- Antifuse: Die Konfigurationszellen sind nur einmalig programmierbar (OTP), d. h. die Programmierung kann nicht rückgängig gemacht werden. Diese Komponenten kommen meist dort zum Einsatz, wo sie auch unter harschen Umgebungsbedingungen einwandfrei funktionieren müssen, etwa in der RAumfahrt. Da sie in nur kleinen Mengen verkauft werden, ist ihr Preis ziemlich hoch, d. h. sie sind eine kostspielige Designoption.
- Flash: Wie die Antifuse-basierten Konfigurationszellen sind auch die Flash-basierten Zellen nicht flüchtig. Sie können jedoch im Gegensatz zu Antifuse-Zellen neu programmiert werden. Die Zellen der Flash-Konfiguration sind strahlungsresistent und können daher bei Anwendungen in der Raumfahrt zum Einsatz kommen (was jedoch Änderungen an den oberen Metallschichten und dem Gehäuse erfordert).
- SRAM: In diesem Fall werden die Konfigurationsdaten in einem externen Speicher aufbewahrt, aus dem sie immer dann geladen werden, wenn das FPGA aktiviert wird.
Der Vorteil der FPGAs mit Antifuse- oder Flash-basierten Speicherzellen ist, dass sie sofort aktiv sind und wenig Strom verbrauchen. Ein Nachteil besteht jedoch darin, dass sie neben dem CMOS-Prozess zusätzliche Verarbeitungsschritte erfordern, um den Rest des Chips herzustellen. SRAM-Zellen lassen sich hingegen mit demselben CMOS-Prozess wie der Rest des Chips herstellen. Zudem sind die Übertragungsraten möglicherweise schneller, da sie der Antifuse- und Flash-Technologie eine oder zwei Generationen voraus sind.
Hauptnachteil ist der (bei vergleichbaren Technologieknoten) höhere Stromverbrauch der SRAM-Konfigurationszellen und ihre Anfälligkeit für durch Strahlung verursachte Single-Event-Upsets (SEUs). Daher galten SRAM-basierte FPGAs für den Einsatz in der Luft- und Raumfahrt lange als ungeeignet. Mittlerweile arbeiten strahlungsresistente derartige Bausteine sogar im „Mars Curiosity Rover“.
Mehr Flexibilität durch den Einsatz von FPGAs
FPGAs eignen sich für das Implementieren intelligenter Schnittstellenfunktionen, Motorsteuerungen, algorithmusbasierte Beschleunigung und Hochleistungsrechner (HPC), die Bild- und Video-Verarbeitung, maschinelle Bilderfassung, künstliche Intelligenz (AI), maschinelles Lernen (ML), Deep Learning (DL), Radar, Strahlformung, Basisstationen und Kommunikation. Ein Beispiel ist das Bereitstellen einer intelligenten Schnittstelle zwischen Komponenten, die verschiedene Kommunikationsprotokolle verwenden.
Dazu ein Beispiel: Betrachten wir ein bestehendes System, das einen Anwendungsprozessor enthält, der mit einem Kamerasensor und einem Anzeigegerät mit alten Schnittstellen verbunden ist (siehe: Abbildung 3a).
Nehmen wir jetzt an, dass die Entwickler des Systems den Kamerasensor und die Anzeigevorrichtung moderner gestalten möchten, sodass sie weniger Strom verbrauchen. Eine oder beide dieser neuen Peripheriekomponenten verwenden möglicherweise einen modernen Schnittstellenstandard, der vom Anwendungsprozessor (AP) nicht unterstützt wird.
Oder sie arbeiten mit einem anderen Kommunikationsprotokoll wie dem Mobile Industry Processor Interface (MIPI). In diesem Fall ist ein FPGA, das mehrere I/O-Standards unterstützt, in Verbindung mit einigen MIPI-IP-Softkernen, eine schnelle und kostengünstige Möglichkeit zum Aktualisieren des Systems (siehe: Abbildung 3b).
Ein weiteres Beispiel ist eine rechenintensive Aufgabe, beispielsweise die Signalverarbeitung innerhalb eines Radarsystems oder die Strahlformung in den Antennen in einer Basisstation für den Mobilfunk. Herkömmliche Prozessoren mit einer von-Neumann- oder Harvard-Architektur eignen sich zwar sehr gut für das Abarbeiten wechselnder Aufgaben, aber weniger gut für Prozesse, bei denen dieselbe Vorgangssequenz immer und immer wieder durchgeführt wird. Dies liegt daran, dass ein einzelner Prozessorkern mit einem einzelnen Thread nur jeweils eine Anweisung ausführen kann (siehe: Abbildung 4a).
Ein FPGA hingegen ist in der Lage, mehrere Funktionen gleichzeitig auszuführen. Sein Durchsatz ist daher in der Regel deutlich höher. Anstatt denselben Vorgang mit dem Prozessor beispielsweise zusätzlich 1.000 Mal mit 1.000 Datenpaaren durchzuführen, können diese parallel in einem einzigen Timerzyklus im FPGA ausgeführt werden, indem 1.000 Addierer in der programmierbaren Struktur instanziiert werden.
Wie lassen sich FPGAs in die Entwicklung einbinden?
Beim Elektronikdesign mit FPGAs nutzen Entwickler normalerweise eine Hardware-Beschreibungssprache wie Verilog oder VHDL. Die Beschreibungen können zunächst simuliert werden. Anschließend werden sie an ein Synthese-Tool übergeben, das die Konfigurationsdatei für die Initialisierung des FPGAs generiert.
Jeder FPGA-Hersteller bietet entweder eine selbst entwickelte Tool-Kette oder eine angepasste Version eines Tools von einem spezialisierten Anbieter. Auch sind kostenlose oder günstige Versionen kompletter Tool-Suites erhältlich.
Damit FPGAs häufiger von Software-Entwicklern eingesetzt werden, bieten einige FPGA-Lieferanten inzwischen HLS-Tools (High-Level Synthesis) an. Diese Tools übernehmen die Interpretation der algorithmischen Beschreibung des gewünschten Verhaltens, das sehr abstrakt in C, C++ oder OpenCL erfasst wird. Daraus generierte Eingaben fließen dann in das LLS-System (Lower-Level Synthesis).
Hinweis: Den Artikel haben wir aus dem Partnerportal „Elektronik Praxis“ übernommen.
* Rich Miron ist Applications Engineer und Sr. Technical Content Developer bei Digi-Key Electronics in Wadena, Minnesota.
(ID:46377630)