3.1 FPGA Einführung

In diesem Abschnitt wird die grundlegende Funktionsweise von FPGAs und deren Programmierung in VHDL erläutert.

3.1.1 Allgemeines

FPGA steht für Field Programmable Gate Array. Dies bezeichnet eine Art von programmierbaren Logikbausteinen, die dazu dienen, digitale Schaltungen umzusetzen. Im Gegensatz zu Mikrocontrollern, die über eine feste Anzahl von Peripheriegeräten verfügen, können FPGAs durch den Anwender individuell programmiert werden, zum Beispiel mit Timern, Schnittstellen und weiteren Funktionen.

Anders als z.B. SoC (System on Chip) oder ASIC (Application Specific Integrated Circuit) sind FPGAs flexibel und können für eine Vielzahl von Anwendungen eingesetzt werden.

Vorteile von FPGAs:

  • Hohe Flexibilität: Anpassbar an spezifische technische Anforderungen
  • Hohe Geschwindigkeit/Bandbreite: Ideal für die Signalverarbeitung und andere datenintensive Anwendungen
  • Parallele Datenverarbeitung: Ermöglicht die simultane Ausführung mehrerer Operationen
  • Geringe Latenzzeiten

Nachteile von FPGAs:

  • Komplexität: Erfordert tiefgehende technische Kenntnisse und Erfahrung in der digitalen Logikgestaltung
  • Kosten: Oft teurer in der Anschaffung im Vergleich zu Standard-Mikrocontrollern
  • Programmieraufwand: Entwicklungszeit kann erheblich sein, besonders bei komplexen Anwendungen
  • Höherer Stromverbrauch: Im Vergleich zu Mikrocontrollern

Anwendungsbereiche:

Typische Anwendungsbereiche für FPGAs sind in der Signalverarbeitung, in der Kommunikationstechnik, in der Automatisierungstechnik, in der Medizintechnik und in der Luft- und Raumfahrt.

Konkrete Anwendungsbeispiele für FPGAs umfassen die Verarbeitung von Videosignalen, wie Encoding, Decoding, Transcoding, Farbkorrektur und Bildstabilisierung. In der Kommunikationstechnik werden sie für die Signalverarbeitung, die Implementierung von Netzwerkprotokollen und die Fehlerkorrektur eingesetzt. Des Weiteren finden FPGAs Anwendung in der Automobilindustrie bei Fahrerassistenzsystemen sowie in der Medizintechnik für die Bildverarbeitung, den Betrieb von Diagnosegeräten und die Patientenüberwachung.

FPGAs sind somit besonders geeignet, wenn es um die Verarbeitung großer Datenmengen in Echtzeit geht.

3.1.2 Aufbau

Logikblöcke (CLBs)

Diese sind die primären Bausteine in einem FPGA und enthalten logische Gatter und Speicherelemente, die programmierbar sind, um eine Vielzahl von logischen Funktionen und digitalen Schaltungen zu implementieren. CLBs können miteinander verbunden werden, um komplexere Funktionen zu realisieren.

Configurable Logic Block

Input/Output Blocks (IOB)

Diese Bausteine ermöglichen die Kommunikation des FPGAs mit der Außenwelt. Sie sind an den Rändern des Chips angeordnet und stellen die Verbindungen zu den externen Pins her. IOBs sind konfigurierbar, um verschiedene Arten von Eingangs- und Ausgangssignalen zu unterstützen, darunter digitale, analoge und manchmal auch spezielle Signaltypen wie Hochgeschwindigkeits-Seriensignale.

Weitere Blöcke

Neben den CLBs und IOBs können FPGAs auch weitere Blöcke enthalten wie Speicherblöcke (RAM), Multiplizierer, PLLs (Phase-Locked Loops) und DSP-Slices (Digital Signal Processing). Diese Blöcke bieten zusätzliche Funktionen und Ressourcen für die Implementierung komplexer Schaltungen.

FPGA Architektur

Architektur

Folgende Grafik ist dem Datenblatt der Spartan 3E-Familie entnommen und gibt einen Überblick über den Aufbau der verschiedenen IC's der Familie.

Spartan 3E Family

3.1.3 Programmierung

FPGAs werden in der Regel mit Hardwarebeschreibungssprachen wie VHDL (Very High Speed Integrated Circuit Hardware Description Language) oder Verilog programmiert. Diese Sprachen ermöglichen es, digitale Schaltungen auf einer höheren Abstraktionsebene zu beschreiben und dann in die entsprechende Hardware zu synthetisieren. Synthetisieren ist der Prozess, bei dem die Schaltung in die entsprechenden Logikgatter und Speicherelemente des FPGAs übersetzt wird.

3.1.4 Design-Flow

Der Design-Flow für die Programmierung von FPGAs umfasst mehrere Schritte, die im Folgenden kurz erläutert werden:

Flow

  1. Design-Spezifikation: In diesem Schritt wird die Funktionalität der Schaltung definiert, einschließlich der Eingangs- und Ausgangssignale, der logischen Funktionen und der gewünschten Verhaltensweisen.

  2. Eingabe der Hardwarebeschreibung: Die Schaltung wird in einer Hardwarebeschreibungssprache wie VHDL oder Verilog erstellt, alternativ grafisch. Diese Beschreibung enthält die logischen Funktionen, die Verbindungen zwischen den Bausteinen und die gewünschten Verhaltensweisen der Schaltung.

  3. Funktionale Simulation: Die Hardwarebeschreibung wird simuliert, um das Verhalten der Schaltung zu überprüfen und sicherzustellen, dass sie den Spezifikationen entspricht. Bei Fehlern wird zur Eingabe zurückgekehrt und die Beschreibung überarbeitet.

  4. Synthese: In diesem Schritt wird die Hardwarebeschreibung in die entsprechenden Logikgatter und Speicherelemente des FPGAs übersetzt. Dieser Prozess wird von speziellen Synthese-Tools durchgeführt.

  5. Implementation: Die synthetisierte Schaltung wird in die FPGA-Ressourcen platziert und geroutet (Place & Route), d.h. die Verbindungen zwischen den Logikblöcken und den IOBs werden festgelegt. In diesem Schritt werden auch die Timing Constraints angewendet, z.B. maximale Taktfrequenz sowie minimale Setup- und Hold-Zeiten.

  6. Timing-Simulation: Nach der Implementation wird eine erneute Simulation mit den realen Signallaufzeiten durchgeführt. Werden Timing-Verletzungen festgestellt, muss die Beschreibung überarbeitet werden.

  7. Bitstream-Generierung: Aus dem fertig platzierten und gerouteten Design wird ein Bitstream erzeugt – eine Binärdatei, die die Konfiguration aller Logikblöcke und Verbindungen enthält.

  8. Download / Programmierung: Der Bitstream wird auf das FPGA übertragen, wodurch die gewünschte Schaltung auf dem Baustein realisiert wird.