AXI4 burst 类型与边界:INCR/FIXED/WRAP、CACHE 与 4KB 边界
更新时间:2026-09-19。本文承接 AXI4 完整协议,专攻「一笔事务怎么传多拍」。读数据通路 AXI4 outstanding 解决多笔在途,本篇解决单笔内部的地址推进规则。
本文要回答的问题
- INCR / FIXED / WRAP 三种 burst 各用在什么场景?
- AxLEN(拍数)、AxSIZE(每拍字节)怎么决定总长度?
- WRAP(回绕)为什么必须对齐,Cache line 填充为什么用它?
- 为什么一条 burst 不能跨 4KB 边界?AxCACHE/AxPROT 传递什么信息?
一、三个信号描述一笔 burst
每笔地址事务携带:
- AxLEN[7:0]:拍数 = AxLEN + 1(AXI4 最多 256 拍;WRAP 只允许 2/4/8/16 拍)。
- AxSIZE[2:0]:每拍字节数 = 2^AxSIZE(0=1B … 6=64B),不得超过接口数据宽度。
- AxBURST[1:0]:
00=FIXED、01=INCR、10=WRAP(11保留)。
总字节数 = (AxLEN+1) × 2^AxSIZE。每拍地址由起始地址 AxADDR 按规则推进,配合 WSTRB/R 选字节 lane 处理非对齐首拍。
二、三种 burst 的地址推进
| 类型 | 地址规则 | 典型用途 |
|---|---|---|
| FIXED | 每拍地址都相同 | FIFO / 外设寄存器:重复访问同一位置(流式端口) |
| INCR | 每拍地址递增一个 burst 步长 | 内存块传输、DMA,最常用 |
| WRAP | 像 INCR 递增,但到上边界后回绕到下界 | Cache line 回填/写回 |
WRAP 类似环形缓冲:地址在一个「回绕窗」内递增,到达窗尾就跳回窗头。
起始 0x04,窗大小 16B(4 拍 × 4B):
拍序地址:0x04 → 0x08 → 0x0C → 0x00
└ 到 0x10 边界,回绕到窗头 0x00为什么 Cache 用 WRAP:处理器只缺 cache line 里的某个字,但要把整行填回。WRAP 允许把「关键字先传(critical word first)」,处理器拿到所需字即可继续执行,其余字随后绕回补齐,降低关键路径延迟。
WRAP 约束(违反即协议错误):起始地址必须对齐到 总传输字节数;总长只能是 2/4/8/16 拍;AxSIZE 等于每个 beat 的字节数。
三、非对齐传输与 WSTRB
AXI 支持非对齐起始地址:首个 beat 用 WSTRB(写)/ 字节 lane(读)屏蔽无效字节,后续 beat 对齐。例如 32 位接口、起始 0x01 传 4 字节,首拍只有 lane1/2/3 有效。简单从机可以选择不支持非对齐、对其回 SLVERR,由软件/桥保证对齐。
四、不可跨 4KB 边界
一条 burst 不能跨越 4KB 地址边界。根因:4KB 是常见页大小,边界两侧可能属于不同从机/不同页属性(可缓存 vs 设备内存、安全 vs 非安全)。若一笔 burst 跨界,Interconnect 无法用单一解码结果和单一内存属性服务整笔事务。设计 DMA/引擎时,传输长度要按 4KB 拆成多笔 burst。
其他边界相关约束:
- burst 不得跨越自己目标从机的地址区间;
- WRAP 窗本身不跨 4KB(由对齐约束自然保证)。
五、AxCACHE / AxPROT / AxLOCK:传递事务属性
- AxCACHE[3:0](在 AXI4 中改名为 ARCACHE/AWCACHE,位含义为 bufferable / cacheable / read-allocate / write-allocate):告诉 Interconnect 和从机这笔访问可否缓冲、可否缓存、可否分配。访问普通内存可置 cacheable;访问外设 FIFO/寄存器应置 Device/non-cacheable,否则写入被合并/缓存会破坏寄存器语义——这正是 FIXED 外设访问的典型搭配。
- AxPROT[2:0]:特权级、安全/非安全、指令/数据访问,用于互连防火墙(firewall)和 TrustZone 过滤。
- AxLOCK:AXI3 的 locked 事务在 AXI4 中被取消,独占访问改用 **独占读写(exclusive monitor,AxLOCK=独占信号对 RRESP/BRESP 返回 EXOKAY)**实现,不需要锁住总线。
六、常见的坑
- WRAP 起始地址没对齐:算错回绕窗,从机行为未定义;务必让起始地址 = 向下对齐到总字节边界。
- DMA 一笔长 INCR 跨 4KB:Interconnect 报错或数据写错从机,要在引擎内按 4KB 自动拆 burst。
- 对外设用 cacheable + 递增:写 FIFO 本应 FIXED/non-cacheable,被缓存或合并后寄存器动作丢失。
- AxSIZE 超过数据总线宽度:beat 字节数 > lane 数,非法;窄传输靠 WSTRB 而非加大 AxSIZE。
- beat 数算错:把 AxLEN 当「拍数」而非「拍数−1」,多发/少发一拍;256 拍对应 AxLEN=255。
相关与延伸
协议骨架见 AXI4 完整协议;多笔并发与保序见 outstanding 与 ID 保序;DMA 侧 burst 组织见 DMA 描述符环;存储层级与 cache 见 Cache 组织与替换。
总结
AXI4 burst 由 AxLEN(拍数−1)、AxSIZE(每拍字节)、AxBURST(FIXED/INCR/WRAP)三者定义:FIXED 打 FIFO、INCR 搬内存块、WRAP 服务 Cache line 关键字优先;WRAP 必须按总长对齐,任何 burst 都不得跨 4KB,外设访问用 FIXED + non-cacheable。