Template

Was sind FPGA's

Das Akronym FPGA steht im Englischen für Field Programmable Gate Array. Es handelt sich hierbei um einen integrierten Schaltkreis, dessen Funktion im Gegensatz zu einem ASIC (Application Specific Integrated Circuit) nicht bereits bei der Fertigung des Chips festgelegt ist.

Während bei letzteren die verschiedenen Einheiten (kombinatorische Logik, Speicherelemente) und deren Verbindungen (Routing) untereinander in der für die spezifische Anwendung erforderlichen Anzahl und Anordnung zur Designzeit fix definiert (und optimiert) werden, besteht ein FPGA aus einer (mehr oder weniger) homogenen Anordnung von Elementen. Einen großen Anteil an der verfügbaren Fläche nehmen die Verbindungselemente ein, um die Logik- und Speicherelemente möglichst flexibel miteinander verbinden zu können. Welche Elemente später miteinander verbunden werden kann im Feld (im Normalfall beim Start der Anwendung) festgelegt werden. Hierzu wird die sogenannte Konfiguration in den Konfigurationsspeicher des FPGA geladen. Der Inhalt dieser Speicherzellen bestimmt direkt, welche Transistoren innerhalb der Routingfabrik durchgeschaltet sind und aktiviert somit bestimmte Routen zwischen den Elementen.

Im Vergleich zu einem ASIC ist man durch die Verwendung von FPGAs sehr flexibel, da die Anwendung komplett geändert werden kann, ohne dass ein neues ASIC teuer und langwierig produziert werden muss. Diesem Vorteil stehen aber auch Nachteile gegenüber. Da sowohl das Routing als auch die Platzierung der (verwendeten) Elemente beim FPGA nur in begrenzten Maße optimiert werden kann (schließlich ist die physikalische Verteilung auf dem Chip fix) ist dieser einem speziell entwickelten ASIC in den Bereichen Platzbedarf, Taktgeschwindigkeit und Energiebedarf unterlegen. In einigen Anwendungsbereichen (Satelliten, Detektorauslese von Teilchenbeschleunigern) ist die Rekonfigurierbarkeit auch teilweise von Nachteil, da es durch die dort vermehrt vorhandenen geladenen Teilchen zur sporadischen Veränderung der Konfiguration kommen kann, wenn die funktionsbestimmenden SRAM-Zellen getroffen werden (SEU - Singe Event Upsets). Da die den FPGA's innewohnende Flexibilität aber auch hier benötigt wird existieren Techniken, um diesem Problem zu begegnen.

Es gibt dennoch viele Bereiche, wo diese Nachteile zu vernachlässigen sind oder der Gewinn an Flexibilität diese überwiegen. Während FPGAs früher vor allem zum Rapid Prototyping bei der Entwicklung von ASICs (zur Verifikation der Funktionalität) und als Glue Logic zur Verbindung inkompatibler IC's verwendet wurde, werden heute zunehmend komplette digitale Systeme auf der Basis von FPGAs implementiert. Vor allem in Bereichen deren Algorithmen einer stetigen und schnellen Weiterentwicklung unterliegen (Audio/Video Encoder/Decoder, Verschlüsselungssysteme) kann durch die Verwendung von FPGAs schnell auf Veränderungen reagiert werden, ohne neue Chips fertigen zu müssen und ganze Geräte austauschen zu müssen. Ein Beispiel hierfür sind die Basisstationen für Funkzellen von LTE Netzen, wo häufig eine Kombination aus DSP'S, Microcontrollern und FPGA's eingesetzt wird, um sowohl den erforderlichen Datendurchsatz in der signalverarbeitung zu gewährleisten als auch flexibel auf Erweiterungen der LTE-Protokolle reagieren zu können und somit das Invest in die Hardware zu schützen.

Hardware vs. Software

In einem Mikroprozessor werden Daten und Befehle im Normalfall nacheinander abgearbeitet. Eine Hardware-Lösung kann beispielsweise die entsprechenden Funktionen mehrfach implementieren und verschiedene Daten vollkommen unabhängig voneinander und parallel verarbeiten. Wenn die Datenflüsse und Algorithmen entsprechend optimiert werden lässt sich so eine im Vergleich zur rein sequentiellen Bearbeitung enorme Erhöhung des Datendurchsatzes erreichen. 

Ein gutes Beispiel zur Veranschaulichung ist die Anwendung von Filtern auf ein Videobild. Während ein Prozessor zur Berechnung eines Ergebnispixels einer Kantenerkennung viele Clockzyklen benötigt, um die Originalpixel verschiedener Zeilen aus dem Speicher zu lesen und einzeln miteinander zu verrechnen kann dieser Filter in einem FPGA so implementiert werden, dass mit jedem Takt ein Ergebnispixel ausgegeben wird. Dieser Filter kann weiterhin noch "beliebig" (abhängig von den verfügbaren Resourcen des gewählten FPGA's) vervielfältigt werden, um bei jedem Takt mehrere Pixel parallel auszugeben. Damit lässt sich eine Echtzeitbearbeitung von Videoströmen erreichen, die mit normalen Prozessoren nur schwer oder überhaupt nicht zu realisieren wäre.

Im Gegensatz dazu lassen sich mit Prozessoren und sequentiellen Programmen beliebig komplexe und verschachtelte Algorithmen berechnen. Eine entsprechende Hardwarelösung ist mitunter nur sehr schwer zu entwickeln und die Komplexität durch die vorhandenen Logikresourcen begrenzt. Aus diesem Grund werden beide Technologien häufig kombiniert, wobei die FPGA's als Beschleuniger für bestimmte Funktionen (Videokodierung, Verschlüsselung, Fehlerkorrektur) verwendet werden. Eine Realisierungsmöglichkeit dieser Struktur besteht auch darin, eine CPU als sog. Softcore im FPGA zu implementieren.

 

DPR - Dynamische Partielle Rekonfiguration

Während normale FPGA's ihre Konfiguration (und damit Funktion) zur Laufzeit nicht ändern, gibt es seit einigen Jahren DPR-fähige Chips, die das ermöglichen. Die Konfiguration kann zur Laufzeit (dynamisch - während die Anwendung aktiv ist) vollständig oder in Teilen (partiell)  neu geschrieben werden. Wichtig hierbei ist, dass die Teile, deren Konfiguration nicht oder mit den selben Werten wie davor beschrieben werden, ohne Störung (Glitch Free) weiter arbeiten.

Damit lässt sich eine in HW realisierte Anwendung an aktuelle Gegebenheiten anpassen (z.B. je nach aktuellen Lichtverhältnissen andere Filter eines Kamerasystems). Um solche Anpassungen ohne DPR zu ermöglichen müsste der FPGA sämtliche Algorithmen parallel vorhalten (erhöhter Platzbedarf), obwohl jeweils nur ein spezieller benötigt wird. Mit DPR können nun kleinere (preisgünstigere, stromsparendere) FPGA's verwendet werden.

Ein Anwendungsbeispiel ist ein Echtzeit-Videosystem, welches man zur Laufzeit (dynamisch) und ohne Unterbrechung des Videostroms (partiell, ohne Beeinflussung anderer FPGA-Bereiche wie beispielsweise Kamera- und PCIe Interface) rekonfiguriert, indem verschiedene Filter-Algorithmen ausgetauscht und kombiniert werden.

Da DPR bisher in den Herstellertools noch nicht vollständig integriert ist, benötigt man zur Erstellung entsprechender Designs noch einiges an Hintergrundwissen. Auch ist es aktuell noch nicht ohne Weiteres möglich ein austauschbares Modul an anderen Stellen innerhalb des FPGA einzusetzen. Wenn man mehrere Bereiche für austauschbare Module hat, muss jedes Modul für jeden der Bereiche implementiert werden. Außerdem müssen alle Module neu implementiert werden, wenn sich das umgebende Hauptsystem ändert.

Mit diesem und anderen Problemen beschäftigen sich aktuell sowohl die FPGA-Hersteller (allen voran Xilinx) als auch verschiedene Forschungsgruppen, unter anderem auch das IRI (Infrastruktur und Rechnersysteme in der Informationsverarbeitung) an der Goethe Universität Frankfurt. Hier beschäftige ich mich in Kooperation mit einem Industriepartner damit, dass Enduser im Bereich der industriellen Bildverarbeitung auf einfache Art und Weise Vorteil aus dieser Technologie ziehen können. Andere aus dieser Arbeitsgruppe verwenden DPR dazu, um unter Anderem durch ständige und vollständige Rekonfiguration (Scrubbing) FPGA's auch in der Umgebung des Detektors eines Teilchenbeschleunigers funktionstüchtig zu halten.