AMBA CHI协议学习笔记1-概述

【本系列文章是我自己对CHI协议的学习笔记,仅供参考,欢迎指正。】

【文中的红色字体是我自己的标注】

一、CHI是ACE的进化版。场景模型如下:

在这里插入图片描述

二、CHI的特性总结如下:

1、分三层,分别是事务,网络和链接层(其中,事务和链接层支持流控,分别用retry和credit;网络层负责路由

2、基于包传输,丰富的事务

3、homenode处理所有事务

4、支持mesi,moesi,支持snoop directory

5、支持retry机制

6、支持qos

7、支持低功耗

8、支持错误报告机制

9、支持trustzone

10、credit机制

11/12、支持rem,mte

三、拓扑结构

1)CROSSBAR,如ARM公司的NIC-400,适用于较少组件;.
2)RING,如ARM公司的CCN,适用于中等规模组件数量;
3)MESH,ARM的CMN-600,适用于较多组件。

四、组件节点

RN-F(Fully coherent Request Node,全一致性请求节点):包含硬件一致性cache;允许产生所有协议定义的transactions;支持所有的snoop transactions。只有HN-F可以发起DVM事务。
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请求。

此处的PoC是用于exclusive访问的;而PoS是用于ordering的,具体内容参见后面的章节


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 device或normal memory的从节点,可以处理Non-snoop读写、atomic操作、以及这些命令的其它形式、CMO请求。

五、事务分类(specification中有84种,这里省略了一些

Read(需要数据读回来给RN
•ReadNoSnp, ReadNoSnpSep (no allocate)
•ReadOnce (no allocate)
•ReadOnceCleanInvalid(no allocate)
•ReadOnceMakeInvalid(no allocate)
•ReadClean
•ReadNotSharedDirty
•ReadShared
•ReadUnique

Dataless (缓存一致性状态管理,不会和RN有数据往来
•CleanUnique
•MakeUnique
•Evict
•StashOnceUnique
•StashOnceShared
•CleanShared
•CleanSharedPersist
•CleanSharedPersistSep
•CleanInvalid
•MakeInvalid

Write(RN写数据出去
•WriteNoSnpPtl, WriteNoSnpFull (DWT,即直接写,目的地是HN或SN)
•WriteUniquePtl, WriteUniqueFull(DWT,即直接写,目的地是HN或SN)
•WriteUniquePtlStash, WriteUniqueFullStash(DWT+stash)
•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   (从主存预取cache line,不能retry)
•PCrdReturn  (返回credit,不能retry)

以下内容转自 SoC搭积木er 的文章:链接找不到了,详细的内容可看协议第四章。

Read:
ReadNoSnoop:CPU读访问非Snoopable地址空间,一般是Uncache访问或者访问空间仅被CPU独享。
ReadOnce:CPU只需要读一次数据,无需allocate到本地私有cache,ReadOnceXXX往往用于所有CPU都不再需要数据拷贝的场景。
ReadClean:CPU本地私有cache的写回策略是Write-Through,所以只支持Clean状态。
ReadNotSharedDirty:CPU本地私有cache状态机只支持MESI,所以不支持O态即SharedDirty。
ReadShared:CPU普通读访问Snoopable地址空间。
ReadUnique:CPU需要写非完整的cacheline,所以需要先获取最新数据和Unique权限,接着进行partial写并与最新数据merge。

Dataless:
CleanUnique:CPU需要写非完整的cacheline,需要获取Unique权限,并让其他CPU的最新数据先写回到下一级cache或主存,跟ReadUnique的区别在于,partial写的merge发生在下一级cache或主存,而非本地。
MakeUnique:CPU需要写完整的cacheline,先把其他CPU都直接Invalidate。
Evict:CPU知会HNF某一条cacheline已经被逐出了,本地已经没有了。
StashOnceUnique:知道某个CPU需要partial修改某条cacheline数据,当数据准备好时,RN(CPU或外设)用此请求通知某个CPU去读取最新数据并获取Unique权限。
StashOnceShared:知道某个CPU需要读取某条cacheline数据,当数据准备好时,RN(CPU或外设)用此请求通知某个CPU去读取最新数据。
CMO:
CleanShared(Persist):维护操作,要求所有CPU把dirty数据都写回主存,往往把system cache也写回。
CleanInvalid:维护操作,要求所有CPU把dirty数据写回主存并对cacheline置invalid,往往把system cache也invalid。
MakeInvalid:维护操作,要求所有CPU直接invalid本地cacheline,往往把systemcache也invalid。

Write:
WriteNoSnp(Ptl/Full):CPU写非snoopable地址空间,或HN(例如system cache)写数据到SN(主存)。
WriteUnique(Ptl/Full):当CPU的cacheline是invalid态时,直接写snoopable地址空间,把其他CPU的cacheline都invalid。
WriteUnique(Ptl/Full)Stash:当CPU的cacheline是invalid态时,直接写snoopable地址空间把某条cacheline数据更新,因为知道某个CPU需要该最新数据,所以同时通知该CPU来读这条cacheline。

CopyBack:
WriteBack(Ptl/Full):写回操作,无需snoop其他CPU,把dirty数据写回下一级cache或主存。
WriteCleanFull:写回操作,无需snoop其他CPU,把dirty数据写回下一级cache或主存,并把本地cacheline置clean。
WriteEvictFull:写回操作,无需snoop其他CPU,把本地UC数据写回下一级cache或主存,并把本地cacheline置invalid。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值