[tdb_mobile_menu menu_id="81451" el_class="plato-left-menu" icon_size="eyJhbGwiOjUwLCJwaG9uZSI6IjMwIn0=" icon_padding="eyJhbGwiOjAuNSwicGhvbmUiOiIxLjUifQ==" tdc_css="eyJhbGwiOnsibWFyZ2luLXRvcCI6IjEwIiwibWFyZ2luLWJvdHRvbSI6IjAiLCJtYXJnaW4tbGVmdCI6IjE1IiwiZGlzcGxheSI6IiJ9LCJwaG9uZSI6eyJtYXJnaW4tdG9wIjoiMCIsIm1hcmdpbi1sZWZ0IjoiMCIsImRpc3BsYXkiOiIifSwicGhvbmVfbWF4X3dpZHRoIjo3Njd9" align_horiz="content-horiz-center" inline="yes" icon_color="#ffffff" icon_color_h="#ffffff"][tdb_header_logo align_vert="content-vert-center" url="https://zephyrnet.com" inline="yes" text="Zephyrnet" image_width="eyJwaG9uZSI6IjM1In0=" img_txt_space="eyJwaG9uZSI6IjEwIn0=" f_text_font_size="eyJwaG9uZSI6IjE4In0=" f_text_font_line_height="eyJwaG9uZSI6IjEuNSJ9" f_text_font_weight="eyJwaG9uZSI6IjcwMCJ9" f_text_font_transform="eyJwaG9uZSI6ImNhcGl0YWxpemUifQ==" f_text_font_family="eyJwaG9uZSI6ImZzXzIifQ==" text_color="#ffffff" text_color_h="var(--accent-color)"]
[tdb_mobile_horiz_menu menu_id="1658" single_line="yes" f_elem_font_family="eyJwaG9uZSI6ImZzXzIifQ==" f_elem_font_weight="eyJwaG9uZSI6IjcwMCJ9" text_color="var(--news-hub-white)" text_color_h="var(--news-hub-accent-hover)" f_elem_font_size="eyJwaG9uZSI6IjE0In0=" f_elem_font_line_height="eyJwaG9uZSI6IjQ4cHgifQ==" elem_padd="eyJwaG9uZSI6IjAgMTVweCJ9" tdc_css="eyJwaG9uZSI6eyJwYWRkaW5nLXJpZ2h0IjoiNSIsInBhZGRpbmctbGVmdCI6IjUiLCJkaXNwbGF5Ijoibm9uZSJ9LCJwaG9uZV9tYXhfd2lkdGgiOjc2N30="]
[tdb_mobile_menu inline="yes" menu_id="81451" el_class="plato-left-menu" icon_size="50" icon_padding="0.5" tdc_css="eyJhbGwiOnsibWFyZ2luLXRvcCI6IjEwIiwibWFyZ2luLWJvdHRvbSI6IjAiLCJtYXJnaW4tbGVmdCI6IjE1IiwiZGlzcGxheSI6IiJ9fQ==" icon_color="#ffffff" icon_color_h="#ffffff" ]
Zephyrnet-Logo
[tdb_header_menu main_sub_tdicon="td-icon-down" sub_tdicon="td-icon-right-arrow" mm_align_horiz="content-horiz-center" modules_on_row_regular="20%" modules_on_row_cats="20%" image_size="td_300x0" modules_category= "Bild" show_excerpt="none" show_com="none" show_date="" show_author="none" mm_sub_align_horiz="content-horiz-right" mm_elem_align_horiz="content-horiz-center" menu_id="81450" show_mega_cats="yes" align_horiz="content-horiz-center" elem_padd="0 30px" main_sub_icon_space="12" mm_width="1192" mm_padd="30px 25px" mm_align_screen="yes" mm_sub_padd="20px 25px 0" mm_sub_border="1px 0 0" mm_elem_space="25" mm_elem_padd="0" mm_elem_border="0" mm_elem_border_a="0" mm_elem_border_rad="0" mc1_title_tag="h2" modules_gap="25" excl_txt="Premium" excl_margin="0 6px 0 0" excl_padd= "2px 5px 2px 4px" excl_bg="var(--news-hub-accent)" f_excl_font_size="12" f_excl_font_weight="700" f_excl_font_transform="uppercase" meta_padding="20px 0 0" art_title="0 0 10px" show_cat ="none" show_pagination="deaktiviert led" text_color="var(--news-hub-white)" tds_menu_active1-line_color="var(--news-hub-accent)" f_elem_font_size="18" f_elem_font_line_height="64px" f_elem_font_weight="400" f_elem_font_transform=" keine" mm_bg="var(--news-hub-dark-grey)" mm_border_color="var(--news-hub-accent)" mm_subcats_border_color="#444444" mm_elem_color="var(--news-hub-white )" mm_elem_color_a="var(--news-hub-accent-hover)" f_mm_sub_font_size="14" title_txt="var(--news-hub-white)" title_txt_hover="var(--news-hub-accent- hover)" date_txt="var(--news-hub-light-grey)" f_title_font_line_height="1.25" f_title_font_weight="700" f_meta_font_line_height="1.3" f_meta_font_family="fs_2" tdc_css="eyJhbGwiOnsiYm9yZGVyLXRvcC13aWR0aCI6IjEiLCJib3JkZXItcmlnaHQtd2lkdGgiOiIxIiwiYm9yZGVyLWJvdHRvbS13aWR0aCI6IjEiLCJib3JkZXItbGVmdC13aWR0aCI6IjEiLCJib3JkZXItY29sb3IiOiJ2YXIoLS1uZXdzLWh1Yi1kYXJrLWdyZXkpIiwiZGlzcGxheSI6IiJ9fQ==" mm_border_size="4px 0 0" f_elem_font_family="fs_2" mm_subcats_bg="var(--news-hub-dark-grey)" mm_elem_bg="rgba(0,0,0,0) " mm_elem_bg_a="rgba(0,0,0,0)" f_mm_sub_font_family="fs_2" mm_child_cats="10" mm_sub_inline="ja" mm_subcats_posts_limit="5"]
Home Halbleiter AI Engine Series 10 – Vollständiges System, auf dem die AI Engine ausgeführt wird (Teil 2)

AI Engine Series 10 – Vollständiges System, auf dem die AI Engine ausgeführt wird (Teil 2)

0

Einleitung

Im vorheriger Artikel der AI Engine Serie Wir haben uns das Vitis-Vollsystembeispiel angesehen, das eine KI-Engine-Anwendung enthält.

In diesem neuen Eintrag bauen wir das System auf, sehen uns einige der generierten Ausgaben an und führen das System in Hardware-Emulation mit QEMU aus.

KI-Engine-Anwendungserstellung

Öffnen Sie zuerst den im erstellten Vitis-Arbeitsbereich Vorheriger Artikel.

Um sicherzustellen, dass das System für die Hardware-Emulation konfiguriert ist, öffnen Sie das full_system_app_system.sprj Konfigurationsdatei und überprüfen Sie, ob die aktive Build-Konfiguration auf Emulation-HW eingestellt ist.

florentw_0-1625569695320.jpeg

Um die AI Engine-Anwendung zu erstellen, klicken Sie mit der rechten Maustaste auf das full_system_app_aie Bewerbungsprojekt und klick Projekt erstellen.

florentw_1-1625569695327.jpeg

Wenn wir uns das Konsolenfenster ansehen, sehen wir, dass der folgende Befehl ausgeführt wurde:

aiecompiler -v -Xchess=main:darts.xargs=-nb -include="<Installation path>/Vitis/2021.1/aietools/include" include=<Installation path>/Vitis_HLS/2021.1/include" -include="../" -include="../src" -target=hw --pc-srcmapping -platform=<Platform Repo Path>/xilinx_vck190_base_202110_1/xilinx_vck190_base_202110_1.xpfm -workdir=. /Work <workspace>/full_system_app_aie/src/graph.cpp

Dies ist der grundlegende Befehl zum Erstellen einer KI-Engine-Anwendung für die Hardwareemulation. Wir haben uns bereits die Optionen in der AI Engine Series 5 Artikel.

Wenn der Build abgeschlossen ist, öffnen Sie die Zusammenfassungsdatei des Vitis-Analyzers, indem Sie darauf doppelklicken (full_sysetem_app_aie/Emulation-AIE/Work/graph.aiecompile_summary).

Auf der Registerkarte Diagramm sehen wir eine Ansicht des Diagramms:

florentw_2-1625569695340.jpeg

Wir können sehen, dass die 2 Kernel (Interpolator und Klassifizieren), die durch ein weißes Quadrat mit einem blauen Blitzsymbol dargestellt werden, im Array in 2 verschiedenen Kacheln implementiert sind. Wir können auch die Verbindungen vom Graphen zum PL und vom PL zum Graphen sehen.

PL-Kernel bauen

Der nächste Schritt besteht darin, die C/C++-Kernel zu erstellen, die in der Programmable Logic (PL) implementiert und mit dem AI Engine-Graphen verbunden werden.

Hinweise 1: In diesem System sind alle C/C++-Kernel mit dem AI Engine-Array verbunden. Dies ist jedoch keine Regel. Kernel sind einfach Funktionen, die in der PL beschleunigt (dh implementiert) sind, so dass Kernel möglicherweise keine Verbindung zur AI Engine haben.

Hinweise 2: In diesen Beispielen ist die AI Engine über Kernel mit dem PL verbunden. Dies ist jedoch keine Voraussetzung. Es ist möglich, in der Plattform vorhandene AXI4-Stream-Schnittstellen direkt mit der AI Engine zu verbinden (sieheref Dieses Beispiel) oder die AI Engine über GMIO-Schnittstellen mit dem NoC zu verbinden.

Um die PL-Kernel zu bauen, klicken Sie mit der rechten Maustaste auf das full_system_app_kernels Anwendung und klicken Sie auf Projekt erstellen.

florentw_3-1625569695376.jpeg

Wenn wir in die Konsole schauen, sehen wir, dass der folgende Befehl ausgeführt wurde:

v++ --package --config package.cfg ../../full_system_app_aie/Emulation-AIE/libadf.a ../../full_system_app_system_hw_link/Emulation-HW/binary_container_1.xclbin -o binary_container_1.xclbin

Wir können sehen, dass das v++-Tool zum Kompilieren der Kernel verwendet wird und dass die Ausgabe dieser Kompilierung eine .xo-Datei ist. Weitere Informationen zum v++-Befehl zum Kompilieren von C/C++-Kernels finden Sie im Vitis-Dokumentation.

Die Kernel-Kompilierung führt zur Erzeugung einer .xo-Datei pro Kernel:

florentw_4-1625569695386.jpeg

HW-Link-Build

Der nächste Schritt besteht darin, die PL-Kernel und die AI Engine in die Hardware-Plattform zu integrieren. Dieser Schritt wird als System-HW-Link bezeichnet.

Führen Sie den HW-Link-Build aus, indem Sie mit der rechten Maustaste auf das klicken full_system_app_system_hw_link und klicken Projekt erstellen.

florentw_5-1625569695392.jpeg

Note: Dieser Schritt ruft Vivado unter der Haube auf, sodass Sie eine gültige Lizenz benötigen, um Synthese und Implementierung auszuführen und einen Bitstream für Versal-Geräte zu generieren.

Wenn wir uns die Konsole ansehen, sehen wir, dass der folgende Befehl ausgeführt wurde:

v++ --target hw_emu --link --config binary_container_1-link.cfg -o"binary_container_1.xclbin" ../.. /full_system_app_kernels/Emulation-HW/build/mm2s.xo ../../full_system_app_kernels/Emulation-HW/build/polar_clip. xo ../../full_system_app_kernels/Emulation-HW/build/s2mm.xo ../../full_system_app_aie/Emulation-AIE/libadf.a

Wir sehen, dass das v++-Tool mit der Option –link verwendet wird und die kompilierten Kernel (mm2s.xo, polar_clip.xo und s2mm.xo) und die kompilierte aie-Anwendung (libadf.a) als Eingaben hat. Diese Schritte erzeugen eine XCLBIN-Datei mit Vivado.

Sobald die Anwendung erfolgreich erstellt wurde, ist es möglich, das Design zu sehen, mit dem die XCLBIN in Vivado generiert wurde.

Das Vivado-Projekt namens prj.xpr sollte sich in folgendem Verzeichnis befinden:

/full_system_app_system_hw_link/Emulation-HW/binary_container_1.build/link/vivado/vpl/prj/

Wenn Sie in Vivado 2021.1 das Block Design xilinx_vck190_base im prj.xpr Projekt sehen Sie, dass die Kernel MM2S, S2MM und polar_clip als IP-Blöcke hinzugefügt und mit den AXI4-Stream-Schnittstellen der AI Engine verbunden wurden.

florentw_6-1625569695407.jpeg

PS-Anwendungserstellung

Der nächste Schritt besteht darin, die Anwendung für ein Linux-System zu erstellen. Um es erfolgreich zu erstellen, benötigt Vitis einige Optionen, die wir einstellen müssen: die Pfade zu Sysroot, Root FS und Kernel-Image.

Dafür können wir den vorgefertigten Linux-Kernel und das Root-Dateisystem verwenden, das mit jedem Versal-Board verwendet werden kann. Diese kann von der folgenden Seite heruntergeladen werden (Versal Common Tarball):

https://www.xilinx.com/support/download/index.html/content/xilinx/en/downloadNav/embedded-platforms.html

Nachdem Sie Versal Common heruntergeladen haben, müssen Sie das Sysroot erstellen, indem Sie das folgende Skript aus dem extrahierten Ordner mit einem Linux-Terminal ausführen:

xilinx-versal-common-v2020.2/sdk.sh -y -dir -P

Nachdem das Sysroot erstellt wurde, öffnen Sie die Konfigurationsdatei full_system_app_system.sprj in der Vitis IDE und legen Sie die Pfade zu Sysroot, Root FS und Kernel-Image fest.

florentw_7-1625569695416.jpeg

Wir können jetzt die PS-Anwendung erstellen, indem wir mit der rechten Maustaste auf das klicken Anwendung full_system_app [xrt] und klicken Projekt erstellen

florentw_8-1625569695423.jpeg

Dies erzeugt eine Binärdatei namens full_system_app unter full_system_app/Emulation-HW.

Verpacken des Systems

Der letzte Schritt besteht darin, das System zu verpacken. Dieser Schritt erstellt das Boot-Image.florentw_9-1625569695433.jpeg

Wähle aus full_system_app_system und klicken auf Projekt erstellen.

Note: Beim Erstellen des vollständigen Systems werden auch die aie-Anwendung, die PS-Anwendung und die Kernel erstellt und das System verknüpft, wenn diese Schritte nicht einzeln durchgeführt wurden, wie wir es zuvor getan haben.

11.jpg

In der Konsole sehen wir, dass der folgende Befehl ausgeführt wurde:

v++ --package --config package.cfg ../../full_system_app_aie/Emulation-AIE/libadf.a ../../full_system_app_system_hw_link/Emulation-HW/binary_container_1.xclbin -o binary_container_1.xclbin

Wir sehen, dass das v++-Tool mit der Option –package und mit der XCLBIN-Datei aufgerufen wird, die während des Hardware-Links und der kompilierten aie-Anwendung (libadf.a) erstellt wurde.

Die Datei package.cfg enthält zusätzliche Optionen für den v++-Befehl einschließlich der kompilierten ps-Anwendung (full_system_app)

Ausführen des Systems in Hardware-Emulation

Der letzte Schritt besteht darin, das System in der Hardwareemulation zu testen.

Um die HW-Emulation für das System zu starten, klicken Sie mit der rechten Maustaste auf das full_system_app_system und klicken auf Führen Sie Wie… > HW-Emulator starten

florentw_10-1625569695442.jpeg

Es öffnet sich ein Fenster, in dem wir gefragt werden, ob wir den GUI-Modus verwenden möchten. Während der GUI-Modus nützlich ist, um die Signale zu sehen, die in die KI-Engine ein- und ausgehen, werden wir dies in diesem Artikel nicht betrachten (wir werden in einem späteren Artikel darauf zurückkommen).

Behalte das "Starten Sie den Emulator im GUI-Modus, um Wellenformen anzuzeigen” Option deaktiviert und klicken Sie auf Emulator starten und ausführen.

florentw_11-1625569695446.jpeg

Dies öffnet ein Emulationskonsolenfenster, in dem wir den Systemstart sehen können:

florentw_12-1625569695449.jpeg

Verwenden Sie nach dem Start die angezeigte Linux-Eingabeaufforderung, um das Design auszuführen.

Führen Sie die folgenden Befehle aus, wenn die emulierte Linux-Eingabeaufforderung angezeigt wird, um die Umgebung einzurichten:

cd /mnt/sd-mmcblk0p1
export XILINX_XRT=/usr
dmesg -n 4 && echo "Hide DRM messages..."

Führen Sie abschließend den folgenden Befehl aus, um die Anwendung auszuführen:

./full_system_app ./binary_container_1.xclbin

Im Konsolenfenster sollten Sie die folgende Ausgabe sehen, die anzeigt, dass die Anwendung erfolgreich ausgeführt wurde:

Loading: './binary_container_1.xclbin'
TEST PASSED

15.JPG

PlatonAi. Web3 neu erfunden. Datenintelligenz verstärkt.
Klicken Sie hier, um darauf zuzugreifen.

Quelle: https://forums.xilinx.com/t5/Design-and-Debug-Techniques-Blog/AI-Engine-Series-10-Full-system-running-the-AI-Engine-part-2/ba- p/1261009

Chat mit uns

Hallo! Wie kann ich dir helfen?