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把两者结合,各取所长。

Zynq架构概览:PS与PL 处理系统(PS) ARM Cortex-A9 双核 / NEON 缓存系统 L1 32KB + L2 512KB DDR内存控制器(DDR3/LPDDR2) 硬核外设:GigE / USB / UART / I2C / SPI AXI总线(GP / HP / ACP) 数据/控制 可编程逻辑(PL) CLB(逻辑单元) LUT + FF + 进位链 BRAM(块RAM) 36Kb / 双端口 DSP48E1 25×18 MAC GTP/GTX 高速串行收发器 PCIe硬核 / XADC / 时钟管理 加速算法部署位置 自定义IP核 / HLS生成 / 纯RTL

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生态。后面章节我们会基于这两块板子,一步步搭建调试环境,跑通第一个加速算法。