1. Zynq平台概述:Zynq-7000系列架构、PS与PL协同工作原理、开发板选型指南

1.1 为什么是Zynq?

做图像处理这些年,我试过不少方案。纯FPGA?灵活但开发周期长。ARM+FPGA分立?板级面积大,通信瓶颈明显。直到遇到Zynq,我才觉得「嗯,这才是做视觉加速该有的样子」。

Zynq-7000系列,说白了就是一颗芯片里同时集成了ARM处理器(PS)和FPGA逻辑(PL)。你想想看,ARM跑Linux做控制、网络、UI,FPGA做像素级的并行加速——这不就是为图像处理量身定做的吗?

核心思想:Zynq不是「ARM旁边加了个FPGA」,而是「ARM和FPGA通过高速总线紧耦合」。这个区别,决定了你的系统能跑多快、能做多复杂。

1.2 Zynq-7000系列架构速览

我习惯把Zynq的架构分成三块来看:

  • PS(Processing System):双核Cortex-A9,主频最高1GHz,带NEON SIMD引擎。跑Linux或者裸机都行。
  • PL(Programmable Logic):就是FPGA部分,从Artix-7到Kintex-7级别的逻辑资源,看具体型号。
  • 互联总线:AXI4、AXI4-Lite、AXI4-Stream,这是PS和PL之间的「高速公路」。

这里有个容易忽略的点——PS内部其实也集成了不少硬核外设:DDR控制器、USB、以太网、SDIO、UART、SPI、I2C……这些都不占PL资源。我在做第一块Zynq板子时,就因为没搞清楚这点,白白浪费了不少逻辑单元去实现一个I2C控制器,后来才发现PS自带。

我的建议:拿到Zynq芯片,先看PS部分有哪些硬核外设能满足你的需求。能用硬核就别用PL去「软实现」,省下来的逻辑资源留给真正的加速逻辑。

1.3 PS与PL协同工作原理

PS和PL怎么配合?我画个图你就明白了。

PS (Processing System) Cortex-A9 #0 L1 Cache Cortex-A9 #1 L1 Cache L2 Cache (512KB) DDR控制器 / 外设总线 USB / ETH / SD UART / SPI / I2C AXI 互联矩阵 AXI4 / AXI4-Lite / AXI4-Stream PL (Programmable Logic) 图像采集接口 MIPI / LVDS / Parallel 预处理模块 色彩空间转换 / 去噪 加速处理核心 卷积 / 滤波 / 特征提取 输出接口 VDMA / DisplayPort 高速数据通路

这张图里,PS和PL通过AXI互联矩阵交换数据。实际项目中,我最常用的数据流是:

  1. PL采集图像:通过MIPI或LVDS接口,把摄像头数据接入FPGA逻辑
  2. PL预处理:做色彩空间转换、去噪、缩放——这些操作像素之间独立,适合流水线
  3. PL加速处理:卷积、滤波、特征提取——这是FPGA的强项
  4. 通过AXI4-Stream送到PS:PS里的应用程序做高层决策,比如目标识别、显示控制

注意:PS和PL之间的带宽不是无限的。AXI_HP接口理论带宽约4.8GB/s(32位@150MHz),但实际能跑到60%-70%就不错了。我曾经在一个项目中,因为没算好带宽,导致图像数据在DDR里堵车,帧率直接腰斩。后来改用AXI4-Stream直通模式才解决。

1.4 开发板选型指南

选开发板这事,我踩过不少坑。直接说结论:

需求场景 推荐型号 理由
入门学习 / 原型验证 Zynq-7010 / 7020 性价比高,社区资源多。我第一块板就是ZedBoard,到现在还在用
图像处理 / 视频应用 Zynq-7030 / 7045 逻辑资源够用,带高速收发器。做1080p@60fps的实时处理没问题
高端视觉 / 深度学习 Zynq-7100 / ZU系列 资源充裕,适合做多路视频或复杂网络推理。不过价格也「充裕」

选型时,我一般按这个顺序问自己:

  • 图像分辨率多大? 1080p还是4K?这决定了PL需要的逻辑资源和DDR带宽
  • 帧率要求? 30fps和60fps,对流水线深度和时钟频率要求完全不同
  • 算法复杂度? 简单的色彩转换,还是多级卷积网络?后者需要更多DSP Slice
  • 接口需求? 需要HDMI输出?还是MIPI输入?板载接口决定了你的外设连接成本

我的经验:如果你是第一次做Zynq图像项目,建议从Zynq-7020起步。它性价比最高,而且Xilinx官方有完整的Petalinux和Vivado例程。等你把图像采集→预处理→加速→显示这条链路跑通了,再考虑升级到更高端的芯片。

1.5 开发环境与工具链

做Zynq开发,你至少需要这三样:

  • Vivado:做PL端的逻辑设计、综合、布局布线
  • Vitis:做PS端的软件开发,包括驱动、应用、调试
  • Petalinux:如果你要在PS上跑Linux,用它来定制内核和根文件系统

我个人习惯用Vivado + Vitis的组合。先在Vivado里搭好硬件平台,导出硬件描述文件(XSA),然后在Vitis里写软件。这套流程我用了五六年,稳定可靠。

嗯,这里要提醒一句:版本兼容性。Vivado 2020.1生成的XSA,不一定能在Vitis 2022.1里直接用。我吃过这个亏,花了两天时间排查,最后发现是工具链版本不匹配。建议统一用一个版本号,比如全部用2023.1。

一句话总结:Zynq就是ARM的大脑加上FPGA的肌肉。PS做决策,PL做加速,两者通过AXI总线紧密配合。选对开发板,搭好工具链,你的图像加速之路就成功了一半。

可可精品资料库