chevron_left
chevron_right

Das Beste aus beiden Welten

Wie Softwarespezialisten mit OpenCL performante Systeme entwickeln, wurde im FAEL-Corner bereits gezeigt (siehe Polyscope 8/15). In diesem Bericht geht es um das gleiche Problem, ebenfalls mit einem FPGA als zentralem Objekt, jedoch mit einem grundlegend anderen Lösungsansatz.

 

Der Einsatz von FPGAs wird stets beliebter. Die Möglichkeit, einen Algorithmus nicht sequentiell wie in Software sondern parallel zu berechnen, lässt die Performance nahezu beliebig skalieren – je mehr Hardware, desto leistungsfähiger die Berechnung. Dies bekommt man jedoch nicht umsonst. Der Entwicklungsaufwand für Hardware ist um Faktoren höher als bei Software und die Flexibilität für Änderungen sehr gering. Was der Ingenieur möchte, ist das Beste aus beiden Welten, der leistungsfähigen Hardware- und der flexiblen Softwarewelt. Diesem Wunsch kommen wir immer näher. Zum einen bieten Altera und Xilinx SoC-FPGAs an, die über leistungsfähige CPU und programmierbare Logik verfügen, zum anderen kommen mächtige Tools auf den Markt, die den Entwickler entscheidend unterstützen. So bieten sich einem noch nie dagewesene Freiheiten.

Wenn die Auslagerung von Funktionen in den Logikteil Vorteile bringt

Aufgeteilt in Analyse und Design geht es zuerst um die Frage: WAS für ein System oder Algorithmus braucht es? Diese kreative Aufgabe wird hier nicht weiter beschrieben. Bei der Implementation stellt sich dann die Frage nach dem WIE. Am Beispiel eines SoC-FPGA geht es also um die Partitionierung: Welche Funktionen werden auf der CPU in Software, welche mit programmierbarer Logik in Hardware realisiert? Falls bereits ein Software­modell existiert, lässt sich dieser Schritt mit einem Profiler ausführen. Er zeigt, welche Funktionen die CPU stark belasten und dass eine Auslagerung in den Logikteil eine höhere Performance verspricht. Es ist aber auch zu bedenken, dass der Datenaustausch zwischen CPU und Logikteil meist mit einem DMA-Controller über einen dynamischen Speicher geschieht. Es gilt abzuklären, ob eine Auslagerung von Funktionen in den Logikteil den gewünschten Vorteil bringt oder ob der benötigte Datenaustausch zwischen CPU und Logikteil so viel Overhead verursacht, dass das Ganze ein Nullsummenspiel oder die Performance sogar schlechter wird.

Abstraktes Denken ist essenziell

Die Denkweise von Soft- und Hardware- entwicklern ist ziemlich unterschiedlich. Softwareentwickler konzentrieren sich auf das Lösen des Problems, also um die Funktion. Das machen Hardwareentwickler auch, aber immer mit dem Fokus auf die zur Verfügung stehende Hardware. Dies widerspiegelt sich auch auf die Flughöhe: Software- oder Systemleute bewegen sich auf der Funktionsebene. Hier geht es in erster Linie um richtig oder falsch. Die Hardwareleute denken auf der RTL-Ebene, wo ganz klar ist, wie viele Register resultieren. Wenn dieselbe Funktion auf verschiede Arten realisiert werden kann, wählen sie diejenige, die den Anforderungen am besten entspricht. Das ist weder die schnellste noch die kleinste, sondern diejenige, die so performant wie nötig mit so wenig Ressourcen wie möglich realisiert werden kann.

Matlab/Simulink, C/C++ oder HDL?

Ausgehend davon, dass das zu lösende Problem etwas mit Signalverarbeitung zu tun hat und die gewünschte Zielplattform ein FPGA der Zync-Famile von Xilinx ist, ergeben sich verschiedene Designabläufe mit diversen Tools:

  • In Matlab/Simulink lassen sich Signalverarbeitungsprobleme sehr gut bearbeiten. In unserem Fall würden wir in Simulink mit dem HDL Coder oder mit dem Xilinx System Generator arbeiten. Diese sind vom Prinzip her identisch, mit dem Unterschied, dass der HDL Coder technologisch neutral ist. Die Idee besteht darin, ein Modell grafisch zu erstellen und mit den mächtigen Verifikations-Tools von Simulink dessen korrekte Funktion zu überprüfen. Hier wird auf dem RTL modelliert, d. h. man muss sich den Problemen bei der Hardwareimplementation bewusst sein. Auf Knopfdruck wird aus dem grafischen Modell ein RTL-Modell in HDL erstellt
  • Wird das Modell in C/C++ beschrieben, hat man den Vorteil, dass Kompilier- und Simulationszeiten sehr kurz sind. Mit Hilfe der beiden Xilinx-Tools SDSoC oder Vivado HLS wird der C/C++ Quellcode in HDL konvertiert. Um gute Resultate zu erzielen ist es auch hier nötig, dass man beim C/C++- Modell die richtigen Typen verwendet und die Struktur geeignet wählt, um Pipelinestrukturen und Loops mit wenig Hardwareressourcen und grossem Datendurchsatz realisieren zu können. Also ist auch hier hardwarenahes Denken zwingend
  • Das ganze Modell direkt in HDL zu codieren ist nach wie vor eine gängige, wenn auch sehr zeitintensive Variante. Sie bietet die höchste Kontrolle auf das Resultat, verlangt jedoch auch am meisten Erfahrung im RTL-Modellieren - eine Fähigkeit, die immer weniger Ingenieure besitzen

Bei diesen Designabläufen resultiert stets ein RTL-Modell, beschrieben in HDL. Mit Xilinx Vivado wird es synthetisiert und es resultiert ein Bit-File, um das FPGA zu konfigurieren.

Gewusst wie: eine Funktion auf einem FPGA realisieren können

Digitale Signalverarbeitung lässt sich mit einem Zync-FPGA von Xilinx auf unterschiedliche Weise implementieren: reine Softwarelösung auf dem ARM-Core, reine Hardwarelösung auf dem FPGA oder eine Kombination der beiden. Generell kann man sagen, dass für eine performante Lösung der Datenpfad hauptsächlich durch den FPGA führt, während der Kontrollpfad unkritisch ist und problemlos auf dem ARM-Core realisiert werden kann. Zudem gilt auch, dass HDL-Wissen kein Musskriterium mehr ist, sehr wohl jedoch das Verständnis, wie eine Funktion in Hardware auf einem FPGA realisiert wird und welche begrenzten Ressourcen einem zur Verfügung stehen (z. B. BlockRAM). 

Infoservice

Institut für Mikroelektronik, FHNW
Steinackerstrasse 5, 5210 Windisch
Tel. 056 202 80 22, Fax 056 202 73 17
info.ime.technik@fhnw.chwww.fhnw.ch