26

xucvai · 2021年07月26日

ARM系列 -- CHI(二)

在前面介绍了一些基本概念,接下来具体看看。我们再来回顾一下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。看下图的一个简单例子:

1.png

  • 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中也有通道的概念。

2.png

CHI的通道,有收/发两个方向,在发送方向上,有三个通道分别是REQ,WDAT和SRSP;在接收方向上也是三个通道,分别是CRSP,RDAT和SNP。对于SN来说,因为不需要支持snoop操作,所以减少了SRSP和SNP。

3.png

4.png

5.png

6.png

  • 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
微信公众号:
老秦谈芯.jpg

相关文章推荐

更多IC设计技术干货请关注IC设计技术专栏。
推荐阅读
关注数
7921
内容数
82
Arm AMBA协议集,APB,AHB,AXI,CHI等相关公开课回放及文章
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息