Field Programmable Gate Array

Ein FPGA (Field Programmable Gate Array) ist ein frei programmierbarer Logikschaltkreis. Ein FPGA besteht aus einer Matrix-Struktur aus konfigurierbaren Logikblöcken, ca. neun Metalllayern zur Verbindung der CLBs (Verbindungsebene), Ein- und Ausgabeblöcke (I/O-Blöcke) zur Impedanz- und Logikanpassung der I/O-Pins des Gehäuses (die für die Verbindung zur Außenwelt notwendig sind). Die Logikblöcke werden auch als CLB bezeichnet (configurable logic blocks). Des weiteren existieren SRAM-Blöcke, sogenannte BRAM-Blöcke, für die Speicherung von Daten. Manche Anbieter stellen zusätzlich PLLs (Phase Locked Loop), DLLs (Delay Locked Loop), Taktaufbereitungen (DCM: Digital Clock Manager) zur Verfügung. Da die CLBs der FPGAs einen synchronen Takt erhalten müssen, um unkalkulierbare Laufzeitunterschiede zu vermeiden (synchrones Design), sind Taktverteilerbäume notwendig. In der Regel werden sowohl Multiplizierer oder allgemeinere Recheneinheiten, als auch komplette Prozessoren in den FPGA integriert. Es gibt sowohl reprogrammierbare flüchtige (SRAM-basierte), nicht flüchtige reprogrammierbare (Flash basierend)) als auch nur einmal programmierbare ([OTP, AntiFusetechnik) FPGAs. RAM-basierte FPGAs laden ihre Hardwarekonfiguration nach Anlegen der Betriebsspannung(en) in der Bootphase aus externen Speichern , z.B. FlashROM.

Inhaltsverzeichnis

Aufbau und Struktur

Jeder CLB (konfigurierbarer Logikblock) besteht aus Logikzellen, die für Operationen wie AND, OR, NOT, XOR, usw. genutzt werden können, eine Verbindungsmatrix zur Metalllayer-Verbindungsebene, sowie aus Registern. Die kombinatorische Logik wird bei FPGAs der Firma Xilinx durch LUTs (look up table) mit vier Eingängen und einem Ausgang gebildet. Eine LUT enthält einen 16x1 Bit-RAM-Speicher, dessen Programmierung alle möglichen Ausgangswerte-Kombinationen bei vier Eingängen zuläßt. Des weiteren wird in den CLBs auch Flipflop-Register zur Verfügung gestellt, oft in Form von D-Latches. Die der kombinatorischen Logik nachgeschalteten Latches können genutzt oder umgangen werden. Der LUT-Speicher kann alternativ als synchrones Schieberegister oder alternativ als Speicher eingesetzt werden. Man spricht dann von sogenanntem Distributed RAM im Gegensatz zum o. a. Block RAM.

Ein FPGA besteht aus sehr vielen Logikzellen. Es sind heute FPGA mit über 10 Mio. Gatteräquivalenten erhältlich (Xilinx Virtex II-Serie). Die Komplexität der Aufgaben wächst mit den Möglichkeiten der Entwurfssoftware. Man hat gewisse Grenzen bezüglich der Verbindungsleitungen, sodass manchmal nicht ausreichend viele solcher Verbindungen zur Verfügung stehen und viele Schaltungen ohne vorherige Optimierung nicht realisierbar sind. In dieser Hinsicht haben die FPGA-Hersteller in den letzten FPGAs sehr große Fortschritte gemacht.

Entwurfsschritte und -werkzeuge

Erstellt wird Software für einen FPGA mittels einer Hardware-Beschreibungssprache, z. B. VHDL, LabVIEW oder Verilog. In den letzten Jahren gab es immer wieder Versuche FPGAs und CPLDs mit der Programmiersprache C zu beschreiben (HardwareC, SystemC (Stanford)) oder C in VHDL umzusetzen (Spark). Herstellerspezifische Sprachen wie Altera-HDL oder ABEL-HDL werden ebenso genutzt wie UDL/I (Japan). Nach der Beschreibung innerhalb des Entwurfsflusses folgen weitere Schritte wie die funktionale Simulation, Synthese, die Implementierung und laufzeitbasierende Simulation. Erst danach sollte die implementierte Schaltung am realen FPGA erprobt werden.

Die Programmierung der Logikbausteine 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 zu lassen. 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).

Anwendungsgebiete

Reprogrammierbare FPGA haben einen speziellen Bereich der Computertechnik erst in nutzbarem Umfang realisierbar gemacht: Selbstkonfigurierende Systeme. Diese konfigurieren sich zur Laufzeit entsprechend der geforderten Eigenschaften (z.B. spezielle mathematische Algorithmen) um und erreichen damit bisher unerreichte Verarbeitungsgeschwindigkeiten und Parallelität. Als besondere Herausforderung kann man hierbei die Compiler-Entwicklung sehen. Ziel ist es, objektorientiert Logik-Kapazitäten bei Bedarf zur Benutzung zu konfigurieren und nach der Benutzung freizugeben. (Siehe auch Java Hardware Definition Language[1])

Unterschiede zu Prozessoren

FPGAs bieten die Möglichkeit Informationen massiv parallel zu verarbeiten. Dadurch benötigen sie nicht so hohe Taktfrequenzen wie Prozessoren, die Informationen sequentiell verarbeiten. In einem FPGA können zig Additionen und Multiplikationen zur gleichen Zeit ausgeführt werden. Während selbst moderne Prozessoren mit SIMD-Befehlen nur einige wenige Operatoren parallel verarbeiten können.

Unterschiede zu Complex Programmable Logic Devices (CPLDs)

Die Unterschiede zu CPLDs sind im Wesentlichen:

Vorteile gegenüber ASICs

Nachteile gegenüber ASICs

Weblinks

See also: Field Programmable Gate Array, ASIC, Algorithmen, Antifuse-Technologie, CPLD, Compiler, DLL, Disjunktion, EEPROM, EPROM