摘要:本文系统梳理了 AMBA AXI 协议从 AXI3 到 AXI5 及 ACE5 的演进脉络与核心机制。内容涵盖各版本特性对比、五通道架构、VALID/READY 握手与防死锁依赖、突发控制(AxLEN/AxSIZE/AxBURST)、字节选通与非对齐传输、事务属性(AxCACHE/AxPROT)、事务 ID 与排序模型、Exclusive 原子访问,以及 AXI4-Lite、AXI5-Lite 等轻量接口的约束与互操作方式,并附有完整的位域编码速查表,适合作为 AXI 协议学习与工程查阅的参考。
一、版本介绍
AXI 协议随 AMBA 规范文档的 Issue(版本)演进而发展,各 Issue 与协议版本的对应关系如下:
|
文档 Issue |
引入的协议/变化 |
说明 |
|
Issue B |
AXI3 |
早期版本定义的 AXI,现称为 AXI3。支持写交织(Write Interleaving)、WID、2-bit AxLOCK(含 Locked 访问)。 |
|
Issue C |
AXI4、AXI4-Lite |
新增 AXI4:突发长度扩展到 256、移除写交织与 WID、AxLOCK 缩减为 1-bit、新增 QoS/Region/User 信号;同时定义 AXI4-Lite 轻量接口。 |
|
Issue D |
整合版 |
将 Issue C 中分开描述的 AXI3 与 AXI4 定义整合为统一文档。 |
|
Issue E |
属性机制 + 澄清 |
增加澄清与建议,并引入“属性(Property)”机制声明新能力:Ordered_Write_Observation、Multi_Copy_Atomicity。 |
|
Issue F |
AXI5、ACE5 |
新增 AXI5(AXI4 的扩展,含原子事务等 9 项新能力)与 ACE5;新能力均以属性声明,未声明即为 FALSE。 |
下方表格对比了各个版本的AXI协议区别
|
特性 |
AXI3 |
AXI4 |
AXI4-Lite |
AXI5 |
AXI5-Lite |
|
最大突发长度 |
16 |
INCR: 256;FIXED/WRAP: 16 |
1 |
INCR: 256 |
1 |
|
数据位宽 |
≤1024 bit |
≤1024 bit |
32 / 64 bit |
≤1024 bit |
≤1024 bit |
|
WID / 写交织 |
支持 |
移除 |
无 |
无 |
无 |
|
ID 信号 |
可选 |
可选 |
无 |
必须 |
必须 |
|
AxLOCK 位宽 |
2 bit(Normal/Exclusive/Locked) |
1 bit(Normal/Exclusive) |
无 |
1 bit |
无 |
|
Exclusive 访问 |
支持 |
支持 |
不支持 |
支持 |
不支持 |
|
Atomic 事务 |
— |
— |
— |
可选(属性) |
可选(属性) |
|
AxQOS / AxREGION |
无 |
有 |
无 |
有 |
无 |
|
User 信号 (xUSER) |
无 |
可选 |
无 |
可选 |
无 |
|
内存类型 |
任意 |
任意 |
Device Non-bufferable |
任意 |
Device Non-bufferable |
|
响应排序 |
In-order |
In-order |
In-order |
In/Out-of-order |
In/Out-of-order |
|
Check / Poison / Trace 等 |
— |
— |
— |
可选(属性) |
部分可选 |
二、AXI3 / AXI4 协议主要架构
1.协议主要特点
- 地址/控制相位与数据相位分离;
- 基于突发(burst)的事务,仅发送首地址;
- 支持基于字节选通(byte strobe)的非对齐数据传输;
- 读、写数据通道分离,可低成本支持 DMA;
- 支持多个未完成(outstanding)地址发射;
- 支持事务乱序完成(out-of-order completion);
- 可在通道中任意插入寄存器级(register slice)以优化时序。
2.五通道架构
AXI 是突发式协议,定义了 5 个相互独立的通道:
|
通道 |
信号前缀 |
方向 |
承载内容 |
|
读地址通道 |
AR |
Master → Slave |
读事务的地址与控制信息 |
|
读数据通道 |
R |
Slave → Master |
读数据 + 读响应(RRESP),含 RLAST |
|
写地址通道 |
AW |
Master → Slave |
写事务的地址与控制信息 |
|
写数据通道 |
W |
Master → Slave |
写数据 + 字节选通(WSTRB),含 WLAST |
|
写响应通道 |
B |
Slave → Master |
写完成响应(BRESP) |

Figure 1 写事务的通道架构

Figure 2 读事务的通道架构
每个通道都由一组信息信号加一对 VALID / READY 信号构成双向握手:信息源用 VALID 表示通道上地址/数据/控制信息有效;目的端用 READY 表示可以接收。读数据与写数据通道还各含一个 LAST 信号,指示事务的最后一个数据项。
- 读数据通道:数据总线宽可为 8/16/32/64/128/256/512/1024 bit,并携带读响应状态。
- 写数据通道:每个 8-bit 数据配一个字节选通位;写数据通道信息总是被视为已缓冲(buffered),因此 master 无需等待先前写事务的确认即可继续发起写。
- 写响应通道:slave 对每个完整的写事务(而非每个数据拍)给出一次完成响应。
3.接口与互联

Figure 3 接口与互连拓扑
典型系统由若干 master 与 slave 经互连(interconnect)相连。AXI 为以下三种界面提供单一接口定义:master–互连、slave–互连、master–slave。互连在协议上等价于一个具有对称 master/slave 端口的设备。常见互连拓扑有三种:共享地址与数据总线;共享地址总线 + 多数据总线;多层(multilayer)多地址多数据总线。由于地址通道带宽需求通常远小于数据通道,共享地址 + 多数据总线是性能与复杂度的良好折中。
4.寄存器级(Register Slice)
每个 AXI 通道的信息只单向传输,且通道间无固定时序关系,因此几乎可以在任何通道的任何位置插入寄存器级,代价仅为增加一拍延迟。这使得设计可以在“延迟周期数”与“最高工作频率”之间权衡,例如处理器与高性能存储器直连,而到低性能外设的路径用寄存器级隔离。
三、信号描述
1.全局信号
|
信号 |
描述 |
源 |
说明 |
|
ACLK |
全局时钟,所有通道共用,信号采样于 ACLK 上升沿 |
时钟源 |
Required |
|
ARESETn |
全局复位,低有效 |
复位源 |
Required;复位期间 VALID 信号必须拉低 |
2.写地址通道(Write Address Channel)
|
信号 |
描述 |
源 |
版本/备注 |
|
AWID |
写地址 ID 标签,用于标识写事务、支持乱序完成 |
Master |
可选;AXI3/AXI4 均有 |
|
AWADDR |
写地址,突发首拍地址 |
Master |
Required |
|
AWLEN |
突发长度,实际传输数 = AxLEN + 1 |
Master |
AXI3: 4-bit(1~16);AXI4: 8-bit(INCR 1~256) |
|
AWSIZE |
突发大小:每拍的字节数 = 2^AWSIZE |
Master |
3-bit |
|
AWBURST |
突发类型(FIXED/INCR/WRAP) |
Master |
2-bit |
|
AWLOCK |
锁定访问类型 |
Master |
AXI3: 2-bit;AXI4: 1-bit |
|
AWCACHE |
缓存属性/内存类型 |
Master |
4-bit |
|
AWPROT |
保护类型(特权/安全/指令) |
Master |
3-bit,Required |
|
AWQOS |
QoS 值(4-bit) |
Master |
仅 AXI4 |
|
AWREGION |
区域标识(4-bit) |
Master |
仅 AXI4 |
|
AWUSER |
用户自定义信号 |
Master |
仅 AXI4,可选 |
|
AWVALID |
写地址有效 |
Master |
Required |
|
AWREADY |
写地址就绪 |
Slave |
Required |
3.写数据通道(Write Data Channel)
|
信号 |
描述 |
源 |
版本/备注 |
|
WID |
写数据 ID(用于写交织时标识数据归属) |
Master |
仅 AXI3;AXI4 移除 |
|
WDATA |
写数据 |
Master |
8~1024 bit |
|
WSTRB |
写字节选通,WSTRB[n] 对应 WDATA[(8n)+7 : (8n)] |
Master |
宽度 = 数据位宽/8 |
|
WLAST |
写最后一拍指示 |
Master |
Required(AXI4-Lite 无) |
|
WUSER |
用户自定义信号 |
Master |
仅 AXI4,可选 |
|
WVALID |
写数据有效 |
Master |
Required |
|
WREADY |
写数据就绪 |
Slave |
Required |
4.写响应通道(Write Response Channel)
|
信号 |
描述 |
源 |
版本/备注 |
|
BID |
写响应 ID,等于该写事务的 AWID |
Slave |
可选 |
|
BRESP |
写响应状态 |
Slave |
2-bit;可选(默认 OKAY) |
|
BUSER |
用户自定义信号 |
Slave |
仅 AXI4,可选 |
|
BVALID |
写响应有效 |
Slave |
Required |
|
BREADY |
写响应就绪 |
Master |
Required |
5.读地址通道(Read Address Channel)
与写地址通道对称:ARID、ARADDR、ARLEN、ARSIZE、ARBURST、ARLOCK、ARCACHE、ARPROT、ARQOS(AXI4)、ARREGION(AXI4)、ARUSER(AXI4 可选)、ARVALID(Master)、ARREADY(Slave)。各信号含义与 AW 通道对应信号相同,仅方向用于读事务。
6.读数据通道(Read Data Channel)
|
信号 |
描述 |
源 |
版本/备注 |
|
RID |
读数据 ID,等于该读事务的 ARID |
Slave |
可选 |
|
RDATA |
读数据 |
Slave |
8~1024 bit |
|
RRESP |
读响应状态 |
Slave |
2-bit;可选(默认 OKAY) |
|
RLAST |
读最后一拍指示 |
Slave |
Required(AXI4-Lite 无) |
|
RUSER |
用户自定义信号 |
Slave |
仅 AXI4,可选 |
|
RVALID |
读数据有效 |
Slave |
Required |
|
RREADY |
读数据就绪 |
Master |
Required |
7.AXI3与AXI4信号差异小结
- AXI4 移除 WID:写交织(write interleaving)不再支持,写数据必须按写地址发射顺序逐事务完成。
- AXI4 新增 AWQOS/ARQOS、AWREGION/ARREGION、以及五个 xUSER 用户信号(均为可选)。
- AXI4 的 AxLEN 扩展为 8-bit(仅 INCR 可用到 256),AxLOCK 缩减为 1-bit。
- AXI4 的 AxCACHE bit[1] 语义更名为 Modifiable。
四、事务机制:握手、突发与响应
1.复位与握手

Figure 4 退出复位
复位释放后,master 与 slave 的 READY 信号可以在任意时刻置位;但所有 VALID 信号必须在复位释放后、且在对应通道首次握手前保持无效,直到组件准备好发起传输。
VALID/READY握手的3种合法时序

Figure 5 VALID 先于 READY

Figure 6 READY 先于 VALID

Figure 7 VALID 与 READY 同拍
- 规则:源端一旦置起 VALID,在 READY 出现并完成握手前,不得撤回 VALID,也不得改变通道上的信息信号。
- 规则:源端不得等待 READY 才置起 VALID(防止死锁)。
- 目的端可以等待 VALID 再置 READY,也可以提前置 READY。
2.通道间依赖关系(防死锁)

Figure 8 读事务握手依赖

Figure 9 AXI3 写事务握手依赖

Figure 10 AXI4/AXI5 写事务握手依赖
- 读事务:master 不得等 ARREADY 才发 ARVALID;slave 不得等 RREADY 才发 RVALID;slave 可在 ARVALID&ARREADY 后才发 RVALID。
- AXI3 写事务:BVALID 只依赖 WVALID/WREADY(写数据全部接收后即可响应)。
- AXI4 写事务:slave 必须等 AWVALID&AWREADY 与 WVALID&WREADY(及 WLAST)都完成后才能置 BVALID——即写响应同时依赖地址与数据两个通道的完成。
- master 不得等 BREADY 相关的响应才发 AWVALID/WVALID;slave 不得等 BREADY 才发 BVALID。
3.突发控制信号:AxLEN/AxSIZE/AxBURST
3.1 AxLEN——突发长度
- 实际传输拍数 = AxLEN + 1。
- AXI3:AxLEN[3:0],4-bit,支持 1~16 拍。
- AXI4:AxLEN[7:0],8-bit;INCR 突发支持 1~256 拍;FIXED 与 WRAP 仍限制为 1~16 拍。
- 规则:任何突发不得跨越 4KB 地址边界。
- 规则:WRAP 突发的长度必须为 2、4、8 或 16。
- 规则:FIXED 突发长度不得超过 16。
3.2 AxSIZE——每拍传输字节数
|
AxSIZE[2:0] |
每拍字节数 |
|
0b000 |
1 |
|
0b001 |
2 |
|
0b010 |
4 |
|
0b011 |
8 |
|
0b100 |
16 |
|
0b101 |
32 |
|
0b110 |
64 |
|
0b111 |
128 |
规则:AxSIZE 不得超过数据总线宽度(例如 32-bit 总线最大 AxSIZE=0b010,即 4 字节/拍)。
3.3 AxBURST——突发类型
|
AxBURST[1:0] |
类型 |
行为 |
|
0b00 |
FIXED |
地址保持不变,用于反复访问同一位置(如 FIFO);长度 ≤16 且不跨 4KB。 |
|
0b01 |
INCR |
递增突发:首拍后每拍地址按 AxSIZE 字节数递增;AXI4 下最长 256 拍。 |
|
0b10 |
WRAP |
回环突发:递增到回环边界后回绕到边界起点;长度必须 2/4/8/16,且首地址必须对齐到每拍大小。 |
|
0b11 |
Reserved |
保留 |
INCR 地址计算公式:Address_N+1 = Address_N + Number_Bytes(Number_Bytes = 2^AxSIZE)。首拍使用 master 给出的起始地址(可以非对齐)。
WRAP 地址计算:先按对齐规则计算 Aligned_Address = INT(Start_Address / Number_Bytes) × Number_Bytes;回环下边界 Wrap_Boundary = INT(Start_Address / (Number_Bytes × Wrap_Size)) × (Number_Bytes × Wrap_Size),Wrap_Size = AxLEN + 1;当地址到达上边界(Wrap_Boundary + Number_Bytes × Wrap_Size)时回环到 Wrap_Boundary。
4.字节选通(WSTRB)与窄传输(Narrow Transfer)
WSTRB[n] 控制 WDATA[(8n)+7 : (8n)] 这一个字节是否有效:写数据拍中只有对应 WSTRB 置位的字节才会被 slave 采纳。非首尾拍通常 WSTRB 全 1;首拍/尾拍可用 WSTRB 实现非对齐或不足整拍的写。规则(字节不变性 byte invariance):多字节数据只占用其对应字节车道,其余车道值无意义。

Figure 11 8-bit 窄传输示例

Figure 12 32-bit 窄传输示例
当 AxSIZE 小于数据总线宽度时称为窄传输。此时有效字节车道的位置取决于地址的低位:例如 32-bit 总线上 AxSIZE=0b001(2 字节)时,地址 bit[1]=0 则使用 WDATA[15:0],=1 则使用 WDATA[31:16]。
5.非对齐传输(Unlighted Transfer)

Figure 13 32-bit 总线上的对齐与非对齐传输
- AXI 支持起始地址不按 AxSIZE 对齐的传输,slave 必须正确处理(或按定义的安全方式失败)。
- 非对齐时,首拍只传输从起始地址到该拍末尾的有效字节,其余字节车道用 WSTRB(写)屏蔽或忽略(读)。
- 后续各拍地址按对齐后的边界递增,即地址“对齐推进”,仅首拍含非对齐部分。
- slave 可以不支持非对齐访问,但必须以协议合规的方式(如返回 SLVERR/DECERR)完成事务,不得死锁。
6.回环传输(Wrapping Transfer)

Figure 14 64-bit 总线上的对齐回环传输
- WRAP 突发要求首地址对齐到 AxSIZE 字节;回环边界由突发总字节数(AxLEN+1 × 2^AxSIZE)决定。按上面3.3的公式可算得,图中回环下边界为0x00,回环上边界为0x00+(4x2^2)=0x10,即第4个transfer从0x00开始。
- 例如 64-bit 总线、AxSIZE=0b011(8B)、AxLEN=3(4 拍):地址序列在 16 字节×2 的回环窗口内循环。
- WRAP 不得用于跨越回环窗口之外的地址;互连拆分事务时必须保持回环语义。
7.xLAST信号
WLAST 与 RLAST 分别指示写数据与读数据的最后一拍。slave 依据 WLAST 判断写事务数据接收完成;master 依据 RLAST 判断读事务结束。AXI4-Lite 因突发恒为 1 而不含 xLAST 信号。
8.写/读响应:BRESP/RRESP
|
RRESP/BRESP[1:0] |
名称 |
含义 |
|
0b00 |
OKAY |
正常访问成功。对 Exclusive 访问而言,OKAY 表示“未成功”(失败)。 |
|
0b01 |
EXOKAY |
Exclusive 访问成功:仅当 master 的 Exclusive 访问成功(monitor 判定通过)时返回。 |
|
0b10 |
SLVERR |
Slave 错误:事务到达 slave 后出错(如 FIFO 溢出、寄存器地址错误、权限错误等)。 |
|
0b11 |
DECERR |
解码错误:地址无对应 slave(互连解码失败)。 |
- 读响应与最后一拍读数据同拍给出(RLAST 拍携带 RRESP)。
- 写响应在整个写事务完成后给出一次。
- 响应为 OKAY 时不区分部分错误:一个事务只有一个整体响应状态。即中间一旦有任何错误,如某个beat的部分字节没有写进去,即不OKAY,简化了协议,牺牲了报告的精确性。
9.突发写/读事务完整时序波形示例

Figure 15 突发写事务完整时序(INCR,长度 4,W 通道含 1 个等待周期)
- T1:AWVALID 与 AWREADY 同拍握手,写地址相位完成,AWADDR / AWLEN(=0b11,即 4 拍) 在该拍有效;
- T2:首拍写数据 D0 在拍末上升沿被采样传输;T2 握手完成后,master 于 T3 摆出第二拍数据 D1,恰逢 WREADY=0,按规则 WVALID 与 WDATA 必须保持不变直至握手完成——因此 T3 保持的是“已发出但未被接收”的 D1(而非已接收的 D0,若重复驱动 D0,一旦下一拍 WREADY=1 将造成 D0 被重复采样),D1 于 T4 拍末被传输;
- T5~T6:D2、D3 依次传输,末拍 T6 置起 WLAST;
- T7:slave 在收齐全部写数据(WLAST 握手完成)后才置起 BVALID,BRESP=OKAY;master 的 BREADY 恒为 1,响应当拍完成——符合 AXI4 写响应依赖。

Figure 16 突发读事务完整时序(INCR,长度 4,含 slave 延迟与 R 通道 1 个等待周期)
- T1:ARVALID 与 ARREADY 握手完成,读地址相位结束;
- T2~T3:slave 准备数据期间 RVALID=0(slave 只可在收到请求后才置 RVALID);
- T4:首拍读数据 D0 在拍末上升沿被采样传输;T4 握手完成后,slave 于 T5 摆出第二拍数据 D1,恰逢 RREADY=0(master 未就绪),按规则 RVALID 与 RDATA 必须保持不变——因此 T5 保持的是 D1(而非已接收的 D0,避免 RREADY 恢复后被重复采样),D1 于 T6 拍末被传输;
- T7~T8:D2、D3 依次返回,末拍 T8 置起 RLAST,RRESP=OKAY 与数据同拍给出;
- 全程体现“VALID 不得等待 READY”:master 预置 RREADY=1,slave 在数据就绪后自主置起 RVALID。
五、事务属性:AxCACHE与AxPROT
1.AxCACHE
先说一下AXI3和AXI4及以后对该功能的编码是不一样的,目前比较流行的是AXI4及以后,所以先说一下主流的AXI4对应的编码
|
位 |
AWCACHE(写) |
ARCACHE(读) |
|
[3] |
Allocate:写可分配缓存行(写分配提示) |
Other-allocate:读可分配到其他缓存(非本缓存) |
|
[2] |
Other-allocate:写可分配到其他缓存 |
Allocate:读可分配缓存行 |
|
[1] |
Modifiable:事务参数可被互连修改 |
Modifiable:同左 |
|
[0] |
Bufferable:写可被缓冲并提前响应 |
Bufferable:读可从缓冲区返回数据 |
AXI4 将 bit[1] 更名为 Modifiable,表示互连可以修改事务的地址/长度/大小/突发类型(例如拆分或合并以优化带宽);bit[1]=0 时为 Non-modifiable 事务,互连不得修改 AxADDR、AxSIZE、AxLEN、AxBURST、AxLOCK、AxPROT 等参数。下表为AXI4内存类型编码:

内存类型分为 Device 与 Normal 两大类、Bufferable 与 Non-bufferable 两种缓冲属性:
- Device Non-bufferable(ARCACHE/AWCACHE = 0b0000):最强顺序性,读必须从最终端点取最新值,写必须到达端点后才可响应。
- Device Bufferable(0b0001):设备语义但写可被缓冲(写响应可提前),仍不可缓存/修改。
- Normal Non-cacheable Non-bufferable(0b0010):普通内存、不可缓存、不可缓冲。
- Normal Non-cacheable Bufferable(0b0011):普通内存、不可缓存、写可缓冲(最常见的“强顺序+写 posted”类型)。
- Write-Through 类(AR=0b1010/0b1110,AW=0b0110/0b1110 等)与 Write-Back 类(AR=0b1011/0b1111,AW=0b0111/0b1111 等):可缓存内存,区别在于写分配/读分配与写回策略提示。
注:Table 括号内的编码为“可选替代编码”,互连可将其归一化为推荐编码。
下表为AXI3的
|
位 |
AXI3 名称 |
含义 |
|
AxCACHE[0] |
Bufferable |
可缓冲:写可在到达最终目的地前被中间缓冲吸收并提前给响应;读可从缓冲获取数据。 |
|
AxCACHE[1] |
Cacheable |
可缓存:访问可被缓存组件截获/分配。 |
|
AxCACHE[2] |
Read-allocate |
读分配:仅当 Cacheable 时有意义,提示缓存应为该读分配行。 |
|
AxCACHE[3] |
Write-allocate |
写分配:仅当 Cacheable 时有意义,提示缓存应为该写分配行。 |
2.Modifiable 事务的行为约束
- Non-modifiable(bit[1]=0)事务:互连不得改变其地址、大小、长度、突发类型等;也不得与其他事务合并。
- Modifiable 事务:互连可拆分/合并/修改,但必须保持:访问的地址集合不变、每地址的传输次数不变、不得跨越 4KB 边界、不得改变事务的 QoS 语义等。
- Device 类型内存通常应使用 Non-modifiable 事务,以保证对外设寄存器的精确访问语义。
3.AxPROT——保护类型
|
位 |
名称 |
值 = 0 |
值 = 1 |
|
AxPROT[0] |
Privileged |
非特权访问(用户态) |
特权访问(内核态) |
|
AxPROT[1] |
Secure |
Secure 访问 |
Non-secure 访问 |
|
AxPROT[2] |
Instruction |
数据访问 |
指令访问 |
- AxPROT[1] 注意:该位为 1 表示 Non-secure(与直觉相反),即“安全属性取反”编码。
- AxPROT[2] 仅为提示性质:slave 可据此区分指令/数据访问行为,但不保证系统级安全。
- AxPROT 不单独提供安全保障,系统安全需依赖信任控制器等机制。
六、事务ID与顺序(Ordering)
1.ID信号与基本排序规则
- ID 信号:AWID / ARID(master 发出),BID / RID(slave 返回,等于对应事务的 AWID/ARID);AXI3 另有 WID 用于写交织。
- 相同 ID 的事务之间必须保持发射顺序被观察到(in-order):同 ID 的读响应、写响应按发射序返回。
- 不同 ID 的事务之间可以乱序完成(out-of-order),这是 AXI 提高带宽利用率的核心机制。
- master 通过分配不同 ID 来“放松”排序、提升并行度;需要强顺序时使用同一 ID。
- 写数据与写地址的对应:AXI4 中写数据按写地址发射顺序传输(无交织),因此 AXI4 不需要 WID。
1.1 AXI3写交织(Write Interleaving)
AXI3 允许不同写事务的写数据拍交错传输(write interleaving),用 WID 标识每拍数据属于哪个写事务。AXI4 移除该特性:AXI4 接口上写数据必须按写地址的发射顺序、逐事务连续传输,WID 信号不存在。移除原因:交织显著增加 slave/互连的缓冲与排序复杂度,且收益有限。
1.2 ID宽度建议
- 规范建议 master 端口 ID 宽度至少 4 bit;
- 互连在 master ID 基础上追加约 4 bit(用于标识 master 来源);
- slave 端口 ID 宽度建议 8 bit。
2.AXI4排序模型
AXI4 定义了 master、interconnect、slave 三类组件的排序义务:
|
组件 |
排序规则要点 |
|
Master |
需要顺序保证的事务使用相同 ID 发射;不需要顺序的事务可用不同 ID。Master 必须能接受不同 ID 事务的响应以任意顺序返回。 |
|
Interconnect |
必须保持同 ID 事务的顺序;不同 ID 可重排。必须保证同一 slave 地址空间的写观察顺序符合排序模型(见下)。 |
|
Slave |
对同 ID 事务按接收顺序处理并保序响应;对不同 ID 可乱序响应(AXI4 默认仍按接收序,但允许提前响应 early response)。 |
2.1 提前响应(Early Response)与写观察
- AXI4 允许 slave/互连在写数据真正到达最终存储前提前返回写响应(buffered 语义),但这会改变“写被其他 master 观察到”的时机。
- Producer/Consumer 模型:生产者写完数据后写“标志位”,消费者读到标志位后必须能看到对应数据。该模型要求:对同一观察者,写之间保持顺序观察。
- Ordered_Write_Observation 属性:为 TRUE 时,组件保证写观察顺序满足增强的 Producer/Consumer 模型,使 master 无需依赖读回或 barrier 即可安全协作。
对于生产者、消费者和观察者有疑惑的可以看下列描述:
1)生产者(Producer):产生数据的实体。通常是某个处理器、DMA 控制器或其他 master 设备。它执行写操作,将数据写入内存或外设,供其他设备使用。例如:一个 CPU 核心计算出一段结果,写入共享内存缓冲区,它就是生产者。
2)消费者(Consumer):使用数据的实体。通常是另一个处理器、外设或 master 设备。它执行读操作,从内存或外设获取生产者写入的数据,并进行后续处理。例如:另一个 CPU 核心读取共享内存中的结果,它就是消费者。
3)观察者(Observer):任何能够观察到某个写操作结果的实体。在 AXI 系统或多核系统中,观察者可以是:消费者(它需要看到生产者的数据);其他无关的 master(它们也可能访问同一地址,只是碰巧看到);甚至是发起写操作的生产者自己(它通过读回也可以观察)。“观察”指的是:该实体通过读操作能够感知到写操作是否已完成、数据是否已更新。
七、原子访问:Atomicity、Exclusive与Locked
1.Single-copy 原子性
Single-copy atomicity 指:一个事务的所有字节,对系统中的观察者要么“整体可见”要么“整体不可见”,不会出现半更新状态。AXI 按数据大小划分原子组(atomicity group):例如某系统保证 ≤32-bit 访问原子,另一系统保证 ≤64-bit 原子。

Figure 17 不同 single-copy 原子组的系统示例
2.Muti-copy 原子性
- Multi-copy atomicity 要求:写一旦对某个 master 可见,就必须对所有 master 可见(全局顺序一致)。
- AXI 默认不要求 multi-copy 原子性。
- 属性为 TRUE 时,所有写事务(含 buffered)在返回响应前必须对所有观察者可见。
3.Exclusive访问
Exclusive 访问用于实现信号量/原子读-改-写:master 先 Exclusive 读某地址(互连中的 monitor 记录地址+ID),随后对同地址发 Exclusive 写;若期间该地址未被其他 master 写过,则写成功并返回 EXOKAY,否则写失败(返回 OKAY,数据不落盘)。实践中,一般只用于单beat情况,不会用于突发等情形,即保证了原子操作的确定性,用于信号量和自旋锁等。
- 规则:Exclusive 访问的字节数必须为 2 的幂(1、2、4、8…字节),且地址按字节数对齐。
- 规则:Exclusive 访问最大 128 字节;AXI4 中 Exclusive 事务长度不得超过 16 拍(AxLEN ≤ 15)。
- Exclusive 读与 Exclusive 写必须使用相同的 AxID、相同地址、相同大小。
- 读返回 EXOKAY 仅表示该访问被 monitor 记录;写返回 EXOKAY 才表示“比较成功、更新生效”。
- monitor 只需保证“未被他人写则成功”;被他人写时“必须失败”,但 monitor 也可因资源不足等其他原因使事务失败(false fail 允许)。
- 不支持 Exclusive 的 slave 对 Exclusive 访问返回 OKAY(视为普通访问),master 软件需重试。
|
版本 |
AxLOCK 值 |
含义 |
|
AXI3 |
0b00 |
Normal access(普通访问) |
|
AXI3 |
0b01 |
Exclusive access(排他访问,见 8.3) |
|
AXI3 |
0b10 |
Locked access(锁定访问:总线锁定,见 8.5) |
|
AXI3 |
0b11 |
Reserved |
|
AXI4 |
0b0 |
Normal access |
|
AXI4 |
0b1 |
Exclusive access |
Locked 访问在事务期间锁定总线,阻止其他 master 插入访问,用于不可分割的读-改-写序列。AXI4 移除 Locked:因其严重破坏流水线与互连性能,且 Exclusive 已覆盖主要用途。AXI4 接口上 AxLOCK 只有 1-bit,不再存在锁定语义。
八、附加信号:QoS、Region与User
1.AxQOS——服务质量
- AxQOS[3:0],4-bit,QoS 值范围 0x0~0xF,值越大优先级越高;默认 0b0000 表示“无特殊 QoS 要求”。
- master 为每个事务标注 QoS;互连/slave 可据此调度(如优先服务高 QoS 事务、为高 QoS 保留带宽)。
- AXI5 增加 VAWQOSACCEPT/VARQOSACCEPT(QoS_Accept 属性):slave 反向告知其当前愿意接受的 QoS 阈值,master 可据此调节发射策略。
2.AxREGION——区域标识
- AxREGION[3:0],4-bit,提供 16 个区域编码,是地址译码结果的显式表达。
- 仅存在于地址译码点下游的接口;互连根据地址映射生成 AxREGION,slave 可省去自身译码逻辑。
- slave 必须对同 ID 不同 region 的事务保序响应;对不支持的 region 必须以合规方式处理(如报错或别名映射)。
- AxREGION 不创造新的独立地址空间,只是现有地址空间的译码视图;默认值 0x0。
3.User信号(xUSER)
- 五个可选用户信号:AWUSER、ARUSER、WUSER、RUSER、BUSER,宽度 IMPLEMENTATION DEFINED。
- 规范不建议使用 User 信号(易导致互操作问题);若使用,建议放在互连上透传。
- 各通道是否实现 User 信号可独立决定,不要求全部通道一致。
九、AXI4-lite
AXI4-Lite 是 AXI4 的轻量子集,面向组件内部简单的控制寄存器类接口,在不需要突发传输的场景下使用。其关键功能约束:
- 所有事务突发长度恒为 1(单拍)。
- 数据位宽固定为 32 bit 或 64 bit。
- 所有访问为 Non-modifiable、Non-bufferable(即 AxCACHE = 0b0000 语义)。
- 不支持 Exclusive 访问(无 AxLOCK)。
- 无 ID 信号(AWID/ARID/BID/RID/WID 均不存在),响应按序返回。
- 支持 WSTRB 字节选通(与 AXI4 相同)。
- 地址宽度无限制;无 xLAST 信号(因长度恒为 1)。
以下为AXI4-lite的信号列表
|
Global |
Write address |
Write data |
Write response |
Read address |
Read data |
|
ACLK |
AWVALID |
WVALID |
BVALID |
ARVALID |
RVALID |
|
ARESETn |
AWREADY |
WREADY |
BREADY |
ARREADY |
RREADY |
|
— |
AWADDR |
WDATA |
BRESP |
ARADDR |
RDATA |
|
— |
AWPROT |
WSTRB |
— |
ARPROT |
RRESP |
AXI4-Lite 接口不存在的信号:AxLEN、AxSIZE、AxBURST、AxLOCK、AxCACHE、AxQOS、AxREGION、xID、xLAST、xUSER。由于长度恒 1、位宽固定,这些信号的信息均为隐含常量。
AXI4-lite如果有AXI4进行交互的话,有如下几种情况:
- AXI4-Lite master 接 AXI4 slave:完全兼容(Lite 的行为是 AXI4 的合法子集)。
- AXI4 master 接 AXI4-Lite slave:需要桥接/转换组件,将 burst 拆分为单拍、处理位宽与不支持的访问类型。
- 转换规则要点:burst 拆分为多个长度 1 的事务;非 32/64 位宽需扩展/截取;Exclusive 访问需以普通访问模拟并返回 OKAY(表示失败)或由桥返回错误。
- Protection:AXI4-Lite 保留 AxPROT,转换时直接透传。
十、扩展部分——AXI5以及AXI5-lite
1.AXI5 是 AXI4 的能力扩展(而非替代):保留 AXI4 全部事务模型,通过属性(Property)机制按需增加 9 项新能力。组件未声明某属性即视为不具备该能力、相关信号不存在。以下为新增信号表:
|
通道 |
信号 |
属性 |
描述 |
|
AW |
AWATOP |
Atomic_Transactions |
原子操作类型与算术操作端序(6-bit) |
|
AW |
AWTRACE |
Trace_Signals |
写事务跟踪位 |
|
AW |
AWLOOP |
Loopback_Signals |
写地址组 loopback,由 BLOOP 环回 |
|
AW |
AWMMUSECSID / AWMMUSID / AWMMUSSIDV |
Untranslated_Transactions |
未翻译事务的 Secure/Stream/Substream-valid 标识 |
|
W |
AWMMUSSID / AWMMUATST |
Untranslated_Transactions |
Substream ID;PCIe ATS 已翻译指示 |
|
W |
AWNSAID |
NSAccess_Identifiers |
Non-secure 访问标识符(写) |
|
W |
WDATACHK |
Check_Type |
写数据校验(检错/纠错) |
|
W |
WPOISON |
Poison |
写数据毒化指示 |
|
W |
WTRACE |
Trace_Signals |
写数据跟踪位 |
|
B |
BTRACE |
Trace_Signals |
写响应跟踪位 |
|
B |
BLOOP |
Loopback_Signals |
环回 AWLOOP 的值 |
|
AR |
ARTRACE / ARLOOP / ARMMU* |
Trace/Loopback/Untranslated |
读侧对称信号 |
|
R |
ARMMUSSID / ARMMUATST / ARNSAID |
Untranslated/NSAccess |
读侧 MMU/NSAID 信号 |
|
R |
RDATACHK |
Check_Type |
读数据校验 |
|
R |
RPOISON |
Poison |
读数据毒化指示 |
|
R |
RTRACE / RLOOP |
Trace/Loopback |
读响应跟踪位 / 环回 ARLOOP |
|
— |
VAWQOSACCEPT / VARQOSACCEPT |
QoS_Accept |
slave 指示可接受的写/读 QoS 值 |
|
— |
AWAKEUP |
Wakeup_Signals |
master 指示接口活动(低功耗唤醒) |
2.原子事务(Atomic Transactions)
原子事务把“操作”随数据一起送到数据所在位置执行,减少数据搬移与锁定窗口,适合数据远离执行者的场景(如远端内存的原子加)。支持接口:AXI5、ACE5-Lite、ACE5-LiteDVM。
2.1 四种原子事务类型
|
类型 |
行为 |
出向数据 |
入向数据 |
|
AtomicStore |
发送数据+操作;目标执行操作并把结果存回地址;只返回写响应,无读数据 |
1/2/4/8 B |
无 |
|
AtomicLoad |
同 Store,但额外返回地址处的原始值 |
1/2/4/8 B |
与出向相同 |
|
AtomicSwap |
用发送值交换地址处的值,返回原始值 |
1/2/4/8 B |
与出向相同 |
|
AtomicCompare |
发送 compare+swap 两个值;匹配则写入 swap 值;总返回原始值 |
2/4/8/16/32 B |
出向的一半 |
2.2 AWATOP编码
|
AWATOP[5:0] |
含义 | ||
|
0b000000 |
Non-atomic operation(普通非原子事务) | ||
|
0b01exxx |
AtomicStore(e=AWATOP[3] 端序位:0 小端 / 1 大端,仅算术操作有效) | ||
|
0b10exxx |
AtomicLoad(e 同上) | ||
|
0b110000 |
AtomicSwap | ||
|
0b110001 |
AtomicCompare | ||
|
AWATOP[2:0] |
操作 |
说明 | |
|
0b000 |
ADD |
内存值与发送数据相加,结果存回内存 | |
|
0b001 |
CLR |
发送数据中为 1 的位,清除内存对应位 | |
|
0b010 |
EOR |
按位异或 | |
|
0b011 |
SET |
发送数据中为 1 的位,置位内存对应位 | |
|
0b100 |
SMAX |
有符号取大 | |
|
0b101 |
SMIN |
有符号取小 | |
|
0b110 |
UMAX |
无符号取大 | |
|
0b111 |
UMIN |
无符号取小 | |
2.3 原子事务规则要点
- AtomicStore/Load/Swap:数据大小 1/2/4/8 字节,地址按大小对齐;burst 类型必须为 INCR。
- AtomicCompare:出向含 compare+swap 两值;地址对齐到单值大小;对齐到总大小时 Compare 先发(INCR),否则 Swap 先发(WRAP);AWLEN>1 时读数据拍数为 AWLEN 的一半。这个规则保证了无论地址是否总大小对齐,从内存的角度看,Compare 值始终位于 Swap 值的低地址一侧,且操作不跨越对齐窗口。
- AWLEN>1 时 AWSIZE 必须为全数据总线宽度;WSTRB 仅对有效数据字节车道置位。
- ID 规则:原子事务不得与同时未完成(outstanding)的非原子事务共用 AXI ID;多个同时未完成的原子事务之间也不得共用 ID。
- 属性约束:AWSNOOP 全 0;AWLOCK 必须为 0b0(Normal)。
- slave/互连若声明支持原子事务,则必须支持全部操作类型、大小与端序。
- 响应:写响应表示结果对所需观察者可见;含读响应的原子事务,收到首个读数据即视为可见。
3.其它新能力
- Check_Type:WDATACHK/RDATACHK 每字节配校验位,可检测(奇偶)并可能纠正损坏数据。
- Poison:WPOISON/RPOISON 指示某组数据“此前已损坏”,毒化随数据传播,在消费时再报错误。
- QoS_Accept:VAWQOSACCEPT/VARQOSACCEPT 让 slave 告知可接受 QoS 阈值,辅助 master 流量调节。
- Trace_Signals:每通道 1-bit trace 位,支持系统级调试与性能测量。
- Loopback_Signals:AWLOOP/ARLOOP 由 master 发出,BLOOP/RLOOP 环回,便于把响应与发射时记录的索引表关联。
- Wakeup_Signals:AWAKEUP 指示接口活动,用于低功耗状态管理。
- Untranslated_Transactions:携带 MMU Stream ID / Substream ID / ATS 状态,支持 SMMU 类未翻译事务。
- NSAccess_Identifiers:AWNSAID/ARNSAID 标识 Non-secure 访问上下文,支持受保护数据的存储处理(如 MPAM/权限隔离)。
4.AXI5-lite
AXI5-Lite 是 AXI5 的单拍子集,在 AXI4-Lite 基础上放宽位宽与排序限制,面向与高性能处理器紧耦合、要求低响应延迟的外设:慢外设不阻塞快外设的响应。
- 所有事务突发长度为 1;
- 不同 ID 的请求允许响应乱序(AXI4-Lite 不允许);
- 所有访问视为 Device Non-bufferable;
- 不支持 Exclusive;
- 数据位宽任意(≤1024 bit),不再限于 32/64;
- ID 信号必须存在(用于乱序响应的匹配)。

Figure 18 使用 AXI5-Lite 的存储系统示例
下表为AXI4-lite,AXI5和AXI5-lite的对比

接口线数对比(32-bit 地址+数据):AXI5 = 224 线;AXI5-Lite = 175 线;AXI4-Lite = 160 线。互操作:AXI5-Lite master 可经简单桥接访问 AXI4-Lite slave;AXI4-Lite slave 升级为 AXI5-Lite 时需增加 ID 与乱序响应能力。
十一、扩展部分——ACE以及ACE5简述
1.ACE一致性扩展介绍
- ACE 在 AXI 之上新增 Snoop 通道:AC(snoop 地址)、CR(snoop 响应)、CD(snoop 数据),使互连(snoop filter / 目录)能查询各核缓存状态,实现硬件一致性。
- 缓存行状态:I(Invalid)、UC/UD(Unique Clean/Dirty)、SC/SD(Shared Clean/Dirty)。
- Shareable 域:Non-shareable、Inner Shareable、Outer Shareable、System Shareable,定义一致性维护的范围。
- 事务类型扩展:ReadShared/ReadClean/ReadUnique/MakeUnique/CleanUnique/WriteBack/WriteClean/Evict/CMO 等;以及 Barrier 事务与 DVM(Distributed Virtual Memory)操作(TLB/分支预测器维护)。
- ACE-Lite:无 snoop 输入端口的简化版,可作为 IO 一致性 master(如 DMA 窥探缓存)。
2.ACE5的变化
2.1 shareable域的调整
|
AxDOMAIN |
描述 |
ACE5 备注 |
|
0b00 |
Non-shareable |
不变 |
|
0b01 |
Inner Shareable |
废弃(Deprecated),新设计应使用 0b10 |
|
0b10 |
Outer Shareable |
不变 |
|
0b11 |
System Shareable |
不变 |
2.2 Barrier事务不再支持
- ACE5 / ACE5-Lite 各变体均不支持 Barrier 事务;需要排序的 master 应延迟发射依赖请求直至先前事务完成。
- Barrier_Transactions 属性:TRUE(默认,兼容旧 ACE)表示接口含 AxBAR 信号;FALSE 表示无 barrier 支持。
- 互操作:ACE/ACE-Lite master 接 ACE5 slave 时,若 master 的 Barrier_Transactions 为 TRUE 需桥接组件。
2.3 ACE5新能力
- DVM v8.1:支持 ARMv8.1 的 DVM 消息协议(兼容 v8/v7)。
- Persist_CMO:新增 Clean to Point of Persistence 的缓存维护操作。
- Check_Type / Poison / QoS_Accept / Trace_Signals / Loopback_Signals / Wakeup_Signals:与 AXI5 相同的信号机制。
- Coherency_Connection_Signals:接口动态接入/脱离一致性系统的信号(SYSCOREQ/SYSCOACK 类)。
- Untranslated_Transactions(ACE5 下有限制)与 NSAccess_Identifiers。
十二、Appendix——位域编码速查
以下汇总了本文提及的所有位域编码表,方便快速查看
A.1 AxBURST[1:0]
|
编码 |
类型 |
|
0b00 |
FIXED |
|
0b01 |
INCR |
|
0b10 |
WRAP |
|
0b11 |
Reserved |
A.2 AxSIZE[2:0]
|
编码 |
字节/拍 |
|
0b000 |
1 |
|
0b001 |
2 |
|
0b010 |
4 |
|
0b011 |
8 |
|
0b100 |
16 |
|
0b101 |
32 |
|
0b110 |
64 |
|
0b111 |
128 |
A.3 AxLOCK
|
版本 |
编码 |
含义 |
|
AXI3 |
0b00 / 0b01 / 0b10 / 0b11 |
Normal / Exclusive / Locked / Reserved |
|
AXI4 |
0b0 / 0b1 |
Normal / Exclusive |
A.4 AxCACHE[3:0]
|
位 |
AXI3 |
AXI4 |
|
[3] |
Write-allocate |
AW: Other-allocate / AR: Allocate 的对侧(见 6.2 表) |
|
[2] |
Read-allocate |
AW: Other-allocate / AR: Allocate |
|
[1] |
Cacheable |
Modifiable |
|
[0] |
Bufferable |
Bufferable |
A.5 AxPROT[2:0]
|
位 |
0 |
1 |
|
[0] |
Non-privileged |
Privileged |
|
[1] |
Secure |
Non-secure |
|
[2] |
Data access |
Instruction access |
A.6 BRESP/RRESP[1:0]
|
编码 |
含义 |
|
0b00 |
OKAY |
|
0b01 |
EXOKAY |
|
0b10 |
SLVERR |
|
0b11 |
DECERR |
A.7 AxDOMAIN[1:0](ACE/ACE5)
|
编码 |
含义 |
|
0b00 |
Non-shareable |
|
0b01 |
Inner Shareable(ACE5 废弃) |
|
0b10 |
Outer Shareable |
|
0b11 |
System Shareable |
A.8 AWATOP[5:0](AXI5)
|
编码 |
含义 |
|
0b000000 |
Non-atomic |
|
0b01exxx |
AtomicStore |
|
0b10exxx |
AtomicLoad |
|
0b110000 |
AtomicSwap |
|
0b110001 |
AtomicCompare |
1万+

被折叠的 条评论
为什么被折叠?



