Programmierbare Logik

Field Programmable Gate Array

aus Wikipedia, der freien Enzyklopädie

Wechseln zu: Navigation, Suche

Ein FPGA ist ein programmierbarer Integrierter Schaltkreis (IC) der Digitaltechnik. Die englische Abkürzung steht für Field Programmable Gate Array und kann als „Vor Ort modifizierbarer Logikbaustein“ übersetzt werden. In FPGAs können durch spezifische Konfiguration interner Strukturen die verschiedenartigsten Schaltungen gebildet werden. Diese reichen von geringer Komplexität, wie z. B. einfacher Synchronzähler, bis zu hochkomplexen Schaltungen, wie Mikroprozessoren. FPGAs werden in allen Bereichen der Digitaltechnik eingesetzt, vor allem aber dort, wo es auf schnelle Signalverarbeitung und flexible Änderung der Schaltung ankommt, um beispielsweise nachträgliche Verbesserungen an den implementierten Funktionen vornehmen zu können, ohne dabei direkt die physikalische Hardware ändern zu müssen.

Mit FPGAs wurden kompakte anwenderspezifische Schaltungen in geringen Stückzahlen möglich. Heutzutage gestatten sie die preiswerte und flexible Fertigung komplexer Systeme wie Mobilfunk-Basisstationen als Alternative zur teureren Auftragsfertigung durch Halbleiterhersteller.

Ein FPGA der Firma Altera
Ein FPGA der Firma Altera

Inhaltsverzeichnis

[Bearbeiten] Aufbau und Struktur

Der FPGA beinhaltet programmierbare logische Komponenten, meist mit einer Pfadbreite von einem Bit, weshalb FPGAs als feinkörnig rekonfigurierbar gelten, und programmierbare Verbindungsleitungen mit steuerbaren Schaltern zwischen diesen Komponenten. Das Ganze ist als Feld bzw. Matrix gefertigt, woraus sich der Name dieses Bausteins ableitet (Matrix (dt.)= array (engl.)).

Die Komponenten können grundlegende logischen Funktionen wie AND, OR, NOR, NOT und NAND abbilden. Sie können zu komplexerer Logik wie einem Decoder, Encoder oder mathematischen Funktionen zusammengefasst und verknüpft werden.

Der FPGA wird nach der Herstellung vom Anwender programmiert, der diesen Baustein in seiner Schaltung einsetzt. Allerdings ist der Begriff Programmierung in diesem Kontext anders zu verstehen als bei der Erstellung von Software für einen Prozessor: In einem FPGA werden Schaltungsstrukturen mittels Hardwarebeschreibungssprachen oder in Form von Schaltplänen erstellt und nachfolgend diese Daten zwecks Konfiguration in den Baustein übertragen. Im FPGA werden dadurch bestimmte Schalterstellungen aktiviert bzw. deaktiviert, was dann eine konkret implementierte digitale Schaltung ergibt.

Da die Funktion des FPGAs ausschließlich durch die Konfiguration festgelegt wird, kann der gleiche Baustein für viele verschiedene Schaltungen und Anwendungen 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 (ASIC) macht. FPGAs sind dafür im allgemeinen langsamer als ASICs und nicht beliebig tief bzw. kompliziert programmierbar. Die Tiefe der programmierbaren Logik ist von der Vorbereitung durch den Hersteller abhängig. Gemessen wird das an der Anzahl der logischen Komponenten, der I/O-Ports und der Flipflops, die sich in einem FPGA befinden.

[Bearbeiten] Innere Struktur

Beispielhafter Logikblock eines FPGAs, mit LUT und Flipflop
Beispielhafter Logikblock eines FPGAs, mit LUT und Flipflop

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, das 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, als Speicher oder Teil von Rechenfunktionen eingesetzt werden.

Darüber hinaus können je nach konkretem Baustein in den programmierbaren Logikblöcken weitere Funktionen integriert sein, beispielsweise zusätzliche Schaltungsteile für den Aufbau von Addierstufen.

Schaltmatrix als Verbindungsstruktur zwischen Logikblöcken
Schaltmatrix als Verbindungsstruktur zwischen Logikblöcken

Die Logikblöcke sind untereinander über Schaltmatrizen gekoppelt, mit denen über Leitungen die Verbindung zu anderen Elementen des FPGAs hergestellt wird. In nebenstehender Abbildung ist ein Teil dieser Schaltungsanordnung dargestellt: Die schwarzen Verbindungsleitungen können durch konfigurierbare Schalter (rote Kreise) verschiedene Verbindungen zwischen den einzelnen Funktionsblöcken des FPGA herstellen.

Weitere meist übliche Elemente eines FPGAs sind:

  • Eingangs-/Ausgangs-Blöcke (engl. IO-Blocks) 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.).
  • 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. Moderne FPGAs besitzen typischerweise eine oder mehrere PLLs, mit denen sich rational gebrochene Taktunterteilungen/-vervielfachungen erzeugen lassen. Den gleichen Zweck erfüllen Delay-locked loops (DLL) und digital frequency synthesizer (DFS), die mancher FPGA-Hersteller gegenüber der PLL bevorzugt.
  • In komplexen FPGAs sind zusätzliche fest verdrahtete Funktionen enthalten, wie z. B. Speicherblöcke (sog. Block RAM), der sich in vielfältiger Weise nutzen lässt.
  • Für Aufgaben der digitalen Signalverarbeitung wie bei digitalen Filtern sind in manchen FPGAs auch Multipliziereinheiten enthalten. Diese erlauben es, besonders schnell zwei Binärzahlen zu multiplizieren ohne dafür Logikzellen zu benötigen.
  • FPGAs, die im Bereich von System on a Chip (SoC) Anwendung finden, besitzen eine Reihe meist komplexer Hard-Cores um ein komplettes System aufzunehmen. Hard-Cores sind feste und unveränderliche Schaltungen von meist komplexen Funktionsblöcken, wie beispielsweise Mikrocontroller oder Ethernetschnittstellen. Komplexe Hard-Cores belegen sehr viel weniger Chipfläche als es die gleiche Funktion, realisiert mit Logikblöcken, benötigen würde und sind typischerweise drei- bis viermal schneller als die frei konfigurierbare Logik der FPGAs. Dafür sind diese Schaltungsteile nicht so flexibel und können in ihrer Funktion auch nicht mehr verändert werden.

Hersteller wie Xilinx bieten mittlerweile auch auf SRAM basierende FPGAs an, die bereits über im Chipgehäuse untergebrachten Flash-Speicher zur Konfiguration verfügen und keinen externen Flash-Speicher mehr benötigen. Man nennt solche integrierten Schaltungen mit mehreren Chips in einem Gehäuse auch Multi-Die. Die Lade- bzw. Startzeiten des FPGAs bleiben im Vergleich zu externen 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 kleineren CPLDs durch Flash- bzw. EEPROM-Zellen zu ersetzen.

[Bearbeiten] 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:

  • CPLDs weisen im Vergleich zu FPGA eine wesentlich einfachere Struktur auf. CPLDs besitzen kein feinmaschiges Array (Feld) von Logikblöcken und Flip-Flops, 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 (engl. timing constraints).
  • CPLDs weisen vergleichsweise wenige Flip-Flops auf. Vor allem längere Schieberegister, Zähler, Zustandsspeicher und ähnliche Schaltungen, die viele Flip-Flops benötigen, sind in CPLD nur ineffizient zu realisieren.
  • CPLDs besitzen, da jeder IO-Pin ein Flip-Flop 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 (engl. 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 90er 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.

[Bearbeiten] Entwurfsschritte und -werkzeuge

Erstellt wird die Konfiguration eines FPGAs meist mittels einer Hardwarebeschreibungssprache, zum Beispiel VHDL oder Verilog, welche die gesamte Funktion der Schaltung in Form von Strukturen und Abläufen beschreibt. Ein sogenanntes Synthesetool erstellt dann aus diesen Daten für einen gewünschten Baustein eine spezifische Netzliste unter Nutzung der in diesem Baustein verfügbaren Ressourcen. Zuvor wird im Rahmen des Entwicklungsprozesses die Hardwarebeschreibung mittels Simulationswerkzeugen in ihrem Verhalten simuliert und optimiert. Bekanntestes Werkzeug hierfür ist ModelSIM.

Die Konfigurationsdaten können aus Übersichts- oder Vereinfachungsgründen bei meist einfachen Schaltungen auch grafisch mittels eines Schaltplans eingegeben werden. Die im FPGA erforderlichen Ablaufsteuerungen wiederum lassen sich durch endliche Automaten darstellen. Der hardwarebeschreibende Code wird dann in einem Zwischenschritt automatisch erzeugt. Darüber hinaus lassen sich mit grafischen Programmiersystemen wie LabVIEW oder Matlab / Simulink ebenfalls Schaltungsmodule für ein FPGA automatisch erstellen.

In den letzten Jahren gab es immer wieder Versuche, FPGAs und CPLDs mit der Programmiersprache C zu beschreiben (HardwareC / HandelC / BachC) oder C in VHDL umzusetzen (Spark). Aktuelle Ansätze bauen hierbei direkt auf den weit verbreiteten Standardsprachen ANSI C bzw C++ auf. So ist in den letzten Jahren eine wachsende Anzahl an Benutzern und Toolherstellern für SystemC zu beobachten, welches als Klassenbibliothek direkt auf C++ aufsetzt und dadurch mit bereits vorhandenen Entwicklungsumgebungen zumindest bis zur Simulation problemlos auskommt. Ein anderer Ansatz ist hier die direkte Verwendung von ANSI C, wie es beispielsweise Mentor Graphics mit ihrem Catapult Synthesis oder Forte Design Systems mit ihrem Cynthesizer unterstützen. Welcher Ansatz langfristig die größere Verbreitung finden wird, muss sich erst noch herausstellen. Jedenfalls ist es zwischenzeitlich klar, dass hier kein schneller Umbruch bei den EDA-Anwendern stattfinden wird, sondern sich die momentan verbreitete Enwicklungsmethode basierend auf VHDL oder Verilog noch lange halten wird. Dieser Prozess könnte sich aber durch die Verfügbarkeit neuer Tools und neuer Standardversionen, beispielsweise durch SystemC TLM 2.0 beschleunigen.

Herstellerspezifische Sprachen wie Altera-HDL (AHDL) oder auch die kaum noch verwendete Hardwarebeschreibungssprache ABEL wurden 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, IP-Core genannt, liegen manchmal als Quellcode, oder meist als verschlüsselte 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 (Place and Route) 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, das 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).

Für FPGAs wird beim Schaltungsentwurf ein synchrones Schaltungsdesign empfohlen (wenngleich nicht zwingend erforderlich). Das bedeutet: An allen Flipflops in einer so genannten Clock-Domain liegt der gleiche Takt. Gesteuert wird die Datenübernahme in ein Flipflop nur über die zusätzlich vorhandenen Clock Enable-Eingänge und nicht über geteilte Taktsignale (engl. gated clocks). Das vermeidet schwer handhabbare Laufzeiteffekte. Manche FPGAs bieten spezielle Taktumschalter an, die das garantiert störungsfreie Umschalten (glitch-frei) zwischen verschiedenen Taktquellen im Betrieb erlauben.

[Bearbeiten] Anwendungsgebiete

FPGAs haben in den letzten Jahren ihren Anwendungsbereich von der klassischen „Glue-Logic“, also der reinen Verbindungslogik zwischen verschiedenen digitalen Bausteinen, zunehmend erweitert und werden heute auch bei mittleren Stückzahlen für die Realisierung komplexer digitaler Schaltungen bis hin zu kompletten digitalen Systemen eingesetzt. Durch die Rekonfigurierbarkeit von FPGAs direkt beim Endanwender besteht darüber hinaus der wesentliche Vorteil, auf aktuelle technische Entwicklungen reagieren zu können und die digitalen Schaltungen durch Updates anpassen zu können, ohne direkt die zugrundeliegende Hardware der FPGA-Chips verändern zu müssen.

FPGAs werden beispielsweise zur Echtzeit-Verarbeitung von einfachen bis komplexen Algorithmen genutzt, zur digitalen Signalverarbeitung im Rahmen von digitalen Filtern oder zur schnellen Fourier-Transformation. Aber auch Protokoll-Implementierungen wie Teile des Ethernet-MAC-Layers, die Kodierung von digitalen Videosignalen, die Verschlüsselung von Daten und Fehlerkorrekturverfahren sind Anwendungsgebiete.

Besonders in Bereichen, in denen Algorithmen bzw. Protokolle einer schnellen Weiterentwicklung unterliegen, ist die Verwendung rekonfigurierbarer FPGAs statt ASICs angebracht. Die Vorteile sind schnelle Marktreife, nachfolgende Fehlerbehebungen, Anpassung an neue Entwicklungen.

Für einige Klassen von Rechenproblemen sind auch FPGA-basierte Parallelcomputer sehr geeignet. Das wahrscheinlich bekannteste Beispiel sind FPGA-Rechner zum Brechen kryptographischer Verfahren, wie dem Data Encryption Standard (DES). Der aus 120 FPGAs bestehende Parallelrechner COPACOBANA ist ein solcher Parallelcomputer zum Codebrechen.

Die inzwischen erreichte Anzahl von Logikblöcken erlaubt die Integration mehrerer eingebetteter Computersysteme in einen einzigen FPGA-Baustein inklusive CPU(s), Bussystem(en), RAM, ROM, RAM-Controller, Peripherie-Controller etc. Solche kompletten Systeme werden als System on a Chip (SoC) bezeichnet.

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

[Bearbeiten] Vergleich mit CPUs / Mikrocontrollern

FPGAs bilden je nach Konfiguration beliebige Anordnungen digitaler Schaltungsfunktionen ab und bieten damit grundsätzlich die Möglichkeit, Informationen vollkommen parallel zu verarbeiten. So können die anfallenden Datenflüsse in Bandbreite und Informationstiefe optimal einander angepasst werden. Schnell zu erfassende Signale werden dabei oft voll parallel, langsamer auftretende Signale vermehrt zyklisch und damit platzsparend verarbeitet. Die dafür nötigen Strukturen werden geeignet erzeugt.

Herkömmliche Prozessoren hingegen sind reine endliche Zustandsautomaten, die mit einer festgelegten Hardware auskommen müssen und ihr Programm sequentiell abarbeiten, woraus sich auch wesentliche Unterschiede in der Gestaltung bei der Implementierung von Algorithmen ergeben.

In einem FPGA können hunderte 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. Damit können spezifische Aufgaben in gleicher Zeit mit wesentlich geringeren Taktraten erledigt werden. Ferner lassen sich die parallel existierenden Architekturen zu echten Pipelines zusammenschalten, welche die Daten mit jedem Clock weiterreichen. Hierdurch wird ein maximaler Datendurchsatz erzielt.

Viele Veröffentlichungen aus unterschiedlichsten Anwendungsgebieten berichten über Migration einer Anwendung von Software nach Configware mit Beschleunigungsfaktoren von einer bis zu 4 Größenordnungen. Deshalb finden FPGAs neuerdings Eingang beim Reconfigurable Computing.

[Bearbeiten] Vergleich mit ASICs

[Bearbeiten] Vorteile

  • deutlich geringere Entwicklungskosten (im Ggs. zu ASICs werden keine Masken mit sehr hohen Fixkosten benötigt)
  • sehr kurze Implementierungszeiten
  • einfach korrigier- und erweiterbar (rekonfigurierbar)
  • geprüftes Silizium
  • geringeres Designrisiko, da es nicht Monate vor der Hardwareauslieferung fertig sein muss

[Bearbeiten] Nachteile

  • ab mittleren Stückzahlen höherer Stückpreis
  • geringere Taktraten (aktuell verfügbar bis 600 MHz, typisch 20–250 MHz)
  • geringere Logikdichte (ca. 10-facher Flächenbedarf gegenüber ASIC gleicher Technologie)
  • höherer Leistungsbedarf für gleiche Logik
  • höhere Empfindlichkeit gegen Strahlen und elektromagnetische Wellen
  • weniger Flexibilität was Ausstattung z. B. mit eingebettetem Speicher oder analogen Elementen angeht, aber auch bei IO-Buffern
  • der kürzere Designzyklus und die Möglichkeit sehr spät noch Fehler korrigieren zu können, verleitet dazu, im Vorfeld weniger funktionale Tests durchzuführen.
  • SRAM-basierte FPGAs (das sind z. B. alle von den Marktführern Xilinx und Altera angebotenen) müssen bei jedem Systemstart geladen werden. Es sind also zusätzliche externe Komponenten notwendig, z. B. ein herstellerspezifisches EEPROM oder Flash-Speicher, das die Konfiguration enthält, oder ein Mikrocontroller mit zusätzlichem Flash-Speicher, der den Ladevorgang durchführt. Das bedeutet auch, dass die Funktionalität eines FPGAs nicht direkt nach dem Einschalten zur Verfügung steht, sondern erst nach dem Laden, was je nach eingesetzter Technik einige Zeit dauern kann.

[Bearbeiten] Siehe auch

Reconfigurable Computing, FPAA (Field Programmable Analog Array)

Commons
 Commons: Field Programmable Gate Array – Bilder, Videos und Audiodateien

[Bearbeiten] Weblinks

[Bearbeiten] Hersteller von FPGAs

[Bearbeiten] weiterführende Informationen

Copyright © 2005-2010 Hardware-Aktuell. Alle Rechte vorbehalten.