Ein FPGA (Akronym für Field Programmable Gate Array) ist ein integrierter Schaltkreis (IC) der Digitaltechnik, in welchen eine logische Schaltung geladen werden kann. Die Bezeichnung kann übersetzt werden als im Feld (also vor Ort, beim Kunden) programmierbare (Logik-)Gatter-Anordnung.

Anders als bei der Programmierung von Computern, Mikrocontrollern oder Steuerungen bezieht sich hier der Begriff Programmierung nicht nur auf die Vorgabe zeitlicher Abläufe, sondern vor allem auch auf die Definition der gewünschten Schaltungsstruktur. Diese wird mittels einer Hardwarebeschreibungssprache formuliert und von einer Erzeugersoftware in eine Konfigurationsdatei übersetzt, welche vorgibt, wie die physischen Elemente im FPGA verschaltet werden sollen. Man spricht daher auch von der Konfiguration des FPGA. Ohne diese hat der Baustein keine Funktion.

FPGAs stellen eine Weiterentwicklung der PLDs dar und kommen in vielen Gebieten der digitalen Elektronik zum Einsatz. mini|Ein FPGA des Herstellers Altera

Anwendung Durch Konfiguration der intern vorhandenen Elemente können in einem FPGA verschiedene Schaltungen und Funktionen realisiert werden. Diese reichen von Schaltungen geringer Komplexität, wie z. B. ein einfacher Synchronzähler oder Interfaces für Digitalbausteine (z. B. Glue Logic), über Speichercontroller und vollständige Mikroprozessoren bis hin zu hochkomplexen Schaltungen wie Systems-on-a-Chip.

FPGAs werden in allen Bereichen der Digitaltechnik eingesetzt, vor allem aber dort, wo es auf schnelle digitale Signalverarbeitung und flexible Änderung der Schaltung ankommt, um beispielsweise nachträgliche Verbesserungen an den implementierten Funktionen vornehmen zu können, ohne dabei direkt die Hardware ändern zu müssen. Ein großes Anwendungsgebiet ist die Erstellung von Prototypen in der ASIC-Entwicklung zum vorherigen Test sowie auch der Bereich Maintenance bzw. Obsoleszenzmanagement, in dem es darum geht, Ersatz für alte, nicht mehr lieferbare digitale Bausteine oder Mikrocontroller vorzuhalten.

Mit der Einführung der FPGAs wurden kompakte, anwenderspezifische Schaltungen in geringen Stückzahlen ermöglicht. Heute gestatten sie die preiswerte und flexible Fertigung komplexer Systeme wie Mobilfunk-Basisstationen als Alternative zur teureren Auftragsfertigung durch Halbleiterhersteller.

Neben den FPGAs existieren auch FPAAs (Field Programmable Analog Array), die nicht nur digitale, sondern vor allem analoge Funktionsblöcke enthalten, die vom Anwender programmiert und verschaltet werden können. Es handelt sich dabei in erster Linie um Filter und HF-Bauelemente.

Aufbau und Struktur mini|hochkant=1.1|Logikblock eines FPGA mit 4-bit-LUT und optionalem Ausgangs-Flipflop mini|hochkant=1.1|Schaltmatrix als Verbindungsstruktur zwischen Logikblöcken Die wesensbestimmende Grundstruktur eines FPGA ist ein Feld (englisch Array) aus Basisblöcken mit jeweils einer einfachen programmierbaren Lookup-Tabelle (LUT) und einem 1-Bit-Register (Flipflop). Die LUTs können, je nach Anzahl der verfügbaren Eingänge, jede beliebige n-stellige Binärfunktion realisieren. Die Programmierung der gewünschten Funktion erfolgt durch die Hinterlegung der definierenden Wahrheitstabelle in den SRAM-Zellen der LUT, die Funktionsberechnung durch das Auslesen der durch die Eingänge bestimmten Speicheradresse. Lange Zeit waren LUT-Strukturen mit 4 binären Eingängen üblich. Neuere FPGAs gehen zur Verringerung des Aufwandes an LUT-zu-LUT-Verbindungen zur Realisierung von Funktionen mit mehr Eingängen auf LUTs mit bis zu 6 Eingängen über.

Neben den LUTs ist auf einem FPGA auch die Verschaltung der Komponenten weitgehend frei konfigurierbar. Multiplexer-Strukturen in den Basisblöcken ermöglichen häufig sehr schnelle lokale Signalpfade, zur Einbindung oder Umgehung des Flipflops, zur Rückkopplung von dessen Ausgang, zur Verbindung von Nachbarblöcken und ähnlichem. Für die ferneren Verbindungen liegt zwischen den Basisblöcken ein Gitter aus immensen Busstrukturen, an das Ein- und Ausgänge angeschlossen werden können. Weitere programmierbare Schaltkomponenten in den Kreuzungspunkten des Gitters erlauben die Signalverteilung über den gesamten Chip.

Weitere Komponenten Weitere oft vorzufindende Elemente von FPGA sind: Eingangs-/Ausgangs-Blöcke (englisch IO-Blocks oder IOB) dienen der Kommunikation mit der Außenwelt. Über sie werden die externen Anschlüsse des FPGA mit der internen Schaltmatrix verbunden. Sie können an die jeweilige Anwendung angepasst werden, z. B. kann die Ausgangsspannung für den jeweiligen Standard eingestellt werden (TTL/CMOS usw.). Spezielle IOB-Blöcke mit integrierten Serializern gestatten die Anbindung an Hochgeschwindigkeits-Busse und Double-Data-Rate-(DDR)-Schnittstellen. Ein oder mehrere Taktgeneratoren erzeugen, ausgehend von an den Eingängen zur Verfügung gestellten Taktsignalen, alle für die Anwendung benötigten internen Taktsignale. Diese können gegenüber den Eingangstaktsignalen in der Phase verschoben sein und besitzen eine von dem jeweiligen Eingangstaktsignal abgeleitete Frequenz. Taktverstärker sowie eine entsprechende Verschaltung sorgen dafür, dass jedes verwendete Taktsignal überall im Chip synchron zur Verfügung steht. Moderne FPGAs besitzen typischerweise mehrere Phase-locked loops (PLL), mit denen sich rational gebrochene Taktfrequenzteilungen/-vervielfachungen erzeugen lassen. Den gleichen Zweck erfüllen Delay-locked loops (DLL) und digital frequency synthesizer (DFS), die manche FPGA-Hersteller gegenüber der PLL bereitstellen. In vielen FPGAs sind zusätzliche festverdrahtete Funktionen enthalten, wie z. B. Speicherblöcke (sog. Block RAM), die sich in vielfältiger Weise nutzen lassen. Für Aufgaben der digitalen Signalverarbeitung sind viele FPGAs zusätzlich zu den normalen Logikzellen mit DSP-Blöcken ausgestattet.Xilinx User Guide: 7 Series DSP48E1 Slice (PDF, abgerufen am 10. Oktober 2020)Altera Whitepaper: Enabling High-Performance DSP Applications with Stratix Variable-Precision DSP Blocks (PDF, abgerufen am 10. Oktober 2020) Diese erlauben, neben der schnellen Multiplikation zweier Zahlen, auch die Verwendung als Multiply-Accumulate-Blöcke, wie sie insbesondere für digitale Filter und andere Faltungsoperationen benötigt werden. Dies ist häufig effizienter, als die zugrundeliegende Funktion aus den universellen Logik-Ressourcen des FPGA zu synthetisieren. FPGAs, die aufwändige Berechnungen vollziehen sollen, verfügen über mehrere integrierte Mikrocontroller in Form eines Hard-Cores, welcher z. B. mit einem C-Programm programmiert werden kann. FPGAs, die besonders hohe Speicheranforderungen haben, besitzen mehrere integrierte DDR-Speichercontroller und neben dem FPGA im gleichen Gehäuse installierte DDR-SDRAM-Blöcke mit mehreren GB Speicherkapazität. Man nennt solche integrierten Schaltungen mit mehreren Chips in einem Gehäuse auch Multi-Die. Durch weiteres Hinzufügen von komplexen Funktionsblöcken wie Ethernetschnittstellen, USB-Controllern und DDR-Speichercontrollern entstehen System-on-a-Chip-Systeme (SoCs), die den Aufbau vollständiger computerähnlicher Systeme ermöglichen. Die darin verwendeten unveränderlichen Schaltungen belegen sehr viel weniger Chipfläche, als die gleiche Funktion benötigt, wenn sie mit frei konfigurierbaren Logikblöcken realisiert wird. Sie sind auch erheblich stromsparender und um ein Mehrfaches schneller. Hersteller wie Xilinx bieten mittlerweile auch FPGAs an, die bereits über im Chipgehäuse untergebrachten Flash-Speicher zur Konfiguration verfügen und keinen externen Flash-Speicher mehr benötigen. Die Lade- bzw. Startzeiten des FPGA bleiben im Vergleich zu externem Speicher in etwa gleich, sind allerdings speziell vom Hersteller optimiert. Ein weiterer Vorteil ist der Schutz vor unrechtmäßigen Kopien durch das Auslesen des extern befindlichen Speichers. Derzeit und auf absehbare Zeit ist es technologisch nicht möglich, die SRAM-basierten Schalterzellen in einem FPGA direkt wie bei den viel einfacheren CPLDs durch Flash- bzw. EEPROM-Zellen zu ersetzen.

Unterschiede zu CPLDs Oft werden FPGAs mit den digitalen und ebenfalls rekonfigurierbaren CPLD-Bausteinen (Complex Programmable Logic Devices) gleichgesetzt bzw. verglichen. Die wesentlichen Unterschiede zwischen FPGAs und CPLDs sind:

CPLD gehört noch zur Gruppe der PAL (Programmable Array Logic) / PLA (Programmable Logic Array) / PLD (Programmable Logic Device) / GAL (Generic Array Logic), hat aber einen komplizierteren Innenaufbau im IC als PAL und GAL. Die noch neueren FPGAs gehören hingegen zu einer anderen TechnologieErwin Böhmer/Dietmar Ehrhardt/Wolfgang Oberschelp: Elemente der angewandten Elektronik, Vieweg Verlag Wiesbaden, 2007, 15. Auflage, Anmerkungen zu PAL/PLD/GAL/CPLD S. 418. CPLDs weisen im Vergleich zu FPGAs eine wesentlich einfachere Struktur auf. Sie besitzen kein feinmaschiges Array (Feld) von Logikblöcken und Flipflops, sondern nur eine konfigurierbare Schaltmatrix, die verschiedene Eingangssignale zu verschiedenen Ausgangssignalen verbinden kann. Die Signale können dabei durch logische Operationen wie AND/OR verknüpft werden. Dadurch haben CPLDs eine vom jeweiligen Design unabhängige, konstante Signaldurchlaufzeit. Durch entsprechende Designmethoden kann auch bei FPGAs eine definierte maximale Durchlaufzeit erreicht werden (englisch timing constraints). CPLDs weisen vergleichsweise wenige Flipflops auf. Vor allem längere Schieberegister, Zähler, Zustandsspeicher und ähnliche Schaltungen, die viele Flipflops benötigen, sind in CPLDs nur ineffizient zu realisieren. CPLDs besitzen, da jeder IO-Pin ein Flipflop besitzt, meist sehr viele IO-Pins, die in vielen Anwendungen nur teilweise verwendet werden. In Anwendungen, in denen nur vergleichsweise einfache digitale Schaltungen, sogenannte glue logic, mit einem hohen Bedarf an IO-Pins Verwendung findet, sind CPLDs meist die bessere Wahl. CPLDs können durch ihre einfache Struktur technologisch mit Flash-Zellen in den Schaltmatrizen arbeiten. Damit ist ein CPLD sofort nach dem Einschalten (englisch Power-Up) betriebsbereit, während rekonfigurierbare FPGAs mit SRAM-basierenden Zellen erst einen Ladezyklus für die Konfiguration durchlaufen müssen. Von einigen Herstellern gibt es aber seit längerem auch FPGAs in Flash-Technik. Seit Ende der 1990er Jahre ist bei den CPLDs eine Annäherung an die FPGA-SRAM-Technologie zu beobachten. Heute arbeiten die meisten CPLDs intern SRAM-basiert. Bei einigen CPLD-Familien besteht inzwischen das logische Grundelement aus dem FPGA-typischen LUT4-Flipflop-Verbund (Altera MAX II-Serie). CPLDs weisen durch den einfacheren Aufbau und die geringere Größe auch einen wesentlich geringeren Stromverbrauch auf.

Konfiguration Die Programmierung der Logikelemente kann je nach FPGA unterschiedlich gelöst werden. Man kann zwischen Methoden unterscheiden, die es ermöglichen, den FPGA mehrmals zu programmieren, und Methoden, die nur eine einmalige Programmierung zulassen. Bei den mehrmals programmierbaren FPGAs wird die Konfiguration in Speicherzellen (z. B. SRAM, EPROM, EEPROM, Flash) gespeichert. Bei den einmalig programmierbaren FPGAs werden die physikalischen Eigenschaften der Verbindungswege permanent geändert (Antifuse-Technologie). Diese Technologie bietet im Feld eine größere Sicherheit gegen äußere Störungen.

Die Konfiguration der LUTs und der Verbindungsstrukturen bei SRAM-basierten FPGAs erfolgt typischerweise einmal vor jedem Einsatz, wodurch der FPGA auf eine konkrete Funktion festgelegt wird. Das ist notwendig, da der FPGA durch Abschalten der Betriebsspannung seine Konfiguration wieder verliert. Im Einsatz steht dem FPGA deshalb meist eine Art EPROM zur Seite, das die Konfiguration vorhält und dessen Inhalt selbst auch aktualisierbar ist. Der FPGA kann sich selbst aus diesem nichtflüchtigen Speicher beladen. Alternativ kann die Konfiguration auch aktiv durch einen Microcontroller oder einen anderen FPGA erfolgen, der die Konfiguration in den FPGA schreibt.