AI 引擎系列 10 - 运行 AI 引擎的完整系统(第二部分)

作者:Florentw,AMD工程师;来源:AMD开发者社区

简介

上一篇 AI 引擎系列博文 中,我们演示了 Vitis 完整系统示例,其中包含一个 AI 引擎应用。

在这篇新博文中,我们将构建系统、分析生成的输出并在硬件仿真中使用 QEMU 运行系统。

AI 引擎应用构建

首先打开上一篇博文中创建的 Vitis 工作空间。

为确保系统配置已将系统构建目标设为硬件仿真,请打开 full_system_app_system.sprj 配置文件,检查当前处于活动状态的构建配置是否已设置为“Emulation-HW”(硬件仿真)。

要构建 AI 引擎应用,请右键单击 full_system_app_aie 应用工程,然后单击“Build Project”(构建工程)。

通过观察控制台窗口,可以看到其中已运行下列命令:

aiecompiler -v -Xchess=main:darts.xargs=-nb -include="/Vitis/2021.1/aietools/include" include=/Vitis_HLS/2021.1/include" -include="../" -include="../src" -target=hw --pc-srcmapping -platform=/xilinx_vck190_base_202110_1/xilinx_vck190_base_202110_1.xpfm -workdir=. /Work /full_system_app_aie/src/graph.cpp

这是用于为硬件仿真构建 AI 引擎应用的基本命令。在 AI 引擎系列 5 一文 中,我们已讲解过各项选项。

构建完成后,请双击 Vitis 分析器汇总文件 (full_sysetem_app_aie/Emulation-AIE/Work/graph.aiecompile_summary) 将其打开。
在“graph”(计算图)选项卡中可以看到计算图视图:

可以看到 2 内核(interpolator 和 classify)以白色方块来表示,在 2 个不同拼块的阵列中实现了 1 个蓝色闪电符号。此外,还可以看到从计算图到 PL 的连接和从 PL 到计算图的连接。

PL 内核构建
下一步是构建 C/C++ 内核,这些内核将在可编程逻辑 (PL) 内实现,并连接到 AI 引擎计算图。
注 1:在此系统中,所有 C/C++ 内核都连接到 AI 引擎阵列。但这并非铁则。内核只是在 PL 中加速(即,实现)的函数,因此内核可能与 AI 引擎无连接。
注 2:在这些示例中,AI 引擎使用内核连接到 PL。但这并非要求。平台中存在的 AXI4-Stream 接口可以直接连接到 AI 引擎(请参阅本示例)或者可使用 GMIO 接口将 AI 引擎连接到 NoC。

要构建 PL 内核,请右键单击 full_system_app_kernels 应用,然后单击“Build Project”(构建工程)。

观察控制台即可看到其中已运行下列命令:

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

可以看到,其中使用了 v++ 工具来编译内核,并且编译输出为 XO 文件。如需了解有关使用 v++ 命令编译 C/C++ 内核的更多详细信息,

请参阅 Vitis 文档

每个内核生成 1 个 XO 文件,其中内核编译结果如下所示:

硬件连接构建

下一步是将 PL 内核与 AI 引擎集成到硬件平台中。这个步骤称为系统硬件连接。

要运行硬件连接构建,请右键单击 full_system_app_system_hw_link,然后单击“Build Project”(构建工程)。

注:此步骤会在后台调用 Vivado,因此您将需要有效的许可证才能运行综合与实现并为 Versal 器件生成比特流。

观察控制台即可看到其中已运行下列命令:

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

我们可以看到,v++ 工具搭配 --link 选项使用,并以已编译的内核(mm2s.xo、polar_clip.xo 和 s2mm.xo)和已编译的 aie 应用 (libadf.a) 作为输入。此步骤将使用 Vivado 生成 XCLBIN 文件。

成功构建应用后,可以看到用于在 Vivado 中生成 XCLBIN 的设计。

在以下目录中应包含名为 prj.xpr 的 Vivado 工程:
/full_system_app_system_hw_link/Emulation-HW/binary_container_1.build/link/vivado/vpl/prj/

在 Vivado 2021.1 中,打开 prj.xpr 工程中的块设计 xilinx_vck190_base 后,即可看到 MM2S、S2MM 和 polar_clip 内核均已作为 IP 块添加并连接到 AI 引擎的 AXI4-Stream 接口。

PS 应用构建

下一步是为 Linux 系统构建应用。要成功构建应用,Vitis 要求设置下列选项:sysroot、根文件系统与内核镜像的路径。

为此,可以使用预构建的 Linux 内核与根文件系统,这两者可搭配任意 Versal 开发板一起使用。可从以下页面下载(Versal 通用 tarball):
https://china.xilinx.com/support/download/index.html/content/xilinx/zh/d...

下载 Versal 通用文件后,需使用 Linux 终端从解压的文件夹内运行以下脚本来构建 sysroot:

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

-p

构建 sysroot 后,在 Vitis IDE 中打开 full_system_app_system.sprj 配置文件,设置 sysroot、根文件系统和内核镜像的路径。

现在就能构建 PS 应用了,方法是右键单击 application full_system_app[xrt],然后单击“Build Project”

这将在 full_system_app/Emulation-HW 下生成名为 full_system_app 的二进制文件。

系统封装

最后一步是封装系统。该步骤将创建启动镜像。

选中 full_system_app_system,单击“Build Project”。

注:如果未按前文所述逐个完成构建 AIE 应用、PS 应用或内核的步骤,或者未连接系统,那么构建完整系统还会一并完成这些步骤。

在控制台中可以看到,其中已执行下列命令:

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

从中可以看到调用 v++ 工具时还会搭配 --package 选项以及硬件连接期间创建的 XCLBIN 文件与已编译的 AIE 应用 (libadf.a)。

package.cfg 文件包含适用于 v++ 命令的其他选项,包括已编译的 PS 应用 (full_system_app)

在硬件仿真中运行系统

最后一步是在硬件仿真中测试系统。

要为系统启动硬件仿真,请右键单击 full_system_app_system,然后单击“Run As...> Launch HW Emulator”(运行方式 > 启动硬件仿真器)

这样会弹出一个窗口,询问是否要使用 GUI 模式。虽然 GUI 模式可用于查看进出 AI 引擎的信号,但本文不涉及这部分内容(后续博文中再来详谈这部分)。

保留不选中“Launch Emulator in GUI mode to display waveforms”(以 GUI 模式启动仿真器以显示波形)选项,然后单击“Start Emulator and Run”(启动仿真器并运行)。

这将打开“Emulation Console”(仿真控制台)窗口,我们可在其中查看系统启动过程:

启动时,使用显示的 Linux 提示符来运行设计。

显示仿真的 Linux 提示符时,执行以下命令以设置环境:

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

最后,执行以下命令以运行应用:

./full_system_app ./binary_container_1.xclbin

在控制台窗口中,应显示如下输出,表示应用已运行成功:

Loading: './binary_container_1.xclbin'
TEST PASSED

最新文章

最新文章