4. AXI总线协议与PS-PL互联
在Zynq SoC中,PS(Processing System)与PL(Programmable Logic)之间的数据交互几乎全部建立在AXI协议之上。理解AXI4、AXI4-Lite、AXI4-Stream三种变体的定位差异,以及互联结构、地址映射和带宽评估方法,是设计实时控制与FPGA加速系统的前提。本节从协议特征出发,逐步落到互联拓扑、地址分配和带宽计算,帮助读者建立可操作的工程判断能力。
三种AXI变体的定位与选择
AXI4全称AXI4-Full,面向高性能存储映射传输,支持突发(Burst)读写,突发长度可达256拍,数据位宽可配置为32/64/128/256/512位,具备独立的读地址、读数据、写地址、写数据、写响应五通道。它适合大批量数据搬运,例如PL侧DMA向DDR写入图像帧或控制采样块。
AXI4-Lite是AXI4的简化子集,每次传输仅一拍,不支持突发,地址与数据通道结构相同但逻辑极简。它主要用于寄存器访问,例如PS通过M_AXI_GP接口读写PL侧自定义IP的控制寄存器、状态寄存器和参数寄存器。其优势是资源占用小、时序收敛容易,缺点是吞吐率低,不适合连续数据流。
AXI4-Stream则完全脱离地址概念,只保留数据流握手信号:TVALID、TREADY、TDATA、TLAST、TKEEP、TSTRB。它没有读写地址通道,因此不能直接映射到内存空间,但非常适合流式处理,例如ADC采样数据经PL滤波后送入DMA,或视频像素流在PL内部逐级处理。三者并非替代关系,而是分工协作:AXI4-Lite管控制,AXI4管大块存储搬运,AXI4-Stream管连续数据流。
互联结构与端口分工
Zynq-7000的PS侧提供三类AXI端口。M_AXI_GP(General Purpose)是PS作为主机的通用端口,通常用于访问PL侧寄存器,位宽32位,适合AXI4-Lite。S_AXI_HP(High Performance)是PS作为从机的端口,PL侧主设备(如DMA)通过它直接访问DDR或OCM,位宽可配置为64位,支持高吞吐突发传输。S_AXI_ACP(Accelerator Coherency Port)则用于PL访问PS的Cache一致性域,适合需要与CPU共享数据的加速器场景。
PL侧通过AXI Interconnect或SmartConnect将多个主从设备连接起来。Interconnect负责地址解码、仲裁、位宽转换和时钟域转换。例如,当PS的M_AXI_GP0发出地址0x43C0_0000的写请求时,Interconnect根据地址译码将请求路由到DMA控制器的AXI4-Lite从端口;若地址落在0x4040_0000,则路由到BRAM控制器。多主设备竞争同一从设备时,Interconnect按QoS或轮询仲裁决定优先级。
地址映射与Vivado配置
在Vivado Block Design中,Address Editor自动为每个AXI从设备分配地址范围。以常见配置为例:AXI4-Lite自定义IP分配0x4000_0000,范围64KB;BRAM控制器分配0x4040_0000,范围64KB;DMA控制器分配0x43C0_0000,范围64KB。这些地址在PS端软件中通过Xil_Out32和Xil_In32直接访问。需要特别注意的是,地址范围必须与IP实际寄存器数量匹配,过大会浪费地址空间,过小会导致高位地址被截断而访问到错误寄存器。
对于AXI4-Stream,由于没有地址概念,它不参与Address Editor映射,而是通过AXI4-Stream FIFO或DMA与存储映射域桥接。例如,ADC采样数据以Stream形式进入FIR滤波器,滤波结果再经AXI4-Stream Data FIFO缓冲,最后由DMA以AXI4-Full突发写入DDR。这条链路中,Stream段不占用地址,只有DMA的AXI4-Full端口参与地址映射。
带宽评估方法
带宽评估的核心公式为:带宽 = 数据位宽 × 时钟频率 × 传输效率。以AXI4-Full为例,若数据位宽64位、时钟100MHz、突发长度16拍、每拍传输效率约80%(考虑握手间隙和仲裁开销),则理论峰值带宽为64bit × 100MHz = 6.4Gbps = 800MB/s,实际有效带宽约为800 × 0.8 = 640MB/s。
对于AXI4-Lite,每次传输仅32位且无突发,若时钟100MHz,理论峰值32bit × 100MHz = 400MB/s,但实际因每次访问需完整地址握手,有效带宽通常低于100MB/s,因此只适合寄存器级控制,不适合批量数据。
AXI4-Stream的带宽取决于TDATA位宽和TVALID/TREADY握手效率。若TDATA为32位、时钟150MHz、连续无间隙传输,则带宽为32bit × 150MHz = 600MB/s。实际设计中需关注FIFO深度和背压(TREADY拉低)导致的吞吐下降。
工程示例:实时控制中的数据通路
假设一个电机控制场景:ADC以1MSPS采样三相电流,每相16位,总数据率48Mbps。PL侧将三路Stream合并为一路32位Stream,经FIR滤波后送入DMA。DMA通过S_AXI_HP0以AXI4-Full突发写入DDR,突发长度64拍,位宽64位,时钟100MHz。此时DMA有效带宽约640MB/s,远大于48Mbps需求,余量充足。PS端CPU通过M_AXI_GP0以AXI4-Lite读写PWM占空比寄存器和故障状态寄存器,每次访问耗时约几十纳秒,满足实时控制周期要求。
若将ADC数据改为8通道、每通道16位、2MSPS,总数据率256Mbps,仍低于640MB/s,但需检查DMA描述符链是否连续、FIFO是否溢出。若数据率继续上升至1Gbps以上,则需考虑使用多个HP端口并行或提高时钟频率。
常见配置检查清单
| 检查项 | 典型值/要求 | 判断依据 |
|---|---|---|
| AXI4-Lite地址范围 | 64KB对齐,覆盖所有寄存器 | Address Editor无重叠、无截断 |
| AXI4-Full突发长度 | 16–256拍 | 过长增加延迟,过短降低效率 |
| Stream握手效率 | TVALID/TREADY无长期背压 | FIFO深度足够,时钟域匹配 |
| HP端口位宽 | 64位优先 | 匹配DDR位宽,减少转换开销 |
| 时钟域 crossing | Interconnect内完成同步 | 无亚稳态,时序收敛 |