1. Zynq平台概述
做FPGA加速算法,选对平台是第一步。Zynq这个系列,说白了就是把ARM处理器和FPGA逻辑放在同一个芯片里。我最早接触Zynq是在2013年,当时一个项目需要在视频流里做实时目标检测,纯ARM跑不动,纯FPGA又不好做上层调度。Zynq正好解决了这个痛点。
核心概念:Zynq不是单纯的FPGA,也不是单纯的ARM芯片。它是“处理系统(PS)”和“可编程逻辑(PL)”的融合体。PS负责控制、通信、操作系统;PL负责高速并行计算、自定义接口、实时信号处理。
1.1 Zynq架构简介:PS与PL
Zynq的内部结构,我习惯把它分成两半来看。
PS(Processing System) 包含:
- 双核/单核ARM Cortex-A9处理器(带NEON SIMD引擎)
- 一级缓存(32KB指令 + 32KB数据)和二级缓存(512KB)
- DDR内存控制器(支持DDR3/DDR3L/LPDDR2)
- 一组硬核外设:GigE、USB、UART、I2C、SPI、SD/SDIO、CAN
- 中断控制器(GIC)、DMA控制器、定时器
PL(Programmable Logic) 就是传统的FPGA fabric:
- 可配置逻辑块(CLB),包含LUT、FF、进位链
- 块RAM(BRAM),每个36Kb,可配置为双端口
- DSP48E1 Slice,每个可做25×18乘法累加
- 高速串行收发器(GTP/GTX,取决于具体型号)
- PCIe硬核、XADC模数转换器
PS和PL之间通过AXI总线连接。嗯,这里要注意:Zynq里有三种AXI接口——AXI_GP(通用接口,32位,带宽一般)、AXI_HP(高性能接口,64位,带FIFO,适合大数据搬移)、AXI_ACP(加速器一致性接口,可以直接访问CPU缓存)。
我的经验:做加速算法时,尽量走AXI_HP或AXI_ACP。AXI_GP的带宽只有600MB/s左右,而AXI_HP能做到1.2GB/s以上。我之前有个图像滤波项目,一开始用了AXI_GP,帧率死活上不去。换成AXI_HP后,带宽瓶颈直接消失。
为什么PS和PL要分开?你想想看,操作系统、网络协议栈、文件系统这些复杂逻辑,用FPGA实现太浪费资源,而且调试困难。而像素级处理、FFT、矩阵乘法这些计算密集型任务,用ARM跑又太慢。Zynq把两者结合,各取所长。
1.2 Zynq-7000系列选型指南
Zynq-7000家族里型号不少,选型时我主要看三个维度:逻辑资源量、DSP数量、封装和价格。
| 型号 | 逻辑单元 | DSP48E1 | BRAM (KB) | ARM核心 | 典型应用 |
|---|---|---|---|---|---|
| Z-7010 | 28K | 80 | 240 | 单核 | 简单控制、接口桥接 |
| Z-7020 | 85K | 220 | 560 | 双核 | 图像处理、电机控制 |
| Z-7030 | 125K | 400 | 900 | 双核 | 无线通信、软件无线电 |
| Z-7045 | 350K | 900 | 2180 | 双核 | 雷达信号处理、深度学习推理 |
| Z-7100 | 444K | 2020 | 3040 | 双核 | 高端通信、多通道数据采集 |
避坑指南:我曾经在一个项目里选了Z-7010做视频处理,结果发现BRAM不够用,DSP数量也捉襟见肘。后来换成了Z-7020,成本只多了几十块,但开发周期缩短了一半。选型时别只看逻辑单元,DSP和BRAM往往是真正的瓶颈。
选型建议:
- 入门学习:Z-7010或Z-7020就够了。Zedboard和Pynq-Z2都是7020,资源足够跑大部分算法原型。
- 中等复杂度:Z-7030,适合需要较多DSP做滤波、FFT的项目。
- 高性能计算:Z-7045或Z-7100,适合CNN推理、雷达信号处理这类吃资源的任务。
1.3 开发板介绍:Zedboard 与 Pynq-Z2
这两块板子是我用得最多的Zynq开发平台。它们都基于Z-7020,但定位完全不同。
Zedboard
Zedboard是Xilinx官方合作伙伴Avnet出的板子。它的特点是接口丰富、扩展性强。
- 板载资源:512MB DDR3、256Mb QSPI Flash、SD卡槽
- 外设接口:USB OTG、USB-UART、GigE、HDMI输出、VGA、OLED
- 扩展接口:FMC(FPGA Mezzanine Card)连接器,可以接高速ADC、摄像头、SFP+等子卡
- 适合场景:需要接外部高速数据源的算法验证,比如软件无线电、高速数据采集
我个人习惯用Zedboard做纯RTL加速器的调试。因为FMC接口可以直接连高速ADC,数据从模拟前端进来,经过PL做数字下变频,再通过AXI_HP送到PS做网络传输。整个链路清晰,调试起来也方便。
Pynq-Z2
Pynq-Z2是Xilinx为Python开发者设计的板子。它的核心理念是用Python调用FPGA。
- 板载资源:512MB DDR3、16MB QSPI Flash、SD卡槽
- 外设接口:USB-JTAG、USB-UART、GigE、HDMI输入/输出、音频编解码器
- 特色:预装Pynq镜像,支持Jupyter Notebook在线编程
- 适合场景:快速原型验证、算法探索、教学演示
我的建议:如果你团队里有软件工程师,或者你想快速验证算法效果,Pynq-Z2是首选。用Python写overlay调用FPGA IP核,迭代速度比传统Vivado流程快很多。我之前用Pynq-Z2做过一个实时人脸检测的demo,从开始写到跑通只用了两天。
| 对比项 | Zedboard | Pynq-Z2 |
|---|---|---|
| 核心芯片 | Z-7020 | Z-7020 |
| 内存 | 512MB DDR3 | 512MB DDR3 |
| 编程方式 | Vivado + SDK / Vitis | Jupyter + Python + Overlay |
| 扩展接口 | FMC(高速扩展) | Arduino + Pmod(通用扩展) |
| 典型用户 | 硬件工程师、通信工程师 | 算法工程师、软件工程师 |
| 价格 | 约$300 | 约$150 |
嗯,总结一下:Zynq平台的核心价值在于PS和PL的协同。选型时别贪大,够用就好。开发板方面,Zedboard适合做高速接口和纯硬件加速,Pynq-Z2适合快速原型和Python生态。后面章节我们会基于这两块板子,一步步搭建调试环境,跑通第一个加速算法。