C-zu-FPGA-Synthese: FPGAs mit C füttern

FPGAs sind eine ideale Möglichkeit, rechenintensive Algorithmen durch Hardware zu beschleunigen. Doch die spezielle Programmierung mit VHDL schreckt viele ab. Ein Tool, das C-Code für den FPGA umwandelt, senkt die Eintrittshürde.

Der Impulse CoDeveloper ist ein Entwicklungswerkzeug, das C-Code in Hardware-beschleunigte FPGA-Routinen umsetzt (Bild 1). Das lohnt sich besonders für Anwendungen der Bild- und Video-Bearbeitung, der digitalen Signalverarbeitung sowie für Datenkomprimierung und -verschlüsselung. Der CoDeveloper verarbeitet ANSI-C-Code und enthält einen Software-zu-Hardware-Compiler, einen „Parallel Opti-mizer“ und sog. „Platform Support -Packages“ für FPGAs von Xilinx und -Altera.

Mit Impulse C lassen sich C-Algorithmen in FPGA-Hardware konvertieren - oft nur innerhalb weniger Stunden, verspricht der Hersteller. Impulse C vereinfacht das Profiling und Debugging der Algorithmen, so dass sich leistungskritische Codesegmente identifizieren und optimieren lassen.

Profiling bedeutet: Der Code wird zur Laufzeit analysiert und es werden Statistiken erzeugt, die zeigen, welche Codesegmente z.B. besonders häufig ablaufen. Mit einem Parallelisierungs-Optimizer von Im-pulse können verschiedene Szenarien ausprobiert werden, so dass die Systemleistung schrittweise verbessert wird. Dabei können z.B. nur einfache Hardware-Prozesse für die Abarbeitung im FPGA-Modul erzeugt werden. Oder es wird eine Hardware-beschleunigte Peripherie-Einheit auf dem FPGA erzeugt. Und schließlich gibt es noch die Möglichkeit, den Code auf Haupt- und Coprozessor/FPGA zu verteilen.

Hierbei wird stets derselbe C-Code von Impulse C verarbeitet, nur die Einstellungen für Hardware- und Software-Targets sind unterschiedlich. FPGAs sind durch die ihnen innewohnende Parallelität schneller als hochgetaktete Universal-Prozessoren. Mit Impulse C kann diese Parallelität in vergleichsweise einfacher Weise evaluiert und erschlossen werden - sowohl auf der Ebene des Gesamtsystems als auch auf Befehlsebene. Für letztes bietet der Impulse-C-Compiler Optimierungen wie „operator scheduling“, das Auflösen von Schleifen und Pipelining. Wenn die C-Debugging-Werkzeuge nicht ausreichen oder das Projekt umfangreich getestet werden soll, bietet Impulse mit dem CoValidator ein Testwerkzeug an, das neben der Erzeugung von Testfällen auch eine VHDL-Simulation durchführt.

Die Umsetzung eines Projekts vollzieht sich in sieben Schritten:

  • Quellcode erstellen wie immer.
  • Analyse des Laufzeitverhaltens und Aufteilen des Algorithmus zwischen Prozessor und FPGA.
  • Verifikation und Debugging mit Standard-C-Werkzeugen. Der Impulse Application Monitor hilft bei der Analyse des parallelen Datenflusses.
  • Compilieren und Optimieren mit grafischen Tools. Kritische Code-Abschnitte werden parallelisiert oder mit Pipelines verarbeitet.
  • Automatische Erzeugung von FPGA-Hardware mit der präferierten FPGA-Plattform.
  • Automatische Erzeugung von Interfaces zwischen Host und FPGA.
  • Auswahl einer FPGA-Plattform. Die Impulse-C-Tools sind plattformneutral und unterstützen viele FPGAs.

Die Produkte von Impulse werden in Deutschland von eVision Systems vertrieben.