1. Zynq平台与软硬件协同加速全景
Zynq-7000 系列属于 Xilinx(现 AMD)推出的全可编程片上系统(All Programmable SoC,APSoC)。它并不是把一颗 FPGA 和一颗 ARM 处理器简单封装在一起,而是在同一芯片内通过 AXI 互联把处理系统(Processing System,PS)与可编程逻辑(Programmable Logic,PL)深度耦合。理解这种“硬核处理器 + 可编程逻辑”的双域结构,是后续所有软硬件协同加速工作的起点。
PS 部分是一套相对固定的处理子系统,典型器件中集成了双核 ARM Cortex-A9 处理器、L1/L2 缓存、片上存储器(OCM)、DDR 控制器、DMA、中断控制器以及 UART、SPI、I2C、USB、以太网、SD 等外设控制器。它擅长运行操作系统、处理控制流、管理文件与网络、执行复杂但串行的逻辑。PL 部分则是可编程逻辑阵列,包含查找表、触发器、DSP48 乘法累加单元、Block RAM 以及可配置 I/O,适合实现大规模并行、流水线化、位宽可定制的数据通路。二者分工的本质,是把“控制密集”和“计算密集”两类任务放到各自最擅长的域中执行。
软硬件协同加速的价值正来自这种分工。以图像处理、卷积、矩阵运算、加密、滤波等算法为例,若全部在 PS 上以软件循环执行,性能受限于处理器主频、指令级并行度和缓存带宽;而把其中最内层、最规整的循环映射到 PL 中,用多个并行通道同时计算,往往可以获得数倍到数十倍的吞吐提升,同时显著降低单位运算的功耗。需要强调的是,加速并非“把代码丢进 FPGA 就变快”,而是要在算法结构、数据搬运、接口带宽、存储层次之间做权衡。一个常见的经验是:如果数据搬运开销超过计算本身,加速收益会被迅速抵消,因此 DMA 与 AXI 带宽设计往往比计算单元本身更关键。
从系统视角看,PS 与 PL 之间通过若干 AXI 接口连接。常用的有:用于 PS 访问 PL 内寄存器和 BRAM 的 AXI GP(General Purpose)接口,用于 PL 主动访问 DDR 的高性能 AXI HP(High Performance)接口,以及用于 PL 访问 PS 外设的 AXI ACP(Accelerator Coherency Port)接口。GP 接口适合控制与状态交互,HP 接口适合大批量数据流,ACP 则可用于与 CPU 缓存保持一致性。理解这些接口的方向、带宽和用途,是设计加速器数据通路的基础。
基于上述结构,一个典型的协同加速项目通常遵循这样的开发流程:首先在 PS 侧用 C/C++ 实现算法参考版本,确认功能正确并测量软件执行时间,找出热点函数;然后判断哪些循环适合硬件化——通常选择计算密集、数据规整、并行度高、控制分支少的部分;接着用高层次综合(HLS)把 C/C++ 热点转换为 RTL,或直接编写 Verilog/VHDL,并添加流水线、数组分割、数据流等优化指令;随后在 Vivado 中把生成的 IP 核与 Zynq PS 通过 AXI 接口连接,分配地址、配置中断,生成比特流;最后在 SDK/Vitis 中编写主机程序,通过寄存器读写或 DMA 搬运驱动加速器,并用计时器、性能计数器或逻辑分析仪测量加速比与资源占用。
本课程的项目目标,是围绕一个可运行的 Zynq 加速实例,完整走通“软件基准 → 硬件加速器 → 系统集成 → 性能对比”的闭环。我们会在后续章节中逐步展开:如何用 HLS 把一个卷积或矩阵乘法内核流水线化,如何用 DMA 在 DDR 与 PL 之间高效搬运数据,如何通过 AXI HP 接口获得足够带宽,以及如何用 AXI Timer 和性能计数器量化加速效果。整个过程中,PS 负责调度、配置和校验,PL 负责并行计算,二者通过 AXI 互联协同工作——这正是 Zynq 软硬件协同加速的核心图景。