在前面介绍了一些基本概念,接下来具体看看。我们再来回顾一下CHI的分层,协议层(protocol)、网络层(network)和链路层(link)。在协议层,通信是基于transaction;在网络层,基于packet;链路层,基于flit。
先来看看协议层的transaction,可以分为以下几类(CHI.D):
Read
- ReadNoSnp, ReadNoSnpSep
- ReadOnce
- ReadOnceCleanInvalid
- ReadOnceMakeInvalid
- ReadClean
- ReadNotSharedDirty
- ReadShared
- ReadUnique
Dataless
- CleanUnique
- MakeUnique
- Evict
- StashOnceUnique
- StashOnceShared
- CleanShared
- CleanSharedPersist
- CleanSharedPersistSep
- CleanInvalid
- MakeInvalid
Write
- WriteNoSnpPtl, WriteNoSnpFull
- WriteUniquePtl, WriteUniqueFull
- WriteUniquePtlStash, WriteUniqueFullStash
- WriteBackPtl, WriteBackFull
- WriteCleanFull
- WriteEvictFull
Atomic
- AtomicStore
- AtomicLoad
- AtomicSwap
- AtomicCompare
Snoop
- SnpOnceFwd
- SnpOnce
- SnpStashUnique
- SnpStashShared
- SnpCleanFwd
- SnpClean
- SnpNotSharedDirtyFwd
- SnpNotSharedDirty
- SnpSharedFwd
- SnpShared
- SnpUniqueFwd
- SnpUnique
- SnpUniqueStash
- SnpCleanShared
- SnpCleanInvalid
- SnpMakeInvalid
- SnpMakeInvalidStash
- SnpDVMOp
Other
- DVMOp
- PrefetchTgt
- PCrdReturn
看着挺多的,我们现在不需要全都记住,只记住分为几大类就好了。等到讲CHI一致性协议时还会提及。
现在我们知道了,一个RN会产生transaction(read,write,maintenance)给HN;HN接收,并对RN发来的请求进行排序,产生transaction给SN;SN接收这些请求,返回数据或者响应。
问题来了,transaction如何在系统中的节点间路由呢?首先,CHI协议规定,系统中的每个节点必须有一个节点号(Node ID)。系统中的每个RN和HN内部要有一个系统地址映射(System Address Map,以后简称SAM),负责把地址转换成目标节点的ID。也就是说,RN的SAM负责把物理地址转换成HN的ID;而HN的SAM需要把物理地址转换成SN的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而来)。
如果考虑到remap和retry,会复杂一点,感兴趣的去看spec的3.4章节(我只分析简单的情况,哈哈)。
SAM必须可以对系统的全部地址空间进行解码。CHI协议建议,对于没有相应物理组件的地址访问,都发送给一个agent,该agent可以对这些无用地址的访问提供恰当的error响应。SAM的结构和格式是由具体实现决定的,在CHI协议中并没有规定SAM实现方式。每一个连接到ICN端口的组件都会被分配一个node ID,用于标识ICN上packets路由的源节点和目的节点。一个端口可以有多个node ID,但是一个node ID只能分配给一个端口,通俗点讲就是这个ID必须是唯一的,路由的时候不能有歧义。CHI协议支持的NodeID字段宽度在7~11bits之间,由具体实现决定,且一个系统中所有组件的NodeID字段宽度必须一样,至于每个组件的NodeID值也是由具体实现决定的。
解决了节点间路由的问题,那么节点间是怎么传输的呢?我们知道在AXI和ACE协议中,处理器和ICN,或者ICN与从设备之间的数据传输是通过通道(channel)完成的,同样在CHI中也有通道的概念。
CHI的通道,有收/发两个方向,在发送方向上,有三个通道分别是REQ,WDAT和SRSP;在接收方向上也是三个通道,分别是CRSP,RDAT和SNP。对于SN来说,因为不需要支持snoop操作,所以减少了SRSP和SNP。
- REQ通道上:read/write command,cache maintenance,DVM request
- SNP通道上:snoop command,DVM operation
- DAT通道上:read/write data,snoop response,read response
- RSP通道上:write/maintenance/completion response,dataless snoop response …
现在,transaction通信的基本问题已经解决,下周我们再来看其它的问题吧。
作者:老秦谈芯
来源:https://mp.weixin.qq.com/s/TZ703LSLhqEOsKSzURzevA
微信公众号:
相关文章推荐
更多IC设计技术干货请关注IC设计技术专栏。