一、Zynq平台概述:从架构到实战

各位同学,欢迎来到《Zynq图像处理流水线构建实战》的第一章。我是你们的讲师,一个在FPGA和嵌入式领域摸爬滚打了十几年的老工程师。今天咱们不聊虚的,直接切入正题——Zynq到底是什么?为什么做图像处理要选它?

说白了,Zynq就是一颗芯片里同时装了一个ARM处理器(PS)和一块FPGA(PL)。你想想看,以前做嵌入式系统,CPU和FPGA是分开的两块板子,通信靠总线,延迟大、带宽低。Zynq把它们集成在一起,内部用高速AXI总线互联,数据吞吐量直接上了一个数量级。我个人习惯把这种架构叫做“软硬兼施”——ARM跑Linux做调度和算法,FPGA做实时流水线处理,各取所长。

1.1 Zynq架构简介:PS与PL

Zynq的架构,核心就是两个部分:

  • PS(Processing System):双核Cortex-A9 ARM处理器,带DDR控制器、外设接口(UART、SPI、I2C、USB、以太网等)。它负责跑操作系统、管理任务、处理复杂算法。
  • PL(Programmable Logic):就是FPGA逻辑资源,包括查找表(LUT)、触发器(FF)、块RAM(BRAM)、DSP切片。它负责做高速并行处理,比如图像滤波、边缘检测、像素级流水线。

这两者之间通过AXI总线通信。AXI有四种接口:

  • AXI_HP:高性能端口,用于大数据量传输(比如图像数据从PL到DDR)
  • AXI_GP:通用端口,用于控制信号
  • AXI_ACP:加速一致性端口,用于缓存一致性
  • AXI_Stream:流式接口,适合视频流处理

重点:做图像处理时,我建议优先使用AXI_HP和AXI_Stream。HP端口带宽高,Stream接口延迟低。我在项目中遇到过用GP端口传视频数据,结果帧率上不去,后来换成HP端口,问题直接解决。

下面这张图是我手绘的Zynq架构简图,帮你快速理解PS和PL的关系:

PS (Processing System) Cortex-A9 双核 ~1GHz DDR控制器 DDR3/DDR4 外设:UART / SPI / I2C / USB / 以太网 AXI 总线互联 PL (Programmable Logic) LUT + FF BRAM DSP切片 I/O资源 图像处理流水线 滤波 → 边缘检测 → 特征提取 控制/配置 数据流

小提示:刚开始接触Zynq的同学,容易把PS和PL当成两个独立的芯片来设计。其实应该把它们看作一个整体——PS负责“大脑”,PL负责“肌肉”。我在做第一个Zynq项目时,把图像预处理全放在PS里跑,结果CPU占用率飙到90%,后来把滤波和缩放挪到PL里,CPU占用直接降到20%。

1.2 Zynq-7000系列选型

Zynq-7000系列按性能和资源分为几个子系列。选型时,我一般看三个指标:逻辑资源量、DSP切片数、DDR带宽。

型号 逻辑单元 (K) DSP切片 BRAM (KB) 适用场景
Z-7010 28 80 240 简单控制、低分辨率图像
Z-7020 85 220 560 中等图像处理、VGA/720p
Z-7030 125 400 1060 高清视频、多通道处理
Z-7045 350 900 3040 4K视频、深度学习加速

我个人经验是:做图像处理入门,Z-7020性价比最高。Zedboard和PYNQ-Z2用的就是它。如果你要做1080p实时处理,Z-7030起步。4K的话,直接上Z-7045,别犹豫。

避坑指南:我曾经在一个项目里选了Z-7010做720p图像处理,结果逻辑资源用了95%,布线都布不通。后来换了Z-7020,资源占用60%,还有余量加功能。选型时建议留30%的余量,别卡着极限选。

1.3 Zynq开发板介绍:Zedboard与PYNQ

市面上常见的Zynq开发板,我重点推荐两款:

Zedboard

  • 核心芯片:Z-7020
  • 板载资源:512MB DDR3、USB、以太网、HDMI、音频、扩展口
  • 适合人群:传统FPGA开发者、嵌入式工程师
  • 特点:Vivado + Vitis 标准流程,适合做底层硬件设计

PYNQ-Z2

  • 核心芯片:Z-7020(与Zedboard相同)
  • 板载资源:512MB DDR3、USB、以太网、HDMI、Arduino接口、Raspberry Pi接口
  • 适合人群:Python开发者、AI/图像处理初学者
  • 特点:支持PYNQ框架,可以用Python调用FPGA硬件加速

怎么选?如果你习惯写Verilog/VHDL,想深入理解硬件,选Zedboard。如果你更熟悉Python,想快速验证图像处理算法,选PYNQ。我个人两个板子都用过,Zedboard适合做产品原型,PYNQ适合做快速迭代。

1.4 Zynq开发环境搭建:Vivado + Vitis

搭建开发环境,说白了就是装两个软件:Vivado(做硬件设计)和Vitis(做软件开发和调试)。

安装步骤其实不复杂,但有几个坑要注意:

  1. 下载安装包:去Xilinx官网下载Vivado + Vitis统一安装包。建议选“Vivado ML Edition”,包含Vitis。
  2. 选择版本:我个人推荐2022.2或2023.1,这两个版本比较稳定。别追最新版,容易遇到bug。
  3. 安装选项:勾选“Vivado”和“Vitis”,其他按需选。注意安装路径不要有中文和空格。
  4. 许可证:申请免费的WebPACK许可证,Z-7020完全够用。
  5. 环境变量:安装完后,设置环境变量XILINX_VIVADO指向安装目录。

验证安装:打开Vivado,新建一个空工程,能看到器件列表里有Z-7020(xc7z020)就算成功。然后在Vitis里新建一个Hello World工程,编译通过就说明环境搭好了。

嗯,这里要注意:Vivado和Vitis的版本必须匹配。我曾经试过Vivado 2022.2配Vitis 2023.1,结果编译报了一堆莫名其妙的错误。后来统一成2022.2,一次通过。

最后,给新手一个建议:第一次搭建环境,最好跟着官方UG973文档走一遍。别嫌麻烦,环境搭好了,后面能省80%的调试时间。

好了,第一章就到这里。记住:Zynq的核心是PS+PL协同,选型看资源和带宽,开发板选Zedboard或PYNQ,环境用Vivado+Vitis。下一章我们开始实战——搭建第一个Zynq图像处理流水线。


可可精品资料库