跳转到主要内容

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

judy 提交于

<font color="#FF8000">作者:Florentw,AMD工程师;来源:AMD开发者社区</font>

<strong>简介</strong>

在<a target="_blank" href="https://support.xilinx.com/s/article/000036045?language=zh_CN"&gt;上一篇 AI 引擎系列博文</a> 中,我们演示了 Vitis 完整系统示例,其中包含一个 AI 引擎应用。

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

<strong>AI 引擎应用构建</strong>

首先打开<a target="_blank" href="https://support.xilinx.com/s/article/000036045?language=zh_CN"&gt;上一篇博文</a>中创建的 Vitis 工作空间。

为确保系统配置已将系统构建目标设为硬件仿真,请打开 full_system_app_system.sprj 配置文件,检查当前处于活动状态的构建配置是否已设置为“Emulation-HW”(硬件仿真)。
<center><img src="https://cdn.eetrend.com/files/2024-02/wen_zhang_/100578563-335748-ai-1…; alt=""></center>

要构建 AI 引擎应用,请右键单击 full_system_app_aie 应用工程,然后单击“Build Project”(构建工程)。
<center><img src="https://cdn.eetrend.com/files/2024-02/wen_zhang_/100578563-335749-ai-2…; alt=""></center>

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

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

<span data-aura-rendered-by="75:724;a">这是用于为硬件仿真构建 AI 引擎应用的基本命令。在 </span><a target="_blank" href="https://support.xilinx.com/s/article/000035591?language=zh_CN&quot; data-aura-rendered-by="75:724;a">AI 引擎系列 5 一文</a> <span data-aura-rendered-by="75:724;a">中,我们已讲解过各项选项。</span>

构建完成后,请双击 Vitis 分析器汇总文件 (full_sysetem_app_aie/Emulation-AIE/Work/graph.aiecompile_summary) 将其打开。
在“graph”(计算图)选项卡中可以看到计算图视图:
<center><img src="https://cdn.eetrend.com/files/2024-02/wen_zhang_/100578563-335750-ai-3…; alt=""></center>

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

<strong>PL 内核构建</strong>
下一步是构建 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++ 内核的更多详细信息,<pre data-aura-rendered-by="75:724;a">请参阅 <a target="_blank" href="https://docs.xilinx.com/r/2020.2-English/ug1393-vitis-application-accel… 文档</a>。</pre>

每个内核生成 1 个 XO 文件,其中内核编译结果如下所示:
<center><img src="https://cdn.eetrend.com/files/2024-02/wen_zhang_/100578563-335751-ai-4…; alt=""></center>

<strong>硬件连接构建</strong>

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

要运行硬件连接构建,请右键单击 full_system_app_system_hw_link,然后单击“Build Project”(构建工程)。
<center><img src="https://cdn.eetrend.com/files/2024-02/wen_zhang_/100578563-335752-ai-5…; alt=""></center>

注:此步骤会在后台调用 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 工程:
<workspace>/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 接口。
<center><img src="https://cdn.eetrend.com/files/2024-02/wen_zhang_/100578563-335753-ai-6…; alt=""></center>

<strong>PS 应用构建</strong>

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

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

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

xilinx-versal-common-v2020.2/sdk.sh -y -dir <dir path to install> -p

构建 sysroot 后,在 Vitis IDE 中打开 full_system_app_system.sprj 配置文件,设置 sysroot、根文件系统和内核镜像的路径。
<center><img src="https://cdn.eetrend.com/files/2024-02/wen_zhang_/100578563-335754-ai-7…; alt=""></center>

现在就能构建 PS 应用了,方法是右键单击 application full_system_app[xrt],然后单击“Build Project”
<center><img src="https://cdn.eetrend.com/files/2024-02/wen_zhang_/100578563-335755-ai-8…; alt=""></center>

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

<strong>系统封装</strong>

最后一步是封装系统。该步骤将创建启动镜像。
<center><img src="https://cdn.eetrend.com/files/2024-02/wen_zhang_/100578563-335756-ai-9…; alt=""></center>

选中 full_system_app_system,单击“Build Project”。

注:如果未按前文所述逐个完成构建 AIE 应用、PS 应用或内核的步骤,或者未连接系统,那么构建完整系统还会一并完成这些步骤。
<center><img src="https://cdn.eetrend.com/files/2024-02/wen_zhang_/100578563-335757-ai-10…; alt=""></center>

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

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)

<strong>在硬件仿真中运行系统</strong>

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

要为系统启动硬件仿真,请右键单击 full_system_app_system,然后单击“Run As...> Launch HW Emulator”(运行方式 > 启动硬件仿真器)
<center><img src="https://cdn.eetrend.com/files/2024-02/wen_zhang_/100578563-335758-ai-11…; alt=""></center>

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

保留不选中“Launch Emulator in GUI mode to display waveforms”(以 GUI 模式启动仿真器以显示波形)选项,然后单击“Start Emulator and Run”(启动仿真器并运行)。
<center><img src="https://cdn.eetrend.com/files/2024-02/wen_zhang_/100578563-335759-ai-12…; alt=""></center>

这将打开“Emulation Console”(仿真控制台)窗口,我们可在其中查看系统启动过程:
<center><img src="https://cdn.eetrend.com/files/2024-02/wen_zhang_/100578563-335760-ai-13…; alt=""></center>

启动时,使用显示的 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

<center><img src="https://cdn.eetrend.com/files/2024-02/wen_zhang_/100578563-335761-ai-14…; alt=""></center>