Skip to main content
shopping_basket Warenkorb 0
Einloggen

Beschleunigung von openCL-Anwendungen mit der Digilent Genesys ZU-3EG Zynq Ultrascale+ MPSoC-Plattform

awong
0

Determinismus, Reaktionsfähigkeit und Leistung sind Anforderungen, auf denen die Architektur der meisten eingebetteten Anwendungen in fortschrittlichen Bereichen wie autonomen Fahren bis hin zu Robotik und Advanced Vision-Systemen basiert.

Xilinx Zynq® UltraScale+™ EG MPSoC-Einheiten (176-0795) kombinieren ein leistungsstarkes ARM®-basiertes Mehrkern- und Multiprozessorsystem mit programmierbarer Logik der ASIC-Klasse. Das Verarbeitungssystem (PS) ist mit 64-Bit Quad-Core ARM® Cortex®-A53 und 32-Bit Dual-Core Cortex-R5F Echtzeitprozessoren und einer Mali™-400 MP2 Grafikverarbeitungseinheit ausgestattet. Die programmierbare Logik der ASIC-Klasse ist hochflexibel und baut auf der Xilinx UltraScale-Architektur auf. Die programmierbare Logik kommuniziert mit dem Verarbeitungssystem über 6.000 Verbindungen. Die Architektur bietet Ingenieuren die Möglichkeit, Lösungen zu implementieren, mit denen die angestrebten Ziele in Determinismus, Reaktionsfähigkeit und Leistung erreicht werden.

Zynq Ultrascale+ MPSoC EG-Einheit Blockdiagramm (Quelle:https://www.xilinx.com/content/dam/xilinx/imgs/products/zynq/zynq-eg-block.PNG)

Die Kombination aus Verarbeitungssystem und programmierbarer Logik ermöglicht es, Algorithmen und Funktionen unter Verwendung der am besten geeigneten Implementierungstechnologie anzuwenden. Netzwerkkommunikation kann im Verarbeitungssystem eingearbeitet werden, während neuronale Netzwerkbeschleunigung sich die hochparallele Natur der programmierbaren Logik zu Nutzen machen kann. Mit den Xilinx Heterogeneous SoC-Einheiten können Ingenieure und Entwickler auch Algorithmen vom Prozessor bis zur programmierbaren Logik mit Hilfe von hochrangigen Programmiersprachen beschleunigen.

The aktuellste Xilinx Vitis einheitliche Software-Plattform ermöglicht die Entwicklung von eingebetteter Software und beschleunigten Anwendungen auf heterogenen Xilinx Plattformen wie FPGAs, SoCs und Versal ACAPs. Sie bietet ein einheitliches Programmiermodell zur Beschleunigung von Edge-, Cloud- und Hybrid-Computing-Anwendungen. Nutzen Sie die Integration mit High-Level-Frameworks, entwickeln Sie in C, C++, openCL oder Python unter Verwendung beschleunigter Bibliotheken oder verwenden Sie RTL-basierte Beschleuniger und Low-Level-Laufzeit-APIs für eine noch feinere Kontrolle über Ausführung - wählen Sie die Abstraktionsebene, die Ingenieure oder Entwickler benötigen. Dies eröffnet Entwicklern ohne Hardwarebeschreibungssprache (HDL) die Leistungsfähigkeit von programmierbarer Logik.

Digilent Genesys ZU-3EG (200-3904) ist eine eigenständige Zynq Ultrascale+ Zynq MPSoC-Karte mit optimierten Spezifikationen, Multimedia und Netzwerkverbindungsschnittstellen sowie einer robusten Dokumentationsbibliothek, die Ihnen einen schnellen Einstieg in künstliche Intelligenz (AI)-, Forschungs-, Luft- und Raumfahrt-/Verteidigungs-, Cloud-Computing- und Embedded-Vision-Anwendungen ermöglicht.Die Steckkarte verfügt über eine ausgezeichnete Mischung aus On-Board-Peripheriegeräten, unter anderem leicht aufzurüstende DDR4, Mini PCIe, microSD-Steckplätze, Multi-Kamera, USB 3.0 und Hochgeschwindigkeitserweiterung. Adam Taylor, ein Embedded-Design-Experte, entwickelt die Vitis Beschleunigungsplattform für die DigilentGenesys ZU-3EG Zynq Ultrascale+ MPSoC-Plattform und demonstriert verschiedene Elemente, die zur Erschaffung einer Beschleunigungsplattform erforderlich sind.

Genesys ZU-3EG Zynq Ultrascale+ MPSoC-Plattform

OpenCL-Anwendungen

OpenCL ist ein Open-Source-Framework, das für heterogene Systeme ausgelegt ist. In der Regel agiert ein x86-basiertes System als Host, während der Kernel aus jeder beliebigen Option bestehen kann, beispielsweise CPU, GPU, FPGA oder ASIC. Das Ziel von OpenCL ist es, die Portabilität zwischen Plattformen zu ermöglichen, ohne den Quellcode ändern zu müssen. Daher werden die Host-Anwendungen üblicherweise in C oder C++ in Kombination mit dem OpenCL-Anwendungsprogrammierinterface (API) erstellt. Kernel werden unter Verwendung von OpenCL C entwickelt, das mit notwendigen Einschränkungen und Änderungen von ISO C99 abgeleitet ist. Beispielsweise sind Standardheader wie stdlib.h, stdio.h nicht erlaubt, während skalare Typen alle eine definierte Größe haben, im Gegensatz zu C/C++, wo sie compiler- und architekturabhängig sind. Dies ermöglicht es Entwicklern, OpenCL mit Standard-Compilern wie GCC zu verwenden, während der Kernel benutzerdefinierte Compiler verwendet, die vom Kernel-Hersteller geliefert werden.

Das OpenCL-Modul kann verwendet werden, um das Verarbeitungssystems (Host) und die programmierbaren Logik (Kernel) in Xilinx Zynq Ultrascale+ MPSoC zu entwickeln. Ein solcher Ansatz wird durch das einheitliche Software-Entwicklungswerkzeug Vitis von Xilinx unterstützt.

Xilinx-Werkzeuge für Vitis OpenCL-Beschleunigungsablauf auf Digilent Genesys ZU-3EG

  • Xilinx Vivado - Erstellung einer Basisplattform für Hardware-Konfiguration, während die notwendigen Ressourcen dem Vitis-Compiler zur Verfügung gestellten werden
  • Xilinx PetaLinux – Erstellung des Petalinux-Betriebssystems, das OpenCL-APIs zusammen mit Unterstützung für zusammenhängende Speicherzuweisung und Treiber für direkten Speicherzugriff enthält. PetaLinux wird auch verwendet, um die SYS-Root zu erstellen, die die Vitis-Beschleunigungsplattform unterstützt.
  • Xilinx Vitis – Erstellung der Vitis-Beschleunigungsplattform und der resultierenden beschleunigten Anwendung.

Was ist in der Vitis-Beschleunigungsplattform enthalten?

Hardware-Basisplattform

Eine Vivado-Basisplattform enthält Schnittstellen und Verarbeitungselemente und stellt gleichzeitig Ressourcen für den Vitis-Compiler bereit. Um dieses Basis-Hardware-Design mit nachgeschalteten Tools zu verwenden, muss vor der Erstellung einer Bit-Datei ein XSA, das die Hardware-Konfiguration definiert, exportiert werden. Danach kann der Vitis-Compiler die erforderlichen Bit-Dateien für die Anwendung erzeugen.

Die Plattform muss mindestens die folgenden Bestandteile definieren:

  • Prozessorkonfiguration – Die Konfiguration des Verarbeitungssystems, Taktgeber, verfügbare DDR und Konfiguration, Multiplexed IO-Konfiguration für die PS-Schnittstellen-Peripheriegerä
  • Taktgeber –Ein Taktgeber-Assistent bietet stellt mehrere verschiedene Taktgeber zur Verfügung, die vom Vitis-Compiler genutzt werden können. Es gibt zwei Taktgeber für in MHz und 300 MHz.
  • Interrupts – Ein einzelner Interrupt wird dem Verarbeitungssystem von einem AXI-Interrupt-Controller zur Verfügung gestellt. Die mit dem AXI-Interrupt-Controller verbundenen Interrupts können dann vom Vitis-Compiler genutzt werden. Es gibt acht Interrupts auf dieser Plattform.
  • Prozessor-Reset-Blöcke –Für jeden der verfügbaren Taktgeber muss dem Vitis-Compiler ein Prozessor-Reset-Block zur Verfügung gestellt werden.
  • PS/PL-Schnittstelle – Es müssen mindestens ein PS AXI-Master und ein PS AXI-Slave definiert werden, um die Konfiguration und Steuerung des erstellten Beschleunigungskerns zu ermöglichen, falls nötig zusammen mit dem Hochgeschwindigkeits-DMA-Transfer vom PL zum PS. Es gibt eine AXI-Master- und drei AXI-Slave-Schnittstellen.
  • MIPI-Kameraschnittstelle – Videos und Bilder können über den Mini-Displayport auf Genesys ZU-3EG von der Anwendungssoftware in PetaLinux ausgegeben werden.

Genesys ZU-3EG Hardware-Plattform in Vitis

Linux-Bilder

Das exportierte XSA kann zur Erstellung und Konfiguration eines neuen PetaLinux-Projekts für das Genesys ZU-3EG verwendet werden. Sobald das Projekt zusammen mit einer SYS-Root erstellt und konfiguriert ist, benötigt eine Vitis-Plattform die folgenden von PetaLinux erstellten Elemente:

  • elf – First-Stage-Bootloader
  • ub – das Kernel-Image
  • elf – die Firmware der Plattformmanagement-Einheit
  • elf – die ARM TrustZone-Firmware
  • U-Boot.elf – Second-Stage-Bootloader, der das Kernel-Image lädt
  • Wenn diese Elemente am Ende der Bausequenz zur Verfügung stehen, kann mit der Arbeit an Vitis begonnen werden, um eine Beschleunigungsplattform zu erstellen.

Erstellung des ersten Vitis-Beschleunigungsprojektes

1. Vitis-Plattform erstellen

Vitis bietet einen mehrstufigen Assistenten, der die Benutzer bei der Erstellung einer Plattform unterstützt. Der Assistent ist auf der Willkommensseite von Vitis aufgeführt. Wählen Sie “Plattform-Projekt erstellen", um die Plattform zu erstellen.

Für eine Beschleunigungsplattform-Hardware werden Hardware- und Softwareelemente benötigt. Das Hardwareelement wird durch das zuvor aus Vivado exportierte XSA definiert. Diese Software-Elemente werden während des PetaLinux-Aufbaus erzeugt und können im Assistenten identifiziert werden. Sobald dies abgeschlossen ist, kann die Plattform in einem neuen Beschleunigungsprojekt verwendet werden.

Xilinx Vitis IDE-Assistent

Definition für Xilinx Vitis Software-Elemente

2. Erstes Vitis-Beschleunigungsprojekt erstellen

Um das Testen der Beschleunigungsplattform abzuschließen, ist es am einfachsten, eine der vorhandenen Beispielanwendungen zu erstellen. Erstellen Sie eine neue Systemanwendung für die Genesys ZU-3EG-Plattform. Diese Plattform sollte sowohl die eingebettete Entwicklung als auch die Beschleunigung unterstützen.

Wenn Sie den Assistenten zur Erstellung eines neuen Anwendungsprojekts durcharbeiten, können Sie eine Beispielanwendung für Vektoraddition erstellen. Dieses Beispiel für Vektoraddition wird einen OpenCL-Kernel enthalten, der in die programmierbare Logik beschleunigt wird.

Um die Leistung für die Implementierung in die programmierbare Logik zu optimieren, gibt es innerhalb des Kernels mehrere Pragmas zur Steuerung von Loop unrolling und Interfacing. Dieser beschleunigte Block muss in der Lage sein, eine Verbindung mit AXI-Schnittstellen herzustellen, die in der Vivado-Plattform verfügbar gemacht wurden.

Der Aufbau des Projekts wird eine Weile dauern. Sobald das Projekt fertiggestellt ist, wird Vitis alle Einheiten zur Verfügung stellen, die auf die SD-Karte kopiert werden müssen. Wenn die SD-Karte in das Genesys ZU-3EG eingesteckt wird, kann die Anwendung über die Kommandozeile getestet werden. Beim Ausführen der Anwendung werden der Kernel, der in die programmierbare Logik geladen wird, und die mit der Ausführung des Programms verbundenen Schritte angezeigt.

Testanwendung

 
Love learn engineering in hands-on approach. Interested in new technology. Work in Digilent as International Sales and Distribution Manager.

Recommended Articles

DesignSpark Electrical Logolinkedin