Zum Inhalt springen

Field Programmable Gate Array

aus Wikipedia, der freien Enzyklopädie
Dies ist eine alte Version dieser Seite, zuletzt bearbeitet am 17. Mai 2006 um 15:23 Uhr durch 89.50.144.54 (Diskussion) (Weblinks). Sie kann sich erheblich von der aktuellen Version unterscheiden.

Ein FPGA (Field Programmable Gate Array) ist ein frei programmierbarer Logikschaltkreis. Ein FPGA besteht aus

  1. konfigurierbaren Logikblöcken,
  2. Leiterbahnen zur Verbindung dieser Blöcke und
  3. Ein- und Ausgabetreibern der I/O-Pins des Gehäuses.

Die Logikblöcke werden auch als CLB bezeichnet (configurable logic blocks). Des weiteren existieren SRAM-Blöcke, sogenannte BRAM-Blöcke (BRAM: Block RAM), 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 sowie einfache ALUs (Arithmetic Logic Unit). 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 wiederprogrammierbare flüchtige (SRAM-basierte), nicht flüchtige wiederprogrammierbare (Flash basierend)) als auch nur einmal programmierbare (One Time Programmable, Antifuse-Technologie) FPGAs. RAM-basierte FPGAs laden ihre Hardwarekonfiguration nach Anlegen der Betriebsspannung(en) in der Bootphase aus externen Speichern, zum Beispiel FlashROM.

Aufbau und Struktur

Jeder CLB (konfigurierbarer Logikblock) besteht aus

  1. LUTs (Look Up Table),
  2. Registern,
  3. Multiplexern,
  4. einer IO-Matrix.

Die kombinatorische Logik mit Operationen wie AND, OR, NOT, XOR wird in den LUTs dargestellt. Diesen sind Register nachgeschaltet. Alle Ein- und Ausgänge innerhalb des CLB führen zur IO-Matrix, welche die frei wählbaren Verbindungen zu den ca. neun Metalllayern bereitstellt. 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 binären Ausgangswerte eines Ausgangs bei vier Eingangswertekombinationen zulässt. In den CLBs sind Flipflop-Register, oft in Form von D-Latches. Die der kombinatorischen Logik nachgeschalteten Latches können mit Hilfe der Multiplexer genutzt oder umgangen werden. Der LUT-Speicher kann 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, zum Beispiel 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.

Zur Implementierung eingebetteter Systeme in FPGAs gibt es mittlerweile Werkzeuge, die eine Konstruktion auf Funktionsblockebene anbieten, z.B. Xilinx EDK (Embedded Development Kit). Es gibt Bussysteme, Prozessoren, serielle Schnittstelle, Ethernet-MAC-Layer, RAM-Controller, Parallel-IO usw ... Die Funktionseinheiten –Softcore genannt– liegen im Sourcecode vor (VHDL, Verilog o.ä.), ggf. auch verschlüsselt, oder liegen als Netzliste vor und sind i.d.R. parametrisierbar (z.B. Baudrate bei seriellen asynchronen Schnittstellen oder Fifo-Tiefe oder Breite der Parallelschnittstelle). Diese werden über Busse mit anderen Funktionseinheiten verbunden, dann erfolgt das Memorymapping der Register und Speicherbereiche und andere Einstellungen. 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 ca 3..4 Mal schneller als äquivalente Softcores.

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).

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])

FPGAs werden gerne zur Echtzeit-Verarbeitung einfacher Algorithmen genutzt, speziell zur Signalverarbeitung (FFT, FIR ...), Protokoll-Abarbeitung (Ethernet MAC-Layer, GPRS ...), Codierer, Fehlerkorrektur ... d.h. immer dann, wenn die Bearbeitung eines Datenstroms nicht mehr von einer CPU bewältigt werden kann (Ausgangsdatenstrom gleich groß wie Eingangsdatenstrom, i.d.R. 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 upgedatet 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 ... (http://www.f-cpu.org , http://www.opencore.org)

FPGAs werden als Entwicklungsplattform für den digital-Teil von ASICs verwendet.

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 Operanden parallel verarbeiten können.

Unterschiede zu Complex Programmable Logic Devices (CPLDs)

Die Unterschiede zu CPLDs sind im Wesentlichen:

  • durch Blockarchitektur und frei programmierbaren Signalfluss keine exakte Berechnung der Gatterlaufzeiten möglich
  • bei FPGAs, die auf SRAM-Technologie basieren, erfolgt eine Konfiguration bei jedem Start (heutzutage meist aus externem EEPROM oder via JTAG vom Prozessor her), bei CPLDs die auf Flash- oder Antifuse-Technologie basieren entfällt logischerweise die Konfiguration.

Vorteile gegenüber ASICs

  • geringe Entwicklungskosten
  • sehr kurze Implementierungszeiten
  • einfach korrigier- und erweiterbar (rekonfigurierbar)
  • geprüftes Silizium
  • geringeres Designrisiko, da es nicht 6 Monate vor der Hardwareauslieferung fertig sein muss

Nachteile gegenüber ASICs

  • ab mittleren Stückzahlen höherer Stückpreis
  • geringere Taktraten (max. ca. 500 MHz)
  • geringere Logikdichte (ca. 10facher Flächenbedarf gegenüber ASIC gleicher Technologie)
  • höherer Energiebedarf