ACE的嗅探方案在8核、16核时总线流量爆炸——每次写都要snoop所有核,N个核就是N次嗅探。CHI用目录式架构解决这个问题。再加上AXI4-Stream和低功耗接口,这篇覆盖AMBA的三个进阶主题。
资料来源:ARM AMBA5 CHI Architecture Spec(508页)、AMBA4 AXI4-Stream Protocol Spec(42页)、AMBA4 Low Power Interface Spec(46页)。
一、CHI协议架构:为大规模多核而生
ACE的瓶颈
ACE用总线嗅探(Snooping)维护一致性,每次写操作互连器都要向所有Master发Snoop请求。核数少时没问题,但到了16核、32核:N个核 = 每次写snoop N次,总线流量和延迟随核数线性增长。这就是ACE的扩展性天花板。
CHI核心思想:目录式一致性
CHI(Coherent Hub Interface)是AMBA5定义的一致性协议,ACE的继任者。它引入Home Node(主节点)作为集中管理者——类似一个"目录",记录每个Cache行被哪些核缓存。写操作时只通知目录里记的核,不用全网广播。
四种节点类型
请求节点(CPU核)
主节点(一致性管理)
从节点(内存控制器)
杂项节点(DVM管理)
| 节点 | 角色 | 典型实例 |
|---|---|---|
| RN(Request Node) | 发起一致性事务 | CPU核、带有Cache的Master |
| HN(Home Node) | 一致性管理,维护目录 | L3 Cache控制器、互连器 |
| SN(Subordinate Node) | 响应请求,提供数据 | DDR内存控制器 |
| MN(Misc Node) | 系统管理 | DVM(分布式虚拟内存管理) |
协议分层:5层解耦
CHI把一致性事务拆成5层,语义和物理传输彻底解耦:
这种分层让CHI可以适配不同的物理互连(Ring、Mesh、Crossbar),上层协议不变,只换底层传输。
Write-Invalidate vs Write-Update
CHI选择Write-Invalidate(写无效)而非Write-Update(写更新):
Write-Invalidate:写之前先让其他副本无效,然后只写自己的Cache。后续读由本地Cache命中,不再产生总线流量。
CHI选Invalidate的原因:减少总线流量。如果被写的变量后续还要读,Invalidate只需一次无效化,后续都本地命中;Update每次写都广播新值,流量更大。
关键概念:三个"点"
| 概念 | 全称 | 作用 |
|---|---|---|
| PoS | Point of Serialization | 序列化点,保证事务的全局顺序 |
| PoC | Point of Coherency | 一致性点,所有Master看到的一致性视图 |
| PoP | Point of Persistence | 持久化点,数据在此后保证持久存储 |
CHI vs ACE对比
| 维度 | ACE | CHI |
|---|---|---|
| 架构 | 总线嗅探 | 目录式(Home Node) |
| 扩展性 | 差(流量随核数线性增长) | 好(只通知持有副本的核) |
| 总线流量 | 高(每次写全网Snoop) | 低(目录精确通知) |
| 复杂度 | 中 | 高(分层架构+目录维护) |
| 适用场景 | 2-8核 | 16核以上大规模多核 |
AI芯片(多核NPU/GPU SoC)需要大规模并行计算,核间数据共享频繁。CHI的目录式一致性天然适合——几十个计算核心通过CHI互连,HN统一管理一致性,避免总线嗅探的流量爆炸。这也是为什么新一代AI芯片SoC普遍采用CHI。
二、AXI4-Stream:无地址的单向数据流
设计哲学
AXI4-Stream是AMBA4引入的流式传输协议,设计哲学三个词:无地址、单向、流式。它不像AXI那样发地址再搬数据,而是直接"灌"数据流——主设备一直发,从设备一直收,TLAST标记包尾。
核心信号
| 信号 | 作用 |
|---|---|
| TVALID / TREADY | 握手(同AXI) |
| TDATA | 数据 |
| TSTRB | 数据选通(标记哪些字节是有效数据) |
| TKEEP | 数据保留(标记哪些字节保留到包尾) |
| TLAST | 最后一拍(标记包的结尾) |
| TID / TDEST | 数据流ID / 目标路由 |
| TUSER | 用户自定义 |
TSTRB vs TKEEP:容易混淆
TSTRB:标记当前这拍里哪些字节是有效数据(类似AXI的WSTRB)。
TKEEP:标记哪些字节要保留到包尾。被TKEEP标记为0的字节是"Position Bytes"(位置字节,用于对齐),会在传输过程中被丢弃,不保留到包尾。
三种字节类型
| 类型 | TSTRB | TKEEP | 说明 |
|---|---|---|---|
| Data Bytes | 1 | 1 | 有效数据,保留到包尾 |
| Position Bytes | 0 | 1 | 位置字节,用于对齐,非有效数据 |
| Null Bytes | 0 | 0 | 空字节,无意义,可丢弃 |
传输层次
Transfer = 一次TVALID/TREADY握手
Packet = 由TLAST标记结尾的一组连续Transfer
Frame = 一组Packet的集合
什么时候用Stream?
DMA搬运:大数据块搬运,不需要每拍发地址
视频流水线:摄像头→ISP→编码器,像素流连续传输
AI加速器权重传输:NPU加载权重,单向大流量
音频流:ADC→DSP→DAC核心判断标准:不需要地址、单向、数据量大 → 用Stream。需要地址、双向、事务性强 → 用AXI4。
三、低功耗接口:Q-Channel与P-Channel
AMBA4引入的低功耗接口,通过两个通道实现组件级功耗管理。
Q-Channel:开关控制
Q-Channel用于组件进入和退出低功耗状态——本质上是个"开关":
| 信号 | 方向 | 作用 |
|---|---|---|
| QREQn | 设备→控制器 | 请求进入/保持正常状态 |
| QACCEPTn | 控制器→设备 | 接受低功耗请求 |
| QDENY | 控制器→设备 | 拒绝低功耗请求 |
| QACTIVE | 设备→控制器 | 设备活跃指示(有未完成事务时拉高) |
典型场景:CPU执行WFI/WFE指令进入空闲,Q-Channel通知时钟控制器关掉CPU时钟,省电。CPU有中断来了,QACTIVE拉高,请求恢复时钟。
P-Channel:状态切换
P-Channel用于组件在不同功耗状态间切换——比Q-Channel更精细,可以切到不同功耗档位:
| 信号 | 方向 | 作用 |
|---|---|---|
| PREQ | 设备→控制器 | 请求状态切换 |
| PACCEPT | 控制器→设备 | 接受状态切换 |
| PDENY | 控制器→设备 | 拒绝状态切换 |
| PACTIVE | 设备→控制器 | 设备活跃级别(多位,表示需求强度) |
| PSTATE | 设备→控制器 | 请求的目标功耗状态 |
典型场景:SoC级DVFS(动态电压频率调节),CPU在高性能模式(高压高频)和省电模式(低压低频)间切换。PACTIVE多位编码表示"我需要多高的性能",控制器据此决定切到哪档。
Q-Channel vs P-Channel
- CHI的四种节点类型分别是什么角色?CHI为什么用Write-Invalidate而不是Write-Update?AXI4-Stream和AXI4有什么区别?什么时候用Stream?Q-Channel和P-Channel分别用于什么场景?
AMBA5新特性与AI芯片SoC实战
AMBA5不只是AXI5换个名字。Poison、Cache Stashing、DTI、ATP这些新特性正在改变AI芯片的SoC架构设计方式。下一篇把AMBA5前沿+实战一次讲透。
169