Aufbau eines FPGAs
Ein FPGA besteht aus IO-Zellen, Logik-Zellen, spezialisierter (dedizierter) Hardware, Verbindungsleitungen und Verbindungsmatritzen.
Diese Elemente sind im Detail in den nächsten Kapiteln beschrieben.
IO-Zellen
Die IO-Zellen wandeln die logischen in physikalische Signale und umgekehrt.
Des weiteren dienen Sie für hochfrequente Signale zur Serialisierung und Deserialisierung von Signalen. Im einfachsten Fall wird dabei für ein DDR-Signal (double data rate) zwei logische Signale alternierend mit der steigenden und der fallenden Flanke des Takts ausgegeben (bzw. aus einem Signalverlauf am Pin entsprechend zwei logische Signale dem FPGA zur Verfügung gestellt).
Logik-Zellen
In der obigen Abbildung ist der prinzipielle Aufbau einer Logik-Zelle dargestellt, wie man ihn in fast allen FPGAs findet. Die zentrale Stelle für die Logik-Funktionen ist die Lookuptable (LUT). Der Ausgang der LUT kann in einem Flipflop gespeichert oder direkt ausgegeben werden.
Die verwendeten Flipflops sind normalerweise D-Flipflops mit Clock Enable und Set-Reset-Funktion.
Ob die positive oder negative Taktflanke die Daten übernimmt, ob Set oder Reset und ob dieser synchron oder asynchron erfolgt wird in weiteren Konfigurationsbits der Zelle festgelegt.
Die LUT ist ein ein Bit breites RAM mit n Adressleitungen. In der LUT ist die Wahrheitstabelle einer logischen Funktion gespeichert. Die Adressleitungen sind die Variablen der Funktion, der Ausgang das Ergebnis. In dem 2^n Bit RAM kann für jede Kombination der Eingangsvariablen der Ausgangswert frei definiert werden. Somit sind sämtliche logischen Verknüpfungen der n Eingangsvariablen möglich.
- Es handelt sich dabei um eine stark vereinfachte Darstellung. Beispielhaft ist hier der Multiplexer für die Taktinvertierung dargestellt. Tatsächlich befinden sich jede Menge solcher Multiplexer in einer Logik-Zelle.
Die LUT soll am folgenden Bild verdeutlicht werden. Der Einfachheit halber ist eine Lookuptable mit zwei Eingängen (also Adressleitungen) dargestellt:
E1 und E2 adressieren das RAM der Lookuptable. F ist der adressierte Wert. Im Beispiel A ist F immer dann 1, wenn sowohl E1 als auch E2 1 sind. In allen anderen Fällen ist F 0. Damit wurde also ein AND-Gatter realisiert. Im Beispiel D ist F immer dann 1, wenn E1 = 1 und E2 = 0 oder wenn E2 = 1 und E1 = 0 ist. Damit wurde ein XOR-Gatter realisiert.
Da 4 Bits in der Lookuptable gespeichert sind und jedes 1 oder 0 sein kann, sind somit 2^4 also 16 logische Funktionen realisierbar.
Für komplexe logische Funktionen, die mit n Eingangsvariablen nicht auskommen, können die Ausgangswerte F direkt verwendet werden. Ansonsten kann das Funktionsergebnis natürlich auch im zugehörigen Register gespeichert werden.
- Eine Lookuptable mit 4 Eingängen speichert 16 Bit und kann dementsprechend 216 = 65536 logische Funktionen realisieren. Eine Lookuptable mit 6 Eingängen speichert 64 Bit und kann dementsprechend über 18 Trillionen (1018) logische Funktionen realisieren.
Dedizierte Hardware
Mit Hilfe der Logik-Zellen kann man im Prinzip jegliche getaktete Hardware realisieren. Im Gegensatz zu dedizierter Hardware geht dabei die benötigte Silizium-Fläche nach oben und die erreichbare Verarbeitungsgeschwindigkeit nach unten.
Deswegen sind auf allen FPGAs noch weitere spezialsierte Hardware-Blöcke zu finden:
- Takterzeugung (PLL)
- Rechenwerke (Multiplizierer, ALU)
- Speicher (Multi-Port SRAMs)
Auf manchen FPGAs findet man auch:
- DRAM-Interfaces
- ADC/DAC
- Prozessoren mit Standard-Peripherie
- PCI Express Interfaces
- High Speed Transceiver
Verbindungen
Die einzelnen Zellen müssen natürlich miteinander verbunden werden. Dazu gibt es verschiedene Leitungselemente (für kurze oder globale Verbindungen) und Matritzen mit denen die Leitungen mit den Zellen verbunden werden können.
Um diese Verbindungen kümmert sich zwar das Synthese-Tool, aber es trotzdem gut zu wissen, das es z.B. dedizierte Clock-Leitungen gibt um Taktsignale über den ganzen Chip zu verteilen.
Zurück zu: Einführung in die FPGA-Entwicklung
Weiter zu: Die Entwicklungsumgebung