news 2026/7/18 5:54:50

AXI协议学习总结(Multiple Transactions)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
AXI协议学习总结(Multiple Transactions)

这一章是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 暂存并在返回响应时原样带回即可。
组件类型推荐位宽核心职责
Master4-bit发起事务,通过不同 ID 实现 Outstanding 和 Out-of-order。
Interconnect+4-bit (extra)在 Master ID 基础上增加前缀,用于区分不同端口的 Master。
Slave8-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?交织深度是什么?

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/18 5:54:27

2026年5月TikTok矩阵系统排行:智能化与合规化引领行业新趋势

图片来源:原创自制进入2026年,TikTok跨境电商依然保持高速增长,越来越多卖家开始从单账号运营向矩阵化运营转型。然而,随着平台风控不断加强,账号关联、异常登录、内容重复等问题审核愈发严格,因此矩阵系统…

作者头像 李华
网站建设 2026/7/18 5:54:24

Dell R730xd部署FreeNAS的实战经验与问题解决

1. 项目背景与设备选型Dell PowerEdge R730xd作为一款经典的2U机架式服务器,在企业级存储和虚拟化场景中应用广泛。这次我们要在配备双E5-2609处理器和64GB内存的730xd上部署FreeNAS存储系统,整个过程遇到了不少值得记录的典型问题。选择730xd作为FreeNA…

作者头像 李华
网站建设 2026/7/18 5:54:15

Imagination GPU 驱动程序 26.1:Vulkan 功能增强与 Android 17 预览版

在Imagination,强大且具有前瞻性的软件是充分发挥我们GPU IP价值的基石。随着26.1版驱动程序的发布,我们延续了长期以来的承诺:提供持续的更新,以增加功能、提升性能,并紧跟不断演进的行业标准,让SoC供应商和开发者确信,他们的平台已为未来做好准备。 26.1版本的一大核心…

作者头像 李华
网站建设 2026/7/18 5:51:36

深入解析Laravel源码:从启动流程到核心架构

1. Laravel 源码解读:从入口到核心架构Laravel 作为现代 PHP 开发的标杆框架,其优雅的设计哲学和高效的实现方式一直备受开发者推崇。但真正要掌握这个框架的精髓,仅停留在使用层面是远远不够的。本文将带你深入 Laravel 的源码世界&#xff…

作者头像 李华
网站建设 2026/7/18 5:50:47

Python continue语句详解:循环控制与实战应用

1. Python continue语句的本质与作用continue语句是Python循环控制中的关键命令之一,它的核心功能是中断当前循环迭代并立即开始下一次循环。与break语句彻底终止循环不同,continue更像是一个"跳过"指令,它允许我们根据特定条件选择…

作者头像 李华