从这周开始,来瞧一瞧AMBA大家庭里CHI这个协议。CHI的全称是Coherent Hub Interface。所以从名字就能看出,CHI要解决什么问题了。按照惯例,开始之前放一张AMBA的全家福。CHI协议是AMBA的第五代协议,可以说是ACE协议的进化版,将所有的信息传输采用包(packet)的形式来完成。但是从接口的角度看,CHI和ACE,AXI这些协议完全不一样了,所以对CHI的学习要换一种思路。接下来不会完全按照spec的顺序来分析CHI,想到哪就写到哪了。
ACE和CHI名字里面都带着coherent,具体有什么不一样吗?为什么要搞两套呢?别急,慢慢分析。
协议上来就是这么两句话:
除去自夸部分,首先我们能看出来,从CHI开始协议分层了,这是跟以往的总线协议不同的;为了更多组件互连,ARM想要定义一个统一的接口。现代的SoC功能越来越丰富,包含的组件越来越多,处理器,处理器簇、图形处理器、存储控制器、I/O桥、PCIe子系统和CHI互联线等。如何把这些有可能自主研发,也有可能来自不同厂商的模块更好的连接起来,组成一个高效的系统,已是当下SoC设计中的一个难题。
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级别时钟门控、根据组件的工作情况实施时钟门控或电源门控等低功耗手段
CHI协议的三层分为协议层,网络层和链接层,如下图所示:
CHI在协议层规定了各种transaction;在网络层规定了packet;对于具体的信号,放到了链路层,而且是在spec的最后几个章节。
CHI协议并不规定拓扑互连。目前常用的SoC互连是下图中的方式:交叉开关(crossbar),这种结构相对简单,互连部分延时小,多用于数量不多的组件互连,缺点是如果互连组件太多,这种结构的内部走线会非常多,不利于物理实现,比较常见的crossbar类型IP如ARM公司的NIC-400;环形网络,折中考虑了互连组件数量和延时,有利于中等规模的SoC设计,比较常见的ring类型IP如ARM公司的CCN;二维网格(mesh),这种拓朴结构可以提供更大的带宽,而且是可以模块化,通过增加网格的行或列来增加更多的节点,ARM的CMN-600就是基于mesh的互连IP。关于互连的学习,以后有时间会单独讨论。
图1 片上互连:crossbar(右下),环形(右上)和网格(左)
可能有的同学刚接触,对于这些术语不熟悉,所以先解释一下。一个Transaction就是一个单独的操作,比如读或写内存。Message是协议层术语,用于定义两个组件之间交换信息的粒度,如Request/Data response/Snoop request,一个数据响应message可能由多个packets组成。Packet是互连端点间的传输粒度,一个message可能由一个或多个packets组成,每个packet包含有源和目的节点的ID来保证在interconnect上独立路由。Flit是最小流控单位,一个packet可以由一个或多个flits组成,对于同一个packet的所有flits在互连(interconnect,简称ICN)上传输必须遵循同样的路径。Phit是物理层传输单位,一个flit可以由一个或多个phits组成,phit定义为两相邻网络设备之间的一个传输。
HN(Home Node)用于接收来自RN的协议transaction,完成相应的一致性操作并返回一个响应。RN(Request Node)产生协议transaction给互连,包含读和写。SN(Slave Node)用于接收来自HN的请求,完成相应的操作并返回一个响应。MN(Misc/Miscellaneous Node)用于接收来自RN的DVM操作,完成相应的操作并返回一个响应。细分一下,有如下的类型。
- 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(还记得ARM中的normal memory是啥不?)的从节点,可以处理Non-snoop读写请求、atomic请求、以及这些命令的其它形式、CMO(Cache Maintenance Operation)请求。
- SN-I:用于peripheral或normal memory的从节点,可以处理Non-snoop读写、atomic操作、以及这些命令的其它形式、CMO请求。
以上的几个术语是CHI协议中常见的。其它的术语如PoC,PoS,等用到的时候再解释。这样,在CHI协议中,一个典型的连接如下图:
作者:老秦谈芯
来源:https://mp.weixin.qq.com/s/FAluxBZac4V1TNyWETdOHQ
相关文章推荐
更多IC设计技术干货请关注IC设计技术专栏。