AXI (Advanced eXtensible Interface) 协议详解 AXI 是 ARM 公司 AMBA 规范中的高性能总线协议是 AHB 的演进版本广泛应用于现代 SoC 设计中。1. AXI 核心架构 — 5 通道分离AXI 最大的设计特点是将地址/数据/响应完全分离为独立的单向通道实现真正的全双工通信┌─────────────────┐ Write Address ──►│ │ Write Data ──►│ AXI │──► Write Response │ │ Read Address ──►│ Interconnect │──► Read Data │ │──► Read Response └─────────────────┘通道方向功能AW(Write Address)Master → Slave写地址、控制信息W(Write Data)Master → Slave写数据、字节选通B(Write Response)Slave → Master写事务完成响应AR(Read Address)Master → Slave读地址、控制信息R(Read Data)Slave → Master读数据、读响应2. AXI 信号详细清单2.1 全局信号信号源宽度说明ACLKClock1全局时钟ARESETnReset1低电平复位2.2 Write Address Channel (AW)信号方向宽度说明AWIDM→S可配写事务 IDAWADDRM→S32-64写地址AWLENM→S4 (AXI3) / 8 (AXI4)Burst 长度 (拍数-1)AWSIZEM→S3每拍字节数AWBURSTM→S2Burst 类型AWLOCKM→S1锁定类型AWCACHEM→S4Cache 属性AWPROTM→S3保护类型AWQOSM→S4QoS 优先级AWREGIONM→S4区域标识AWVALIDM→S1地址有效AWREADYS→M1从机准备好收地址2.3 Write Data Channel (W)信号方向宽度说明WIDM→S可配写数据 ID (AXI3 only)WDATAM→S32-1024写数据WSTRBM→SWDATA_WIDTH/8字节选通WLASTM→S1Burst 最后一拍WVALIDM→S1数据有效WREADYS→M1从机准备好收数据2.4 Write Response Channel (B)信号方向宽度说明BIDS→M可配响应事务 IDBRESPS→M2写响应状态BVALIDS→M1响应有效BREADYM→S1主机准备好收响应2.5 Read Address Channel (AR)信号方向宽度说明ARIDM→S可配读事务 IDARADDRM→S32-64读地址ARLENM→S4/8Burst 长度ARSIZEM→S3每拍字节数ARBURSTM→S2Burst 类型ARLOCKM→S1锁定类型ARCACHEM→S4Cache 属性ARPROTM→S3保护类型ARQOSM→S4QoS 优先级ARREGIONM→S4区域标识ARVALIDM→S1地址有效ARREADYS→M1从机准备好收地址2.6 Read Data Channel (R)信号方向宽度说明RIDS→M可配读数据事务 IDRDATAS→M32-1024读数据RRESPS→M2读响应状态RLASTS→M1Burst 最后一拍RVALIDS→M1数据有效RREADYM→S1主机准备好收数据3. VALID / READY 握手机制AXI 所有通道使用同一种握手协议┌─────────────────────┐ │ VALID AND READY │ │ ↓ │ │ 传输发生 │ └─────────────────────┘ ↗ ↖ VALID (源发出) READY (目标接收)规则源端拉高 VALID 表示我有数据/地址/响应要发目标端拉高 READY 表示我可以接收只有当VALID1 且 READY1在同一拍时传输才发生VALID 和 READY 谁先都可以互不依赖时序示例 T1 T2 T3 T4 T5 ACLK: _/‾\_/‾\_/‾\_/‾\_/‾\_ VALID: ----‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾---- READY: ----‾‾‾‾‾‾‾‾______‾‾‾‾‾‾‾‾---- 传输: ✓ ✓ ✓ (T3 的 READY0 导致等待)**关键约束VALID 不能依赖 READY**即源端不能看到 READY 才拉 VALID否则会死锁。4. Burst 传输详解4.1 Burst 类型 (ARBURST/AWBURST)编码类型说明00FIXED固定地址如 FIFO 端口访问01INCR增量地址顺序访问内存10WRAP回绕地址Cache Line 填充11Reserved保留4.2 Burst 长度版本信号宽度拍数范围AXI3AWLEN/ARLEN 4-bit1~16 拍AXI4AWLEN/ARLEN 8-bit1~256 拍实际传输拍数 LEN 14.3 Burst Size (编码与 AHB 相同)AWSIZE/ARSIZE字节数0001 Byte0012 Bytes0104 Bytes0118 Bytes10016 Bytes10132 Bytes11064 Bytes111128 Bytes4.4 地址计算INCR增量Address_N Start_Address (N × Transfer_Size_in_Bytes)WRAP回绕Wrap_Boundary INT(Start_Address / (Total_Bytes)) × Total_Bytes Address_N Wrap_Boundary ((Start_Address N × Size) - Wrap_Boundary) % Total_Bytes其中Total_Bytes Burst_Length × Transfer_SizeFIXEDAddress_N Start_Address (每拍同一个地址)4.5 Burst 示例8 拍 INCR Burst 读 (起始地址 0x30Size4B)Cycle: T0 T1 T2 T3 T4 T5 T6 T7 ARADDR: 0x30 ARLEN: 7 (8拍) ARBURST: INCR ... RDATA: D0 D1 D2 D3 D4 D5 D6 D7 RLAST: 0 0 0 0 0 0 0 14 拍 WRAP Burst (起始 0x34, Size4, 边界16B)Addr: 0x34 → 0x38 → 0x3C → 0x30 (回到 0x30边界)5. 通道间依赖关系AWVALID WVALID BVALID 写事务: ──→ 无依赖 ──→ 写地址 写数据 写响应 ARVALID RVALID 读事务: ────────→ 无依赖 ────────→ 读地址 读数据写事务可以提前发数据也可以先发地址再发数据情况1 (地址先行): AW: [A1] [A2] ... W: [D1][D1][D1] [D2][D2][D2][D2] ... B: [B1] [B2] ... 情况2 (数据先行): AW: [A1] ... W: [D1][D1][D1] ... B: [B1] ...读事务数据必定在地址之后逻辑上。6. Outstanding Transactions多个待处理事务这是 AXI 相比 AHB 的重大优势AHB: 发地址 → 等数据 → 发下一个地址 (串行) AXI: 发地址1 → 发地址2 → 收数据1 → 发地址3 → 收数据2 ... (流水线)AR通道: [A1][A2][A3][A4] ... (连续发地址不等数据) R通道: [D1][D1] [D2] [D3][D3] [D4] ... (乱序返回)Outstanding 深度同时可以有多少个未完成的读/写事务通过ARID/AWID区分各个事务AXI 允许Out-of-Order 完成ID3 的数据可以先于 ID1 返回7. Transaction ID 与乱序AR通道: ID0, AddrA ID1, AddrB ID2, AddrC R通道: ID1, DataB ID0, DataA ID2, DataC (ID1 先返回)排序规则不同 ID的事务之间无顺序要求可乱序相同 ID的事务之间必须按序完成写事务 vs 读事务不同 ID 间无顺序要求8. 响应类型RRESP/BRESP编码说明OKAY00正常访问成功EXOKAY01Exclusive 访问成功SLVERR10从机错误访问错误地址等DECERR11译码错误地址无对应从机9. Cache 与 Prot 信号9.1 AWCACHE/ARCACHE (4-bit)Bit含义[0]Bufferable (B)[1]Modifiable (M) — 允许读取后修改写回[2]Read-Allocate (RA)[3]Write-Allocate (WA)常用编码场景CACHE[3:0]含义Non-cacheable0000不缓存Write-through0010写穿透Write-back0011写回Device memory0001设备内存B19.2 AWPROT/ARPROT (3-bit)Bit含义[0]Privileged (1) / User (0)[1]Non-secure (1) / Secure (0) — TrustZone[2]Instruction (1) / Data (0)10. Exclusive Access排他访问AXI 支持基于硬件的原子操作类似 ARM 的 LDREX/STREX读: ARLOCK1 (Exclusive Read) → 从机记录监控地址 写: AWLOCK1 (Exclusive Write) → 从机检查是否被篡改 → EXOKAY (成功) / OKAY (失败)用于实现 Spinlock、Semaphore 等无锁数据结构。11. AXI3 vs AXI4 vs AXI5特性AXI3AXI4AXI5Burst 长度1-16 拍1-256 拍1-256 拍WID 信号✅❌ (移除)❌QoS 信号❌✅ (4-bit)✅Region 信号❌✅ (4-bit)✅ (4-bit)User 信号❌✅✅TrustZone (非安全访问)❌❌✅Wake-up 信号❌❌✅Cache Stashing❌❌✅12. AXI-Stream (AXI4-Stream)AXI4-Stream 是 AXI 家族中用于无地址流数据传输的协议只有单通道TVALID TREADY TDATA TSTRB TKEEP TLAST TID TDEST TUSER没有地址概念纯数据流用于视频流、DAC/ADC 接口、DSP 数据通路、以太网包处理TVALID: ----‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾---- TREADY: ----‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾---- TDATA: ----D0D1D2D3D4D5D6D7---- TLAST: ----0 0 0 1 0 0 0 1 ---- └─ Packet 0 ─┘ └─ Packet 1 ─┘13. AXI vs AHB 深度对比┌──────────────┬──────────────┬──────────────────────┐ │ 特性 │ AHB │ AXI │ ├──────────────┼──────────────┼──────────────────────┤ │ 通道架构 │ 共享总线 │ 5 通道分离 │ │ 读写并发 │ ❌ │ ✅ 全双工 │ │ Burst 长度 │ 1-16 │ 1-256 (AXI4) │ │ Outstanding │ ❌ (1个) │ ✅ (多个) │ │ Out-of-Order │ ❌ │ ✅ (通过 ID 区分) │ │ 握手机制 │ HREADY 固定 │ VALID/READY 双向 │ │ 地址/数据 │ 流水线 │ 完全解耦 │ │ 频宽 │ ~200MHz │ ~500MHz │ │ 读写数据带宽 │ 单工 │ 双工可同时进行 │ │ 字节选通 │ ❌ │ ✅ WSTRB │ │ QoS │ ❌ │ ✅ │ │ Exclusive │ ❌ │ ✅ │ │ 面积 │ 小 │ 大 (~2-3x AHB) │ └──────────────┴──────────────┴──────────────────────┘性能对比理论最大吞吐32-bit 数据总线200MHzAHB: 地址数据共享每拍 ~0.8 个有效传输 → 约 640 MB/s AXI: 读写独立通道每拍可同时读写 → 约 800 MB/s (读) 800 MB/s (写)14. 典型 SoC 互联拓扑┌─────────────────────────────────────────────────────┐ │ AXI Interconnect / NIC-400 │ │ │ │ ┌──────┐ ┌──────┐ ┌──────┐ ┌──────┐ │ │ │CPU簇 │ │ GPU │ │ DMA │ │Video │ │ │ │(AXI) │ │(AXI) │ │(AXI) │ │Codec │ │ │ └──┬───┘ └──┬───┘ └──┬───┘ └──┬───┘ │ │ │ │ │ │ │ │ ┌──┴─────────┴─────────┴──────────────┴──┐ │ │ │ AXI Matrix (Crossbar) │ │ │ └──┬──────────┬──────────┬───────────────┘ │ │ │ │ │ │ │ ┌──┴──┐ ┌──┴──┐ ┌────┴─────┐ │ │ │DDR │ │AXI→ │ │ AXI→APB │ │ │ │Ctrl │ │AHB │ │ Bridge │ │ │ │(AXI)│ │Brdg │ └────┬─────┘ │ │ └─────┘ └──┬──┘ │ │ │ │ ┌────┴───┬────────┐ │ │ ┌──┴──┐ │ UART │ GPIO │ ... │ │ │SRAM │ │ (APB) │ (APB) │ │ │ │Flash│ └────────┴────────┘ │ │ │(AHB)│ │ │ └─────┘ │ └─────────────────────────────────────────────────────┘15. 设计要点总结VALID/READY 握手不要组合逻辑反馈VALID 的产生路径上不能有来自 READY 的组合逻辑ID 管理合理使用事务 ID 才能发挥乱序优势相同 ID 必须保序Burst 不能跨 4KB 边界AXI 规范要求单次 Burst 不能跨越 4KB 页边界保护 MMU 页表WLAST 必须正确Burst 最后一拍必须拉高 WLAST/RLASTNarrow Transfer当 Data Width Transfer Size 时通过 WSTRB 和字节通道选择实现Unaligned Transfer通过 WSTRB 实现非对齐访问首拍和末拍可以用部分字节选通