Was ist ein FPGA? Basics, Anwendungen, Vorteile

FPGA Symbolbild

FPGA-Basics

FPGAs wurden Mitte der 1980er Jahre entwickelt. Ein FPGA (Field Programmable Gate Array, also eine im Feld/vor Ort/beim Kunden programmierbare Logik-Gatter-Anordnung) ist ein integrierter, digitaler Schaltkreis, in den eine logische Schaltung geladen wird.

Spricht man bei Prozessoren, Microcontrollern etc. von Programmierung, so meint man damit einen zeitlichen Ablauf, also ein klassisches Programm. Beim FPGA hingegen wird mit der Programmierung die gewünschte Schaltungsstruktur definiert. Sie wird mit einer Hardwarebeschreibungssprache ausgeführt und in eine Konfigurationsdatei übersetzt. Diese beschreibt, wie die physischen Elemente im FPGA verschaltet werden sollen. Daher spricht man auch von der (zum Betrieb zwingend erforderlichen) Konfiguration des FPGA.

Ein FPGA ist also ein integrierter Schaltkreis, der so konzipiert ist, dass er vom Anwender konfiguriert werden kann. Ein FPGA kann viele tausend Mal zu einer nahezu unbegrenzten Anzahl von Schaltungen konfiguriert werden, was ihn zu einem idealen Werkzeug für das Erlernen von digitalen Schaltungen und Systemen macht. FPGA haben sich in der Elektronikindustrie aus genau diesem Grund durchgesetzt: Sie können schnell zu praktisch jeder Schaltung (und sogar zu ganzen Computersystemen) konfiguriert werden. Dies ermöglicht es Ingenieuren, Entwürfe gründlich zu studieren, bevor sie kommerziell gebaut werden.

Wie funktioniert ein FPGA?

Ein FPGA besteht aus internen Hardwareblöcken mit benutzerprogrammierbaren Verbindungen. Die "Zwischenverbindungen" dieser Matrix aus konfigurierbaren Logikblöcken (CLBs) können so umprogrammiert werden, dass der FPGA nach Umkonfigurierung immer wieder neue oder modifizierte Anwendung unterstützen kann. FPGA können so unterschiedliche digitale Schaltungen und Funktionen realisieren, von einfachen Zählern oder Digital-I/O (z. B. Emulation von Bausteinen wie 8255) über Speichercontrollern bis hin zu kompletten Mikroprozessoren und hochkomplexen Systems-on-a-Chip (SoC) Schaltungen etc.

Im Gegensatz zu einfachen Prozessoren sind FPGAs zu parallelen Operationen fähig, so dass verschiedene Verarbeitungsvorgänge nicht um dieselben Ressourcen konkurrieren. Jede unabhängige Aufgabe wird einem bestimmten Bereich des Chips zugewiesen und kann autonom ohne Einfluss anderer Logikblöcke arbeiten. Folglich wird die Leistung eines Teils der Anwendung nicht beeinträchtigt, wenn weitere Operationen hinzugefügt werden.

Die interne Konfiguration der FPGAs wird durch Software oder, wie es typischerweise genannt wird, "Firmware" eingestellt. FPGAs können im Feld neu programmiert werden, wenn sich die Anforderungen an die Anwendung oder die Funktionalität ändern.

FPGAs sind so konzipiert, dass sie mit einer Hardwarebeschreibungssprache wie Verilog HDL oder VHDL programmiert werden. Da sie umprogrammierbar sind, unterscheiden sich FPGAs von ASIC-ICs, die für spezielle Aufgaben konzipiert sind.

Die Entscheidung, ob ein FPGA-basiertes Design verwendet werden soll, muss in einem frühen Stadium des Designprozesses getroffen werden. Es sollte berücksichtigt werden, ob der Chip später im Designprozess oder sogar nach der Herstellung neu programmiert werden muss. Manchmal entscheiden sich Hersteller für ein FPGA-basiertes Design zu Beginn des Entwicklungszyklus, wenn noch Bugs gefunden werden können, und wechseln dann zu einem ASIC, wenn das Design stabil ist.

Was verbirgt sich in einem FPGA?

FPGAs enthalten Komponenten, die auf bestimmte Funktionen spezialisiert sind, sowie konfigurierbare Logik für allgemeine Zwecke.

  • Konfigurierbare Logikblöcke
    Ein konfigurierbarer Logikblock (CLB) ist die grundlegende Logikeinheit eines FPGAs. Ein CLB verleiht dem FPGA die Fähigkeit, verschiedene Hardwarekonfigurationen zu akzeptieren. CLBs können so programmiert werden, dass sie fast jede logische Funktion ausführen.

  • Flip-Flops und LUTs
    Der einzelne CLB enthält eine Reihe von diskreten Logikkomponenten, darunter Flip-Flops und Look-Up-Tabellen (LUTs). Eine LUT legt fest, was die Ausgabe für eine beliebige(n) Eingabe(n) ist. Im Kontext der kombinatorischen Logik ist sie die Wahrheitstabelle und definiert, wie sich die kombinatorische Logik verhält. Eine Wahrheitstabelle ist eine vordefinierte Liste von Ausgängen für jede Kombination von Eingängen. Die LUT enthält eine benutzerdefinierte Wahrheitstabelle, die beim Einschalten des Chips geladen wird.

    LUT Symbolbild
    Beispiel einer 4-Eingangs-LUT und Flip-Flop als Logikblock eines FPGAs (nach Wikipedia)

  • DSP-Slices
    Ein DSP-Slice, manchmal auch als Block oder Zelle bezeichnet, ist eine der spezialisierten Komponenten in einem FPGA. Sie führt digitale Signalverarbeitungsfunktionen wie Filterung oder Multiplikation effizienter aus als viele CLBs. Diese Multiplizierschaltung spart LUT- und Flip-Flop-Nutzung in mathematischen und Signalverarbeitungsanwendungen.

  • Block-RAM
    Der auf einem FPGA-Chip verfügbare Speicher wird als Block-RAM oder BRAM bezeichnet. Diese Blöcke können unterteilt oder kaskadiert werden, um kleinere oder größere BRAMs zur Verfügung zu stellen.

  • Sende- und Empfangs-Komponenten
    Transceiver sind für die Übertragung und den Empfang serieller Daten zum und vom FPGA mit hohen Raten vorgesehen. Diese dedizierte Komponente ermöglicht die Implementierung von Hochgeschwindigkeitsdatenübertragungen, ohne logische Ressourcen des FPGAs zu verbrauchen.

  • Input/Output Blöcke
    Input Output (I/O) Blöcke sind die Komponenten, über die Daten in und aus dem FPGA übertragen werden. Die I/O-Blöcke sind je nach Art der Daten auf verschiedene Weise konfigurierbar. Sie arbeiten mit niedrigeren Geschwindigkeiten als Transceiver, bieten aber mehr funktionale Flexibilität.

FPGA-Merkmale

Die"unendliche" Konfigurierbarkeit eines FPGAs ermöglicht es Entwicklern, den FPGA so zu gestalten, dass er fast jede Funktion ausführen kann. Neben der Flexibilität, die ein FPGA bietet, ist der Durchsatz aufgrund der parallelen Natur des FPGA-Designs extrem hoch. Die wichtigsten Fähigkeiten eines FPGAs sind wie folgt:

  • Parallele Verarbeitung
    Die parallele Verarbeitung auf einem FPGA ist möglich, weil es nicht dem Programmiermodell eines Prozessors folgt. Parallelverarbeitung bedeutet auch, dass langsamere Takte verwendet werden können (im Vergleich zu hochfrequenten Takten auf Prozessoren) und der Benutzer trotzdem die erforderlichen Durchsätze erreichen kann, aber mit weniger Energieverbrauch. Die Parallelverarbeitung ermöglicht es auch, rechenintensive Teile der Anwendung auf den FPGA zu verlagern und den Prozessor für weniger rechenintensive Aufgaben zu entlasten. Durch die Parallelverarbeitung eignen sich FPGAs hervorragend für die Arbeit mit Messsystemen und Edge-Computing-Anwendungen, die die Verarbeitung großer Datenmengen erfordern.

  • FPGAs können rekonfiguriert werden
    Wenn ein Design aktualisiert oder um neue Funktionen erweitert werden muss, kann dies problemlos geschehen. Das ist bei einem ASIC schwierig. Wenn sich ein Produkt weiterentwickelt, können Funktionsänderungen oder -verbesserungen einfach vor Ort vorgenommen werden, indem der FPGA aktualisiert wird.

  • Geringe und mittlere Produktions-Volumen
    FPGAs werden in der Regel für Geräte mit geringen bis mittleren Stückzahlen verwendet. Bei Produkten mit hohen Stückzahlen werden aufgrund ihrer dann geringeren Kosten in der Regel ASICs bevorzugt. ASICs sind typischerweise billiger für Produkte mit hohen Stückzahlen und nicht so kosteneffektiv für kleine oder mittlere Stückzahlen. Denn die anfänglichen Entwicklungskosten für einen ASIC können recht hoch sein.

  • Schneller Entwicklungsprozess
    FPGAs bieten eine schnelle Durchlaufzeit vom Konzept bis zur Produktion, da kein eigentlicher Entwurf auf Transistorebene erforderlich ist.

FPGA in der Praxis

Zu den spezifischen Anwendungen, bei denen ein FPGA zum Einsatz kommt, gehören digitale Signalverarbeitung, biomedizinische Messgeräte, Gerätesteuerungen, softwaredefinierter Funk, Zufallslogik, medizinische Bildgebung, Emulation von Computerhardware, Spracherkennung, Kryptografie, Filterung und Kommunikationsverschlüsselung und vieles mehr. Zu den Anwendungen der Unterhaltungselektronik gehören Smartphones, autonome Fahrzeuge, Kameras, Displays, Video- und Bildverarbeitung sowie Sicherheitssysteme. Viele kommerzielle Anwendungen nutzen ebenfalls die Vorteile von FPGAs, z. B. in Servern und auf verschiedenen Märkten wie in Luft- und Raumfahrt und im Verteidigungsbereich, in der medizinischen Elektronik und in verteilten Geldsystemen.

Was sind die Vorteile von FPGAs?

Die wichtigsten Vorteile wurden schon erwähnt: Die Rekonfigurierbarkeit, die Fähigkeit, parallel zu arbeiten, die Vorteile bei zeitkritischer Verarbeitung und die optimale Leistung. Im Detail:

  • Leistung
    Die parallele Natur von FPGAs ermöglicht ihnen eine höhere Verarbeitungsleistung, höhere Geschwindigkeiten, bessere Reaktionszeiten und eine insgesamt bessere Leistung im Vergleich zu anderen modernen Mikroprozessoren.

  • Reprogrammierbare Hardware-Struktur
    Aufgrund der reprogrammierbaren Struktur von FPGAs kann die Funktionalität auch nach der Herstellung neu definiert werden. Benutzer können neue Produkteigenschaften und Funktionen programmieren, sich an neue Standards anpassen und Hardwareanwendungen neu konfigurieren, nachdem das Produkt im Feld installiert wurde. Diese Flexibilität verschafft FPGA-basierten Designs Vorteile gegenüber Mikrocontroller-basierten Systemen. Ein Benutzer kann einen Fehler bei der Programmierung machen und den FPGA später mit einer neuen Konfigurationsdatei modifizieren oder ändern, ohne dass Prototypen oder zusätzliche Hardware erstellt werden müssen, was Zeit und Kosten spart.

  • Kürzere Markteinführungszeit
    FPGAs sind schnell verfügbar und ermöglichen es den Anwendern, auf dieser Technologie basierende Systeme schnell zu entwickeln. ASICs erfordern Fertigungszyklen von mehreren Monaten. FPGA-Benutzer können Systeme ausliefern, sobald ein Produktdesign funktioniert und getestet ist.

  • Niedrigere Gesamtkosten
    Im Vergleich zu den Kosten für die Herstellung eines ASIC sind FPGAs relativ preiswert. Der Entwurfszyklus für einen ASIC ist lang und die Herstellung von Werkzeugen ist kostspielig. Außerdem erfordert jede Änderung des Designs einen neuen Chip, während ein FPGA einfach mit einem neuen Programm aktualisiert werden kann.

  • Geringe Wartung
    Im Gegensatz zu ASICs sind FPGAs reprogrammierbar und können vor Ort aufgerüstet oder verbessert werden, ohne dass Zeit und Ressourcen für die Neukonfiguration von Leiterplatten und Hardware aufgewendet werden müssen. Auch die Entwicklungskosten sind deutlich niedriger als bei ASICs. Die Systemanforderungen können sich im Laufe der Zeit ändern, und die Kosten für inkrementelle Änderungen an einem FPGA sind gering im Vergleich zu den hohen Kosten für die Umrüstung eines ASICs.

Wie erlernt man das Wissen für den Einsatz von FPGAs?

Der erste Schritt, um mehr über FPGAs zu erfahren, besteht darin, sich für einen Chiptyp zu entscheiden und eine Programmiersprache zu wählen. VHDL ist zum Beispiel ausführlicher als Verilog, und in VHDL geschriebene Designs gelten als selbstdokumentierend. Verilog erfordert weniger Code und gilt als einfacher zu erlernen.

Bei der Auswahl eines FPGA-Chips gibt es viele Überlegungen, darunter die Anzahl der IOs, die Anzahl der Gatter, die Betriebsfrequenz und die Kosten. Die Funktionalität kann auch zwischen traditionellen FPGAs und System on a Chip (SoC) FPGAs variieren. SoC-FPGAs integrieren Prozessor- und FPGA-Architektur in einem einzigen Gerät und bieten eine höhere Integration, einen geringeren Stromverbrauch, eine geringere Größe und eine höhere Bandbreite zwischen dem Prozessor und dem FPGA.

Der nächste Schritt ist die Auswahl eines Entwicklungsboards. Das Digilent Basys 3 ist ideal für den Einstieg in die FPGA-Entwicklung. Es ist ein Entwicklungsboard der Einstiegsklasse, das auf dem Xilinx Artix-7 FPGA basiert, und auch der Arty Z7 ist eine gute Wahl für diejenigen, die in die SoC-Technologie einsteigen wollen.

Nach Informationen von Digilent und Wikipedia.