1. 工业视觉系统需求分析与Zynq平台选型
工业视觉系统的设计从来不是“先选板卡再想功能”,而是从任务指标出发,反向推导算力、接口、延迟与功耗约束,最终落到具体的芯片平台。本节围绕检测、测量、定位、识别四类典型任务,梳理指标分解方法,并给出Zynq-7000与Zynq UltraScale+ MPSoC的选型依据,最后说明软硬件协同设计的基本方法。
一、四类典型任务的指标分解
工业视觉任务虽然形态各异,但都可以拆解为“成像—预处理—特征提取—决策输出”这条链路。区别在于每一环的指标权重不同。
检测(有无、缺陷、瑕疵):核心指标是召回率与误检率。例如一条3C零件外观检测线,要求缺陷召回率≥99.5%,误检率≤0.5%,节拍60件/分钟,即单件处理时间≤1秒。这类任务图像分辨率通常为500万~1200万像素,算法以阈值分割、形态学、轻量CNN为主,对延迟敏感但对绝对算力要求中等。
测量(尺寸、间距、角度):核心指标是重复精度与绝对精度。例如测量金属件孔径,要求重复精度±0.02mm,对应到像素需达到亚像素级边缘定位。此时标定质量、镜头畸变、光源稳定性比算力更关键,算法以亚像素边缘、拟合、标定为主,算力需求反而不高,但对图像采集的确定性要求极高。
定位(抓取、对位、引导):核心指标是位姿精度与实时性。例如机器人抓取散乱工件,要求XY定位精度±0.1mm、角度±0.5°,处理延迟≤50ms。这类任务常用模板匹配、特征点匹配、PnP位姿解算,算力需求中等,但要求与运动控制紧密同步。
识别(OCR、条码、分类):核心指标是准确率与吞吐量。例如药品包装OCR,要求字符识别准确率≥99.9%,同时处理多路相机。这类任务常用CNN/Transformer,算力需求最高,且模型可能随产线换型而更新。
把上述指标落到工程参数上,可以形成一张需求分解表:
| 任务类型 | 关键指标 | 典型分辨率 | 单帧延迟 | 算法特征 | 算力倾向 |
|---|---|---|---|---|---|
| 检测 | 召回率/误检率 | 5~12MP | ≤30ms | 分割+轻量CNN | 中 |
| 测量 | 重复精度 | 2~5MP | ≤20ms | 亚像素+标定 | 低 |
| 定位 | 位姿精度/延迟 | 2~8MP | ≤50ms | 匹配+PnP | 中 |
| 识别 | 准确率/吞吐 | 1~5MP | ≤100ms | CNN/Transformer | 高 |
需要强调的是,延迟指标必须区分“采集延迟”“处理延迟”“输出延迟”,三者之和才是系统响应时间。很多项目失败并非算力不足,而是没有把链路延迟拆开分析。
二、Zynq-7000与Zynq UltraScale+ MPSoC的选型依据
Zynq系列的本质是“PS(ARM处理器)+ PL(FPGA逻辑)”的异构架构。选型的核心问题是:哪些任务放PS,哪些放PL,需要多大的PL资源与PS算力。
Zynq-7000:双核Cortex-A9,主频约667MHz~1GHz,PL为Artix-7或Kintex-7级别。适合:
- 中低分辨率(≤5MP)、中低帧率(≤60fps)的检测与测量;
- 以传统CV算法为主,PL承担图像采集、去噪、阈值、形态学等流水线;
- PS运行Linux,负责标定、通信、人机界面;
- 功耗低、成本敏感、无需复杂AI推理的场景。
Zynq UltraScale+ MPSoC:四核Cortex-A53 + 双核Cortex-R5,PL为UltraScale+级别,部分型号集成VCU视频编解码与Mali GPU。适合:
- 高分辨率(≥8MP)、高帧率(≥120fps)或多路相机同步;
- 需要CNN推理加速,PL中实现DPU或自定义卷积流水线;
- 需要硬实时控制,Cortex-R5跑裸机或RTOS处理运动同步;
- 需要高速接口:PCIe Gen3、USB3.0、DisplayPort、10G以太网。
选型时建议按以下顺序判断:先看接口带宽(相机接口是MIPI、GigE还是CoaXPress),再看算法类型(传统CV还是深度学习),再看实时性等级(软实时还是硬实时),最后看功耗与成本。如果四步中有两步以上指向UltraScale+,就应直接选MPSoC,避免后期因算力或接口不足而返工。
三、软硬件协同设计方法
选定平台后,真正决定项目成败的是软硬件任务划分。Zynq的价值在于可以把“数据搬运”和“像素级运算”下沉到PL,把“决策”和“通信”留在PS。具体做法如下。
第一步:画数据流图,标注每级的数据量与速率。例如一台8MP相机、60fps、8bit灰度,原始数据率为8M×60×1B≈480MB/s。若在PS中逐帧拷贝,DDR带宽很快成为瓶颈。此时应把去噪、阈值、连通域标记放入PL,只把特征结果(如缺陷坐标、面积)通过AXI-DMA传给PS,数据量可降到KB级。
第二步:按“确定性”划分。需要严格时序、逐像素同步的操作放PL;需要复杂分支、浮点运算、网络协议栈的操作放PS。例如亚像素边缘提取中的卷积核计算适合PL,而标定参数解算、结果判定适合PS。
第三步:用AXI-Stream与AXI-Lite定义接口。视频流用AXI-Stream,寄存器配置用AXI-Lite。在Vivado中先搭Block Design,确认DMA、VDMA、GPIO、中断的连接关系,再导出XSA给Vitis或PetaLinux。
第四步:在PS侧建立“采集—处理—输出”三线程模型。采集线程通过VDMA中断取帧,处理线程调用PL加速器或NEON优化函数,输出线程通过TCP/Modbus把结果发给PLC。线程间用环形缓冲区解耦,避免因某一级抖动导致丢帧。
最后需要提醒:选型不是“越强越好”。Zynq-7000在传统CV场景中往往比MPSoC更划算,因为其PL资源足够、功耗低、开发链成熟。只有当任务明确需要AI推理、多路高分辨率或硬实时控制时,才应升级到UltraScale+ MPSoC。把指标分解清楚,选型自然水到渠成。