1. CMN与CHI概述:互联架构的演进、CMN-600/700系列简介、CHI协议的地位与作用
1.1 从总线到网络:互联架构的演进之路
做芯片互联设计这些年,我最大的感受就是——互联架构的演进,本质上是在解决一个核心矛盾:性能需求越来越高,而物理瓶颈越来越难突破。
早期芯片设计,大家用简单的总线结构。比如AMBA 2.0的AHB,一根总线挂几个master和slave,仲裁器决定谁用总线。那时候芯片规模小,主频低,总线够用。但随着多核处理器兴起,总线成了瓶颈——多个核同时访问内存,总线带宽根本不够用。
于是有了交叉开关(Crossbar)。交叉开关让多个master可以同时访问不同的slave,带宽大幅提升。但交叉开关也有问题:面积大、连线复杂。当核数超过8个,交叉开关的复杂度会呈平方级增长,布线都布不通。
嗯,这时候就需要更高级的互联方案了。业界开始转向片上网络(Network-on-Chip,NoC)。NoC把互联从总线拓扑变成了网络拓扑,数据以报文形式在网络中传输。这就像城市交通——从单车道变成了立交桥网络。
ARM的CMN系列,就是NoC思想在ARM生态中的具体实现。我个人习惯把CMN理解为「芯片内部的互联网」——它有路由器、有协议、有流量控制,只不过所有东西都在一颗芯片上。
1.2 CMN-600/700系列:ARM的互联王牌
CMN全称是Coherent Mesh Network,直译过来就是「一致性网格网络」。它解决的核心问题是:多核之间的缓存一致性。
你想想看,一个SoC里有十几个CPU核,每个核都有自己的L1/L2缓存。如果核A修改了地址0x1000的数据,核B怎么知道这个地址已经变了?这就是缓存一致性问题。CMN就是负责在核与核之间、核与内存之间,同步这些数据。
CMN-600是ARM在2015年左右推出的第一代一致性网格互联。它支持最多32个CPU核,采用2D mesh拓扑。我记得当时第一次接触CMN-600的项目,最头疼的是它的配置参数——光一个地址映射表就有上百个寄存器要配。
CMN-700是后续的增强版,支持更多核(最多64核),带宽更高,延迟更低。它还引入了CHI协议的一些新特性,比如DVM(Distributed Virtual Memory)操作的优化。
下面这张图展示了CMN-700的基本架构:
从图上可以看到,CMN-700的核心组件包括:
- Request Node (RN):请求节点,通常是CPU核或GPU核,发起读写请求
- Home Node (HN):归属节点,负责管理缓存一致性协议
- Subordinate Node (SN):从节点,通常是内存控制器或外设
- Misc Node (MN):杂项节点,处理中断、调试等特殊功能
这些节点通过路由器(Router)组成2D mesh网络。每个路由器有四个方向(东、南、西、北)的连接,数据包在路由器之间跳转,最终到达目的地。
关键点:CMN-700的mesh拓扑不是随便画的。它要保证任意两个节点之间的跳数尽量少,同时还要考虑物理布局——CPU核在芯片上怎么摆,内存控制器在哪个位置,这些都会影响mesh的拓扑设计。
1.3 CHI协议:CMN的「通信语言」
CMN的硬件架构搭好了,节点之间怎么通信?这就需要协议了。CHI(Coherent Hub Interface)就是ARM为CMN量身定制的通信协议。
CHI协议的地位,说白了就是CMN的「灵魂」。没有CHI,CMN只是一堆连在一起的逻辑门,什么也干不了。
CHI协议定义了:
- 事务类型:读、写、原子操作、DVM操作等
- 协议状态:缓存行的状态(如Unique、Shared、Invalid等)
- 流量控制:如何避免网络拥塞
- 死锁避免:协议层面的死锁预防机制
CHI协议有几个版本:CHI-A、CHI-B、CHI-C、CHI-D。每个版本都在前一个版本上增加新特性。CMN-600支持CHI-B,CMN-700支持CHI-C。
| CHI版本 | 主要特性 | 对应CMN |
|---|---|---|
| CHI-A | 基础一致性协议,支持MESI状态 | 早期原型 |
| CHI-B | 增加原子操作、DVM支持 | CMN-600 |
| CHI-C | 增加QoS、带宽优化、延迟降低 | CMN-700 |
| CHI-D | 增加CXL支持、更灵活的拓扑 | CMN-700 R3+ |
个人经验:我在做CMN-600项目时,最头疼的是CHI协议的时序收敛。CHI协议要求request和response之间有严格的顺序关系,但物理布局又导致信号延迟很大。后来我们用了pipeline + credit-based flow control才搞定。嗯,这个后面讲RTL实现时会详细说。
1.4 为什么CMN+CHI如此重要?
你可能要问:ARM有那么多互联方案,为什么CMN+CHI成了主流?
原因有三:
- 可扩展性:CMN的mesh拓扑可以扩展到几十个核,甚至上百个核。你只需要增加路由器和节点,不需要重新设计互联架构。
- 一致性保证:CHI协议提供了硬件级别的缓存一致性。软件不需要操心数据同步问题,这大大降低了多核编程的难度。
- 生态成熟:ARM提供了完整的工具链——从配置工具到验证IP,从性能模型到RTL代码。你不需要从零开始设计互联。
避坑指南:我曾经在一个项目中,团队为了「省面积」决定用ACE协议替代CHI。结果验证阶段发现ACE的带宽根本不够,最后不得不重新设计。我的建议是:如果核数超过4个,直接用CHI,别省那点面积。省下来的面积,不够你补性能的坑。
1.5 本章小结
这一章我们聊了:
- 互联架构从总线到NoC的演进
- CMN-600/700的基本架构和组件
- CHI协议的地位和作用
- CMN+CHI组合的优势
下一章,我们会深入CHI协议的细节——从协议层到事务层,看看数据在CMN中到底是怎么传输的。
公众号:蓝海资料掘金营,微信deep3321