article

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.

Aufbau und Struktur


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.

Entwurfsschritte und -werkzeuge


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

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

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.

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 (aktuell tatsächlich verfügbar bis 550 MHz)
  • geringere Logikdichte (ca. 10-facher Flächenbedarf gegenüber ASIC gleicher Technologie)
  • höherer Energiebedarf

Weblinks


  • http://www.xilinx.com/ FPGA-Hersteller (Marktführer)
  • http://www.actel.de FPGA Hersteller (Bietet Bausteine in FLASH-Technologie sowie strahlungsresistenete Antifuse-FPGAs)
  • http://www.altera.com/ FPGA-Hersteller (Bietet den Kunden einfachen und relativ günstigen Migrationspfad vom FPGA zu strukturierten ASICs - "HardCopy II")
  • http://www.latticesemi.com/ FPGA-Hersteller (Haben auch noch GAL-Technik im Angebot)
  • http://www.opencores.org/ * Open Source IP Entwicklungsresource
  • http://www.ni.com/fpga/ LabVIEW FPGA Seite
  • http://www.labview-forum.com/forum/index.php?showforum=63 LabVIEWforum Bereich FPGA
  • http://www-li5.ti.uni-mannheim.de/research/fpga-processors FPGA Seiten der Uni Mannheim
  • http://www.fpga4fun.com/ Projekte und Hintergrund Informationen auf englisch
  • http://www.fpga-faq.org/ FAQ für Designer von FPGA-Systemen
  • http://www.openFPGA.org/ Initiative für eine einheitliche Programmierschnittstelle
  • http://www-ihs.theoinf.tu-ilmenau.de/~sane/projekte/progstruct/progstruct.html Ein Applet zum interaktiven experimentieren mit ROM,
  • http://www.digilentinc.com Starterkit für FPGA Programmierung zu Hause
PLA und PAL
  • http://www.fpgaarcade.com Spieleprogrammierung für FPGA-Systeme

  • http://www.f-cpu.org Freie CPU
  • http://www.opencore.org Opensource logiken
  • http://www.gaisler.com/ SPARC unter der LGPL

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 Pageartsbusinesscomputersgameshealthhospitalshomekids & teensnewsphysiciansrecreationreferenceregionalscienceshoppingsocietysportsworld