到目前为止,本文关于 AMD VersalAIE 验证和 AMD Vitis新的验证功能的研究,所有内容都基于仿真完成。
例如我们已经研究了如何使用 MATLAB 或 Python 进行 Vitis 功能仿真,研究了如何使用 XSIM 模拟 AIE 设计。
在这个项目中,我们将研究如何使用 AMD Vitis 硬件在环(HIL)功能在实际硬件上运行 Vitis 子系统设计。
AMD Vitis 硬件在环概述
要使用 Vitis HIL 功能,首先必须将 Vitis 设计封装为 Vitis 子系统 (VSS)。在通过 Vitis 功能仿真以及 AMD Vivado 中的 XSim 仿真 确认 VSS 的功能符合预期之后,我们就可以进入硬件测试阶段。通过对硬件进行测试,可以在将该子系统集成到更大规模设计之前,验证 VSS 是否能在硬件上按预期运行。
从 VSS 开始,HIL 流程会基于 VSS 创建一个支持 HIL 的设计。设计完成后,将创建 HIL 服务器,并将其与设计一起打包到 SD 卡上。目标板卡通电并通过 SD 卡启动后,主机系统即可通过以太网与目标板卡进行交互。主机系统可以使用 Python 或 Matlab 通过以太网与设计进行通信。开发人员能够向目标板卡发送测试向量,在硬件上执行计算,并通过以太网将结果返回主机,从而够验证硬件上的行为。
目前,VCK190 评估套件支持此功能,设计可以包含 AI 引擎、HLS 或 HDL 模块或它们的任意组合,只需它们位于 Vitis 子系统内即可。
创建 VSS
在 AMD Vitis 中,通过使用 v++ 链接器将可重用的 PL 内核和/或 AI 引擎图打包成一个与平台无关的组件而创建的 VSS(Vitis 子系统)。该流程首先将 PL 内核编译成 .xo 文件(来自 HLS 或 RTL),并在需要时将 AI 引擎图构建成 libadf。
随后,这些组件在 VSS 配置文件中进行描述,该文件定义了内核实例、子系统元数据以及各组件之间的互连。

VSIS 的生成方式是:针对特定目标器件型号,以 VSS 模式运行链接器,生成一个 .vss 归档文件。只要使用相同的器件,该文件就可以被重复使用、仿真或以层次化方式集成到更高级别的 Vitis 设计中。
例如,可以通过使用配置文件创建一个仅包含 PL 的 VSS,该文件实例化一个内核并定义子系统。然后,可以使用以下命令进行构建,这将生成一个可重用的 `my_vss.vss` 子系统,可以将其导入到另一个 Vitis 项目中。
v++ --link --mode vss --part xcvc1902-vsva2197-2MP-e-S --config vss.cfg my_kernel.xo
创建 Vitis 子系统的另一种方法是使用 Vitis Model Composer 提供的导出为 VSS(Export to VSS) 功能。
在本项目中,我们将使用 AMD 提供的 VSS,它是 Vitis HIL 演示的一部分。这些 VSS 已以压缩包形式附在项目中供使用。
准备工作
首先,我们需要确保开发机器上已安装 Vitis 2025.2。如果尚未安装,您可以从这里下载:
https://www.xilinx.com/support/download/index.html/content/xilinx/en/downloadNav/vitis.htlm
安装完 Vitis 之后,接下来我们需要准备 SDK 和 RootFS,我们也可以从 AMD 网站下载获取。

下载完成后,第一步是创建 SDK。可以通过解压 Versal 通用镜像并运行脚本 sdk.sh 来完成。
为了能够运行构建,我们需要设置几个变量,第一个 SDK_LOCAL 指向刚刚创建的 SDK 的目录。

第二个 SYSROOT_VERSAL 指向内核镜像的位置,RootFS 也是作为通用镜像下载的一部分提供的。

现在我们准备创建目标 VSS 的 SD 卡镜像。为此,我们将以通道化器示例为例。
创建 HIL 服务器 SD 卡镜像
这将是一个命令行构建过程,因此我们首先需要从上面使用的终端启动 Vitis 2025.2 环境。

完成后,我们将运行该命令。


启动构建流程:

构建过程启动后,你会看到创建了一个名为 HIL_DUT 的文件夹,它是构建的工作目录。

不久之后,构建过程即可完成。

在构建的工作目录下,您可以看到输出的 SD 卡信息和 SD 卡镜像。

SD 卡镜像和主机应用程序代码引用的 hil_interface_spec.json 文件通过唯一的哈希码关联,从而确保使用正确的文件对,防止与之前的版本混淆。
SD 卡的内容:

下一步是将此内容复制到 SD 卡中,将其插入 VK190 并启动开发板。
硬件在环 (HIL)
使用 HIL,第一步是将 SD 卡插入 VCK190 并启动开发板。

通过串口,使用用户名 petalinux 登录到 VCK190 上运行的嵌入式Linux。

如果开发板已连接到网络,则 DHCP 服务器应已为其分配 IP 地址,因此可以跳过此步骤。
但如果开发板的以太网线连接到 PC,则需要执行一些步骤才能使开发板可访问网络。


在信道化器示例中,Python 文件夹下有两个 Python 文件。打开 Hosts 文件并编辑 VCK190 的 IP 地址。

在 VCK190 上,运行以下命令:


要启动服务器,请运行以下命令:


这将启动硬件在环服务器,等待客户端连接到主机。
在主机上运行 hil_host.py 文件,这将启动 HIL 示例。您将看到 HIL 按预期处理数据。

在 VCK190 目标上,您将看到客户端连接,并且应用程序开始在客户端的控制下运行。

脚本详解
本应用使用了两个脚本,让我们来分析它们的关键要素。 wb_src 文件提供了激励引擎,真正实现了硬件在环 (HIL) 设置。该模块生成一个可重复且完全可控的宽带复杂波形,其外观和行为都与真实信号环境非常相似。它允许启用或禁用多达 16 个独立的子通道,选择性地应用升余弦脉冲整形的 QAM 调制,甚至可以注入恒定(类似直流)通道以进行快速的基本功能检查。对于 HIL 至关重要的是,FIR 滤波器的状态在调用之间得以保留,因此信号在各个处理模块之间保持连续——这与硬件在实际数据流系统中看到的情况完全一致。






HIL_HOST.py 控制着硬件测试,它将设计作为可调用的硬件加速器部署在网络上。在 Python 主机上,我们使用接口规范 JSON 实例化 HIL 客户端,并将其指向开发板的 IP 地址和端口。
在主处理循环中,HIL 流程与流式系统非常相似,使用 wb_src 生成复数样本,并将其量化为定点 varray,然后通过 hil_chnlzr.run() 将其传递给 FPGA。
一个重要的实际问题是,硬件返回的数据量并非总是均匀分布在所有输出或不同调用之间。为了解决这个问题,我们在主机上显式地将每个输出流缓冲到 FIFO 中,并且仅在所有通道都有数据可用时才释放帧。












总结
本项目完成了三部曲的演示,展示了如何使用硬件在环验证通用的 AIE、HLS 和 RTL 内核子系统。这是验证的最后一个环节,验证过程从功能仿真开始,逐步过渡到在 Vivado 中进行 RTL 仿真(使用更广泛的设计),最终完成硬件在环验证。
推荐阅读:
证监会:对违规信披公司和责任人罚款上限大幅提升至1000万、500万






