Ein FPGA (Field Programmable Gate Array) ist ein frei programmierbarer Logikschaltkreis. Mit ihm können digitale Schaltungen realisiert werden, für die man sonst viele einzelne ICs benötigen würde. Die Schaltung kann "im Feld", also auch noch beim Anwender, verändert werden, um Verbesserungen einzuarbeiten oder Fehler zu korrigieren. Da die Funktion des FPGAs vor allem durch die Programmierung festgelegt wird, kann der gleiche Baustein für viele verschiedene Schaltungen verwendet werden. Er kann deshalb in großen Stückzahlen produziert werden, was ihn bei Prototypen und Kleinserien sehr kostengünstig im Vergleich zu einer Anwendungsspezifischen Integrierten Schaltung macht.
Die zentralen Elemente eines FPGAs sind programmierbare Logikblöcke. In diesen können logische Operationen wie AND, OR, NOT, XOR realisiert werden. Außerdem ist ihnen ein Speicherelement nachgeschaltet, dass als Flipflop oder Latch verwendet werden kann bzw. überbrückt wird, wenn eine rein kombinatorische Funktion benötigt wird. Die kombinatorische Logik wird meist durch sog. LUTs (Look-Up-Table) gebildet, das heißt in einem kleinen Speicher wird für jeden Zustand der Eingänge der Wert abgelegt, den der Ausgang annehmen soll. Der LUT-Speicher kann auch als synchrones Schieberegister oder als Speicher eingesetzt werden.
An die Logikblöcke sind Schaltmatrizen angeschlossen, mit denen über Leitungen die Verbindung zu anderen Elementen des FPGAs hergestellt wird.
Eingang/Ausgangs-Blöcke dienen der Kommunikation mit der Außenwelt, über sie werden die Pins des FPGAs mit der Schaltmatrix verbunden. Auch diese Blöcke können an die jeweilige Anwendung angepasst werden, z.B. kann die Ausgangsspannung an den jeweiligen Standard angepasst werden (TTL/CMOS usw).
In vielen FPGAs ist außerdem noch zusätzlicher Speicher integriert (sog. Block RAM), so müssen hierfür keine LUTs verwendet werden. Eine Taktaufbereitung sorgt dafür, dass überall auf dem Chip ein synchroner Takt zu Verfügung steht, zusätzlich kann dieser oft noch verdoppelt, reduziert oder die Phase verändert werden. Vor allem für Aufgaben der Signalverarbeitung wurden Multiplizierer integriert, die resourcenschonender und schneller sind, als in Logikblöcken programmierte.
Hybrid-FPGAs wie z. B. Xilinx Virtex 4 FX besitzen außerdem Hardcores wie ein oder zwei CPUs (PPC 405) und MAC-Layer für Gigabit-Ethernet. Hardcores belegen sehr viel weniger Die-Fläche und sind CPU typisch bis zu drei bis vier mal schneller als reine FPGAs, dafür jedoch auch wieder nicht mehr so flexibel.
Erstellt wird Software für einen FPGA entweder mittels einer Hardware-Beschreibungssprache, zum Beispiel VHDL oder Verilog, oder grafisch durch einen Schaltplan oder endlichen Automaten. Auch mit dem grafischen Programmiersystem LabVIEW ist eine Programmierung möglich. In den letzten Jahren gab es immer wieder Versuche FPGAs und CPLDs mit der Programmiersprache C zu beschreiben (HardwareC / SystemC) oder C in VHDL umzusetzen (Spark). Herstellerspezifische Sprachen wie Altera-HDL oder ABEL-HDL werden ebenso genutzt wie UDL/I (Japan). Zur Implementierung eingebetteter Systeme in FPGAs gibt es mittlerweile Werkzeuge, die eine Konstruktion auf Funktionsblockebene anbieten, z. B. Xilinx EDK (Embedded Development Kit). Funktionsblöcke wie Fifos, Prozessoren, serielle Schnittstellen, Ethernet-MAC-Layer, RAM-Controller, Parallel-IO etc. werden vom Hersteller zur Verfügung gestellt. Diese Funktionseinheiten –Softcore genannt– liegen im Sourcecode (ggf. auch verschlüsselt) oder als Netzliste vor und sind in der Regel parametrisierbar (z. B. Baudrate bei seriellen asynchronen Schnittstellen oder Fifo-Tiefe oder Breite der Parallelschnittstelle). Diese werden über Busse mit anderen Funktionseinheiten verbunden.
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 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).
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*)
FPGAs werden gerne zur Echtzeit-Verarbeitung einfacher Algorithmen genutzt, speziell zur Signalverarbeitung (FFT, FIR ...), Protokoll-Abarbeitung (Ethernet MAC-Layer, GPRS ...), Codierer, Fehlerkorrektur ... das heißt immer dann, wenn die Bearbeitung eines Datenstroms nicht mehr von einer CPU bewältigt werden kann (Ausgangsdatenstrom gleich groß wie Eingangsdatenstrom, in der Regel mit einer gewissen Latenz). Besonders in Bereichen, in denen Algorithmen bzw. Protokolle stürmisch weiterentwickelt werden, ist die Verwendung rekonfigurierbarer FPGAs statt ASICs angebracht (schnelle Marktreife, nachfolgende Fehlerbehebungen, Anpassung an neue Entwicklungen), weil dann nur noch die Firmware aktualisiert werden muss, statt der Neuanfertigung und Austausch eines ICs.
Die inzwischen erreichte Anzahl von Logikblöcken erlaubt die Integration eingebetteter Computersysteme in einen einzigen FPGA-Baustein inklusive CPU(s), Bussystem(en), RAM-Controller, Peripherie-Controller ...
FPGAs werden als Entwicklungsplattform für den digital-Teil von ASICs verwendet.
Programmierbare Logik | Digitaltechnik
Field-programmable gate array | FPGA | Circuit logique programmable | FPGA | FPGA | FPGA | Field Programmable Gate Array | FPGA | FPGA | Field programmable gate array | FPGA | FPGA
This article is licensed under the GNU Free Documentation License.
It uses material from the
"Field Programmable Gate Array".
Home Page • arts • business • computers • games • health • hospitals • home • kids & teens • news • physicians • recreation• reference • regional • science • shopping • society • sports • world