3.1 FPGA Einführung

In diesem Abschnitt wird die grundlegende Funktionsweise von FPGA's 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 FPGA's flexibel und können für eine Vielzahl von Anwendungen eingesetzt werden.

Vorteile von FPGA's:

  • 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
  • Geringer Stromverbrauch: Im Vergleich zu Mikrocontrollern
  • Geringe Latenzzeiten

Nachteile von FPGA's:

  • 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

Anwendungsbereiche:

Typische Anwendungsbereiche für FPGA's 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 enthalten FPGA's 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 entommen und gibt einen Überblick über den Aufbau der verschiedenenen IC's der Familie.

Spartan 3E Family

3.1.2 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.3 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 graphisch. Diese Beschreibung enthält die logischen Funktionen, die Verbindungen zwischen den Bausteinen und die gewünschten Verhaltensweisen der Schaltung.

  3. Simulation: Die Hardwarebeschreibung wird simuliert, um das Verhalten der Schaltung zu überprüfen und sicherzustellen, dass sie den Spezifikationen entspricht.

  4. Timing Constraints: In diesem Schritt werden die Timing-Anforderungen der Schaltung definiert, z.B. maximale Taktfrequenz, minimale Setup- und Hold-Zeiten.

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

  6. Implementierung: Die synthetisierte Schaltung wird in die FPGA-Ressourcen platziert und geroutet, d.h. die Verbindungen zwischen den Logikblöcken und den IOBs werden festgelegt.