AMBA CHI Architecture Spec 解读 — B2 Transactions

B2 Transactions 是 CHI Spec 中最长的章节(139页),定义了 CHI 协议的核心通信单元——事务(Transaction)。理解了 B2,就理解了 CHI 的”词汇表”和”语法”。


一、章节结构总览

B2 分为 10 个子节:

标题 核心内容
B2.1 Channels overview 4条物理通道(REQ/WDAT/SRSP/CRSP/RDAT/SNP)
B22 Channel fields REQ/RSP/SNP/DAT 各通道的字段定义
B2.3 Transaction structure 8大类事务的完整消息流图 ⭐
B2.4 Transaction identifier fields 16种标识符字段详解
B2.5 Transaction identifier field flows 各种事务中标识符如何在节点间传递
B2.6 Multi-request 多请求合并机制(DMT/DCT/DWT)
B2.7 Ordering 事务排序模型 ⭐
B2.8 Address, Control, and Data 地址空间、内存属性
B2.9 Data transfer 数据传输、字节使能、Limited Data Elision
B2.10 Request Retry 重试机制和 Credit 返回

二、CHI 的通道模型

2.1 四条物理通道

CHI 不像 AXI 那样用”地址/读/写”通道,而是用面向消息的通道:

通道 方向(RN视角) 用途
REQ 发送 请求通道(读、写、原子、DVM 等)
WDAT 发送 写数据通道(写数据、原子数据、snoop 转发数据)
SRSP 发送 Snoop 响应 + 完成确认
CRSP 接收 完成响应(来自 Completer)
RDAT 接收 读数据通道(读数据、原子数据)
SNP 接收 Snoop 请求通道

关键差异:CHI 用 单条 REQ 通道 承载所有类型请求(AXI 需要分开读地址/写地址通道),通过 Opcode 区分。

2.2 通道字段 — REQ 通道示例

REQ 通道上的关键字段(共 ~65 个):

分类 字段 位宽 说明
标识 TgtID, SrcID, TxnID 实现定义 路由和事务标识
地址 Addr 48-52 bit 物理地址
属性 MemAttr 3 bit 内存类型(Device/Normal/Cacheable/Allocate)
操作 Opcode 7 bit 事务类型编码(共68种)
控制 Order, Excl, AllowRetry, SnoopMe 1-2 bit 排序/独占/重试/自侦听
高级 MPAM, MECID, TagOp, PBHA, VMIDExt 实现定义 RME/MTE/MPAM 等扩展

三、事务结构(B2.3 — 核心)

3.1 基本原则

所有事务可以抽象为:

1
2
3
发起方 → 中间节点(可选)→ 目标方 → 响应 → 返回数据
REQ SNP(snoop其他缓存) RSP(完成状态)
DAT(数据)

3.2 Allocating Read 事务流

以 ReadClean 为例,读事务有以下可能路径:

路径 1:Home 直接返回数据(最快)

1
Requester → REQ: ReadClean → Home → RDAT: CompData → Requester

路径 2:Home 从内存读取

1
2
3
Requester → REQ: ReadClean → Home
Home → REQ: ReadNoSnp → Subordinate → DAT: Data → Home
Home → RDAT: CompData → Requester

路径 3:带 Forwarding Snoop(缓存到缓存转发)

1
2
3
4
5
Requester → REQ: ReadClean → Home
Home → SNP: SnpSharedFwd → Snoopee
Snoopee → SRSP: SnpRespFwded → Home ← 转发完成
Snoopee → DAT: Data → Requester ← DCT! 直接数据转发
Home → CRSP: Comp → Requester ← 仅完成信号

路径3是 CHI 的性能关键——Snoopee直接把数据发给Requester(DCT),Home只发完成信号。这比 ACE 中所有数据必须经过 Home 快得多。

3.3 读事务的 6 种完成选项

编号 模式 描述
1 CompData from Home Home 直接返回数据+完成
2 RespSepData / DataSepResp 响应和数据分开返回
3 CompData from Subordinate 子节点直接返回数据
4 Resp from Home, Data from Sub Home 发响应,子节点发数据
5 Forwarding snoop Snoopee 转发数据(DCT/DMT)
6 Comp only (MakeReadUnique) 仅完成,无数据返回

3.4 写事务(B2.3.2)

CHI 的写事务分为 6 个子类型:

写类型 用途 数据源
Immediate Write (WriteNoSnp/WriteUnique) 立即写 请求时带数据
Write Zero 清零优化 无数据(Home自己填零)
CopyBack Write 缓存回写 请求后发数据
Combined Immediate Write + CMO 写+缓存维护合并 请求时带数据
Combined Immediate Write + Persist CMO 写+持久化合并 请求时带数据
Combined CopyBack Write + CMO 回写+缓存维护合并 请求后发数据

3.5 原子事务(B2.3.3)

支持 64 种原子操作,4 大类:

类型 语义 数据返回
AtomicStore 读-改-写(不返回旧值)
AtomicLoad 读-改-写(返回旧值)
AtomicSwap 原子交换
AtomicCompare 条件交换(比较-交换)

原子事务可以在 HomeSubordinate 端执行。

3.6 Stash 事务(B2.3.4)

缓存注入——一个节点把数据直接推送到另一个节点的缓存:

1
2
3
加速器 → REQ: StashOnceShared + StashNID → Home
Home → SNP: SnpStashShared → 目标节点
目标节点 → 缓存中分配一行

3.7 Dataless 事务(B2.3.5)

操作 效果
CleanInvalid 缓存行置为 Invalid,无需写回
CleanShared 脏缓存写回并变为 Shared
CleanUnique 共享缓存变为 Unique(不写回)
MakeInvalid 使所有副本失效
MakeUnique 获取唯一所有权
Evict 逐出缓存行

3.8 DVM 事务(B2.3.7)

分布式虚拟内存事务用于 TLB/BP/Cache 维护,支持按 VMID/ASID/IPA/VA 精确无效化。

3.9 Home Initiated 事务(B2.3.9)

Home 主动向 Subordinate 发起的事务:Read/Write/Zero/Dataless/Atomic/Snoop/DVM,用于响应上行请求。


四、标识符系统(B2.4)

CHI 定义了丰富的标识符字段:

标识符 用途
TgtID / SrcID 节点级路由
TxnID 每个节点独立的事务 ID
DBID Home 分配的数据缓冲 ID(DCT 的关键)
ReturnTxnID 数据/响应直接返回发起者
FwdTxnID Snoop 转发数据的 ID
HomeNID / ReturnNID / FwdNID 各阶段节点 ID
LPID / StashLPID 逻辑处理器标识
PGroupID 持久化组 ID
TagGroupID MTE 标签组 ID
CacheLineID MultiReq 中区分缓存行

DMT 流中的 ID 传递示例

1
2
3
4
5
6
7
8
Requester(SrcID=A,TxnID=1)          Home                   Snoopee(SrcID=S)
│── ReadClean(TgtID=H) ──────────→│
│ │── SnpSharedFwd ────→│
│ │ FwdTxnID=H1 │
│ │ ReturnNID=A │
│ │ ReturnTxnID=1 │
│←──── Data(SrcID=S) ─────────────│─────────────────────│ ← DMT!
│←──── Comp ─────────────────────│

五、Multi-Request 机制(B2.6)

CHI H 版新特性,允许一个事务跨越多个缓存行

模式 描述 适用场景
DMT 数据从 Subordinate 直接到 Requester 大块读
DCT 数据从 Snoopee 直接到 Requester 缓存转发
DWT 写数据直接到 Subordinate 大块写

关键字段:MultiReqNumReq(1~8)、CacheLineID


六、排序模型(B2.7)

Order 字段 含义
00 无需排序(Non-ordered)
01 请求排序(Request ordering)
10 预留
11 端到端排序(End-to-end ordering)

Completion Acknowledgment(CompAck):Requester 收到 Comp 后额外发送 CompAck,确保资源释放。

Streaming Ordered Write(CHI H 优化):允许写请求在收到 CompAck 之前发出下一个请求,最大化写带宽。


七、地址与控制(B2.8)

7.1 物理地址空间(PAS)

支持 RME 的 4 种 PAS:

PAS 含义
00 Non-secure
01 Secure
10 Realm(RME 新增)
11 Root(EL3 专属)

7.2 CopyAtHome (CAH)

CHI H 新特性——允许 Home 持有脏数据副本,减少内存访问:

1
2
Requester → WriteBack(CAH=1) → Home(保留副本,不写回内存)
后续读请求 → Home 直接返回(无需访存)

八、数据传输(B2.9)

8.1 数据包化

数据宽度 一个缓存行所需 flit 数
128-bit 4
256-bit 2
512-bit 1

8.2 Limited Data Elision(LDE)

CHI H 的带宽优化:写零或全相同数据只需发一个 flit + 重复次数:

1
2
传统:WriteBack 64B = 4个flit
LDE: WriteBack 64B = 1个flit + NumDat=3(接收方复制)

九、重试机制(B2.10)

当 Home 资源不足时(如 DBID 用完):

1
2
3
4
5
Requester → REQ → Home
Home → CRSP: RetryAck + AllowRetry=1 ← 资源不足
(等待 PCrdReturn)
Requester → REQ(重新发送)+ PCrdType=RETRY
Home → 正常处理

十、总结

B2 是 CHI 协议的 “词汇表”,定义了 CHI 的一切通信单元。B2+B4+B5 的关系:

1
2
B2(事务结构:有什么消息)→ B4(协议规则:消息怎么交互)
→ B5(协议流图:完整的事务流示例)

下一站建议:理解了 B2 后,直接进入 B4 Coherence Protocol(CHI 最核心也最难的章节),那里定义了缓存状态机和 snoop 协议规则。