文章目录
-
- 介绍
- [CHI 特点](#CHI 特点)
-
- [Layers of the CHI architecture](#Layers of the CHI architecture)
- Topology
- [Node Type](#Node Type)
- [Transaction 分类](#Transaction 分类)
-
- [Transaction 路由](#Transaction 路由)
- [SAM 介绍](#SAM 介绍)
- [Node ID](#Node ID)
- 节点间数据怎么传输的呢?
介绍
CHI 的全称是 Coherent Hub Interface。所以从名字就能看出,CHI要解决什么问题了。按照惯例,开始之前放一张AMBA的全家福。CHI协议是AMBA的第五代协议,可以说是ACE协议的进化版,将所有的信息传输采用包(packet)的形式来完成。
从CHI开始协议分层了,这是跟以往的总线协议不同的;为了更多组件互连,ARM想要定义一个统一的接口。现代的SoC功能越来越丰富,包含的组件越来越多,处理器,处理器簇、图形处理器、存储控制器、I/O桥、PCIe子系统和CHI互联线等。如何把这些有可能自主研发,也有可能来自不同厂商的模块更好的连接起来,组成一个高效的系统,已是当下SoC设计中的一个难题。
CHI 特点
CHI的特性包括以下:
- 架构灵活,易于扩展;
- 独立的分层实现,包括协议层(protocol)、网络层(network)和链路层(link);
- 基于包传输;
- 由基于互连的主节点(Home Node,简称HN)处理的所有事务,包括snoop、缓存和内存访问;
- HN 协调所有的传输请求,包括snoop请求、访问高速缓存和内存;
- CHI的一致性协议支持:64Byte的缓存行、snoop filter和directory、MESI和MOESI 缓存模型、增加两 个缓存行状态(partial和empty);
- CHI传输事务包含多种类型,支持原子操作和同步操作,支持cache stashing,DVM(distributed virtual memory)等;
- 支持Retry机制来管理协议层资源;
- 支持端到端的QoS(Quality of Service);
- 可配置的数据宽度来满足系统需求;
- 支持ARM的TrustZone;
- 优化传输事务流;
- 跨组件和互连的错误报告和传播机制,以确保系统的可靠性和完整性;
- 低功耗信号,可以使能flit级别时钟门控、根据组件的工作情况实施时钟门控或电源门控等低功耗手段。
Layers of the CHI architecture
CHI 协议的三层分为协议层,网络层和链接层,如下图所示:
- 在协议层(protocol)规定了各种 transaction;
- 在网络层(network)规定了packet;
- 在链路层(link)放了具体的信号。
在协议层,通信是基于transaction;在网络层,基于packet;链路层,基于flit。
- 一个 Transaction 就是一个单独的操作,比如读或写内存。
- Message 是协议层术语,用于定义两个组件之间交换信息的粒度,如Request/Data response/Snoop request,一个数据响应message可能由多个packets组成。
- Packet 是互连端点间的传输粒度,一个message可能由一个或多个packets组成,每个packet包含有源 和目的 节点的ID来保证在interconnect上独立路由。
- Flit 是最小流控单位,一个 packet 可以由一个或多个 flits 组成,对于同一个packet的所有 flits 在互连(ICN)上传输必须遵循同样的路径;
- Phit 是物理层传输单位,一个flit可以由一个或多个phits组成,phit定义为两相邻网络设备之间的一个传输。
Topology
CHI 协议并不局限具体的拓扑互连。目前常用的SoC互连是下图中的方式:
- 交叉开关(Crossbar),这种结构相对简单,互连部分延时小,多用于数量不多的组件互连,缺点是如果互连组件太多,这种结构的内部走线会非常多,不利于物理实现,比较常见的 crossbar 类型 IP 如 ARM公司的 NIC-400;
- 环形网络(Ring),折中考虑了互连组件数量和延时,有利于中等规模的SoC设计,比较常见的 ring 类型 IP 如ARM公司的 CCN;
- 二维网格(Mesh),这种拓朴结构可以提供更大的带宽,而且是可以模块化,通过增加网格的行或列来增加更多的节点,ARM的CMN-600就是基于mesh的互连IP。
Node Type
CHI 协议通过节点类型对系统中的不同组件进行分类,并提供了节点之间通信的方法。
主要有三种类型的节点:
- 请求节点(RN);
- 基节点(HN);
- 从节点(SN);
- 还有杂项节点(MN)。
RN (Request Node)产生协议 transaction 给互连,如读和写请求,这些事务发送到 Home Node。
HN (Home Node)用于接收来自 RN 的协议 transaction,负责对请求进行排序,向 Slave Node 生成 transaction,并可以发出监听或处理DVM操作完成相应的一致性操作并返回一个响应。
SN (Slave Node)用于接收来自HN的请求,完成相应的操作并返回一个响应。
MN (Misc/Miscellaneous Node)用于接收来自 RN 的 DVM 操作,完成相应的操作并返回一个响应。
再对 Note Type 做一下细分:
- RN-F (Fully coherent Request Node,全一致性请求节点):包含硬件一致性cache;允许产生所有协议定义的 transactions,支持所有的 snoop transactions。
- RN-D (IO coherent Request Node with DVMsupport,支持DVM的IO一致性请求节点):不包含硬件一致性cache,可以接收DVM操作;可以产生协议定义的部分transactions。
- RN-I (IO coherent Request Node,IO一致性请求节点):不包含硬件一致性cache;不能接受 DVM 操作;可以产生协议定义的部分transactions;不要求具有snoop功能。
- HN-F (Fully coherent Home Node,全一致性主节点):用于接收除了DVM操作所有的请求操作:包括一个PoC(Point of Coherence)点,通过监听 RN-Fs,管理各Master一致性,完成所有的 snoop响应后,发送一个响应给发出请求的 RN;最好是一个PoS(Point ofSerialization)点,用于管理多个 memory 请求的顺序。可能包含目录或监听过滤,以此来减少冗余的 snoop 请求。
- HN-I (Non-coherent Home Node,非一致性主节点):处理有限的一部分协议定义的Request:不包含PoC点,也不具备处理snoop请求;最好是一个PoS点,管理访问IO 子系统的请求顺序。
- MN (Miscellaneous Node):用于接收来自RN发送的DVM操作,完成相应的操作,并返回一个响应。
- SN-F:用于 normal memory 的从节点,可以处理 Non-snoop 读写请求、atomic 请求、以及这些命令的其它形式、CMO(Cache Maintenance Operation)请求。
- SN-I:用于 peripheral 或 normal memory 的从节点,可以处理Non-snoop读写、atomic操作、以及这些命令的其它形式、CMO请求。
Transaction 分类
先来看看协议层的transaction,可以分为以下几类( CHI.D):
Read | Dateless | Write |
---|---|---|
* ReadNoSnp * ReadNoSnpSep * ReadOnce * ReadOnceCleanInvalid * ReadOnceMakeInvalid * ReadClean * ReadNotSharedDirty * ReadShared * ReadUnique | * CleanUnique * MakeUnique * Evict * StashOnceUnique * StashOnceShared * CleanShared * CleanSharedPersist * CleanSharedPersistSep * CleanInvalid * MakeInvalid | * WriteNoSnpPtl, WriteNoSnpFull * WriteUniquePtl, WriteUniqueFull * WriteUniquePtlStash, WriteUniqueFullStash * WriteBackPtl, WriteBackFull * WriteCleanFull * WriteEvictFull |
Atomic | Snoop | Other |
---|---|---|
* AtomicStore * AtomicLoad * AtomicSwap * AtomicCompare | * SnpOnceFwd * SnpOnce * SnpStashUnique * SnpStashShared * SnpCleanFwd * SnpClean * SnpNotSharedDirtyFwd * SnpNotSharedDirty * SnpSharedFwd * SnpShared * SnpUniqueFwd * SnpUnique * SnpUniqueStash * SnpCleanShared * SnpCleanInvalid * SnpMakeInvalid * SnpMakeInvalidStash * SnpDVMOp | * DVMOp * PrefetchTgt * PCrdReturn |
Transaction 路由
- 一个RN 会产生 transaction(read,write,maintenance)给 HN;
- HN 接收,并对 RN 发来的请求进行排序,产生 transaction 给 SN;
- SN 接收这些请求,返回数据或者响应。
Transaction如何在系统中的节点间路由呢?
- 首先,系统中的每个节点必须有一个节点号(Node ID)。
- 系统中的每个 RN 和 HN 内部要有一个系统地址映射(System Address Map,以后简称SAM),负责把地址转换成目标节点的ID。
RN 的 SAM 负责把物理地址转换成 HN 的 ID;而 HN 的 SAM 需要把物理地址转换成 SN 的 ID。
SAM 介绍
系统中的每个组件都被分配一个唯一的节点ID。CHI使用系统地址映射(SAM)将物理地址转换为目标节点ID。
为了能够确定发出请求的目标节点ID,每个RN和HN都必须具有SAM。
以下图示展示了RN SAM将物理地址映射到HN节点ID,以及HN SAM将物理地址映射到SN节点ID:
在这个图示中,事件的顺序如下:
- 地址为
0x8000_0000
的事务通过节点0
中的 RN SAM; - RN SAM确定目标为节点 5;
- 事务路由到节点 5 的HN;
- HN接收到事务;
- HN通过其HN SAM传递地址,并确定目标为节点2;
- 事务被路由到节点 2 的 SN。
RN SAM 必须满足以下要求:
- 它必须完全描述整个系统地址空间;
- 任何不对应于物理组件的物理地址必须映射到一个可以提供适当错误响应的节点;
- 所有 RN 必须对 RN SAM有一致的视图。例如,无论是哪个RN发出的,地址
0xFF00_0000
必须始终指向同一个HN。
注:SAM的确切格式和结构完全由实现定义。CHI规范没有提供关于如何将地址映射到节点ID的指导。
再看一个简单例子:
RN0
根据内部的 SAM 知道要把请求发给HN0
(TgtID
是HN0
,SrcID
是RN0
);HN0
在通过内部的SAM知道要继续发给SN0
(ReturnNID
是RN0
);SN0
接收请求,返回数据(HomeNID
是HN0
,TgtID
从HN0
的ReturnNID
而来);RN0
接收到SN0
的数据响应,返回CompAck
给HN
以结束此次transaction(TgtID
是HN0
,从HomeNID
而来)。
remapping of the TgtID
只有TgID做了一次remap,从Home Node0 remap 到了Home Node1, 其它的都和上面传输一样。
Flow with interconnect-based SAM and Retry request :
Node ID
SAM 必须可以对系统的全部地址空间进行解码。CHI 协议建议:对于没有相应物理组件的地址访问,都发送给一个agent,该agent可以对这些无用地址的访问提供恰当的error响应。
SAM 的结构和格式是由具体实现决定的,在CHI协议中并没有规定 SAM 实现方式。每一个连接到 ICN 端口的组件都会被分配一个node ID,用于标识 ICN上packets 路由的源节点和目的节点。一个端口可以有多个 node ID,但是一个node ID只能分配给一个端口,通俗点讲就是这个ID必须是唯一的,路由的时候不能有歧义。CHI协议支持的 NodeID字段宽度在7~11bits之间,由具体实现决定,且一个系统中所有组件的NodeID字段宽度必须一样,至于每个组件的 NodeID 值也是由具体实现决定的。
节点间数据怎么传输的呢?
与ACE相比,CHI使用不同的通道:
- 请求(REQ):发送读和写请求、缓存维护请求和DVM请求;
- 响应(RSP):发送各种类型消息的完成响应,范围从写和缓存管理响应到无数据监听响应和操作完成确认;
- 监听(SNP):发出监听或发送DVM操作数据传输消息和标记为DAT的,发送写和读数据,以及带数据的监听响应。
下图显示了 RN-F上CHI 请求者接口上的通道:
注:以TX字母为前缀的通道用于发送消息,以 RX 字母为前缀的通道用于接收消息。
当 RN-F 发出读请求时,它在其 TXREQ 通道上发送请求;
当读数据返回时,RN-F 在其 RXDAT 通道上接收数据。
每个节点上的 TX 信号连接到目标节点上的 RX 信号。
RN-F Interface :
RN-D Interface :
RN-I Interface :
SN-F Interface :
在 SNP 通道上发生以下约束:
- 只有HN-F和 MN 在SNP通道上发出消息;
- RN-F 仅在SNP通道上接受监听;
- MN 仅在SNP通道上接受DVM消息监听。