一、CMN概述:从总线到网络的演进

大家好,我是老张。做芯片架构十几年了,今天咱们聊聊CMN。

CMN,全称Coherent Mesh Network。翻译过来就是「一致性网格网络」。名字挺长,但核心就三个字——一致性

说白了,它就是ARM体系里用来解决多核、多芯片之间数据同步问题的互联方案。你想想看,一个SoC里十几个核,每个核都有自己的Cache。如果核A改了某个数据,核B怎么知道?这就是CMN要干的事。

1.1 CMN的起源:为什么会有这个东西?

早年间,ARM的互联方案叫AMBA总线。AMBA 3时代,大家用AHB、APB。到了AMBA 4,引入了ACE协议,开始支持一致性。但总线结构有个硬伤——带宽瓶颈

我记得2015年做过一个16核的服务器芯片。用ACE总线,结果跑到8核以上,总线就堵死了。数据包排队,延迟飙升。那叫一个头疼。

后来ARM推出了AMBA 5 CHI协议,同时带来了CMN这个物理拓扑。CMN把总线换成了网格(Mesh)结构。每个节点只跟邻居通信,数据走最短路径。这样一来,带宽不再是瓶颈。

核心变化:从「共享总线」到「点对点网格」。总线是单车道,网格是立交桥。

1.2 CMN在ARM架构中的地位

在ARM的生态里,CMN是基础设施级的存在。它连接着CPU、GPU、DSP、内存控制器、PCIe控制器……所有需要共享数据的主模块。

我习惯把ARM SoC分成三层:

  • 计算层:CPU、GPU、NPU等
  • 互联层:CMN(负责数据搬运和一致性)
  • 存储层:DDR、HBM、L3 Cache等

CMN就是中间那层。没有它,上层计算单元就是孤岛。你想想看,一个8核CPU,如果核0改了数据,核7还在用旧数据,那程序跑出来全是错的。

个人经验:我在做某款AI芯片时,一开始没重视CMN的配置。结果NPU和CPU之间数据不同步,推理结果时对时错。查了三天,最后发现是CMN的snoop filter没配好。嗯,从那以后,我每次做架构都先把CMN的配置表画清楚。

1.3 CMN与ACE/AXI协议的关系

这里容易搞混。我简单梳理一下:

协议/组件 作用 关系
AXI 点对点数据传输协议 CMN内部节点间用AXI/CHI通信
ACE 带一致性的AXI扩展 CMN对外接口兼容ACE
CHI AMBA 5新协议,更高性能 CMN-600及以上版本原生支持
CMN 物理拓扑+一致性管理 承载上述协议的硬件实现

说白了,AXI是路,ACE是交通规则,CMN是立交桥。它们不是替代关系,而是不同层次的东西。

我曾经遇到一个客户,问「CMN和ACE哪个好?」。这就像问「高速公路和交通规则哪个好」一样,没法比。CMN用ACE协议,也可以用CHI协议。CMN-600之后,我建议直接用CHI,延迟更低,带宽更高。

1.4 CMN的核心组件

一个典型的CMN系统包含这些角色:

  • RN(Request Node):请求节点,比如CPU核、GPU。它发出读写请求。
  • HN(Home Node):归属节点,负责管理某段内存地址的一致性。每个地址范围对应一个HN。
  • SN(Slave Node):从节点,比如DDR控制器、PCIe控制器。它响应请求。
  • MN(Miscellaneous Node):杂项节点,处理中断、调试等。

这些节点通过Mesh互联连接。每个节点只跟上下左右四个邻居通信。数据包在网格里一跳一跳地走。

避坑指南:我曾经在配置HN数量时犯过错误。HN太少,单个HN负载过高,延迟飙升。HN太多,snoop广播开销大。经验值是:每个HN管理的内存范围不超过4MB,对于DDR场景,HN数量 = 总内存 / 4MB。当然,具体要看你的访存模式。

1.5 一张图看懂CMN

下面我画了一张CMN的拓扑结构图。你看完就明白了:

CMN 网格拓扑结构示意图 RN (CPU) RN (GPU) RN (NPU) RN (DSP) HN-0 HN-1 HN-2 HN-3 SN (DDR) SN (DDR) SN (PCIe) SN (HBM) MN (中断) MN (调试) RN (请求节点) HN (归属节点) SN (从节点) MN (杂项节点) Mesh互联

你看,RN在上层发起请求,HN在中间做一致性管理,SN在下层响应。MN处理杂项事务。所有节点通过Mesh网格互联,数据可以横向或纵向传输。

1.6 小结

CMN不是什么神秘的东西。它就是ARM为了解决多核一致性而设计的互联架构。从ACE总线到CMN网格,本质上是从共享到分布的转变。

我个人觉得,理解CMN的关键就三点:

  1. 它是个网络,不是总线。节点间点对点通信。
  2. 它管一致性,保证所有核看到的数据是一样的。
  3. 它用CHI/ACE协议,但协议和拓扑是两回事。

嗯,这一章就到这里。下一章咱们聊聊CMN的地址映射和路由机制——说白了就是数据包在网格里怎么走。


公众号:蓝海资料掘金营,微信deep3321