FPGA-Grundlagen: Architektur, Anwendungen und Verwendungsmöglichkeiten
Das Field Programmable Gate Array (FPGA) ist ein integrierter Schaltkreis, der aus internen Hardwareblöcken mit benutzerprogrammierbaren Verbindungen besteht, um die Funktionsweise für eine spezifische Anwendung anzupassen.
Was ist FPGA?
Field Programmable Gate Array (FPGA) ist ein integrierter Schaltkreis, der aus internen Hardware-Blöcken mit benutzerprogrammierbaren Verbindungen besteht, um die Funktion für eine spezifische Anwendung anzupassen. Die Verbindungen können leicht neu programmiert werden, sodass ein FPGA Änderungen am Design aufnehmen oder sogar eine neue Anwendung während der Lebensdauer des Teils unterstützen kann.
Das FPGA hat seine Wurzeln in früheren Geräten wie programmierbaren Nur-Lese-Speichern (PROM) und programmierbaren Logikgeräten (PLDs). Diese Geräte konnten entweder im Werk oder vor Ort programmiert werden, nutzten jedoch Fusetechnologie (daher der Ausdruck „Brennen eines PROM“) und konnten nach der Programmierung nicht mehr geändert werden. Im Gegensatz dazu speichert das FPGA seine Konfigurationsinformationen in einem neu programmierbaren Medium wie statischem RAM (SRAM) oder Flash-Speicher. FPGA-Hersteller sind Intel, Lattice Semiconductor, Microchip Technology und Microsemi.
FPGA-Architektur
Eine grundlegende FPGA-Architektur (Abbildung 1) besteht aus Tausenden von grundlegenden Elementen, sogenannten konfigurierbaren Logikbausteinen (CLBs), die von einem System programmierbarer Verbindungen, genannt Fabric, umgeben sind und Signale zwischen den CLBs leiten. Eingangs-/Ausgangsblöcke (I/O) bilden die Schnittstelle zwischen dem FPGA und externen Geräten.
Je nach Hersteller kann der CLB auch als Logikblock (LB), Logikelement (LE) oder Logikzelle (LC) bezeichnet werden.
Die grundlegende FPGA-Architektur (Bildquelle: National Instruments)
Abbildung 1
Ein einzelner CLB (Abbildung 2) besteht aus mehreren Logikblöcken. Eine Lookup-Tabelle (LUT) ist ein charakteristisches Merkmal eines FPGAs. Eine LUT speichert eine vordefinierte Liste von Logikausgaben für jede Kombination von Eingaben: LUTs mit vier bis sechs Eingabebits werden häufig verwendet. Standardlogikfunktionen wie Multiplexer (Mux), Volladdierer (FAs) und Flip-Flops sind ebenfalls üblich.
Ein vereinfachter CLB: Die Vier-Eingang-LUT wird aus zwei Drei-Eingang-Einheiten gebildet. (Bildquelle: Wikipedia)
Abbildung 2
Die Anzahl und Anordnung der Komponenten im CLB variiert je nach Gerät; das vereinfachte Beispiel in Abbildung 2 enthält zwei Drei-Eingangs-LUTs (1), einen FA (3) und einen D-Typ Flip-Flop (5), plus einen Standard-Mux (2) und zwei Muxe, (4) und (6), die während der FPGA-Programmierung konfiguriert werden.
Dieses vereinfachte CLB hat zwei Betriebsmodi. Im normalen Modus werden die LUTs mit Mux 2 kombiniert, um eine Vier-Eingangs-LUT zu bilden; im arithmetischen Modus werden die LUT-Ausgänge zusammen mit einem Carry-Eingang von einem anderen CLB als Eingänge zum FA geführt. Mux 4 wählt zwischen dem FA-Ausgang oder dem LUT-Ausgang. Mux 6 bestimmt, ob der Betrieb asynchron ist oder mit dem FPGA-Takt über das D-Flip-Flop synchronisiert wird.
Aktuelle Generationen von FPGAs beinhalten komplexere CLBs, die in der Lage sind, mehrere Operationen mit einem einzigen Block durchzuführen; CLBs können kombiniert werden, um komplexere Operationen wie Multiplikatoren, Register, Zähler und sogar digitale Signalverarbeitungsfunktionen (DSP) auszuführen.
CPLD vs FPGA
Ursprünglich enthielten FPGAs die Blöcke in Abbildung 1 und wenig mehr, aber jetzt können Designer aus Produkten mit einer großen Bandbreite an Funktionen wählen. Weniger komplexe Geräte wie einfache programmierbare Logikbausteine (SPLDs) und komplexe programmierbare Logikbausteine (CPLDs) überbrücken die Lücke zwischen diskreten Logikgeräten und Einstiegs-FPGAs.
Einsteiger-FPGAs betonen einen niedrigen Stromverbrauch, eine geringe Logikdichte und eine niedrige Komplexität pro Chip. Höherwertige Geräte fügen Funktionsblöcke hinzu, die speziellen Funktionen gewidmet sind: Beispiele umfassen Taktverwaltungskomponenten, phasenverriegelte Schleifen (PLLs), Hochgeschwindigkeits-Serializer und -Deserializer, Ethernet-MACs, PCI-Express-Controller und Hochgeschwindigkeits-Transceiver. Diese Blöcke können entweder mit CLBs implementiert werden – als Soft-IP bezeichnet – oder als separate Schaltungen entworfen werden, also als Hard-IP. Hard-IP-Blöcke erzielen Leistung auf Kosten der Rekonfigurierbarkeit.
Am oberen Ende umfasst die FPGA-Produktfamilie komplexe System-on-Chip (SoC)-Bausteine, die die FPGA-Architektur, hartes IP und einen Mikroprozessor-CPU-Kern in einer einzigen Komponente integrieren. Im Vergleich zu separaten Geräten bietet ein SoC-FPGA eine höhere Integration, geringeren Stromverbrauch, kleinere Platinenabmessungen und eine höhere Bandbreite für die Kommunikation zwischen dem Kern und anderen Blöcken.
SoC-FPGAs
SoC-FPGAs umfassen eine breite Palette an Verarbeitungskapazitäten, um unterschiedlichen Anwendungen gerecht zu werden. Ein kostengünstiges, stromsparendes SoC-FPGA wie beispielsweise Intels Cyclone V zielt auf Anwendungen mit hohem Volumen wie industrielle Motorsteuerungsantriebe, Protokoll-Bridging, Videoprozessorkarten und Handheld-Geräte ab. Das Gerät (Abbildung 3) besteht aus zwei unterschiedlichen Teilen: dem FPGA-Teil und einem Hard-Processor-System (HPS), das auf einem oder zwei 32-Bit-Arm Cortex-A9 MPCOREs mit 925 MHz basiert. Jeder Teil enthält einen eigenen Satz an Peripheriegeräten, einschließlich fest integrierter IP von Drittanbietern.
Blockdiagramm des Cyclone V SoC intern (Bildquelle: Cornell University)
Abbildung 3
Am anderen Ende der Skala zielt der Stratix 10 SX auf Hochleistungsanwendungen in Kommunikation, Datenbeschleunigung im Rechenzentrum, Hochleistungsrechnen (HPC), Radarverarbeitung und ASIC-Prototyping ab; dieses FPGA umfasst einen Quad-Core 64-Bit Arm Cortex-A53, der mit bis zu 1,5 GHz läuft.
FPGA-Design
Wie wandeln wir diese Sammlung von Tausenden von Hardware-Blöcken in die richtige Konfiguration um, um die Anwendung auszuführen? Ein auf FPGA basierendes Design beginnt damit, die erforderlichen Rechenaufgaben im Entwicklungstool zu definieren und sie dann in eine Konfigurationsdatei zu kompilieren, die Informationen darüber enthält, wie die CLBs und andere Module verbunden werden. Der Prozess ähnelt einem Software-Entwicklungszyklus, mit dem Unterschied, dass das Ziel darin besteht, die Hardware selbst zu entwerfen, anstatt eine Reihe von Anweisungen zu erstellen, die auf einer vordefinierten Hardwareplattform ausgeführt werden.
Designer haben traditionell eine Hardware-Beschreibungssprache (HDL) wie VHDL (Abbildung 4) oder Verilog verwendet, um die FPGA-Konfiguration zu entwerfen.
Beispiel für VHDL-Code für einen vorzeichenbehafteten Addierer (Bildquelle: Wikipedia)
Abbildung 4
Sobald das FPGA-Design mithilfe von HDL erstellt und überprüft wurde, nimmt der Compiler die textbasierte Datei und erzeugt eine Konfigurationsdatei, die Informationen darüber enthält, wie die Komponenten miteinander verdrahtet werden sollen. Selbst wenn der HDL-Code fehlerfrei ist, kann die Auswahl des falschen FPGAs dennoch dazu führen, dass die Kompilierung fehlschlägt – beispielsweise wenn das FPGA einen spezifischen Ressourcentyp nicht mehr bereitstellen kann oder der Compiler die erforderlichen Verbindungen zwischen den Komponenten nicht erstellen kann.
Eine Herausforderung bei einem HDL-Ansatz besteht darin, dass die Konfiguration eines FPGA sowohl Programmierkenntnisse als auch ein detailliertes Wissen über die zugrunde liegende Hardware erfordert und das benötigte Fachwissen nicht weit verbreitet ist.
Als Ergebnis bieten Anbieter Software-Entwicklungskits (SDKs) an, die es Designern ermöglichen, FPGA-Lösungen in populären Hochsprachen wie C/C++, Python und OpenCL zu entwickeln. High-Level-Synthese-Designwerkzeuge (HLS) sind ebenfalls erhältlich; diese laufen auf einer Umgebung wie National Instruments LabVIEW und bieten grafische Blockdiagramme anstelle von Codezeilen.
FPGA-Nutzungen: Eine attraktive Wahl für bestimmte Anwendungen
Die Möglichkeit, die Hardware des FPGA zu konfigurieren, sie bei Bedarf neu zu konfigurieren und für einen bestimmten Satz von Funktionen zu optimieren, macht das FPGA in vielen Anwendungen zu einer attraktiven Option.
FPGAs werden häufig verwendet, um eine kundenspezifische Lösung in Situationen bereitzustellen, in denen die Entwicklung eines ASIC zu teuer oder zeitaufwändig wäre. Eine FPGA-Anwendung kann in Stunden oder Tagen statt in Monaten konfiguriert werden. Natürlich hat die Flexibilität des FPGA ihren Preis: Ein FPGA ist wahrscheinlich langsamer, benötigt mehr Leiterplattenfläche und verbraucht mehr Strom als ein äquivalentes ASIC.
Selbst wenn ein ASIC für die Massenproduktion entworfen wird, werden FPGAs häufig zur Systemvalidierung eingesetzt, einschließlich Pre-Silicon-Validierung, Post-Silicon-Validierung und Firmware-Entwicklung. Dies ermöglicht es Herstellern, ihr Design zu validieren, bevor der Chip in der Fabrik produziert wird.
FPGA-Anwendungen
Viele Anwendungen verlassen sich auf die parallele Ausführung identischer Operationen; die Fähigkeit, die CLBs des FPGAs in Hunderte oder Tausende identische Verarbeitungsblöcke zu konfigurieren, findet Anwendungen in der Bildverarbeitung, künstlicher Intelligenz (AI), Hardwarebeschleunigern für Rechenzentren, Unternehmensnetzwerken und fortschrittlichen Fahrerassistenzsystemen (ADAS) im Automobilbereich.
Viele dieser Anwendungsbereiche ändern sich sehr schnell, da sich die Anforderungen weiterentwickeln und neue Protokolle und Standards übernommen werden. FPGAs ermöglichen es Herstellern, Systeme zu implementieren, die bei Bedarf aktualisiert werden können.
Ein gutes Beispiel für den Einsatz von FPGA ist die Hochgeschwindigkeitssuche: Microsoft verwendet FPGAs in seinen Rechenzentren, um Bing-Suchalgorithmen auszuführen. Das FPGA kann geändert werden, um neue Algorithmen zu unterstützen, sobald sie erstellt werden. Wenn sich die Anforderungen ändern, kann das Design umfunktioniert werden, um Simulations- oder Modellierungsroutinen in einer HPC-Anwendung auszuführen. Diese Flexibilität ist mit einem ASIC schwierig oder unmöglich zu erreichen.
Weitere Anwendungen für FPGAs umfassen Luft- und Raumfahrt sowie Verteidigung, Medizinelektronik, digitales Fernsehen, Unterhaltungselektronik, industrielle Motorsteuerung, wissenschaftliche Instrumente, Cybersicherheitssysteme und drahtlose Kommunikation.
FPGA-Geschichte: Was kommt als Nächstes?
Mit diesen aufstrebenden Anwendungen wächst der FPGA-Markt mit einer gesunden Geschwindigkeit: Im Jahr 2016 wurde er auf 5,34 Milliarden USD geschätzt und soll laut Branchenforschern von MarketsandMarkets bis 2023 auf 9,50 Milliarden USD anwachsen. Das entspricht einer durchschnittlichen jährlichen Wachstumsrate (CAGR) von 8,5 Prozent im Vergleich zu einer CAGR von etwa 2 Prozent für den weitaus größeren (74 Milliarden USD) allgemeinen Mikroprozessormarkt.
Das exponentielle Wachstum von Daten und das Aufkommen schnelllebiger Bereiche wie AI, maschinelles Lernen, HPC und Genomik erfordern Architekturen, die schnell, flexibel und anpassungsfähig sind. FPGAs sind gut positioniert, um diese neuen Chancen zu nutzen.
Artikel Tags