AXI3 AXI4 差异:AxLOCK 移除、WID 删除、写交织限制与迁移检查清单
更新时间:2026-09-28。本文是「集成电路大类 · 芯片设计」接口主题簇里的一篇长尾文。AXI4 完整协议 讲的是 AXI4 自身的五通道模型,但如果你手里维护的是 2010 年之前流片的 AXI3 IP(大量存量 Cortex-A9 世代 SoC、老 DDR 控制器都是 AXI3),或者买来的第三方 IP 标注「AXI3/AXI4 双模式」,就必须搞清楚两版规约到底改了什么。改动比想象中少,但每一处都会让不加处理的直连直接挂死。
本文要回答的问题
- AXI3 AXI4 差异具体落在哪些信号和语义上,为什么改?
- AxLOCK 从两比特缩到一比特,丢掉了什么,exclusive access 怎么补位?
- WID 信号为什么被整体删除,写数据通道的 ID 由谁接管?
- 写交织(write interleaving)为什么被禁,对突发数据顺序有什么新约束?
- 存量 AXI3 IP 上 AXI4 总线,逐条要做哪些检查和修改?
一、版本演进的背景:AXI4 为什么要动刀
ARM 在 2010 年发布 AXI4,距 AXI3(2003 年随 AMBA 3 发布)七年。动刀的原因可以归纳成一句话:AXI3 里有两组功能在真实芯片里几乎没人用对,但协议开销人人都要付。这两组就是锁定传输(locked transaction)和写交织。前者要求互连支持跨整个总线矩阵的总线级锁定,仲裁器实现复杂且容易死锁;后者要求从设备按 WID 重组多主机的交织写数据,绝大多数 slave 实际上只支持单一 ID 流。
所以 AXI4 的思路不是加功能,而是「把用错的功能砍掉、把常用的功能放宽」。放宽体现在突发长度:AXI3 的 AxLEN 是 4 比特、最大 16 拍,AXI4 扩到 8 比特、INCR 类型最大 256 拍,长 DMA 传输不再需要拆成多笔。砍掉的部分就是本文的主角。先看一张总览表:
| 维度 | AXI3 | AXI4 | 影响面 |
|---|---|---|---|
| AxLEN 位宽 | 4 bit,最大 16 拍 | 8 bit,INCR 最大 256 拍(WRAP 仍限 16) | 突发生成逻辑 |
| AxLOCK | 2 bit:normal/exclusive/locked | 1 bit:normal/exclusive | 锁定传输消失 |
| WID 信号 | 存在,随 W 通道走 | 删除 | 写数据通道接口 |
| 写交织 | 允许,按 WID 区分流 | 禁止,写数据按 AW 顺序连续发 | 主从双方 |
| QoS 信号 | 无 | 新增 AxQOS[3:0] | 可悬空或绑 0 |
| 多 region | 无 | 新增 AxREGION[3:0] | 一般绑 0 |
表里后面两行(QoS、REGION)是 AXI4 的新增输出,AXI3 master 没有它们——对互连来说这些输入可绑默认值,不是迁移的障碍。真正的坑在前四行。
二、AxLOCK:从锁定传输到只剩独占访问
AXI3 的 AxLOCK[1:0] 有三个有效编码:00 普通、01 独占(exclusive)、10 锁定(locked)。锁定语义是:master 发起 locked 序列后,互连必须保证序列期间没有其他 master 的事务能到达该 slave,相当于总线级的临界区。这要求仲裁器跟踪锁定状态、阻止一切穿插访问,一旦 master 忘记解锁(或者发起 locked 的 CPU 在序列中间被异常打断),整条路径上的其他主机全部饿死。
上图是 AxLOCK 语义的收敛过程:AXI4 把信号缩成 1 比特,只保留 normal 和 exclusive 两种。原来用 locked 传输实现的互斥(典型场景:多核对同一外设寄存器的读-改-写),在 AXI4 时代必须改用 exclusive access 配合软件重试——独占读拿到地址监控权,独占写成功才算拿到锁,失败就重试。互连实现简单了(只需独占监控器,不需总线级阻塞),代价是软件层面多了重试循环。
迁移检查点:如果 AXI3 master 的 RTL 或驱动里发过 AxLOCK=2'b10 的 locked 序列,迁到 AXI4 不是改连线能解决的,必须改协议逻辑。好消息是 locked 传输本就罕见,多数 IP 全程只发 normal。
三、WID 删除与写交织禁止:一枚硬币的两面
AXI3 的写数据通道(W 通道)自带 WID 信号,作用是让 master 可以把不同 AWID 事务的写数据拍交织着发:先发 ID=0 的三拍、插进 ID=1 的两拍、再回来发 ID=0 的最后一拍。slave 靠 WID 把数据拍归位到各自的写事务里。这个设计当初是为了让多线程 DMA 引擎共享一个写口时不必等前一笔写完。
问题在于:真实世界里几乎没有 slave 实现完整的写交织重组,互连接到交织流时通常拆成物理上隔离的路径再合并,白白增加面积和时序压力。于是 AXI4 一刀切:删除 WID 信号,禁止写交织。写数据必须按 AW 通道发出事务的顺序,一笔写事务的数据拍从 WVALID 第一次拉高到 WLAST 连续发完(中间可以有 WREADY 反压停顿,但不能穿插别的事务的数据)。slave 的归属判断退化成一个指针:当前写数据属于最近一笔未完成的 AW。
和 AXI4 写交织与数据顺序 一篇的细节对照看会更清楚:AXI4 的多 outstanding 写依然存在,乱序的是 B 通道响应的返回顺序,写数据本身必须保序。迁移检查点是双向的:
- AXI3 master 上 AXI4 总线:确认 master 从不交织写数据(绝大多数本来就不交织),直接删 WID 输出即可;若互连仍要求 WID 占位,绑成与 AWID 等宽的全 0 或按厂商约定处理。
- AXI3 slave 上 AXI4 总线:slave 内部按 WID 归位的重组逻辑变成死代码,可删;要确认 slave 不依赖「同一时刻多笔写数据并存」的缓冲结构,AXI4 下同一时刻只有一笔写数据在流。
四、突发长度与其他小改动
AxLEN 从 4 比特扩到 8 比特,INCR 突发从最多 16 拍放宽到 256 拍,这是 AXI4 最讨喜的改动——4KB 边界规则不变,单笔 INCR 最长恰好可以覆盖一个 4KB 页。注意 WRAP 突发在 AXI4 里仍然只允许 2/4/8/16 拍,cache line refill 行为没有变化。AXI3 master 的 AxLEN 输出只有 4 比特,接 AXI4 互连时高位补零,行为自动等价,无需修改;反过来 AXI4 master 若发出超过 16 拍的突发,下游挂 AXI3 slave 时必须由互连或桥拆成多笔,这是集成时要确认的。
其余零碎差异:AxCACHE 各位定义微调(AXI4 明确了 allocate 位的读写语义),AxPROT 不变;AXI4-Lite 和 AXI4-Stream 从 AXI4 起才正式独立成规格,AXI3 时代没有这两个兄弟,选型问题见 AMBA 总线选型指南;AXI4 还删掉了 AXI3 对「写数据先于写地址」顺序的宽容表述,明确 W 通道不依赖 AW 先行但实现上推荐 AW 先发。这些点对存量 RTL 基本无感。
五、迁移检查清单
把一块 AXI3 IP 挂上 AXI4 互连(或反向),按下面的顺序过一遍,基本不会漏:
| 检查项 | 通过条件 | 不通过的处理 |
|---|---|---|
| AxLOCK 使用 | 全程只发 normal(或 exclusive) | 改 exclusive 重试逻辑,删 locked 序列 |
| WID | master 不输出或 slave 不使用 | master 删 WID 端口;slave 删 WID 归位逻辑 |
| 写交织 | master 从不交织不同 ID 的写数据 | 加写数据串行化缓冲,整笔发完再发下一笔 |
| AxLEN 上限 | AXI4 端突发 ≤16 拍时兼容 AXI3 | 互连侧拆分长突发 |
| AxQOS/AxREGION | AXI3 端无此信号 | 互连输入绑 0,或桥生成默认值 |
| exclusive 监控 | slave 支持独占(EXOKAY 响应) | 确认互连是否代管监控,避免双监控 |
把这张表串成一条迁移动线,就是下面这张图——先查「被删的功能你用了没有」,再查「新增的信号怎么绑」,最后处理位宽差异:

这张图的价值在于把「要不要改 RTL」提前到静态扫描一步:绝大多数不锁定、不交织的 IP 在第一个分支就直接流向「仅删端口」,迁移成本接近零;真正花功夫的是左支那类用了锁定或写交织的老 IP。
这份清单的结构和站内另一篇 AHB2 到 AHB5 迁移差异 是同一种思路:先找协议里被删掉的功能(使用方要改逻辑),再找新增的信号(多半绑默认值),最后核对位宽变化。验证侧建议给迁移后的接口补两组定向用例:一笔背靠背多 ID 写(确认无交织、B 响应可乱序)、一组独占读写序列(确认 EXOKAY 路径打通)。性能层面,写交织的消失对带宽没有实质影响——交织本来就是稀有操作;AxLEN 放宽到 256 拍反而让长 DMA 少了事务级开销,DDR 控制器的行命中率还会略有改善。
这一篇在知识体系里的位置
AXI4 协议全貌见 AXI4 完整协议;写数据顺序的细节见 AXI4 写交织与数据顺序;独占访问语义见 AXI4 原子与独占访问;多 outstanding 与 ID 排序见 AXI4 Outstanding 与 ID 排序;同类版本迁移文见 AHB2 到 AHB5 迁移差异;协议入门从 AMBA 入门 开始。
总结
AXI3 AXI4 差异可以浓缩成「一宽、一缩、一删、一禁」:AxLEN 扩到 8 比特支持 256 拍 INCR,AxLOCK 缩成 1 比特移除 locked 锁定语义(互斥改走 exclusive 加软件重试),WID 信号整体删除,写交织被禁止、写数据必须按 AW 顺序整笔连续发出;存量 AXI3 IP 迁移时按「AxLOCK 用法 → WID → 写交织 → 突发长度 → QoS/REGION 绑默认值」的检查清单逐项过,绝大多数不交织、不锁定的 IP 只需删端口补零即可直连。