Suchen

FPGA-Programmierung OpenCL – neuer Ansatz für die Programmierung von SoC-FPGAs

Autor / Redakteur: Andreas Widder * / Margit Kuther

Die Welten von CPUs und FPGAs verschmelzen beim Einsatz von SoC-FPGAs. Durch diese Kombination lassen sich Embedded-Systeme mit besonderen Anforderungen realisieren.

Firmen zum Thema

MCV: Das SoC-FPGA-Modul integriert für zusätzliche Funktionalität den Core in ein Referenzdesign.
MCV: Das SoC-FPGA-Modul integriert für zusätzliche Funktionalität den Core in ein Referenzdesign.
(Bild: Denx)

Seitdem OpenCL als Programmiersprache auch für FPGAs entdeckt wurde, haben klassische Software-Ingenieure neue Möglichkeiten zum Einsatz von SoC-FPGAs. FPGAs sind beliebte Arbeitstiere, wenn es gilt produktspezifische Funktionalität in der Elektronik abzubilden.

Sie bieten gerade dann die nötige Flexibilität zur Skalierung durch verschiedene Bausteinfamilien, wenn unterschiedliche Komplexitätsgrade gefragt sind. Die Implementierung zusätzlicher individueller Schnittstellen ist beispielsweise ebenso machbar, wie die Vorverarbeitung von Messdaten.

Die Vielzahl an verfügbaren, fertig entwickelten IP-Cores nehmen dem Entwickler in der Praxis bereits Arbeit ab und sind der Grundstock zur schnellen Projektumsetzung.

Durch den Einsatz der Open Computing Language (OpenCL) bei FPGAs gelingt es, die klassische Trennung von Hard- und Software-Ingenieuren zu überwinden und dem Vakuum der fehlenden FPGA-Entwickler entgegenzusteuern.

Die Softwerker rechnen bisher mit General-Purpose-CPUs, die allerdings bei bestimmen Aufgabenstellungen an ihre Leistungsgrenzen stoßen. Hardwerker implementieren ihren Lösungsansatz in der Hardware und können aufbauend auf ihrem spezifischen Know-how sehr leistungsstarke und Energie-effiziente Systeme realisieren.

OpenCL sorgt für die Beschleunigung nach Maß

OpenCL ist ein verbreiteter Standard, der auf die parallele Bearbeitung komplexer Berechnungen setzt. Nach der Entwicklung von OpenCL für Grafikkarten (GPU) ermöglichen es neuere Ansätze, diese Umgebung auch auf anderen CPU-Architekturen, wie beispielsweise Alteras SoC-FPGAs zu nutzen.

Die Rechnerinstanz, auf welcher der OpenCL-Code ausgeführt wird, wird als Accelerator bezeichnet. Die eigentlichen OpenCL-Operationen werden Kernel genannt und wurden ursprünglich in der Programmiersprache C erstellt.

OpenCL stellt verschiedene APIs zur Verfügung, um das System mit unterschiedlichen Programmiersprachen z.B. C, C++, Phyton, etc., verwenden zu können. Das OpenCL SDK von Altera unterstützt unter anderem die Cyclone-V-SoC-FPGA-Familie.

Bei dieser Technologie wird die Rechenarithmetik von der eigentlichen Zielhardware getrennt. Eine vorhandene OpenCL-Anpassung von IP-Core und BSP für die Zielhardware vorausgesetzt, muss für die Realisierung der gewünschten Funktionalität kein spezifisches Know-how über VHDL oder eine andere Synthesesprache vorhanden sein.

Gefordert ist der Software-Entwickler, weniger der FPGA-Entwickler

Somit ist für diese Art der Implementierung weniger der FPGA-Entwickler als vielmehr der Software-Entwickler gefordert. Die volle Flexibilität des FPGAs lässt sich nutzen, ohne dass die Realisierung von einer statischen CPU-Struktur abhängig ist.

Durch den Einsatz unterschiedlich komplexer SoC-FPGAs einer Familie kann gegebenenfalls die verfügbare Leistungsfähigkeit durch Hinzufügen weiterer paralleler Instanzen erhöht werden.

Ein typisches Anwendungsbeispiel ist die Vorverarbeitung und Komprimierung komplexer Messdaten im FPGA-Teil, bevor die Daten vom Messgerät an einen Host übertragen werden.

Dieser Ansatz profitiert durch die Vorverarbeitung und mögliche Komprimierung der anfallenden Messwerte von einer wesentlich höheren Netto-Datenrate zwischen Messgerät und Host, sowie von einer deutlich geringeren Systemkomplexität der Hardware, was sich in der Praxis in reduzierten Entwicklungsaufwänden und Hardwarekosten niederschlägt.

Alleskönner SoC-FPGA, Vorteil für Entwickler

Oft suchen Entwickler die "Eierlegende Wollmilch-Sau". Gewünscht ist eine Hardware, die möglichst unbegrenzt flexibel gestaltet und eingesetzt werden kann und damit eine Vielzahl unterschiedlicher Anforderungen abdeckt.

Allerdings kämpfen Entwickler in der Praxis mit engen Projektbudgets für die Implementierung, die oft eine strikte Limitierung der Entwicklungskosten mit sich bringen. SoC-FPGA-Module bieten dem Anwender einen Ausweg aus diesem Dilemma. Dabei werden FPGAs mit hart verdrahteten CPU-Kernen verheiratet.

Die volle Leistungsfähigkeit eines oder mehrerer CPU-Kerne, die „hart“ auf dem Baustein implementiert sind, wird mit der Flexibilität des FPGA-Teils verschmolzen. Die CPU-Kerne bilden mit vielen auch auf herkömmlichen System-on-Chip verfügbaren Schnittstellen ein komplettes Prozessor-Subsystem welches das Herzstück des Systems darstellt.

Beim Einsatz dieser SoC-FPGAs kann der Entwickler sowohl auf die obligatorischen Funktionsblöcke, wie SDRAM Controller, Flash Controller und System Interconnect zurückgreifen, als auch Gigabit Ethernet und USB2.0 (Host/OTG) Kommunikationsschnittstellen mit ausreichend Bandbreite einsetzen.

Für die Anforderungen im industriellen Umfeld runden serielle Schnittstellen, CAN, SPI und I²C die Systemfunktionalität ab. Da der FPGA-Teil skaliert werden kann, lassen sich damit auch komplexere Ansätze realisieren.

Durch diese Kombination kann die leistungsfähige CPU um weitere benötigte Standard-Schnittstellen erweitert werden. Diese werden als IP-Core im FPGA-Teil des Moduls untergebracht und ergänzen die bereits verfügbaren Schnittstellen des Hard Processor Systems.

Um bei diesem Ansatz auch die Kosten im Rahmen zu halten, empfiehlt sich der Einsatz von Standard-IP-Cores, die entweder von FPGA-Herstellern oder Third-Parties frei oder gegen Lizenzgebühr verfügbar sind.

Alternativ lässt sich auf freie IP-Cores zurückzugreifen, die unter unterschiedlichen freien Lizenzen zum Download und zur weiteren Verwendung angeboten werden.

IP-Cores der FPGA-Hersteller können oft kostenfrei für Arbeiten im Rahmen der Entwicklung lizensiert werden. Erst bei der Finalisierung des FPGA-Designs wird der Kauf der kommerziellen Lizenz fällig, um die IP auch im Serienprodukt zu verwenden.

Beispiele für freie IP-Cores sind - ohne Anspruch auf Vollzähligkeit - z.B. UART, CAN, 10/100/1.000MBit Ethernet, Firewire, I²C, I²S, SPI Master/Slave, SD-Card, USB und eine Vielzahl weiterer Implementierungen.

Zusätzliche Funktionen für mehr FPGA-Flexibilität

Um zusätzliche Funktionalität in einem FPGA-Baustein zu nutzen, bietet sich die Integration des Cores in ein Referenz-Design, wie beispielsweise das SoC-FPGA Modul MCV an.

Mit diesem Modul steht eine Plattform Verfügung, die für viele embedded Projekte die größtmögliche Flexibilität und Funktionalität bereitstellt. Durch die Synthese des FPGAs in Verbindung mit zwei Cortex-A9 Kernen auf dem Altera Cyclone V SoC-FPGA kann der Entwickler viele unterschiedliche Schnittstellen ansteuern, die auf einem kompakten Formfaktor kombiniert werden.

Auch bei kleinen Stückzahlen können so komplexe Systemfunktionalitäten realisiert werden. Um den Entwicklungsaufwand im Rahmen zu halten, kommt das MCV-SoM mit einem Funktionsumfang, der neben dem HPS (Hard Processor System) eine Grundausstattung gebräuchlicher Schnittstellen zur Verfügung stellt, die optimal vorintegriert und aufeinander abgestimmt sind.

Kurzer Design-Flow für schnelle Marktreife

Ein stark verkürzter Design-Flow für eine schnelle Marktreife spezifischer Applikationen kann wie folgt aussehen: Für die Ergänzung um den zusätzlichen IP-Core bietet sich zur Bearbeitung die Quartus Design Suite an.

Um die neue Funktionalität im FPGA zu nutzen, wird ein Standard-Bus, wie beispielsweise der Wishbone Bus verwendet und anschließend dem normalen Design-Flow (map, place and route, generate programming files) gefolgt.

Um die neue Schnittstelle auch durch das Betriebssystem ansprechen zu können, wird noch ein entsprechender Treiber benötigt.

Verglichen mit der herkömmlichen Realisierung zusätzlicher Schnittstellen wird die Entwicklung des Stromlaufplans, die Platzierung und anschließende Entflechtung einer Leiterplatte durch die Erweiterung eines bestehenden FPGA-Projekts ersetzt.

Die Entwicklung des Basisboards kann sich auf die Bereitstellung der physikalischen Schnittstellentreiber (z.B. PHY, Magnetics) beschränken.

Für die Software-Seite ist die Integration eines neuen Schnittstellen-Treibers in beiden Ansätzen zu berücksichtigen. Der Vorteil einer solchen Vorgehensweise liegt neben den vergleichsweise niedrigen Kosten in der wesentlich verkürzten Time-to-Market.

Um Berührungsängste der Linux-basierten Entwicklung für den FPGA-Teil abzubauen wird der SoC-FPGA MCV von DENX Computer Systems durch das Embedded Linux Development Kit (ELDK) in der jeweils aktuellsten Version effektiv unterstützt.

Der Anwender kann damit auf ein erprobtes System für die Komponentenintegration zurückgreifen, das den Community-Support der Linux-Foundation besitzt. Das ELDK setzt auf dem Yocto-Project auf und somit sind die von der OpenEmbedded-Community erarbeiteten Werkzeuge und Prozeduren verfügbar.

* Andreas Widder, Denx Computer Systems

Artikelfiles und Artikellinks

(ID:43810469)