Eine Publikation der Swissprofessionalmedia AG
Ausgabe 05/2018, 11.05.2018

Systeme effizient entwickeln auf FPGA

Müssen grosse Datenmengen innert kürzester Zeit verrechnet werden, ist ein FPGA eine mögliche oder sogar zwingende Lösung. Je nach Know-how führen verschiedene Ansätze zum Ziel: Die einen versprechen kürzere Entwicklungszeiten, die anderen optimale Resultate.

Autor: Michael Pichler Stellvertretender Leiter des Instituts Institut für Mikroelektronik FHNW

Der Einsatz von Field Programmable Gate Arrays (FPGA) erfreut sich zunehmender Beliebtheit. Damit 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. Diese Leistung erhält man jedoch nicht umsonst. Der Entwicklungsaufwand für Hardware ist um ein Mehrfaches höher als bei Software und die Flexibilität für Änderungen entsprechend geringer. Ingenieure möchten das Beste aus beiden Welten, aus der leistungsfähigen Hardware- und der flexiblen Softwarewelt. Diesem Wunsch kommen wir immer näher. Heute erhält man System-on-a-Chip (SoC)-FPGAs, die über leistungsfähige CPU und programmierbare Logik verfügen. Zum anderen kommen mächtige Tools auf den Markt, die dem Entwickler helfen.

Aufgeteilt in Analyse und Design geht es zuerst um die Frage, welches System oder welcher Algorithmus benötigt wird. Bei der Implementation stellt sich dann die Frage nach dem «wie». Am Beispiel eines SoC-FPGA geht es also um die optimale Partitionierung: Welche Funktionen werden auf der CPU in Software, welche mit programmierbarer Logik in Hardware realisiert?

Falls bereits ein Softwaremodell existiert, lässt sich dieser Schritt mit einem Profiler vereinfachen, der aufzeigt, welche Funktionen die CPU stark belasten und wo eine Auslagerung in den Logikteil höhere Performance verspricht. Es gilt aber auch zu bedenken, dass der Datenaustausch zwischen CPU und Logikteil ein Nadelöhr darstellen kann. Zwar bieten gerade SoC-FPGA die Möglichkeit, über einen breiten On-Chip-Bus direkt Daten zwischen dem Prozessorsystem und dem Logikteil auszutauschen; oft geschieht dies aber auch mit einem DMA-Controller über einen dynamischen Speicher. Es gilt also abzuklären, ob eine Auslagerung von Funktionen in den Logikteil den gewünschten Vorteil bringt oder ob der Datenaustausch zwischen CPU und Logikteil so viel Overhead verursacht, dass das Ganze ein Nullsummenspiel oder die Performance sogar schlechter wird.

Die Denkweise von Software- und Hardwareentwicklern ist recht 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. Software- oder Systemleute bewegen sich auf der Funktionsebene. Hier geht es in erster Linie um richtig oder falsch. Die Hardwareleute denken auf dem Registertransfer-Level (RTL), 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.

Ausgehend davon, dass das zu lösende Problem etwas mit Signalverarbeitung zu tun hat und die gewünschte Zielplattform ein SoC-FPGA ist, ergeben sich verschiedene Designabläufe mit unterschiedlichen Tools.

Welches Tool ist das Richtige?

In «Matlab/Simulink» lassen sich Signalverarbeitungsprobleme dank vielen mächtigen Toolboxen gut bearbeiten. In unserem Fall würden wir in Simulink mit dem HDL-Coder arbeiten. Die Idee besteht darin, ein Modell grafisch zu erstellen und mit den mächtigen Verifikationstools von Simulink auf dessen korrekte Funktion zu überprüfen. Hier wird auf dem RTL modelliert, man muss sich also den Problemen bei der Hardwareimplementation bewusst sein. Auf Knopfdruck wird aus dem grafischen Modell ein RTL-Modell in der Hardware-Description-Language (HDL) erstellt. Simulink bietet gegenüber Matlab ein paar Vorteile: Die grafische Darstellung erleichtert das Verständnis, und es basiert gleich wie FPGA auf Streaming-Interfaces.

Wird das Modell in «C/C++» beschrieben, hat man den Vorteil, dass Kompilier- und Simulationszeiten sehr kurz sind. Mit Hilfe eines High-level-Synthesetools wird der C/C++-Quellcode in HDL konvertiert. Um das gewünschte Resultat zu erzielen, muss das C/C++-Modell so beschrieben werden, dass eine gute Hardwareimplementation überhaupt realisierbar ist. Hierzu müssen die richtigen Typen verwendet werden – meist Fixed-Point in vordefinierten Bitbreiten –, und es müssen Direktiven für die Synthese definiert werden. Mit den Direktiven spezifiziert man unter anderem den möglichen Datendurchsatz der Schnittstellen oder die Auflösung von Schleifen, die iterativ, pipelined oder unrolled sein können. Eine mächtige Funktion dieser Tools ist die unmittelbare Darstellung von Datendurchsatz, Latenz und benötigten Hardwareressourcen bei verschiedenen Direktiven. Auch hier ist das Hardware-nahe Denken zwingend.

Das ganze Modell direkt in Hardware Description Language (HDL) zu codieren ist nach wie vor eine gängige, aber zeitintensive Variante. Sie bietet die höchste Kontrolle des Resultats, verlangt jedoch auch am meisten Erfahrung im RTL-Modellieren – was immer weniger Ingenieure beherrschen. Ein Vorteil dieses Ansatzes ist, dass keine teuren Zusatztools benötigt werden.

Bei den drei oben aufgeführten Designabläufen resultiert immer ein RTL-Modell, beschrieben in HDL. Mit einem Tool des FPGA-Anbieters wird dieses synthetisiert, und es resultiert ein File, um das FPGA zu konfigurieren.

Das Fazit lautet: Digitale Signalverarbeitung lässt sich mit einem SoC-FPGA auf unterschiedliche Weise implementieren: als reine Softwarelösung auf der CPU, 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 Kon-trollpfad unkritisch ist und problemlos auf der CPU realisiert werden kann. Ausserdem gilt, 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, also beispielsweise Multiplizierer oder interne Speicherblöcke.


Fachhochschule Nordwestschweiz FHNW, Hochschule für Technik
5210 Windisch, Tel. 056 202 99 55
weiterbildung.technik@fhnw.ch



Unabhängig vom gewählten Entwicklungsansatz: Mit einem FPGA als Zielplattform ist ein Verständnis für eine Hardwareimplementation zwingend. (Bild: FHNW)

Im Profil

MAS Mikroelektronik

Die im Bericht erwähnten Designtechniken werden im Rahmen des MAS Mikroelektronik der FHNW unterrichtet. Die nächsten Infoanlässe auf dem Campus Brugg/Windisch finden am 25. Juni und am 22. August 2018, 18:15 Uhr, statt. Info und Anmeldung unter:

www.fhnw.ch/mas-mikroelektronik