一、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的关系:
小提示:刚开始接触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(做软件开发和调试)。
安装步骤其实不复杂,但有几个坑要注意:
- 下载安装包:去Xilinx官网下载Vivado + Vitis统一安装包。建议选“Vivado ML Edition”,包含Vitis。
- 选择版本:我个人推荐2022.2或2023.1,这两个版本比较稳定。别追最新版,容易遇到bug。
- 安装选项:勾选“Vivado”和“Vitis”,其他按需选。注意安装路径不要有中文和空格。
- 许可证:申请免费的WebPACK许可证,Z-7020完全够用。
- 环境变量:安装完后,设置环境变量
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图像处理流水线。
可可精品资料库