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图像加速知识体系。你可以把它当作整个课程的地图。
从这张图你可以看到,整个课程围绕「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管通信。后面的章节我们会一步步深入,从搭建第一个硬件工程开始,到最终在板子上跑通图像处理算法。
可可精品资料库