我的毕设题目是基于KV260做商品识别系统。套件有FPGA可编程逻辑和ARM处理器。我计划用MIPI摄像头采集货架图像,在FPGA上做预处理(比如缩放、格式转换),然后通过DPU跑量化后的YOLOv5模型做检测,最后在ARM上运行应用逻辑并显示。但我是第一次接触这种异构平台,不太清楚如何合理划分软硬件任务,让数据在PL和PS之间高效流动。比如,该用AXI DMA还是AXI Stream?如何为DPU准备输入数据?整个系统的流水线怎么设计才能不卡顿?希望有使用过KV260或类似平台的朋友分享一些架构设计和性能调优的经验。
2026年,想用一块Xilinx的Kria KV260视觉AI入门套件完成‘智能零售货架商品识别与缺货检测系统’的毕业设计,在实现多路摄像头接入、YOLO目标检测模型部署和结果可视化时,如何利用其异构计算架构(FPGA+ARM)来优化系统吞吐率和能效?
提问
回答 3

首先得明确,KV260 的 PL(FPGA)和 PS(ARM)之间数据搬移是性能关键。你的思路是对的,在 PL 做图像预处理能减轻 ARM 负担并减少数据量。建议用 AXI Stream 配合 VDMA(Video DMA)来传输视频流,而不是用简单的 AXI DMA。因为 MIPI 摄像头出来的数据是流式的,VDMA 能更好地处理帧缓存和同步。DPU 的输入通常需要特定格式(比如 RGB 平面排列),你可以在 FPGA 里实现一个预处理流水线:MIPI CSI-2 接收 -> 去马赛克(如果需要) -> 缩放(到 YOLO 输入尺寸,比如 640×640) -> 颜色空间转换(YUV2RGB) -> 通过 AXI Stream 写入 DDR。然后 DPU 从 DDR 读取数据做推理。这样预处理和推理可以并行,ARM 只负责后处理(解析结果、画框)和显示。注意调整 VDMA 的帧缓冲数量,避免溢出。

从能效角度说,把计算密集的操作下放到 FPGA 是正道。但具体到你的场景,有几个坑要注意:一是 DPU 对输入数据布局有要求,比如可能是 NHWC 格式,你的 FPGA 预处理输出必须匹配,否则要额外转换。二是多路摄像头的话,考虑在 FPGA 里做多路 MIPI 接收和预处理,然后分时复用同一个 DPU(如果 DPU 算力够)或者用多个 DPU 实例。数据流可以这样设计:每路摄像头分配一个预处理流水线,输出帧通过 AXI Stream 写入 DDR 的不同缓冲区。然后 ARM 上用多线程或异步方式调度 DPU 推理,一路推理时另一路数据正在采集和预处理,形成流水线。可视化部分如果要求不高,可以直接在 ARM 上用 OpenCV 画框叠加,但注意显示瓶颈可能在这。如果吞吐率不够,可以降低摄像头帧率或分辨率。

我毕设用过 KV260,分享点经验。软硬件划分:图像采集、缩放、格式转换(到 DPU 需要的格式)全放 FPGA(PL)。ARM(PS)只负责启动 DPU、读结果、逻辑判断和显示。数据流动用 AXI Stream + VDMA 是最佳实践,Vitis 里有相关 IP 和例子。为 DPU 准备数据的关键是,你的 FPGA 预处理输出要直接对齐 DPU 输入张量的内存布局。建议先用纯软件在 ARM 上跑通整个流程,确定好 DPU 的输入输出格式,再着手 FPGA 设计。系统流水线不卡顿的要点是缓冲:FPGA 预处理完一帧就存 DDR,DPU 从 DDR 读,ARM 取结果,这三段可以并行。确保每个环节的处理时间小于帧间隔。多路摄像头的话,如果 DPU 处理一帧的时间大于多路的总帧间隔,就得考虑降低路数或使用更轻的模型。另外,KV260 的 DPU 支持批量处理(batch),可以试试一次处理多帧来提高吞吐,但会增加延迟,看你需求。
发表回答
登录后可在本页底部提交回答
