我的毕业设计选题是基于Xilinx Kria KV260开发板的智能零售货架监控系统,需要实现商品检测与计数。我了解KV260包含了可编程逻辑(PL)和ARM处理器系统(PS)。对于YOLO检测模型和OpenCV的图像预处理(如缩放、色彩空间转换),应该如何合理地划分任务到PL和PS?是应该用Vitis AI将整个模型部署到PL,还是将预处理放在PS、模型推理放在PL?如何设计两者之间的数据流(如通过AXI DMA)才能最大化发挥硬件性能,满足实时性要求?希望有相关项目经验的大神分享一下架构设计思路。
2026年,想用一块Xilinx的Kria KV260视觉AI套件完成‘智能零售货架监控系统’的毕设,在实现YOLO目标检测和OpenCV图像预处理时,如何高效利用其可编程逻辑(PL)和处理器系统(PS)进行软硬件协同设计?
提问
回答 3

KV260这个板子做智能零售监控挺合适的,PL和PS的协同是关键。你的需求是实时处理,那就要把耗时、重复性高的部分往PL里塞。
我建议把图像预处理(缩放、RGB转BGR、归一化)用HDL或HLS写成IP核放到PL里。OpenCV在PS上跑这些操作太吃CPU了,拖慢整体帧率。YOLO模型推理部分,强烈推荐用Vitis AI工具链编译成DPU IP,也部署在PL。这样PS主要就负责调度:从摄像头取图、触发PL预处理、把数据送DPU、取回结果做后处理(比如画框、计数)。
数据流设计上,用AXI DMA在PS的DDR和PL的IP之间搬数据。可以设计成流水线:PS把一帧图像数据放到DDR,DMA搬给预处理IP,处理完再通过DMA搬给DPU,DPU输出结果再DMA回DDR。注意用双缓冲甚至多缓冲,避免等数据的时间。
几个坑要注意:一是Vitis AI对YOLO版本有要求,最好选它支持的版本(比如YOLOv3)。二是PL资源有限,模型别太大,KV260的DPU配置选中等规模的。三是摄像头接口,如果用的是MIPI CSI,驱动和PL的MIPI解码IP要调通。
毕设的话,先跑通Vitis AI的例程,再慢慢替换成自己的预处理和模型,一步步来。

从项目经验看,软硬件划分得权衡开发难度和性能。如果你PL编程不熟,全扔给Vitis AI可能更省事。
但想高效的话,预处理放PL是值得的。OpenCV在ARM A53上跑,一张1080p图做resize和色彩转换,可能就十几毫秒,加上YOLO推理,帧率上不去。PL里做预处理,能压到几毫秒甚至更少,还能和DPU推理并行。
具体步骤:
1. 用Vitis HLS把C/C++的预处理代码(比如用OpenCV的库函数思路写)综合成IP。注意接口用AXI Stream,方便接DMA和DPU。
2. 在Vivado里把预处理IP、DPU IP、AXI Interconnect、DMA控制器等连起来。PS通过AXI Lite配置这些IP。
3. 软件端用Vitis平台,写Linux应用。用OpenCV或V4L2抓图,但拿到的是原始数据,别在PS里处理,直接通过DMA发到PL。
4. 数据流建议:摄像头数据可以先进PS的DDR(因为摄像头驱动通常到内存),然后启动DMA传到PL预处理,预处理后数据不进DDR直接流进DPU(用AXI Stream连接),DPU输出结果再通过DMA回DDR。这样减少DDR访问次数。关键点:PL和PS之间的带宽要算一下,别成瓶颈。用性能分析工具看看。另外,模型后处理(如非极大抑制)在PS上做就行,不复杂。
选择建议:如果时间紧,预处理可以先用PS顶着,先保证整个流程跑通,再优化到PL。毕设演示时,可以对比两种方案的帧率,体现你的优化工作。

简单直接版:
PL干固定的、算得多的活,PS干灵活的、控制类的活。
所以,YOLO模型推理肯定放PL,用Vitis AI部署成DPU。图像预处理也尽量放PL,因为每个像素都要算,并行起来快。
怎么高效数据流?记住:让数据尽量在PL里流起来,少来回折腾DDR。
比如,设计一个PL的数据流水线:MIPI摄像头数据直接进PL的预处理模块,然后直接进DPU,DPU输出结果再通过DMA送到PS的DDR。这样PS只在开始时配置一下,最后取结果就行,中间不插手。
但这对PL设计能力要求高,要搞定MIPI CSI IP和自定义流水线。如果做不到,就按常规来:PS收图到DDR,DMA搬去PL处理,再搬回。记得用多buffer避免等待。
注意事项:Vitis AI的DPU可能对输入数据格式有要求(比如特定的缩放尺寸、排布),你的预处理IP要匹配好。
最后,实时性满足与否,看你的帧率要求。KV260跑YOLO,处理1080p图,合理设计下,达到10fps以上应该可以,对于货架监控够用了。
发表回答
登录后可在本页底部提交回答
