2. Zynq架构与工业视觉处理链路映射

Zynq 系列芯片最核心的特征,是把一颗双核 ARM Cortex-A9 处理器(PS,Processing System)与一片可编程逻辑(PL,Programmable Logic)集成在同一硅片上,并通过 AXI 互联与共享内存层次把两者紧密耦合。对工业视觉系统而言,这种异构结构不是简单的“CPU + FPGA 拼在一起”,而是决定了图像采集、预处理、特征提取、决策输出这四类任务分别应该落在哪一侧、以什么方式交换数据、以什么节奏协同。理解这条映射关系,是后续所有工程实现的基础。

PS 与 PL 的职责边界

PS 端由 ARM 核、片上存储器、DDR 控制器、外设接口(GigE、USB、SD、UART 等)以及中断控制器组成,擅长运行操作系统、处理分支判断、管理协议栈、执行浮点运算和复杂控制逻辑。PL 端由可配置逻辑块、DSP48 乘法单元、Block RAM 和可编程 IO 构成,擅长并行流水、定点运算、确定性时序和像素级吞吐。工业视觉链路的典型特征是“前端数据量大、算法规则固定、后端逻辑复杂”,因此自然形成一条从 PL 到 PS 的处理方向:像素密集、规则重复的环节放在 PL,语义判断、协议交互、结果上报放在 PS。

需要强调的是,这条边界并非绝对。例如模板匹配既可以在 PL 用 DSP48 做归一化互相关,也可以在 PS 用 NEON 指令做加速;选择依据是吞吐要求、延迟约束、开发成本和资源余量,而不是“必须放哪边”。

AXI 互联与内存层次

PS 与 PL 之间通过 AXI 总线互联,工业视觉中最常用的是三类接口:AXI4-Stream 用于无地址的连续像素流,适合 PL 内部流水线以及 PL 到 DMA 的搬运;AXI4-Lite 用于寄存器读写,适合 PS 配置 PL 中的 IP 参数、读取状态;AXI4-Full(或 AXI HP/ACP 端口)用于带地址的突发传输,适合 DMA 把整帧图像写入 DDR 或从 DDR 读出。PS 侧通过 HP(High Performance)端口访问 DDR,可提供高带宽;通过 GP(General Purpose)端口访问 PL 寄存器;通过 ACP 端口可让 PL 访问缓存一致性的内存区域。

内存层次上,PL 内部通常用 Block RAM 做行缓存、窗口缓存和 FIFO,用 DDR 做整帧图像、中间结果和特征描述子的存储。PS 端有 L1/L2 Cache,访问 DDR 时需注意缓存一致性:若 PL 通过 AXI 直接写 DDR,而 PS 又缓存了同一区域,必须使用非缓存映射或显式刷新,否则会读到旧数据。这是工业视觉调试中最常见的“图像看起来对、结果却不对”的根因之一。

Zynq 异构架构与工业视觉处理链路映射 PS 端(ARM Cortex-A9 双核) 决策输出与协议交互 结果判定 / 通信上报 / 系统调度 特征提取(软件侧) 描述子匹配 / 分类 / 坐标解算 图像预处理(软件侧) 色彩空间转换 / 形态学 / 标定 图像采集控制 相机配置 / 触发时序 / 曝光控制 L1 / L2 Cache + 中断控制器 缓存一致性管理 / 中断响应 DDR 控制器 / 外设接口 PL 端(FPGA 可编程逻辑) 特征提取(硬件侧) Sobel / 角点 / 连通域标记 图像预处理(硬件侧) 去噪 / 滤波 / 阈值 / 直方图 图像采集接口 MIPI / LVDS / GigE 接收 DSP48 / Block RAM / FIFO 并行乘加 / 行缓存 / 窗口缓存 AXI4-Stream / AXI4-Lite / AXI4-Full 像素流 / 寄存器配置 / 突发传输 DMA 搬运 / 中断上报 AXI 互联 HP 端口 GP 端口 ACP 端口 Stream Lite Full DDR 共享内存(整帧 / 中间结果 / 描述子) 像素流 → 特征 → 决策 PL 并行处理,PS 串行决策

四类任务在异构架构上的划分

图像采集。相机接口的物理层接收(MIPI CSI-2、LVDS、GigE PHY)通常放在 PL,因为需要严格的时序对齐和并行解串。PL 把像素流整理成 AXI4-Stream,再通过 VDMA 或自定义 DMA 写入 DDR。PS 端负责相机寄存器配置、触发信号生成、曝光与增益控制,以及采集完成后的帧管理。以 1280×1024、8bit 灰度、60fps 为例,像素率约 78.6 Mpixel/s,若用 4 通道 LVDS 每通道 200Mbps,PL 侧需要至少 4 路解串器加像素对齐逻辑,PS 侧只需通过 AXI4-Lite 写几个配置寄存器即可。

图像预处理。去噪、高斯滤波、中值滤波、阈值分割、直方图统计这类操作具有“逐像素、邻域固定、规则重复”的特点,放在 PL 可以用流水线实现每时钟周期处理一个像素。例如 3×3 高斯滤波,用两级行缓存加 9 个乘法器,在 150MHz 时钟下可支持约 150Mpixel/s 的吞吐,远高于 PS 软件实现。但色彩空间转换、镜头畸变校正、多相机标定这类涉及浮点或查表参数较多的操作,放在 PS 用 NEON 或 OpenCV 反而更灵活。

特征提取。这是划分最灵活的一环。Sobel 边缘、Harris 角点响应、连通域标记、形态学梯度等局部算子适合 PL;而特征描述子匹配、RANSAC 拟合、SVM 分类、坐标变换等全局或分支密集的操作适合 PS。一个典型的工业定位场景是:PL 做 Sobel 加阈值得到边缘二值图,PS 用霍夫变换或最小二乘拟合直线,计算工件位姿。这样 PL 承担了 90% 以上的像素运算,PS 只处理少量候选点,整体延迟可控制在毫秒级。

决策输出。结果判定、OK/NG 分类、通信协议封装、与 PLC 或上位机的交互,几乎全部放在 PS。PS 运行 Linux 或裸机程序,通过 TCP/IP、Modbus、EtherCAT 等协议把结果发出,同时驱动 IO 输出触发信号。PL 在这一环只做辅助,例如产生精确的触发脉冲或 PWM 控制光源亮度。

任务划分的工程判断依据

实际项目中,划分不是一次完成的,而是根据三个指标反复权衡:吞吐量、延迟和资源占用。若某环节像素吞吐超过 50Mpixel/s,优先考虑 PL;若算法分支多、参数频繁变化、需要浮点,优先考虑 PS;若两者都可行,则看 PL 资源余量和开发周期。下表给出一个参考判断表,参数为示例假设,实际需按具体器件和需求调整。

处理环节 推荐侧 关键依据 示例参数
相机物理层接收 PL 高速串行、严格时序 4 通道 LVDS,200Mbps/通道
去噪 / 滤波 PL 逐像素、邻域固定 3×3 高斯,150MHz 流水
阈值 / 二值化 PL 单像素比较、规则简单 全局阈值或自适应阈值
Sobel / 角点 PL 局部卷积、并行度高 3×3 卷积,DSP48 乘加
连通域标记 PL 或 PS 依赖游程编码复杂度 小分辨率可 PL,大图可 PS
描述子匹配 PS 分支多、数据量小 ORB / SIFT,NEON 加速
位姿解算 PS 浮点、矩阵运算 最小二乘 / RANSAC
通信上报 PS 协议栈、系统调度 TCP / Modbus / EtherCAT

数据交换与同步要点

划分完成后,真正决定系统能否稳定运行的是数据交换方式。工业视觉中常见三种模式:一是 PL 通过 AXI4-Stream 把预处理结果直接送给 PL 内部下一级,全程不经过 DDR,延迟最低;二是 PL 通过 VDMA 把整帧写入 DDR,PS 从 DDR 读取,适合需要软件后处理的场景,但要注意帧同步和缓存一致性;三是 PL 只把少量特征点或统计结果通过 AXI4-Lite 寄存器或小容量 FIFO 交给 PS,带宽需求最小,适合高速触发场景。

同步方面,PL 产生帧同步信号和行同步信号,PS 通过中断或轮询获知一帧完成。若使用 VDMA,可配置帧完成中断,PS 在中断服务程序中切换缓冲区并启动下一帧搬运。缓存一致性上,若 PS 使用缓存映射 DDR 区域,而 PL 直接写该区域,必须在读取前 invalidate 对应 cache line,或将该区域配置为非缓存。这个细节在调试时经常被忽略,表现为“第一帧正确、后续帧错位”或“图像偶发花屏”。

任务划分的实用原则:先按“像素吞吐”把环节分成高速流和低速流,高速流优先 PL,低速流优先 PS;再按“算法变化频率”微调,频繁改参数的环节即使吞吐高,也可考虑 PS 加 PL 加速器的混合方案。