FPGA 异构(08):Zynq SoC FPGA——ARM+FPGA 异构架构、AXI 总线、软硬件协同设计
更新时间:2026-09-02。本文是
fpga/FPGA 领域第 08 篇,接 工程实践。Zynq 是 Xilinx 的 ARM+FPGA 异构 SoC,一个芯片包含 ARM 处理器核和可编程逻辑。ARM 跑软件,FPGA 做硬件加速,软硬件协同设计是 Zynq 的核心优势。
本文要回答的问题
- Zynq 的架构组成?PS 和 PL 分别做什么?
- AXI 总线是什么?AXI4、AXI4-Lite、AXI4-Stream 区别?
- PS 和 PL 之间怎么传输数据?DMA 怎么用?
- 软硬件协同设计的思路是什么?什么放软件,什么放硬件?
一、Zynq 架构
Zynq-7000 架构:
┌───────────────────────────────────────────────────────────┐
│ PS (Processing System) — ARM 硬核 │
│ ┌─────────┐ ┌─────────┐ ┌────────────┐ ┌─────────┐ │
│ │ Cortex-A9 │ L2 Cache │ 内存控制器 │ GPIO/UART │ │
│ │ 双核 │ 256 KB │ DDR3/2 │ SPI/I2C │ │
│ └─────────┘ └─────────┘ └────────────┘ └─────────┘ │
│ 地址空间:2 GB DDR 内存,足够跑 Linux │
└───────────────────────────────────────────────────────────┘
│ PL (Programmable Logic) — FPGA 可编程逻辑 │
│ ┌─────────┐ ┌─────────┐ ┌────────┐ ┌─────────┐ │
│ │ LUT │ │ FF │ │ DSP │ │ BRAM │ │
│ │ 数千个 │ │ 数千个 │ │ 数百个 │ │ 数十个 │ │
│ └─────────┘ └─────────┘ └────────┘ └─────────┘ │
└───────────────────────────────────────────────────────────┘
│ 互联:AXI 总线,High Speed 互联 │
│ AXI 数据宽度:32 bit/64 bit,时钟频率 100-150 MHz │
└───────────────────────────────────────────────────────────┘Zynq 产品线:
| 产品线 | ARM 核 | FPGA 规模 | 定位 |
|---|---|---|---|
| Zynq-7000 | 双核 Cortex-A9 | 15K - 400K LUT | 中低端 |
| Zynq UltraScale+ MPSoC | 四核 Cortex-A53 + 双核 Cortex-R5F | 100K - 1M LUT | 高端 |
| Versal | ACAP,AI Engine | 100K+ LUT | 异构 AI 计算 |
二、PS vs PL 分工
| 功能 | 放在 PS(ARM) | 放在 PL(FPGA) |
|---|---|---|
| 控制逻辑、接口协议 | ✅ 适合 | 不适合 |
| 数据处理、信号处理 | 串行,慢 | 并行,快 |
| 文件系统、网络栈 | ✅ Linux 原生支持 | 不适合 |
| 大量乘法运算(卷积/FFT) | 软件循环,慢 | DSP 并行,快 10-100x |
| 用户界面、命令行 | ✅ 适合 | 不适合 |
| 自定义硬件逻辑 | ❌ 不行 | ✅ 必须放 |
原则: 软件做控制,硬件做加速。能放软件放软件,性能瓶颈才放硬件。
典型案例:
- 图像处理:ARM 读 JPEG 文件,FPGA 做卷积/滤波,ARM 显示结果
- 数据采集:FPGA 做高速 AD 采集缓存,ARM 处理协议、保存到文件
- 算法加速:ARM 做流程控制,FPGA 加速计算密集型算子
三、AXI 总线协议
AXI 是 AMBA 总线协议的第三代,PS-PL 通信用 AXI。
三种 AXI 类型:| 类型 | 用途 | 地址宽度 | 突发 | 特点 |
|---|---|---|---|---|
| AXI4-Lite | 寄存器读写 | 32 bit | 单 beat | 轻量,适合控制寄存器 |
| AXI4 | 大批量数据 | 地址宽度可变 | 突发传输 | 适合内存、DMA |
| AXI4-Stream | 流数据 | 无地址 | 连续数据 | 适合视频流、数据流 |
AXI4-Lite 示例:控制寄存器
AXI4-Lite 地址空间:
0x0000: 控制寄存器 (rst, start)
0x0004: 状态寄存器 (done, error)
0x0008: 参数寄存器 0 (length)
0x000C: 参数寄存器 1 (mode)
0x0010: 结果寄存器 (result)
ARM → FPGA:
写 0x0000 = 1 → 复位
写 0x0008 = 1000 → 设置长度
写 0x0000 = 2 → 启动
ARM 读:
读 0x0004 → 看 done 位是否为 1
读 0x0010 → 读结果AXI4-Stream 示例:视频流
输入:每个像素 32 bit,连续输入
输出:每个像素 32 bit,连续输出
没有地址,只有数据和 valid/ready 握手
┌──────┐ data ┌──────┐
│源模块│------→│宿模块│
│ │valid →│ │
│ │← ready│ │
└──────┘ └──────┘
优点:简单,连续流数据,没有地址开销
用途:视频、图像、AD 采集、高速数据流四、PS-PL 数据传输
1. 寄存器读写(AXI4-Lite)
传输方式:CPU 直接读写 FPGA 寄存器
适用:控制寄存器、状态寄存器、参数配置
特点:延迟低(几十 ns),不适合大批量数据
代码示例(Linux 驱动 / 用户空间映射):
// 读状态寄存器
status = ioread32(base + 0x04);
// 写控制寄存器
iowrite32(0x00000002, base + 0x0000);2. DMA 批量传输(AXI4)
DMA:Direct Memory Access,不需要 CPU 参与传输
传输路径:
PL → DMA → PS DDR → CPU 处理
CPU 处理 → PS DDR → DMA → PL
优点:
- 大批量传输(MB/GB 级)
- CPU 只需要发起 DMA,传输过程不需要 CPU 参与
- 带宽高:几十 MB/s 到几百 MB/s
Zynq 常用 DMA IP:
- AXI DMA(Xilinx IP)
- AXI CDMA
- XDMA(PCIe 版)DMA 典型流程:
1. CPU 准备数据放在 DDR 缓冲区
2. CPU 配置 DMA 源地址、目的地址、长度
3. CPU 启动 DMA
4. DMA 自动传输,传输完成发中断给 CPU
5. CPU 处理传输好的数据五、软硬件协同设计流程
设计流程:
1. 功能划分
哪些算法是计算瓶颈 → 放 FPGA 加速
哪些是控制流程 → 放 ARM
2. 硬件设计(PL)
Verilog/VHDL 写加速模块
IP Integrator 连接 AXI 总线、DMA
生成比特流
3. 软件设计(PS)
Linux 环境下写驱动(或用 Xilinx 官方驱动)
用户空间写应用程序
调用 FPGA 加速接口
4. 调试
ILA 抓 AXI 总线波形
Linux 下打印调试信息工具链:
- 硬件设计: Vivado 做综合、布局布线、生成比特流
- 软件设计: Vitis 或 Xilinx SDK 编译 Linux 内核、设备树、应用程序
- Boot: FSBL + U-Boot + Linux 内核 + 根文件系统
六、Zynq 典型应用场景
| 应用 | 说明 | PS 做什么 | PL 做什么 |
|---|---|---|---|
| 嵌入式图像处理 | ARM 跑 Linux + 显示 + GUI,FPGA 加速卷积 | 控制、GUI、文件系统 | 滤波、卷积 |
| 高速数据采集 | FPGA 采集 AD 数据,ARM 存盘、处理 | 协议处理、存储 | 采集、缓存 |
| AI 推理加速 | ARM 跑框架,FPGA 加速算子 | 调度、后处理 | 卷积计算 |
| 原型验证 | ARM 做控制,FPGA 做芯片原型验证 | 驱动、调试 | 硬件原型 |
| 工业控制 | ARM 跑 RTOS,FPGA 做 IO 控制 | 协议栈 | 实时 IO |
七、常见坑对照
| 坑 | 现象 | 对策 |
|---|---|---|
| AXI 地址不对 | 读出来全是 0 | 检查地址偏移,设备树地址 |
| 地址空间重叠 | 访问冲突 | 检查 Block Design 地址分配 |
| DMA 长度不对 | 传输不全 | DMA 长度必须对齐到 burst 大小 |
| 中断没开 | DMA 完成不通知 CPU | 检查设备树中断配置 |
| 时钟不对 | AXI 传输错误 | 检查 PS FCLK 配置 |
八、Zynq 选型建议
| 需求 | 选型 |
|---|---|
| 简单控制 + 少量 FPGA 逻辑 | Zynq-7010/7020 |
| 中等规模加速 + Linux | Zynq-7045 |
| 多核 + 大量 FPGA 逻辑 | Zynq UltraScale+ MPSoC |
| AI 加速 + 异构计算 | Versal ACAP |
相关与延伸
FPGA 领域 8 篇完成。下一个领域:Security 安全系列。Zynq 是 ARM+FPGA 异构架构,AXI 总线链接 PS 和 PL。ARM 跑软件做控制,FPGA 做硬件加速。
一句话总结
Zynq SoC FPGA:PS 是 ARM 处理系统跑软件,PL 是可编程逻辑做硬件加速,AXI 总线互联;AXI4-Lite 适合控制寄存器,AXI4 适合 DMA 批量传输,AXI4-Stream 适合连续流数据;传输方式:寄存器读写(控制)+ DMA 批量数据(大数据);设计原则:软件做控制,硬件做计算,性能瓶颈才放硬件;典型应用:图像处理加速、高速数据采集、AI 推理、原型验证;Zynq-7000 适合中低端,UltraScale+ 适合高端,Versal 适合异构 AI。