如何在 AMD Kria™ KV2600 视觉AI入门套件上构建、部署和运行自定义硬件加速器应用程序
我最初在博客上发布了这个项目。在这里,我将更详细地讲解每一步。边缘端的硬件加速正在彻底改变我们处理计算机视觉、机器学习和高性能计算的方式。然而,弥合软件开发与FPGA硬件之间的鸿沟,往往令人感到任务艰巨。
在本篇全面指南中,我将通过详细讲解如何在 AMD Kria™ KV2600 视觉AI入门套件上构建、部署和运行自定义硬件加速器应用程序,来帮助您理解整个流程。为此,我们将充分利用 AMD Vitis™™ 统一软件平台 2025.2 的前沿功能。
硬件加速的“Hello World”
为了保持内容的实用性和聚焦于工具链机制,我们将使用 Vitisitis 内置的简单向量加法(vadd)加速器示例。这是硬件加速的完美“Hello World”,使我们能够完全专注于掌握部署流程,而无需被过于复杂的算法逻辑所困扰。
四阶段工作流程
完整的端到端开发流程被拆分为四个可管理、小步骤的阶段:
•准备KV260 SD卡:设置用于运行加速应用程序的基础Linux环境和启动固件。
•开发向量加法应用:在 Vitis 2025.2 统一环境中导航,编译主机代码并合成硬件内核。
•将生成文件传输至KV260板卡:无缝地将编译后的二进制文件、比特流和硬件xclbin文件转移到目标边缘设备。
•运行并验证应用程序:在目标设备上执行代码,以观察硬件加速的实际效果,并验证结果。
先决条件
在开始之前,请确保您已准备好 Kria KV260 开发套件,并配备一台运行 Vitis 2025.2 套件的开发设备。
所需专业知识说明:本教程面向已具备Linux命令行操作基础以及基本FPGA开发概念的开发者。如果您熟悉终端操作,并理解硬件与软件联合设计的核心原理,即可开始学习。
设置开发环境
要在 AMD Vitis™ 2025.2 中成功编译硬件加速器并构建软件栈,需要一个稳定的 Linux Linux Linux 环境。根据您当前的硬件配置和个人工作流程偏好,您可以选择多种可行的方式来跟随本教程。
您可以使用以下任一开发环境完成本指南:
•原生 Ubuntu Linux 安装:在您的主工作站上直接运行 Ubuntu,以获得最佳性能并直接访问硬件资源。
•双系统配置:在现有操作系统旁边设置一个专用的Ubuntu分区,使您在启动时可以切换不同的运行环境。
•虚拟机(VM):在 Windows 或 macOS 主机上运行于虚拟化程序(如 VMware 或 VirtualBox)之上的 Ubuntu 系统。
•Windows子系统Linux(WSL2):一种轻量级、高度集成的解决方案,可在Windows 11中直接运行原生Ubuntu环境,无需传统虚拟机带来的额外开销。
本教程中,我将使用 WSL2 环境。
我的精确演示环境包括:
Microsoft Windows 11、虚拟化层、Windows子系统 for Linux(WSL2)、Ubuntu 24.04 LTS
WSL2 用户重要提示:如果您正在使用 WSL2,需确保在 .wslconfig 文件中分配了足够的系统内存(RAM)和虚拟磁盘空间,因为 FPGA 的综合与实现是资源密集型任务。您也可以运行“WSL 设置”工具来完成此操作。
第一阶段:准备KV260 SD卡
在您能够开发、部署或运行任何硬件加速应用程序之前,必须先将硬件启动到一个完全兼容的 Linux 环境中。
为确保与我们的 Vitis 2025.2 开发工具无缝集成,建议使用官方的 AMD AMD AMD 嵌入式发行版文件系统(EDF)镜像。该预构建的 Linux 发行版专为 AMD 自适应 SoC(系统级芯片)量身打造并进行了优化。
1. 获取SD卡镜像
首先,你需要直接从官方供应商的仓库获取正确的操作系统镜像文件。
•请前往 AMD Vitis 官方下载页面。
•定位并单击“嵌入式软件”选项卡。
•向下滚动以找到专为Kria设计的选项,并下载以下软件包:SD/Wic Image Kria 通用版
根据具体的发布点,下载的文件通常会以压缩磁盘映像文件的形式出现在您的设备上,文件扩展名可能为 .wic.xz 或 .img.gz。
提示:除非您的特定刷机软件要求,否则请勿手动提取或解压 .wic.xz 文件。现代刷机工具可以直接读取这些压缩格式,可为您节省宝贵的存储空间和时间。
2. 格式化microSD卡
下载图像后,下一步是将其写入你的microSD卡。由于这是一个原始磁盘映像文件(.wic.xz),不能直接复制粘贴到卡中。你需要使用专用的映像刷写工具,将数据块直接写入存储扇区。
逐步闪烁操作流程
一个可靠且跨平台的工具是 balenaEtcher,它能原生处理压缩的 .wic.xz 格式,无需先解压。
2.1.连接媒体:将您的microSD卡插入主机的读卡器或外接USB适配器。请确保已备份卡中的重要数据,因为此过程会彻底清除存储卡中的所有内容。
2.2.选择操作系统镜像:启动 balenaEtcher。点击“从文件闪存”按钮,导航至您的下载目录,然后选择已下载的 SD/Wic Image Kria Generic 文件。
2.3.选择驱动器:点击“选择目标”。从可用驱动器列表中仔细选择您的microSD卡。再次确认驱动器大小,以确保您没有误选了外部备份硬盘。
2.4.执行闪存:点击“闪存!”按钮。如果 Windows 或 macOS 提示,请授予管理员权限,以便软件能够直接写入硬件扇区。
2.5.验证并弹出:允许工具完成闪存阶段和自动验证阶段。当工具显示“闪存完成!”后,即可安全地将microSD卡从电脑中取出。
Windows 11 用户提示:刷机完成后,WindowsWindows 可能会弹出多个警告,提示“在使用驱动器 X 之前,您需要先格式化该磁盘”。请忽略并关闭这些警告,不要对驱动器进行格式化。WindowsWindows 显示此消息的原因是它无法原生读取由刷机工具创建的 Linux EXT4 分区。
3. Kria SOM 软件固件更新
除了需要正确刷写microSD卡外,如果您的Kria系统级模块(SOM)运行的是过时的启动固件,硬件部署可能会立即遇到障碍。
KV2600 板卡集成了直接嵌入到 SOM SOM 模块上的非易失性 QSPISPI 快闪存储器,该存储器中存放着出厂预编程的启动固件。由于 AMD 会更新这一底层固件以支持新的平台架构、编译器优化和 API,因此您必须确保 QSPISPI 启动固件版本与 Vitis 2025.22 运行时的要求相匹配。在旧版固件上运行较新版本的工具,通常会导致难以理解的启动错误或 XRTRT 内核启动失败。
在开始更新流程之前,您必须获取与您的生态系统版本相匹配的精确固件文件:
•返回 AMD Vitis 官方下载页面。
•找到嵌入式软件部分。
搜索并下载特定的启动容器文件:
•文件名:k26-smk-sdt_kria boot.bin
AMD 提供了一个内置的基于网页的实用工具,该工具隐藏在 Kria 主要硬件程序中,可轻松完成此文件的刷写。您无需专用的 JTAGTAG 编程器,只需一根以太网线和一个互联网浏览器即可。然后按照 AMD AMD 官方文档中描述的固件恢复/更新流程操作:
启动映像恢复工具
第二阶段:开发向量加法应用程序
现在我们的硬件目标已经准备就绪,接下来进入核心开发阶段。在此阶段,我们将为宿主机设置Vitis开发环境,配置必要的交叉编译资源,并为构建向量加法(vadd)硬件加速器打下基础。
该阶段包含四个关键步骤:
•安装所需的开发软件。
•配置 Linux 目标系统根目录(系统库环境)。
•创建 Vitis 统一应用程序项目。
•编译并构建我们的硬件加速器。
2.1 – 安装所需软件
我们开发环境的核心是 AMD Vitis™™ 统一软件平台 2025.2。该平台将硬件设计工具与标准的软件集成开发环境(IDE)相结合,使我们能够在单一生态系统中同时管理 FPGA FPGA FPGA 布局和 C/C++ 主机应用程序。
开始安装:
•访问 AMD Vitis 官方下载页面。
•下载 Linux Linux Linux 网络安装程序或 2025.22 版本的完整产品安装包。
•在您的开发环境中运行安装程序(原生 Linux 或已配置的 WSL222 环境)。
关键安装设置:在选择软件包的步骤中,您必须明确勾选“启用Kria KV260平台支持”和“嵌入式开发工具”选项。若未勾选,则将无法包含目标设备架构及用于支持Kria系统级模块所需的交叉编译器。
2.2 – 下载并配置 ZynqMPMPMP 常用镜像
由于Kria板运行的是活跃的Linux操作系统,我们无法使用标准的x86编译器来编译主机应用程序。我们需要一个交叉编译工具包以及与我们的板相匹配的隔离式Linux环境模板。AMD通过ZynqMP通用镜像包提供了这些预配置的组件。
请在终端中按照以下命令行步骤解压并配置目标文件系统环境:
第一步:获取存档
返回下载网站上的 Vitisitisitis 嵌入式平台标签页,然后下拉目标捆绑包:
包名:xilinx-zynqmp-common-v2025.2_11160223.tar.gz
步骤2:解压并安装环境
在工作区目录中打开终端,执行以下命令以解压包并运行环境脚本:
提取它:
进入提取的目录:
运行 SDK安装程序:
运行命令 ./sdk.sh -d . 会将一个自包含的交叉编译树直接提取到指定目录中,从而生成一个名为 sysroots 的关键文件夹。
该目录包含与物理Kria板上完全相同的Linux头文件(.h)和预编译库(.so)。当Vitis在您的PC上编译主机应用程序代码时,会引用此文件夹,以确保生成的二进制文件能够完美适配,并可在Kria的ARM Cortex-A53处理器上运行,且不会出现架构冲突。
2.3 – 创建 Vitisitis 应用程序工作区
有了基础工具和系统根目录的准备,我们现在可以打开 Vitisitis 平台并初始化工作布局。Vitis 依赖一个名为工作区(workspace)的专用目录结构,用于集中管理您的配置映射、源代码仓库和构建树。
打开终端窗口,执行以下命令以创建干净的工作空间目录并启动应用程序平台:
片刻之后,Vitisitis 统一 IDE 的现代网页式布局将直接在您的桌面上打开。
2.4 – – 导入简单向量加法示例
AMD 不会强迫你从零开始编写硬件描述框架或复杂的驱动程序链接,而是将完全优化的代码库模型直接集成到 Vitisitis 安装中。
要导入我们的标准“Hello World”加速器包:
1.打开示例界面:查看中央屏幕界面。在当前激活的“欢迎”标签页仪表板内,点击“示例”选项卡。
2.查找加速模板:在显示的综合仓库索引中,向下浏览加速类别,或使用搜索栏找到“简单向量相加(vadd)”设计条目。
3.初始化系统构建器:点击模板描述卡片以查看其详细信息。在标签视图的右侧,点击标有“从模板创建系统项目”的操作链接,即可启动内置的系统项目设置向导。
2.5 – – 配置目标架构项目
系统项目设置向导将引导您将模板映射到您的物理板和交叉编译环境资源上。请按照以下精确参数完成向导中的配置:
1. 命名系统项目
在初始配置面板上,将系统布局标识保持为默认选项(vadd),或选择自定义的其他选项,然后点击“下一步”。
2. 选择 Kriaria 目标硬件平台
您将看到一份目标卡片的建筑列表。请查找并高亮显示与您的评估套件布局相匹配的基础包:
平台选择:xilinx_kv260_base_202520_1
选择后,点击“下一步”继续。
3. 设置交叉编译系统根目录路径
这是我们连接之前构建的 Linux Linux Linux 环境库的地方。在配置页面上:
点击位于 Sysroot 参数目标字段旁边的“浏览”按钮。
导航到您的工作空间目录,以定位由先前运行的 sdk.sh.sh.sh 环境生成的精确文件夹结构:xilinx-zynqmp-common-v2025.2/sysroots/cortexa72-cortexa53-amd-linux
选择该特定文件夹路径,点击打开,然后单击下一步。
4. 完成系统目标生成
检查您的资产映射摘要参数,然后点击“完成”按钮图标。
点击完成后,Vitisitis 将初始化其后台构建引擎。经过短暂的生成延迟后,您的完整系统设计项目树将显示在主 IDE IDE 探索器侧边栏布局中。
花点时间浏览文件夹并打开源文件,观察主机软件在硬件内核执行并行化向量数组时如何管理缓冲流。
2.6 – – 构建应用堆栈
在项目完全配置完成后,我们进入了工作流程中最耗时的阶段:系统编译。由于这是一个异构系统(即同时包含标准CPU处理器和可编程FPGA逻辑),构建系统必须并行运行两个完全不同的编译流水线,然后将它们拼接在一起。
在 Vitisitis 统一 IDE 中执行系统构建:
找到FLOW导航面板(通常位于屏幕界面的左侧或右侧边缘)。
找到标有 vadd 的主要系统组件条目。
在操作列表中,点击“全部构建”命令选项。
配置提示将滑出,要求您确认目标组件。请确保同时选中 vadd_host(ARMARMARM 软件二进制文件)和 vadd_vadd(硬件内核逻辑块)的复选框,然后点击“确定”。
幕后发生了什么?
当您触发编译流程时,Vitisitis 将启动一个多阶段的后台管道,将您的抽象 C++++++ 源代码转换为原始的物理电子配置和机器二进制文件。该管道会依次经过以下高强度的工程阶段:
C/C++ 主机编译:将 vadd.cpp(或 host.cpp)编译为原生的 ARM-A53 Linux Linux 可执行文件
HLSLS 内核综合:高层综合将 C++++ 内核转换为 RTL(VHDL/Verilog)
Vivado 实现:在 FPGA FPGA FPGA 硬件阵列中进行物理布局与路由
比特流生成:创建逻辑门的原始配置位布局
XCLBINBIN 包装:将比特流与元数据合并为 AMD AMD 扩展二进制文件
如果您的开发环境看起来“卡住”了,或者电脑风扇立即转到最大速度,请不要惊慌。合成硬件逻辑需要大量的算法计算。
总构建时间很大程度上取决于主机机器的处理能力。
系统资源提示:在 Vivado 实现阶段,编译器可能同时占用 8 GB GB 至 16 GB 的系统内存。在此过程中,请关闭主机操作系统上所有非必要的后台任务、网页浏览器或资源密集型开发环境,以避免因内存不足导致的崩溃错误。
构建成功后,Vitisitis 将在您的输出目录中生成一组部署文件,可直接传输到我们的物理 Kriaria 板上。
第三阶段:将生成的文件传输到KV260板
编译成功后,您的主机工作站已生成所需的部署二进制文件。要在此应用上运行,我们必须将一组特定的四个操作文件传输到我们的物理Kria KV260板上。
这些组件告诉目标Linux内核如何重新映射其物理硬件线路,将我们的自定义逻辑门加载到可编程逻辑阵列中,并执行我们的二进制主机控制循环。
获取所需的四个文件
在开始网络传输之前,请在开发机器上创建一个临时部署目录,并从您的编译树中收集以下文件:
1. 可编程逻辑器件树叠加层(pl.dtbo)
源位置:/2025.2/Vitis/base_platforms/xilinx_kv260_base_202520_1/sw/boot/
目的:这是一个编译后的 Linux 设备树覆盖文件。由于 FPGA FPGA 可在运行时完全改变其内部外设接口,操作系统需要此文件动态识别新创建的硬件总线、中断配置和内存通道,而无需重启整个系统。
2. FPGAPGA 容器二进制文件(vadd.xclbin)
源位置:/vadd/build/hw/hw_link/
目的:这是我们的核心AMD可扩展平台二进制文件,它封装了由Vivado和HLS编译引擎生成的硬件加速器内核逻辑、目标路由约束以及结构化比特流映射。
注意:您可能需要将文件重命名为 vadd.bin。
3. 控制回路软件可执行文件(vadd_host)
源位置:/vadd_host/build/hw/
目的:此文件是一个专为Kria板的64位ARM Cortex-A53处理器核心编译的原生Linux ELF二进制文件。它负责数据序列化、分配内存缓冲区、加载我们的.xclbin布局,并测量性能。
4. ShellShell 配置元数据(shell.json)
来源位置:用户创建(手动编写的配置片段)
目的:Kriaria 固件环境利用名为 Xilinxilinxilinx 资源管理器(XRM)的实用框架,安全地配置硬件加速功能。这段简短的元数据片段明确指示系统将我们的设计实例化为一个单一的静态加速模块。
要创建此文件,请打开终端或您常用的命令行文本编辑器(如 nano 或 vi),并生成一个名为 shell.json 的纯文本文件:
启动并准备KV260板进行执行
在安全生成部署文件后,现在是时候转移到物理硬件上了。此步骤包括启动 Kria KV2600 板、设置目标系统所需的目录,并准备主机上的可执行二进制文件。
第一步:启动硬件并建立连接
首先,请确保您的主板已完全断电。
将刚刷过的microSD卡插入KV260载卡底部的插槽中。
通过以太网线连接您的网络,并将板子的微型USB串口与主机工作站连接一条微型USB数据线。
将12V直流电源适配器插入设备以启动。
您可以通过两个主要的连接通道与运行在板上的实时 Linux 操作系统进行交互:
串行控制台(UART)PuTTY、Tera Term、Minicom
网络壳(SSH)OpenSSH终端,PuTTY
第二步:创建固件目录结构
Kria平台的运行时固件堆栈要求自定义硬件覆盖层位于特定的受保护系统目录中。这使得内置的系统工具能够安全地查找、解析并加载您的自定义比特流组件。
打开串行终端或通过 SSH 登录你的开发板(使用标准的目标凭据登录),然后执行以下命令以创建指定的固件目标仓库:
第三步:定位部署文件
现在,你需要将之前准备好的四个文件移动到Kria板文件系统中的最终工作位置。你可以使用FileZilla(通过SFTP)等交互式图形界面工具,或使用scp实用程序等标准终端工具来执行此操作。
动态设备配置文件、硬件比特流和元数据布局必须位于新创建的 /lib/firmware/xilinx/vadd 目录内。将以下三个特定组件移至该目录:pl.dtbo、vadd.xclbin(vadd.bin)以及 shell.json。
与固件叠加文件不同,vadd_host 可执行文件无需位于根系统固件树中。您可以将此文件存储并运行在用户空间中的任意位置(例如 /home/petalinux/vadd_project/)。
默认情况下,通过网络协议传输的文件或从原始编译工作区复制出的文件通常会失去可执行权限。在 Linux Linux 允许你运行控制循环软件之前,必须手动修改其安全权限标志。
导航到包含 vadd_host 文件的目录,并运行以下命令以使其可通用执行:
此时,您的环境已完全准备就绪,硬件资源位于正确的系统目录中,主机软件也已完全清理完毕,可随时执行。
第四阶段:运行和验证应用程序
我们已进入工作流程的最后且最令人收获的阶段:运行代码,并在Kria KV260上实时看到硬件加速效果。
为此,我们将首先使用Kria平台工具动态编程FPGA结构,实现向量加法逻辑,然后运行我们的软件主机应用程序来控制并验证计算过程。
步骤1:通过xmutil加载硬件加速器
AMD Kriaria 平台使用一个名为 xmutil(Xilinx 机器工具)的强大命令行工具。该工具可让您在不重启 Linux Linux Linux 环境的情况下,安全地查询、卸载并动态热插拔运行在可编程逻辑中的硬件加速器。
在 Kria 板上打开当前的终端会话,并执行以下命令序列:
1. 检查系统上可用的硬件应用程序
2. 卸载默认预加载的工厂应用程序,以释放FPGA插槽。
3. 动态加载您刚创建的“vadd”加速器叠加层
引擎盖下到底在发生什么?
listapps:扫描我们上一阶段配置的 /lib/firmware/xilinx/ 目录。你应该能看到你的 vadd 项作为可用插槽选项列出。
unloadapp:清除当前比特流,重置FPGA时钟配置,并准备网络结构以接收新的系统映射。
loadapp vadd:指示 Linux 内核读取你的 shell.json 配置文件,通过你的 pl.dtbo 设备树覆盖层注册硬件线路,并将自定义加速器推入活动的 FPGA 布局中。
步骤2:运行主机可执行文件
在FPGA完全配置好我们的vadd加速硬件后,我们现在可以启动主机应用程序。主机二进制文件将编译好的加速二进制包作为目标命令行参数接收。
导航到您存储 vadd_host 应用程序文件的用户空间文件夹,然后运行执行命令:
命名约定说明:根据您具体的编译和脚本选项,输出的硬件容器名称可能仍为 vadd.xclbin 或 vadd.bin。请确保在 -xx 标志后传递的参数与板上文件的精确文件名完全一致。
验证加速结果
启动后,主机软件将初始化系统RAM中的数据数组,将这些缓冲区直接映射到内部高速内存总线上的FPGA逻辑,触发加速器执行,并将硬件输出与基准CPU测试循环进行数学比较。
如果一切配置正确,你的终端将输出一条验证信息,最后以这条里程碑消息结束:
看到测试通过,说明您的多阶段开发、交叉编译、固件更新和网络部署流程已完全运行正常。您已成功将一段高级C++代码转化为FPGA上的低级物理路由门,并在边缘AI开发平台上执行了它!
本文编译自hackster.io





