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

Das FPGA-Kochbuch

6 Programmiertechnologien

Die auf dem FPGA vorhandenen Logikfunktionen und Verbindungsleitungen können so programmiert werden, daß sie eine bestimmte, vom Anwender gewünschte Schaltung realisieren. Vereinfacht gesagt: Eine bestimmte Anwenderschaltung kann in das FPGA programmiert werden. Der Begriff Programmierung ist dabei etwas unglücklich gewählt, denn es wird nicht wie bei einem Mikroprozessor ein ablauffähiges (Software-) Programm geladen. Vielmehr werden die auf dem FPGA vorhandenen (Hardware-) Ressourcen nach den Wünschen des Anwenders konfiguriert. Daher ist es sinnvoller, von einer Konfigurierung des FPGA zu sprechen. Entsprechend wird kein Programm, sondern eine Konfiguration in das FPGA geschrieben. Es hat sich jedoch eingebürgert, beide Begriffe zu benutzen. Dies ist unproblematisch, solange keine Verwechslungsgefahr besteht. Im Bereich des Reconfigurable Computing wird die Konfigurierung auch als strukturale Programmierung oder Strukturprogrammierung bezeichnet werden, da die Struktur der Hardware programmiert wird. Im Gegensatz zu einem Computer mit einer sequentiellen oder Ablaufprogrammierung wird dann nicht von Software sondern von Configware gesprochen. Weiterhin wird auch der Begriff Personalisierung (engl.: personalization) benutzt.

Die programmierbaren Verbindungen und Funktionen in einem FPGA werden als Programmierelemente bezeichnet. Die Art und Weise, wie diese Programmierelemente physikalisch realisiert werden, wird Programmiertechnologie genannt.

Prinzipiell ist zwischen reversiblen und irreversiblen Programmiertechnologien zu unterscheiden. Bei den reversiblen Technologien wird die Konfiguration in Speicherzellen abgelegt. Dies können SRAM-, EPROM-, EEPROM- oder Flash-PROM-Zellen sein. Mit dem Ausgangssignal einer solchen Speicherzelle kann, wie Abbildung 6.1 zeigt, (a) ein Durchgangsgatter (engl.: Pass Transistor) oder (b) ein Multiplexer angesteuert werden, oder es wird (c) aus mehreren Zellen eine sogenannte Lookup Table (LUT) gebildet.

GIF-Bild, 1,2 kB

Abbildung 6.1 Programmierelemente mit Speicherzelle

Das durch eine Speicherzelle angesteuerte Durchgangsgatter dient als Verbindungselement, auch als Programmable Interconnect Point (PIP) bezeichnet. Die Leitungssegmente, die an beiden Seiten des Transistors angeschlossen sind, sind je nach Zustand der Speicherzelle miteinander leitend verbunden oder nicht. Durch den Transistor wird ein zusätzlicher Widerstand in die Signalleitung eingeführt, der eine entsprechende Signallaufzeit verursacht.

Bei dem Multiplexer entscheidet der Inhalt der Speicherzelle darüber, welche der Eingangsleitungen auf den Ausgang durchgeschaltet wird.

Lookup Tables (Nachschlagetabellen) dienen als Funktionsgeneratoren, d.h. mit ihnen können beliebige boolsche Funktionen realisiert werden. Sie sind wie ein normaler Speicher aufgebaut, wobei für jede der 2n möglichen Kombinationen an den n Eingängen eine Speicherzelle existiert. Mit den n Eingängen wird eine der Speicherzellen in der LUT adressiert. In dieser ist der Wert der boolschen Funktion für die angelegte Eingangskombination abgespeichert. Die Durchlaufzeit der LUT ist genau die Zugriffszeit auf eine Speicherzelle und damit unabhängig von der realisierten Funktion. Das bedeutet aber auch, daß die Eingänge – bei entsprechender Änderung des Speicherinhalts – beliebig vertauscht werden können, ohne an dem zeitlichen Verhalten etwas zu verändern. Diese Eigenschaft kann beim Verdrahten der Schaltung genutzt werden.

In Abbildung 6.2 ist eine LUT mit 2 Eingängen dargestellt. Sie besteht aus einem 4x1 RAM. Als Beispiel ist das RAM mit den Daten 0-1-1-0 belegt. Damit wird die Funktion

y = a · ¬b + ¬a · b = a xor b

also die XOR-Funktion implementiert.

GIF-Bild, 1,2 kB

Abbildung 6.2 LUT mit 2 Eingängen

Bei einigen Bausteinen können die Lookup Tables auch als normale RAM-Bereiche konfiguriert werden, die von der Anwenderschaltung ansprechbar sind. Ansonsten sind die Konfigurations-Speicherzellen strikt von der Anwenderschaltung getrennt und können nur durch eine von der Anwenderschaltung getrennte Programmierschaltung beschrieben und auch ausgelesen werden. Als Ausnahme gilt hier die XC6200-Familie von Xilinx. Bei diesen Bausteinen können alle Zellen des Konfigurationsspeichers, wie auch alle Register der Anwenderschaltung direkt beschrieben und ausgelesen werden.

In den FPGA-Bausteinen gibt es zumeist keine speziellen Bereiche für den Konfigurationsspeicher. Vielmehr sind die Speicherzellen über den Chip verteilt, so daß sie in der Nähe der Logikelemente angeordnet sind, die sie kontrollieren.

Bei der reversiblen Programmierung ist eine Rekonfigurierung des FPGA möglich. Dazu müssen die Inhalte der Speicherzellen neu beschrieben werden. Bei der irreversiblen Programmiertechnologie wird die Konfiguration einmalig unveränderbar in den Baustein "gebrannt". Dies wird auch als One Time Programmable (OTP) bezeichnet. Als Programmierelement dient dabei die sogenannte Antifuse. Diese funktioniert – wie ihr Name schon sagt – umgekehrt wie eine normale Schmelzsicherung. Durch das Anlegen einer Spannung wird eine Isolierschicht aufgeschmolzen und so eine elektrisch leitende Verbindung erzeugt. Zur Zeit gibt es vier Antifuse-Technologien. Abbildung 6.3 zeigt alle Programmiertechnologien im Überblick.

GIF-Bild, 1,8 kB

Abbildung 6.3 Die verschiedenen Programmiertechnologien im Überblick

Alle Programmiertechnologien haben ihre prinzipiellen Vor- und Nachteile, die sie jeweils für bestimmte Anwendungen prädestinieren. Neben der Rekonfigurierbarkeit ergeben sich weitere Unterschiede in der Größe eines Programmierelements, dem Herstellungsaufwand in der Prozeßtechnologie und natürlich in den elektrischen Eigenschaften eines Verbindungselementes. Nach den Beschreibungen der einzelnen Technologien folgt in Abschnitt 6.4 ein Vergleich und eine Bewertung. Die Tabelle 6.1 zeigt die Verwendung der Programmiertechnologien in den einzelnen Bausteinfamilien.

Technologie Bausteinfamilien Hersteller
SRAMES (Embedded SPGA)Actel
SRAMFLEX6000, FLEX8000, FLEX10KAltera
SRAMAT6000, AT40KAtmel
SRAMDL5000DynaChip
SRAMIBM 10016 (keine Markteinführung)IBM
SRAMATT3000, ATT1C, ATT2C, OR2C/T, OR3C/T Lucent Technologies
SRAMMPA1000Motorola
SRAMCLAyNational Semiconductor
SRAMVF1Vantis
SRAMXC2000, XC3000, XC4000, XC5200, XC6200, Spartan, VirtexXilinx
Flash-EPROMGF100K, GF250FGateField
MicroFuseCP20K, CrossFire CP100K (nicht am Markt)Crosspoint Solutions
MicroViaXC8100 (keine Markteinführung)Xilinx
PLICEACT1, ACT2, ACT3, 1200XL, A3200DX, MXActel
ViaLinkpASIC380, ULTRA38000 (nicht am Markt)Cypress
ViaLinkpASIC1, pASIC2, pASIC3QuickLogic

Tab. 6.1: Verwendung der Programmiertechnologien in den Bausteinfamilien



... Es folgen die Abschnitte 6.1 bis 6.6


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