FPGA学习笔记
从架构清晰和高效的角度,推荐一个混合方案。PS负责系统控制、摄像头采集(OpenCV)、结果可视化。PL作为计算加速器。数据传输分两层:1. 对于大块的图像帧数据(每帧几百KB),必须用AXI DMA通过HP口进行流传输,这是瓶颈所在,DMA能最大化利用总线带宽。2. 对于少量的控制命令和状态寄存器(如启动检测、读取置信度阈值),可以用更轻量的AXI Lite或AXI GPIO,挂在同一个互联总线上。这样分工明确。关于视频流路径,既然你用USB摄像头,它通常依赖PS端的USB控制器和驱动,所以让PS用OpenCV抓帧、做简单预处理(色彩空间转换、归一化)是最现实的。然后PS把预处理后的数据块通过DMA推给PL。想让PL直接处理原始USB流理论上可行但极其复杂,需要自己在PL实现USB协议和图像解码,不推荐。你的重点是YOLO加速,别在视频输入上过度折腾。高效架构的另一个关键是PL端设计:考虑用HLS或Vivado High-Level Synthesis将YOLO的关键层(如卷积)封装成带有AXI-Stream接口的IP,这样能无缝对接DMA的数据流。最后,在PYNQ上,利用好它的Python库(如pynq.lib.dma)来控制DMA,会简化很多驱动开发。
