这一章是AXI协议的重中之重,也是AXI协议作为高性能总线的最核心部分。所有的高性能都是基于在多事务传输时的处理。所以这一章单独作为一篇文章进行总结
AXI transaction identifiers
1. 核心定义与功能
- AXI ID 是逻辑标识符:Master(主设备)使用 AXI ID 来区分不同的事务流。
- 虚拟多端口化:通过使用不同的 ID,一个物理端口可以被视为多个“逻辑端口”。每个逻辑端口(即每个唯一的 ID)独立处理自己的事务。
2. 排序规则 (Ordering Rules)
- 同 ID 强制有序:所有具有相同 ID 的事务必须严格遵守先进先出(FIFO)的顺序,即返回顺序必须与发出顺序一致。
- 跨 ID 无序允许:对于具有不同 ID 的事务,协议没有排序限制。这意味着它们可以打乱顺序完成(Out-of-Order Completion)。
3. 性能优势
- 并行处理:Master 无需等待之前的事务完成即可发出新的事务(前提是使用不同的 ID)。
- 提升效率:允许慢速外设或高延迟内存操作被快速响应的事务“插队”,从而提高系统整体的吞吐量和资源利用率。
4. 实现限制与要求
- 非强制性:Master 和 Slave 并非必须使用 AXI ID。如果不使用,则默认所有事务按顺序发出并按顺序处理。
- ID 反馈机制:Slave 在响应时,必须返回与接收到的请求相对应的 BID(写响应 ID)或 RID(读响应 ID),以确保 Master 能够正确匹配请求与响应。
- AXI ID不是设备标识符,是事务标识符。是transaction ID,不是一个ID就是一个master,ID不是区分设备的,是区分不同的transaction的。
- AXI ID 是实现“乱序传输”的关键。它通过保证“同 ID 有序、异 ID 无序”的原则,在维持局部数据正确性的同时,极大提升了总线并发处理的能力。
Transaction ID
1. 通道与 ID 信号的对应关系
每一个 AXI 事务通道都有其特定的 ID 信号,用于标识该通道上的事务归属:
- 写地址通道 (Write address channel): 使用 AWID。
- 写数据通道 (Write data channel): 仅在 AXI3 中使用 WID。
- 写响应通道 (Write response channel): 使用 BID(Slave 返回,匹配之前的 AWID)。
- 读地址通道 (Read address channel): 使用 ARID。
- 读数据通道 (Read data channel): 使用 RID(Slave 返回,包含数据和对应的响应 ID)。
2. AXI3 与 AXI4 的重要差异(关于 WID)
- WID 仅存在于 AXI3:在 AXI3 中,写数据通道拥有独立的 ID 信号(WID),这允许 Master 在发出写地址后,不同 ID 的写数据可以交织(Interleaving)发送。
- AXI4 取消了 WID:在 AXI4 协议中删除了 WID 信号。这意味着在 AXI4 中,写数据的顺序必须严格遵循写地址发出的顺序,不再支持写数据交织。这一改动大大简化了 Slave 端重组写数据的复杂度。
3. AXI4 排序模型
AXI4 基于 AXI ID 使用了一种扩展排序模型(Extended Ordering Model)。
ID 的引入使得总线能够支持更复杂的事务处理,例如:
- 乱序完成(Out-of-order completion):不同 ID 的读返回或写响应可以不按请求顺序完成。
- 并行处理:Master 可以同时发起多个不同 ID 的事务,而 Slave 可以根据自身的处理能力调整它们的完成顺序。
Q&A:同一笔transaction中,五个通道的id的值必须一致吗?
关于同一笔事务(Transaction)在五个通道中 ID 的一致性,需要分为 “读事务” 和 “写事务” 两个场景来理解。一笔事务要么是写事务,要么是读事务,写事务只会涉及到AW,W,B三个通道,读事务只会涉及到AR,R两个通道。不可能一笔事务同时涉及到五个通道。
1. 写事务 (Write Transaction)
一笔完整的写事务涉及三个通道:写地址 (AW)、写数据 (W) 和 写响应 (B)。
同一笔事务的AWID,WID,BID必须一致
2. 读事务 (Read Transaction)
一笔完整的读事务涉及两个通道:读地址 (AR) 和 读数据 (R)。
ARID 与 RID 必须一致:Slave 返回读数据时,随数据一起发送的 RID 必须与该事务收到的 ARID 完全一致。Master 正是根据 RID 将读回的数据放回对应的内存缓冲区的。
Transaction ordering
1. 跨 Master 排序:无约束
- 规则:来自不同 Master 的事务之间没有任何排序限制。
- 理解:Master A 发起的请求和 Master B 发起的请求,在到达 Slave 或返回结果时,顺序可以是任意的。Interconnect(互连矩阵)会处理这些并发请求。
Q&A:master A发出的transaction id为1的事务和master B发出的transaction id为1的事务有先后关系吗
没有先后关系。
即使 Master A 和 Master B 使用了完全相同的 ID 值(比如都是 1),它们发出的事务在 AXI 协议层面也是完全独立的。
a. ID 空间的局部性 (Locality of ID Space)
在 AXI 协议中,ID 的作用域仅限于特定的 Master 接口。
- 对于 Master A 来说,ID=1 代表它自己的一条逻辑流。
- 对于 Master B 来说,ID=1 代表它自己另一条完全不相关的逻辑流。
- 它们就像住在两个不同城市(Master A 和 B)的两个人,虽然都住在“第一大街 1 号”,但彼此毫无关系。
b. AXI Fabric (Interconnect) 的“身份加码”
当这两个事务到达总线互连矩阵(Interconnect/Fabric)时,为了区分它们,总线会对 ID 进行扩展(ID Extension):
- 总线会给每个 Master 分配一个唯一的 Master ID(或者叫前缀)。
- 发送到 Slave 端的实际 ID 会变成:{Master_A_Prefix, ID=1} 和 {Master_B_Prefix, ID=1}。
- 从 Slave 的视角看,这两个事务的 ID 已经不同了,因此它们之间不存在任何排序约束,Slave 可以以任何顺序完成它们。
c. 遵循规则
- 规则 1:不同 Master 之间的事务没有排序限制。
- 规则 2:只有来自 同一个 Master 且 ID 相同 的事务才需要严格保序。
Q&A:AXI协议中,多笔transaction,可以具有相同的id吗?
在 AXI 协议中,多笔事务(Transactions)可以具有相同的 ID。这不仅是被允许的,而且是 AXI 协议处理数据依赖和强制保序的核心机制。
多笔transaction具有相同的ID,一般是用于什么样的场景?
2. 同 Master、异 ID 排序:无约束
- 规则:即使是同一个 Master 发出的请求,只要其 ID 值不同,它们就可以以任何顺序完成。
- 价值:这是 AXI 实现乱序处理 (Out-of-Order processing) 的基础,允许快速响应的事务超越高延迟的事务。
3. 同 ID 排序:严格保序 (Ordering Mandatory)
这是 AXI 协议中最基础的保序要求:
- 读排序:具有相同 ARID 的一系列读事务,其数据返回顺序必须严格按照 Master 发出地址的先后顺序执行。
- 写排序:具有相同 AWID 的一系列写事务,必须按照 Master 发出地址的顺序完成。
- 注意:这确保了对同一内存区域连续操作的逻辑正确性。
4. 读写事务之间:无 ID 关联约束
- 规则:即使一笔读事务的 ARID 和一笔写事务的 AWID 值相同,它们之间也没有排序限制。
- 深度解析:
- 协议不保证相同 ID 的读写事务按顺序执行。
- 如果程序逻辑要求“先写后读”(即读出刚才写的数据),Master 必须通过等待写响应(B 信号)返回后,再发出读请求,或者使用同步指令,而不能依赖 ID 相同来保序。
5. 互连矩阵 (Interconnect/Fabric) 的角色
- ID 扩展:当多个 Master 接入同一个 Interconnect 时,Interconnect 会在原有的 ID 基础上增加额外的位(通常称为 Master ID 或 ID Tag),以确保发往 Slave 的所有 ID 在全局范围内是唯一的,从而让 Slave 的响应能准确路由回正确的 Master。
Read ordering
1. 读数据的基本排序规则
- 同 ARID 强制保序:对于来自同一个 Master 接口、且具有相同 ARID 的多个读事务,返回的数据顺序必须严格遵循地址发出的顺序。
- 异 ARID 允许乱序(out of order),允许交织 (Interleaving):具有不同 ARID 的读事务,其数据不仅可以乱序返回,甚至可以交织(即 A 事务的部分数据 beat 还没传完,B 事务的数据 beat 就开始传输了)。
2. 多 Slave 场景下的 Interconnect 责任
- 路由保序:当一个 Master 向不同 Slave 发送具有相同 ARID 的读请求时,Interconnect(互连矩阵) 必须承担起“守门人”的责任,确保这些数据最终回到 Master 接口时,依然维持原本的先后顺序。
3. 读数据重排序深度 (Read Data Reordering Depth)
这是一个关键的硬件设计概念:
- 定义:指 Slave 内部能够同时处理并进行乱序排列的待处理(pending)地址的最大数量。
- 设计限制:
- 如果一个 Slave 总是按顺序处理所有事务,那么它的重排序深度就是 1。
- 这是一个由 Slave 设计者定义的静态值。
- 透明性限制:Master 无法通过任何协议内的机制(如寄存器查询)来自动探测 Slave 的重排序深度。这意味着系统集成时,设计者必须根据 Slave 的规格说明(Spec)手动进行配置或优化。
4. ID 匹配要求 (Identity Matching)
协议明确要求 Slave 必须确保返回的每一个数据包中的 RID 必须与发起该请求的 ARID 精确匹配。这是 Master 能够正确重组数据的物理基础。
必须给出读响应的波形
// TODO
Normal write ordering ⭐⭐⭐
1. 核心原则:写数据必须与地址顺序一致
在 AXI 传输中,Master(主设备)发送写数据的顺序必须与其发送写地址(AW Channel)的顺序完全一致。
- 基本规则:如果 Master 先发送了地址 A,后发送了地址 B,那么数据 A 必须在数据 B 之前发送。
- 例外情况:除非 Master 明确知道 Slave(从设备)支持“写数据交织”(Write Data Interleaving),否则严禁打乱顺序。
2. AXI3 与 AXI4 的关键演进
- 探测机制缺失:协议中没有提供任何寄存器或信号让 Master 去自动查询 Slave 是否支持“写数据交织”。
- AXI4 的革新:AXI4 协议已经完全取消了对“写数据交织”的支持。这意味着在 AXI4 设计中,所有写数据必须严格按地址顺序排列。这也是 AXI4 移除了 WID 信号的原因(因为顺序固定,不再需要 ID 来匹配数据)。
3. 多 Master 与 Interconnect 的责任
这部分对系统互连矩阵(Interconnect)提出了明确要求:
- 顺序维护:当 Interconnect 将来自不同 Master 的写事务转发给同一个 Slave 时,它必须充当“调度员”,确保转发给 Slave 的数据顺序与地址顺序严格对应。
- 无视 ID 限制:即便这些写事务拥有不同的 AWID,或者来自不同的 Master,上述的顺序限制依然适用。
| 维度 | 协议要求 |
| 主设备 (Master) | 发送 W-Data 的顺序必须等于发送 AW-Addr 的顺序。 |
| 从设备 (Slave) | 大多数 Slave 不支持交织,必须按地址顺序接收数据。 |
| 互连 (Interconnect) | 必须保证多主对一从时的写数据流与地址流拓扑顺序一致。 |
| AXI4 变化 | 彻底废除写交织,简化了硬件设计并移除了WID信号。 |
a. slave设备不支持写交织(interleaving)
- 在 AXI 传输中,Master(主设备)发送写数据的顺序必须与其发送写地址(AW Channel)的顺序完全一致。
- 基本规则:如果 Master 先发送了地址 A,后发送了地址 B,那么数据 A 必须在数据 B 之前发送。
这是自己在wavedrom上画的一个例子,前提条件是:
- slave设备不支持写interleaving
- master发送四笔transaction,AW通道发送AWID顺序为3,5,7,2
根据AXI3协议规则
- 当slave设备不支持interleaving时,master发送写数据的顺序必须与其发送写地址的顺序完全一致,所以WID的顺序,也必须为3,5,7,2
- 不支持写交织时,W通道是完全保序的,但是B通道的响应可以是乱序的。
- 对于不同ID的transaction,B通道的写响应可以乱序,Slave 返回响应(B 通道)的顺序可以与地址发出的顺序完全无关。
- B通道能回复响应的前提条件是,已经接收到了这个transaction的全部数据了,不能因为乱序,还没收完数据就回复响应。
Q&A:AWID和WID出现是否有先后顺序关系?
- AWID按照3,5,7,2的顺序依次出现
- WID也必须按照3,5,7,2的顺序依次出现
- 但AWID和WID谁先出现并没有做强制规定,协议并没有强制要求谁必须“物理上”先出现在总线上,
- 无论数据是先于地址还是晚于地址, AWID 出现的先后序列必须与 WID 出现的先后序列完全匹配(即 3 -> 5 -> 7 -> 2)。
1. 通道间的独立性 (Channel Independence)
- AXI 协议的五个通道在物理上是完全解耦的。
- 没有物理限制:从协议规范层面,WID 的数据包甚至可以在 AWID 地址发出的同一个周期、或者更早的周期就出现在总线上。(data before addr)
- Master 的自由度:Master 不需要等到 AWREADY 拉高(即地址被 Slave 接收)才开始发送 W 通道的数据。只要 Master 准备好了数据,就可以拉高 WVALID。
2. 逻辑顺序:数据先行是允许的
在高性能系统中,经常会出现 “数据先行” (Write data before address) 的情况。
- 例子:发送顺序 AWID=3, 5, 7, 2。Master 可以在地址 3 还没发完时,就连续把 WID=3, 5, 7, 2 的数据全部灌入总线。
- 目的:这样做是为了减小地址通道仲裁延迟对吞吐量的影响,让数据流尽可能填满总线带宽。
3. slave 的暂存能力:
如果数据先于地址到达,slave 会因为不知道目的地(没有地址信息)而将数据暂时存放在内部的 Write Data Buffer 中。
如果 Master 连续发送 3, 5, 7, 2 的数据而地址迟迟不到,一旦 slave 的 Write Data Buffer 被填满,它会拉低 WREADY 来反压 Master。
Q&A:如果数据先于地址,slave在收到后,是如何检查数据的id顺序和地址的id顺序匹配的?
1. 硬件核心组件:两个 FIFO 队列
Slave 内部通常维护两个关键的缓冲区(Buffer):
- AW_ID_FIFO:存储已经接收到的写地址 ID 序列。
- W_DATA_BUFFER:存储先到达的写数据。
2. 当数据先行时的处理流程
当 Master 连续发送 WID=3, 5, 7, 2 但地址还未到达时:
- 盲存阶段:Slave 的 W 通道接口在收到 WID=3 的第一拍时,因为它还没有对应的地址,它会把这些数据存入 W_DATA_BUFFER,并记录下这笔数据的 ID 是 3。
- 顺序校验:
- 当 AWID=3 终于到达并进入 AW_ID_FIFO 时,Slave 的控制逻辑会立刻比较:AW_ID_FIFO 的队首(ID=3)是否等于 W_DATA_BUFFER 里的第一笔数据 ID(ID=3)。
- 匹配成功:触发后续的写入操作(如写入 SRAM 或 DDR)。
- 匹配失败:如果 AW_ID_FIFO 队首是 3,但 W 通道送来的是 5,Slave 的 Protocol Checker 会立刻报错,或者通过反压(拉低 WREADY)拒绝接收,甚至上报一个 Slave Error。
AXI3 write data interleaving(AXI3协议中对于写交织的要求)
b. slave设备支持写交织(interleaving)
写数据交织是 AXI3 协议中的高级特性,但在 AXI4 中已被彻底移除。
1. 交织的定义与条件:
- Slave 接口可以接收不同 AWID 的交错写数据。
- 限制:相同 AWID 的写数据严禁交织。必须完整发送完一笔事务(直到 WLAST),才能开始下一笔相同 ID 的事务。
2. 首拍保序规则 (First Data Item Rule):
- 极重要约束:即使支持写交织,每一笔事务第一拍数据到达 Slave 的顺序,必须与地址(AW 通道)到达的顺序完全一致。
虽然 AXI3 支持不同 ID 之间的写数据交织或乱序,但它有一个底线约束:写数据通道中,每一笔事务第一拍(First beat)出现的顺序,必须严格匹配写地址通道中地址发出的顺序。
3. AXI4 的变革:
- AXI4 删除了写交织支持。在 AXI4 中,所有写数据必须连续、完整地发送,且必须严格匹配地址发送顺序。
4. 设计挑战与死锁风险:
- 支持写交织的 Slave 必须能持续接收交织数据,不能为了改变数据顺序而停止接收(Stall),否则会导致总线死锁。
- 由于 Master 无法探测 Slave 是否支持交织,除非明确文档说明,否则 Master 通常默认按地址顺序发送数据。
5. 应用场景 (Usage Models):
- 主要用于互连矩阵(Interconnect)聚合多个 Master 流的情况。通过交织,可以防止慢速 Master 阻塞快速 Master 的数据通道,从而提高系统总吞吐量。
6. 波形示例
个人体会,写交织是AXI协议中比较难理解的一部分,一定要亲自在wavedrom中把这部分波形画出来,才能有一个深入的理解。
这是自己在wavedrom上画的一个例子,前提条件是:
- slave设备支持写interleaving
- master发送四笔transaction,AW通道发送AWID顺序为3,5,7,2
波形解释:
- W通道发送写数据出现交织,但每一笔transaction第一拍数据对应的id,是按照3,5,7,2的顺序,反应在波形上就是,wid最开始的变化顺序一定是按照3,5,7,2的顺序,而之后的顺序可以随意发生变化
- 尽管发生了交织,wlast信号仍然只负责指示自己所属的ID事务的结束
- B通道写响应可以乱序回复,但前提是必须在该id的所有事务都完成之后才能回复该id事务的响应。这两者是不冲突的
- 可以发现对于同一笔transaction,其每一拍数据的先后顺序是严格保序的
- 每一拍数据都有其对应的WID,表明这拍数据属于哪一笔transaction
Q&A:当写数据出现写交织时,wlast信号什么时候拉高?
在 AXI 协议中,无论是否发生写交织 (Write Interleaving),WLAST 信号的核心语义始终保持不变:它标志着单笔事务(Transaction)的最后一个数据拍(Data Beat)。
1. WLAST 的触发条件
- WLAST 是由 Master 驱动的。每当 Master 发送某一笔事务(对应某个 ID)的最后一拍数据时,必须同时拉高 WLAST 信号。
- 如果一笔事务的长度(Burst Length)是 4,那么 Master 在发送第 4 拍数据时,WLAST 必须为高。
2. 交织场景下的 WLAST 表现
当发生写交织时,总线上会交替出现不同 ID 的数据。这时,你会看到多个 WLAST 在不同的时间点“点亮”,每一个都只负责终结它自己所属的那笔 ID 事务。
波形逻辑示例:假设有两笔写事务,ID=1(长度 2)和 ID=2(长度 2)。
- 第一拍:Master 发送 WID=1 的第一拍,WLAST=0。
- 第二拍(交织开始):Master 发送 WID=2 的第一拍,WLAST=0。
- 第三拍:Master 发送 WID=1 的第二拍(最后一拍),此时 WLAST 拉高。
- 第四拍:Master 发送 WID=2 的第二拍(最后一拍),此时 WLAST 再次拉高。
3. 三个关键约束
- ID 匹配性:Slave 接收到 WLAST 为高的一拍数据时,会将其视为当前 WID 对应事务的终点。
- 非同 ID 交织:相同 ID 的事务绝对不能交织。Master 必须在拉高第一个 WID=1 的 WLAST 之后,才能开始发送第二个 WID=1 的起始数据拍。
- B 通道的触发:Slave 只有在观察到某一笔事务的 WLAST 握手成功(WVALID & WREADY & WLAST 均为高),且地址也已收到的情况下,才能在 B 通道针对该 ID 回复响应。
- 协议底线(首笔保序):即使支持交织,不同事务的第一拍数据也必须按地址顺序出场。
- 不支持交织下的约束(全笔保序):一旦 Slave 不支持交织,这个约束就从“第一拍”扩展到了“整笔数据”。你必须发完 A 的 WLAST,才能开始发 B 的第一拍。
Q&A:在写交织时,同一transaction的不同拍数据有什么要求?
在 AXI3 协议中,当发生写交织 (Write Interleaving) 时,同一笔事务(Transaction)内部的多个数据拍(Data Beats)必须遵循非常严格的保序和唯一性规则。
1. 同一事务内部严禁乱序 (No Reordering Within a Transaction)
这是最基本的要求:虽然你可以把 ID=1 和 ID=2 的数据交织着发,但对于 ID=1 这笔事务本身,其内部的数据拍必须严格按照地址顺序从小到大发送。
- 例子:如果是一个 4 拍的 Burst 传输,顺序必须是:Beat 0 -> Beat 1 -> Beat 2 -> Beat 3。
- Master 绝对不能先发 ID=1 的 Beat 2,再发 ID=1 的 Beat 1。
2. 具有相同ID的两个事务严禁乱序,严禁交织 (No Self-Interleaving)
- 如果 Master 发出了两笔 AWID=1 的请求(记为 T1 和 T2)。Master 必须完整发完 T1 的所有数据(看到 WLAST),才能开始发送 T2 的第一拍数据。在总线上,你永远不会看到两个相同 ID 的 WLAST 信号在没结清前同时处于“待处理”状态。
3. WID 信号的每一拍一致性
在 AXI3 中,写数据通道带有 WID 信号。对于同一笔事务的所有数据拍:
- 必须拥有相同的 WID:这一笔 Burst 里的每一拍,其 WID 信号的值必须完全相等,且必须等于对应 AWID 的值。
- Master 不能在某一笔事务的中途改变 WID 的值。
4. WLAST 的唯一性
- 对于同一笔事务:
- 只有最后一拍数据被发送时,WLAST 信号才允许拉高。
- 中间的任何一拍(即使是被其他 ID 的数据隔开了很长时间)都绝对不能拉高 WLAST。
Q&A:如果出现交织,一定会乱序吗?
结论:交织(Interleaving)属于乱序(Out-of-Order)的一种表现形式,但出现交织必然意味着发生了某种程度的乱序。
1. 定义上的区别
- 乱序 (Out-of-Order):指的是事务(Transaction)完成的先后顺序与地址发出的先后顺序不一致。
- 例子:Master 先发 A 读请求,后发 B 读请求。如果 B 的所有数据(整个包)比 A 先全部传完,这就是乱序。
- 交织 (Interleaving):指的是不同事务的数据拍(Data Beats)在时间线上穿插出现。
- 例子:Master 发出 A 和 B。总线上的数据流是:A-beat0 -> B-beat0 -> A-beat1 -> B-beat1。
2. 为什么交织一定是乱序?
在 AXI 协议中,所谓的“顺序”通常指事务作为一个整体的完成顺序。
- 如果 A 事务先开始传输数据,但在中途插入了 B 事务的数据,那么 A 事务的“完成时刻”就被推迟到了 B 事务的数据拍之后。
- 从 Slave 处理的角度看,如果它能交织返回数据,说明它内部的调度器已经打乱了原始的“先到先得”处理模式。
3. 乱序但不交织的情况(常见)
很多时候会出现“乱序但不交织”的情况,这在 AXI4 中是常态:
- 场景:Master 依次发送读地址 ARID=1 (A) 和 ARID=2 (B)。
- 表现:Slave 先完整地返回了 B 的所有数据(从头到尾),然后再完整地返回 A 的所有数据。
- 结果:这是典型的乱序,但因为 A 和 B 的数据拍没有互相穿插,所以没有交织。
4. 逻辑因果关系
- 我们可以用一个简单的数学逻辑来表达:交织 $\implies$ 乱序:因为 B 事务的数据“插队”到了 A 事务的完整序列中间。乱序 $\nRightarrow$ 交织:事务可以一个接一个地完成,只是完成的顺序和发出的顺序不同。
总结
- 交织是对总线带宽利用率的极致压榨(比如在传输大块 A 数据时,利用间隙传输小块 B 数据)。
- 乱序是对 Slave 处理能力的解耦(谁先准备好数据谁就先给,不用等死)。
在 AXI4 中,为了简化设计,砍掉了“写交织”,只保留了“读交织”和“读写乱序”。
Q&A:相同id的事务,可以交织吗?
相同ID的事务必须保序,无法乱序,也必然无法交织。
为什么“相同 ID”永远不能交织?可以把 ID 想象成“快递单号”。
- 如果两个包裹(事务)单号不同,快递员即使把里面的零件混在一起运过来,你也可以根据单号把它们装配好。
- 如果两个包裹单号完全一样,快递员又把零件混在一起寄给你,你就彻底分不清哪个零件属于第一个包裹,哪个属于第二个了。这就是为什么 AXI 强制要求相同 ID 必须“发完一个,再发下一个”。
Read and write interaction
在 AXI 协议中,读通道和写通道是完全独立的,这为系统提供了极高的并发性能,但也带来了时序控制上的挑战。
1. 核心原则:读写通道完全独立
- 无原生顺序约束:AXI 协议规定,读事务和写事务之间没有默认的顺序限制。它们可以以任何顺序完成。
- ID 信号无关性:即便一个读事务的 ARID 与一个写事务的 AWID 相同,它们之间依然没有顺序约束。这与“相同 ID 的一组读事务必须保序”的规则不同,读写之间是完全并行的。
2. 如何确保读写顺序(Master 的责任)
如果 Master(主设备)逻辑上要求“先写后读”(例如:写完数据后立即读回来验证),Master 必须主动进行时序控制,不能依赖协议自动对齐。
Master 只有在以下情况发生后,才能认为之前的事务已完成:
- 对于读事务:Master 接收到该事务的最后一个读数据(即 RLAST 信号有效的那个数据包)。
- 对于写事务:Master 接收到 Slave 返回的写响应(BVALID 握手成功)。
- 重要提醒:仅仅把所有的写数据(Write Data)发出去并不代表事务完成,必须等到 B 通道的响应。
3. 不同场景下的应用建议
A. 访问外设(Peripheral)
- 规则:通常访问外设寄存器时,必须严格遵守“先发先完”的逻辑。
- 操作:Master 在发起新的读/写事务切换前,必须等待之前的事务收到响应(B 响应或 R 数据)。这是为了防止外设状态机因读写交织而产生不可预知的行为。
B. 访问存储器(Memory)
- 优化策略:为了提高效率,Master 可以引入地址检查(Address Check)机制。
- 冲突判定:
- 地址重叠:如果新事务的地址与尚未完成(Outstanding)的事务地址有重叠,Master 必须等待旧事务完成,以防止“读错旧数据”或“写覆盖顺序错误”(RAW/WAR 冒险)。
- 地址不重叠:如果地址完全不同,Master 无需等待旧事务完成,可以直接发起新事务。这种“乱序执行”能显著提升内存访问带宽。
通俗理解:
AXI 协议就像一条有两条独立车道(读车道和写车道)的高速公路。虽然你可以给两辆车贴一样的标签(ID),但它们互不干扰。如果你想让“写车”先到目的地,你必须等它发回“我到了”的短信(B 响应),再让“读车”出发。但在内存访问中,如果两辆车去的不是同一个仓库(地址不重叠),那它们谁先谁后都无所谓,一起跑效率最高。
Interconnect use of transaction identifiers
互联系统中存在多master,多slave的情况
这部分内容解释了在多 Master(主设备)系统中,互连结构(Interconnect)是如何管理 ID 信号,以确保事务能够准确路由回发起请求的设备。
1. ID 扩展机制(Appending ID Bits)
当多个 Master 连接到同一个 Interconnect 时,每个 Master 可能会使用相同的 ID 值(例如 Master A 和 Master B 都发出了 ID 为 0x1 的请求)。为了区分这些请求,Interconnect 会在 ARID、AWID 和 WID 的基础上追加额外的位(Additional Bits)。
- 唯一性分配:互连会根据 Master 连接的端口号,将特定的位(通常是 Master ID 或 Port ID)拼接到原始 ID 之前或之后。
- 带来的两个直接结果:
- 解耦独立性:各个 Master 不需要知道其他 Master 使用了哪些 ID。Master 发出的 ID 只需在其自身内部保持逻辑正确即可。
- 位宽变化:Slave(从设备)接口看到的 ID 信号位宽(Wider ID)必然比 Master 接口发出的原始 ID 位宽要大。
2. 响应路由机制(Routing Responses)
当 Slave 处理完请求并返回响应(读数据或写响应)时,Interconnect 需要利用这些追加的位来完成“逆向路由”:
对于读数据 (RID):
- Interconnect 检查接收到的 RID 中的高位(即之前追加的位)。
- 根据这些位确定该数据属于哪一个 Master 端口。
- 关键步骤:在将数据转发给对应的 Master 之前,Interconnect 会移除(Remove)这些额外的位,还原成 Master 发起请求时的原始 ID 宽度。
对于写响应 (BID):
- Interconnect 同样利用 BID 中追加的位来识别目标 Master。
- 确定目标后,剥离这些额外位,将原始 BID 传递给正确的 Master。
| 阶段 | Interconnect 的操作 | 目的 |
| 请求阶段 (Address) | 在 AWID / ARID 上增加前缀位(ID Expansion) | 标记事务来源,确保在系统级 ID 是唯一的。 |
| Slave 视角 | 接收到更宽的 ID 信号 | 能够区分来自不同主设备的并发请求。 |
| 响应阶段 (Response) | 匹配附加位并将其移除(ID Reduction) | 将响应准确路由回对应的 Master,并保持对 Master 的透明性。 |
Width of transaction ID fields
这部分内容展示了 AXI 协议规范中关于 “事务 ID 字段位宽(Width of transaction ID fields)” 的具体建议和实施指南。为硬件设计人员在定义 ID 信号位宽时提供了参考标准。
1. ID 位宽的基本属性:实现定义(Implementation Defined)
协议首先明确,ID 字段的具体位宽并不是固定的,而是由具体的芯片实现方案(Implementation Defined)来决定的。这意味着设计者可以根据系统的复杂度灵活调整。
2. 协议推荐的位宽分配
为了保证良好的兼容性和性能平衡,协议给出了如下推荐值:
- Master 设备:建议实现 4 bit 的 ID 位宽(支持最多 16 个并发的独立事务流)。
- Interconnect(互连):建议为 Master 端口号预留 4 bit 的额外位宽(支持最多 16 个 Master 端口)。
- Slave 设备:建议支持 8 bit 的 ID 位宽。
- 逻辑关系:Slave 的 8 bit 刚好等于 Master 的 4 bit 原始 ID 加上 Interconnect 追加的 4 bit 端口标识。
3. 特殊情况的处理
协议针对简单设计的 Master 和 Slave 提供了简化的处理方案:
对于简单的 Master(单顺序接口)
- 方案:如果 Master 不需要同时发起多组需要保序的事务(即只支持 Single Ordered Interface),可以将 ID 输出直接固定为常数(例如固定为 0)。
- 意义:简化了 Master 的内部逻辑,不需要维护复杂的 ID 分配状态机。
对于简单的 Slave(顺序处理)
- 方案:如果 Slave 本身不支持乱序处理,而是按照接收顺序逐一处理所有事务,那么它可以忽略输入 ID 的顺序信息。
- 兼容性:在这种情况下,增加对 ID 信号的支持并不会改变 Slave 的核心业务逻辑,只需将请求中的 ID 暂存并在返回响应时原样带回即可。
| 组件类型 | 推荐位宽 | 核心职责 |
| Master | 4-bit | 发起事务,通过不同 ID 实现 Outstanding 和 Out-of-order。 |
| Interconnect | +4-bit (extra) | 在 Master ID 基础上增加前缀,用于区分不同端口的 Master。 |
| Slave | 8-bit | 接收扩展后的 ID,并在 Response 阶段原样返回。 |
深度理解:为什么 Slave 位宽比 Master 大?
在多主一从的拓扑结构中,Slave 必须具备区分“谁发起的请求”的能力。
- 如果 Master A 发起 ID=0,Master B 也发起 ID=0。
- 如果没有 Interconnect 增加位宽,Slave 收到两个 ID=0,在返回数据时就无法判断该把数据还给 A 还是 B。
- 通过将 ID 拓宽,Slave 实际收到的是 ID_A+0 和 ID_B+0,从而保证了系统级 ID 的全局唯一性。
AXI3 演进到 AXI4 时的一个重大变化
1. 核心变化:废除写数据交织
在 AXI3 中,允许 Master 交叉发送属于不同事务的写数据(通过 WID 区分)。但在 AXI4 中:
- 连续传输要求:同一个写事务的所有数据包(Beat)必须在写数据通道上连续发送,中间不能插入其他事务的数据。
- 顺序匹配:写数据的发送顺序必须与写地址(AW Channel)的发布顺序严格一致。
2. WID 信号的移除
由于不再允许交织,写数据与地址之间形成了天然的一一对应关系,这使得 WID 信号变得冗余。
物理减负:AXI4 删除了 WID 信号字段。
设计优势:移除 WID 显著减少了接口的引脚数(Pin-count),简化了互连矩阵(Interconnect)内部的逻辑逻辑和缓冲需求。
3. 兼容性考虑(Legacy Considerations)
协议为 AXI3 到 AXI4 的平滑过渡提供了指导方案:
对于 Master(主设备)
- 大多数 AXI3 Master:本来就不支持写交织,因此无需修改即可直接兼容 AXI4。
- 支持交织的 AXI3 Master:必须通过配置将其“交织深度(Interleaving Depth)”限制为 1。这样它就会像 AXI4 一样顺序发送完整事务,从而实现兼容。
对于 Slave(从设备)
- 无缝兼容:任何 AXI3 Slave 必然能处理非交织的数据。因此,AXI3 Slave 连接到 AXI4 系统时不存在逻辑障碍。
4. 信号转换建议
- 恢复 WID:如果一个老旧的 AXI3 组件必须连接到 AXI4 互连,且该组件一定要看到 WID 信号,可以通过逻辑直接将 AWID 的值复制给 WID。因为 AXI4 保证了数据顺序和地址顺序一致,所以 AWID 足以代表当前的写数据 ID。
| 维度 | AXI3 规范 | AXI4 规范 |
| 写数据顺序 | 允许不同 ID 的数据交织发送。 | 必须按地址顺序,且单个事务数据需连续。 |
| 关键信号 | 包含WID用于数据重组。 | 移除WID,依靠顺序自然匹配。 |
| 设计复杂度 | 较高(Slave 需要重组逻辑)。 | 较低(简化了传输链路)。 |
| 兼容手段 | 需配置交织深度为 1。 | 直接输出 AWID 即可适配 AXI3 遗产。 |
通俗理解:
AXI3 就像是一个可以乱序投递包裹的快递系统,必须在每个包裹上贴标签(WID)才知道是谁的。AXI4 发现乱序投递太麻烦,规定必须“按订单顺序整箱发货”。既然顺序定死了,包裹上的标签(WID)也就没必要贴了,看发货清单(AWID)就行。
什么是interleave size?
outstanding, out of order interleaving
如果outstanding=1,就是一步一步来
读请求,收到读数据,下一笔读请求,下一笔读数据
AXI 总线基本概念 - 如何理解outstanding传输_axi outstanding-CSDN博客
AXI三板斧之Outstanding、Out-of-order、interleaving_axi outstanding-CSDN博客
outstanding能力需要master和slave匹配吗? 是针对master而言还是slave而言
outstanding传输
什么是interleaving depth?交织深度是什么?