在 QEMU 环境下为嵌入式处理器运行仿真属于计算密集型操作,需要额外的设置和配置。您必须使用 arm-gcc
对嵌入式应用进行交叉编译、创建 SD 卡镜像,在 QEMU 环境下启动 Linux,然后运行应用。“PS on x86”(x86 上的 PS)功能特性支持您在 x86 处理器上对嵌入式系统设计进行仿真,并能大幅简化此项操作。该功能特性要求您使用 gcc
或 g++
编译器的 x86 版本来编译 PS 应用,并构建 .xclbin 文件,此文件将在仿真平台上用于运行 emconfigutil
所创建的软件仿真。
--package.defer_aie_run
选项,如以下配置文件示例中所示。使用“PS on x86”构建和运行软件仿真的进程如下所述:
- 使用标准
gcc
编译器替代 Arm 交叉编译器来编译 PS 应用。欲知详情,请参阅 为 x86 执行编译和链接。 - 使用标准
v++
命令编译和链接器件二进制文件 (.xclbin),如 构建器件二进制文件 中所述。 -
对于 PS on x86 流程,
v++ --package
命令会将用于仿真的处理器告知该工具 (--package.emu_ps
)。对于 AMD Versal™ 平台,还需要将
v++ --link
命令所生成的.xsa
文件转换为.xclbin
文件。基于 AMD Zynq™ UltraScale+™ MPSoC 的平台则无需执行此步骤。 -
emconfigutil 实用工具 可用于为软件仿真创建 emconfig.json 文件 。
emconfigutil --platform xilinx_zcu102_base_202220_1
- 将
XCL_EMULATION_MODE
环境变量设为sw_emu
即可使用软件仿真模式。重要: 如不正确设置XCL_EMULATION_MODE
环境变量,仿真目标将不会运行。 - 运行应用。例如:
./host.exe kernel.xclbin
以下提供了 emconfigutil
命令和 v++ --package
命令的示例。使用 emconfigutil
创建仿真所需虚拟平台,使用 v++ --package
创建用于仿真的系统。
emconfigutil --platform $PLATFORM_REPO_PATHS/xilinx_vck190_base_202310_1/xilinx_vck190_base_202310_1.xpfm --nd 1
随后,
v++ -p -t sw_emu \
--package.defer_aie_run \
--platform $PLATFORM_REPO_PATHS/xilinx_vck190_base_202310_1/xilinx_vck190_base_202310_1.xpfm \
--package.sd_dir $PLATFORM_REPO_PATHS/sw/versal/xrt \
--package.out_dir ./package.sw_emu \
--package.ps_on_x86 \
--package.sd_file ./emconfig.json \
../tutorial.xsa ../libadf.a
使用以下命令运行软件仿真:
setenv XCL_EMULATION_MODE sw_emu
./host_ps_on_x86 a.xclbin
下表描述了构建 PS 应用和器件二进制文件 (.xclbin) 以在 QEMU 下运行软件仿真与运行 PS on x86 之间的差异。
工艺 | 在 QEMU 下运行 SW_EMU | 采用 PS on X86 的 SW_EMU |
---|---|---|
主机编译 |
需使用
|
需要 x86
|
封装 |
需要创建 SD 卡镜像才能在 QEMU 下运行,指定 QEMU 作为仿真处理器:
|
对于 PS on x86 仿真,需使用
|
运行仿真 |
需要使用
|
设置仿真模式环境变量并直接启动应用:
|
您可以在 x86 gcc
中使用 arm-gcc
来编译相同的 PS 代码。但您的 PS 代码中已链接的任意仅限 ARM 的数据类型或库在针对 x86 进行编译时都将无效。如需获取有关使用该功能特性运行软件仿真的示例,请参阅 GitHub 上的 ps_on_x86。