1. Zynq平台概述:从架构到实战

大家好,我是你们的FPGA讲师。今天咱们聊聊Zynq-7000系列。说实话,我第一次接触Zynq是在2013年,当时一个项目需要在摄像头采集的同时做神经网络推理。纯FPGA搞不定,纯ARM又跑不快。Zynq的出现,简直就是为我这种「既要又要」的工程师量身定做的。

1.1 Zynq-7000系列架构:一颗芯片,两个世界

Zynq-7000不是普通的FPGA。它把ARM处理器和FPGA逻辑集成在了一个芯片上。你想想看,以前做图像处理,要么用ARM串行算,慢;要么用FPGA并行算,但控制逻辑写起来想哭。Zynq把两者合二为一,ARM负责调度和复杂算法,FPGA负责像素级加速。

具体来说,Zynq-7000包含两大块:

  • PS(Processing System):双核ARM Cortex-A9处理器,主频最高1GHz。带DDR控制器、DMA、中断控制器、各种外设(UART、SPI、I2C、USB、以太网)。说白了,这就是个完整的嵌入式系统。
  • PL(Programmable Logic):就是FPGA部分。Xilinx 7系列架构,包含查找表(LUT)、触发器(FF)、块RAM(BRAM)、DSP48E1硬核。你可以把它想象成一张白纸,想画什么电路就画什么电路。

核心要点:PS和PL之间通过AXI总线通信。AXI是ARM公司搞的高性能总线协议,在Zynq上跑起来带宽能达到几十Gbps。图像数据从摄像头进来,经过PL加速,再通过AXI送到DDR,CPU随时可以取走处理——这套流程我在多个项目中验证过,非常稳定。

1.2 PS与PL协同工作原理:谁该干什么?

很多初学者会问:「我到底该把代码写在PS里还是PL里?」我的经验是:

  • PS适合干的事:系统初始化、网络协议栈、文件系统、复杂的控制逻辑(比如PID控制)、人机交互界面。ARM跑Linux,这些事做起来很顺手。
  • PL适合干的事:像素级处理(滤波、边缘检测、色彩空间转换)、高速数据流(视频采集、DMA传输)、实时性要求高的逻辑(PWM生成、编码器解码)。

举个例子。我在做工业相机项目时,图像传感器输出1080p@60fps的视频流。如果让ARM逐像素处理,CPU占用率直接飙到100%,还掉帧。后来我把图像预处理(去噪、白平衡、Gamma校正)全部放到PL里,ARM只负责接收处理后的数据并打包发送。结果CPU占用率降到了15%,帧率稳稳的60fps。

我的习惯:设计初期先画一张「功能-延迟-吞吐量」表格。延迟敏感、吞吐量大的模块扔PL;逻辑复杂、需要灵活修改的模块留PS。这样划分,后期调试会省很多事。

1.3 开发板资源介绍:以ZedBoard为例

市面上Zynq开发板很多,我以最经典的ZedBoard为例。这块板子用的是XC7Z020芯片,属于Zynq-7000系列的中端型号。它的资源如下:

资源类别 具体参数 我的评价
PS部分 双核ARM Cortex-A9 @ 866MHz 跑Linux够用,裸机更爽
PL部分 85K逻辑单元、560个DSP48E1 做720p图像处理绰绰有余
内存 512MB DDR3 存几帧1080p图像没问题
视频接口 HDMI输入/输出、VGA 直接接显示器看效果,方便
扩展接口 FMC、Pmod、Arduino兼容 接摄像头、传感器很方便
存储 SD卡槽、QSPI Flash 启动方式灵活,我习惯用SD卡

嗯,这里要注意。XC7Z020的PL部分虽然叫「Artix-7架构」,但它的DSP48E1硬核数量只有560个。如果你要做4K视频的实时处理,可能会不够用。我建议初学者先从720p开始练手,等熟悉了再升级到更高端的Zynq UltraScale+系列。

避坑指南:我曾经在选型时犯过一个错误——只看了逻辑单元数量,没看BRAM容量。结果做图像行缓存时发现BRAM不够用,最后只能外挂SRAM,增加了成本和布线难度。所以选板子时,一定要确认BRAM和DSP数量是否满足你的算法需求。

1.4 知识体系总览:一张图看懂Zynq

下面这张SVG图,是我自己总结的Zynq图像加速知识体系。你可以把它当作整个课程的地图。

Zynq图像加速知识体系 Zynq-7000平台 PS(ARM Cortex-A9) PL(FPGA逻辑) Linux系统 网络/存储 像素流水线 DMA传输 AXI总线通信(PS ↔ PL) 图像采集与显示 算法加速 上板验证与调试

从这张图你可以看到,整个课程围绕「PS+PL协同」这个核心展开。我们会先讲图像采集(摄像头驱动、VDMA),再讲算法加速(滤波、边缘检测),最后上板验证。每一步都离不开AXI总线这个桥梁。

1.5 开发环境与工具链

做Zynq开发,你至少需要安装以下工具:

  • Vivado:用于PL部分的开发,包括RTL设计、综合、实现、比特流生成。版本建议2018.3以上,我目前用2021.1。
  • Vitis:用于PS部分的开发,包括ARM裸机或Linux应用程序的编写、调试。Vitis其实就是以前的SDK,功能更强了。
  • PetaLinux:如果你想在Zynq上跑Linux,PetaLinux是必须的。它帮你配置内核、设备树、根文件系统。

我的建议:初学者可以先从裸机开发入手。裸机没有操作系统的干扰,你能更清楚地看到PS和PL之间的数据流动。等熟悉了AXI总线和VDMA,再上Linux也不迟。

好了,这一章的内容就到这里。Zynq平台是个大话题,但核心就三点:PS管控制、PL管加速、AXI管通信。后面的章节我们会一步步深入,从搭建第一个硬件工程开始,到最终在板子上跑通图像处理算法。

可可精品资料库