AMBA CHI 与 ACE:缓存一致互连、侦听机制与多核对等内存
更新时间:2026-09-19。协议基础见 AXI4 完整协议,缓存协议本身见 缓存一致性 MESI。本篇讲 AMBA 怎样把一致性「做进互连」:ACE 是 AXI 的一致性扩展,CHI 是重新设计的高性能一致骨干。
本文要回答的问题
- 多核各自有 cache 时,不做硬件一致性会出什么问题?
- MESI/MOESI 状态如何靠总线事务流转?
- ACE 在 AXI 上加了什么,read/write unique 和 snoop 是什么?
- CHI 为什么改用包交换、分层节点(RN/HN/SN)?什么规模才需要它?
一、为什么需要硬件一致性
两个核各自缓存同一地址:核0 写了新值留在自己 cache,核1 仍读旧副本。没有一致性,软件就得手动 flush/invalidate,既慢又易错。硬件一致性让所有主设备看到「单一共享内存」抽象:任一核读到的总是该地址最新值。一致性互连通过在读写时侦听(snoop)其他缓存来保证。
缓存行状态(MESI/MOESI,详见 MESI 协议):Modified(独脏)、Exclusive(独净)、Shared(多份净)、Invalid(无效),MOESI 多一个 Owned(被共享但由某核持有脏副本,可直接供给别人而不必写回内存)。
二、ACE:在 AXI 通道上加一致性
ACE(AXI Coherency Extensions)保留 AXI 的五个通道,额外加宽信号描述缓存事务,并新增一组侦听地址通道(AC)和侦听响应/数据通道(CR/CD)。关键是 ARSOP/AWSOP(读/写一致性操作类型):
- 读类:ReadOnce(普通不自缓存)、ReadShared(请求进入 Shared)、ReadUnique(请求独占以便随后写)、CleanUnique/MakeInvalid 等维护操作。
- 写类:WriteThrough、WriteBack、WriteUnique(一次性写,不先获得独占,适合不缓存的设备)、Evict。
流程直觉:核想写一行,先发起让其他副本失效的 ReadUnique/MakeInvalid,互连向相关核发 snoop(AC 通道带地址与类型),被侦听核在 CR/CD 上回响应(是否有副本、是否脏、必要时把脏数据直接喂给请求者或同时写回),拿到 Unique 后核才能改。这样把 MESI 状态机的消息搬到了总线上。
ACE 还区分一致主设备(ACE master)与不一致的 AXI/DMA 主设备:后者不参与侦听,访问共享内存前必须由软件做 cache clean/invalidate(见末尾坑 5)。
三、CHI:为多核重设计的包交换骨干
当核数增多(大小核 + GPU + NPU + DDR 多控制器),ACE「AXI 通道 + 单跳 snoop」在频率、面积、可扩展性上吃力。CHI(Coherent Hub Interface) 改为:
- 分层节点:
- RN(Request Node):发起请求,如 CPU 核(RN-F,full coherent)、IO 主设备(RN-I/DVM);
- HN(Home Node):一致性序点与目录,跟踪某地址缓存在哪些 RN、负责排序与 snoop 发起(HN-F),并接内存;
- SN(Slave Node):内存控制器等终点。
- 独立通道网络:请求(RQ)、响应(RSP)、数据(DAT)、侦听(SNP)、以及 credit 流控,多为**包/微片(flit)**形式,链路可用寄存器切片轻松跑高频、跨 die(与 UCIe 配合)。
- 目录式侦听:HN 维护目录,只向真正持有该行的 RN 发 snoop(比广播省电省带宽),支持 MOESI 直接传脏副本、分布式 Home。
- credit 反压 + 可乱序:用 credit 而非固定 ready,事务带 ID/Tag 乱序返回、在 HN 排序,配合 outstanding 打满高带宽。
- QoS、硬件 DVM(TLB 广播维护)、RAS、安全/隔离(MPAM)等企业级特性内建。
RN-F(核0) ─┐
RN-F(核1) ─┼─▶ CHI 网状/环网 ─▶ HN-F(Home/目录) ─▶ SN ─ DDR
RN-I(IO) ─┘ ▲ SNP/RSP/DAT 多通道,credit 流控四、什么时候用哪个
| 规模/需求 | 推荐 |
|---|---|
| 单核 Cortex-M + DMA,无数据共享或软件可维护 | AXI/AHB/APB(不要一致性,最省) |
| 少数几个一致核(如 Cortex-A 双/四核小簇)+ 一致 DMA | ACE / ACE-Lite |
| 多簇众核、GPU/NPU、多 DDR、高频率、跨 die | CHI(或 CXL/厂商一致总线) |
| 加速器只需读一致快照、不缓存 | ACE-Lite(IO 一致性,单向窥探) |
开启一致性是有面积/功耗代价的:目录、snoop 通道、每个 RN 的 snoop 响应逻辑都占资源。控制平面(APB 配置)与数据平面(CHI/AXI)通常分离。
五、常见的坑
- 把 ACE/CHI 当「更快的 AXI」:一致性的价值是共享抽象,不参与一致的 DMA 仍需软件清/无效 cache,接错会读到旧数据。
- DMA 缓冲区缓存属性错:CPU 写的描述符/数据停在 cache,DMA 经非一致口读到旧内存——要置 non-cacheable 或 clean;DMA 写完 CPU 要 invalidate 再读。参见 Stream 与 DMA。
- snoop 响应死锁:RN 必须保证能接收 snoop(独立缓冲),若 snoop 通道被正常请求占满会形成环形等待;要预留 snoop credit。
- 误判顺序:一致性只保证缓存行的最新值可见,不替代内存屏障;多核同步仍需 acquire/release 屏障与 DVM 广播。
- 跨行长事务:CHI/ACE 的 line 访问也要遵守对齐与不与非一致外设别名的规则;混用 cacheable/device 映射同一物理地址会出问题。
相关与延伸
缓存状态机见 MESI 一致性 与 MMU/TLB;非一致基础见 AXI4 完整协议;多主互连见 AXI Crossbar;选型见 AMBA 总线选型;跨 die 见 UCIe chiplet。
总结
ACE 在 AXI 上加 SOP 类型与 AC/CR/CD 侦听通道,把 MESI 消息搬上总线实现硬件一致性;CHI 进一步用 RN/HN/SN 分层节点 + RQ/RSP/DAT/SNP credit 包交换和 Home 目录做可扩展的众核全一致骨干;不参与一致的 AXI/DMA 仍须软件维护 cache,规模越大、共享越强才越值得为一致性付面积与功耗。