Übersicht Leseproben Inhaltsverzeichnis CD-ROM Ergänzungen&Druckfehler Buch bestellen

Das FPGA-Kochbuch

2.4 Aufbau eines FPGA

Ein FPGA besteht, wie der Name bereits sagt, aus einzelnen Logikblöcken, die in einer regelmäßigen Struktur (engl.: Array) angeordnet sind. Die Funktion der einzelnen Logikblöcke ist vom Anwender programmierbar. Zum Anschluß an die "Außenwelt" sind an der Peripherie des Chips I/O-Blöcke angeordnet. Zur Verbindung der einzelnen Blöcke gibt es ein Netzwerk von programmierbaren Verbindungen. Die Art und Weise, wie die Programmierbarkeit technisch realisiert ist, wird Programmiertechnologie genannt. Die verschiedenen Programmiertechnologien werden ausführlich in Kapitel 6 besprochen.

2.4.1 Logikblöcke und I/O-Blöcke

Die Hersteller verwenden unterschiedliche Bezeichnungen für die Logikblöcke: Configurable Logic Block (CLB), Logic Module, Logic Cell, Logic Element (LE), Programmable Function Unit (PFU), Core Cell oder Tile. Für die I/O-Blöcke werden folgende Bezeichnungen verwendet: I/O Block (IOB), I/O Module, I/O Cell, I/O Element (IOE), Programmable Input/Output Cells (PIC).

So unterschiedlich wie die Namen sind, so sind auch die Logikblöcke selbst sehr unterschiedlich aufgebaut. Eine wichtige Eigenschaft ist die Granularität oder Körnung des Bausteins. Wenn die Logikblöcke nur wenige Ein- und Ausgänge haben und nur wenig Anwenderlogik in einen Block implementiert werden kann, dann spricht man von einer feinen Granularität oder einem feinkörnigen Baustein. Feine Granularität ist synthesefreundlich, das heißt für die automatischen Synthesewerkzeuge ist es einfach, eine Schaltung auf die Ressourcen des Logikblocks abzubilden.

Kleine Logikblöcke können auch gut ausgenutzt werden. Je feinkörniger jedoch eine Architektur ist, um so mehr Verbindungsleitungen werden benötigt. Große Logikblöcke können mehr Logikfunktionen aufnehmen, was unter Umständen einen Geschwindigkeitsvorteil bringt. Eine optimale Granularität gibt es wohl nicht, zumal deren Effektivität auch stark von der zu implementierenden Schaltung abhängt. Untersuchungen dazu sind in [BFRV92] zu finden.

Bei den verschiedenen FPGA-Familien ist die Größe der Logikblöcke sehr unterschiedlich. Zwei extreme Architekturen sind in den Abbildungen 2.7 und 2.8 dargestellt. Das Logikmodul der ACT1-Familie von Actel entspricht nach Angaben von Actel einer Größe von 3,5 Gattern, während die PFU der OR2C-Familie von Lucent Technologies 48 Gatter groß ist.

GIF-Bild, 952 Bytes

Abbildung 2.7 ACT 1 Logikmodul

GIF-Bild, 6,3 kB

Abbildung 2.8 Programmable Function Unit (PFU) der OR2C-Familie

Die Maßeinheit Gatter (engl.: Gates) oder auch Gatteräquivalente (engl.: Gate Equivalent) entspricht einem NAND-Gatter mit zwei Eingängen. Dieses Maß stammt aus dem Bereich der Gate Arrays. Seine Anwendung für FPGAs ist problematisch, denn die Logikblöcke der FPGAs sind nicht wie Gate Arrays aus einzelnen Gattern aufgebaut. Da es für die erforderliche Umrechnung keine einheitliche Regel gibt, legen die Hersteller verschiedene Maßstäbe an. Manche Hersteller haben zusätzlich noch Einheiten wie PLD-äquivalente Gatter, TTL-Äquivalente oder PAL-Äquivalente erfunden. Da die Anzahl der Gatter ein gutes Verkaufsargument ist, dürfen wohl leider oft genug die Marketingabteilungen die Datenblätter schreiben. Rechnet ein Hersteller großzügiger, so bleibt den anderen nichts übrig, als entsprechend nachzuziehen. So hatte die Firma Atmel für ihre AT6000 FPGAs ursprünglich eine Komplexität von 2 Gattern pro Zelle angegeben. Mittlerweile sind es 6 Gatter und damit wurde aus dem 10.000er Baustein ein 30.000-Gatter FPGA. Die angegebenen Gatteräquivalente können daher nur als grobe Richtlinie betrachtet werden. Direkt vergleichbar sind nur die Angaben eines Herstellers zu seinen eigenen Bausteinen.

Die Firma Xilinx hat in jüngster Zeit als neue Maßeinheit Logic Cells vorgeschlagen. Eine Logic Cell besteht dabei aus einer Lookup Table (LUT) mit 4 Eingängen und einem Register. Da nur ein Teil der heute verfügbaren FPGA-Familien auf LUTs basieren, bleibt abzuwarten, ob sich diese Maßeinheit durchsetzt.

Jede FPGA-Familie verfolgt beim internen Aufbau der Logikblöcke ein unterschiedliches Konzept. Im wesentlichen sind 3 grundlegende Alternativen zu unterscheiden:

LUTs werden in SRAM-basierten FPGAs verwendet. Mit ihnen lassen sich beliebige kombinatorische Verknüpfungen realisieren. Dabei stellen die Eingangssignale im Grunde genommen Adressleitungen eines kleinen Speichers dar, während der Inhalt der so adressierten Speicherzelle das Ausgangssignal bildet. Die gespeicherten Daten sind so festgelegt, daß sich die gewünschte Logikfunktion ergibt. Normalerweise wird der Inhalt des LUT-Speichers nur beim Konfigurieren des Bausteins beschrieben. Bei einigen Bausteinen kann jedoch auch die Anwenderlogik auf den Speicher zugreifen und ihn somit als RAM-Bereich nutzen. In Kapitel 6 sind LUTs detaillierter beschrieben.

Aus Multiplexern aufgebaute Logikblöcke werden in Antifuse-FPGAs verwendet. Abbildungen 2.7 zeigt als Beispiel das ACT1 Logikmodul. Zu beachten ist, daß der Ansteuereingang des Multiplexers von einem Signal der Anwenderschaltung angesteuert ist. In SRAM-basierten FPGAs werden zwar auch Multiplexer eingesetzt, diese werden jedoch zumeist nicht zur Implementierung von Logikfunktionen, sondern zur Auswahl eines Signals eingesetzt. Dazu werden sie nicht von einem Signal der Anwenderschaltung, sondern von einer Programmierzelle angesteuert. Das Ansteuersignal wird daher im Blockschaltbild nicht eingezeichnet, wie auch in Abbildungen 2.8 bei den mit "C" gekennzeichneten Multiplexern zu sehen ist.

Das ACT1-Logikmodul stellt einen modifizierten 4:1-Multiplexer dar. Die 8 Eingänge und der Ausgang können über programmierbare Verbindungsleitungen mit anderen Logikblöcken verbunden werden. Mit diesem einfachen Modul kann eine beachtliche Anzahl verschiedener Logikfunktionen mit 2, 3 oder 4 Eingängen implementiert werden. Eine vollständige Liste ist in [AR95] zu finden. Abbildungen 2.9 zeigt als Beispiel die Implementierung einer einfachen UND-Funktion. Wenn B=1 ist, dann wird der Eingang A auf den Ausgang X durchgeschaltet, andernfalls ist X=0. Mit diesem Modul können nicht nur kombinatorische Funktionen implementiert werden. Als Beispiel ist die Implementierung eines SR-Latches mit negierten Eingängen dargestellt. ¬R = 0 ist, wird Q auf 0 gesetzt, da der obere Multiplexer stets 0 liefert. Wenn ¬R = 1 ist, dann wird Q auf den Ausgangswert des unteren Multiplexers gesetzt. Dieser hängt von ¬S ab. Wenn ¬S = 0 ist, dann wird Q auf 1 gesetzt, andernfalls behält Q seinen Wert. Damit erhält man genau die Funktion eines SR-Latches mit negierten Eingängen.

GIF-Bild, 1,3kB

Abbildung 2.9 Logikimplementierung mit Multiplexern

Die Sea-of-Gates-Architektur wird derzeit nur von GateField eingesetzt. Der Aufbau ist den maskenprogrammierten Gate Arrays sehr ähnlich. GateField nennt diese Anordnung Sea-of-Tiles (wörtlich: Meer aus Kacheln). Ein Tile besteht aus einer Anordnung von Transistoren, aus denen durch programmierbare Verbindungen eine Logik aus bis zu 8 Gattern gebildet werden kann.

Die I/O-Blöcke sind an der Peripherie des Chips angeordnet. Sie dienen zur Anpassung der internen Chipsignale mit den externen Signalen. Diese sind über die Bausteinpins, Bonddrähte und die Anschlußpads auf dem Chip mit den I/O-Zellen verbunden. Im einfachsten Fall besteht ein I/O-Block aus den üblichen Signalaufbereitungs- und Schutzschaltungen. Zumeist sind jedoch auch Register zum Zwischenspeichern der Ein- und Ausgänge integriert. Als weitere Option kann der Ausgangstreiber programmierbar sein, um die Signalpolarität zu beinflussen, den Ausgang hochohmig schalten zu können, einen passive Pullup-Widerstand zuschalten zu können oder die Flankensteilheit programmieren zu können.

Bei FPGA-Bausteinen, die einen dedizierten Boundary-Scan beinhalten, ist in den I/O-Zellen auch die dazu notwendige, zusätzliche Logik implementiert. Bei Bausteinen, die nur durch eine Konfiguration einen Boundary-Scan implementieren können, wird durch eine entsprechende Konfiguration der Ressourcen der I/O-Zellen die Funktion des Boundary-Scan erreicht.



... Es folgen die Unterabschnitte 2.4.2 bis 2.4.3



Der Anfang des Kapitels 4 ist ebenfalls als Leseprobe verfügbar.


Zurück zu: [ Übersicht der Leseproben | Inhaltsverzeichnis ]
© Copyright 1998 Markus Wannemacher   Kontakt