【ARM】CCI500_execution_tb

目的:工作记录一下对CCI500 local验证case的波形理解,梳理一下ACE接口的逻辑流程。

CCI简单描述功能:基于目录的做缓存一致性功能的模块,支持4个ACE、6个ACE_LITE(ACE和ACE_LITE加起来不超过7个)、4个memory port、2个system port。内部的Transaction tracker(TT)用来解决coherency和ordering的工作,TT使用snoop filter来决定snoop request应该往哪里发送。Snoop Filter 用来记录来自Master的transaction,判断是否hit或Miss,如果hit表明其他的core中有相应的data,需要将这个request发往这个core,如果miss,则直接往主存发request。AW,AR通道经过tt模块,W、R、B经过crossbar结构的互联结构。

参考MPSOC的结构

Cache一致性互连
Cache一致性互连(CCI)将部分的interconnect和coherence功能合并成一个块。它提供了以下接口:
(1)2个ACE从端口(用于完全一致性,上图的S3/S4)
(2)3个ACE-lite从端口(用于I/O一致性,上图的S0/S1/S2)
(3)2个ACE-lite主端口(用于DDR,上图的M1/M2)
(4)1个ACE-lite主端口(用于非DDR内存映射访问,上图的M0)。
(5)1个分布式虚拟内存消息接口(用于系统内存管理单元SMMU,上图的DVM)
互连框图里显示了CCI端口连接,CCI寄存器是全局映射的,可以从LPD访问。

Full Coherency
完全(双向)一致的主口可以监测彼此的缓存,为了在APU和PL之间共享更细粒度的数据,系统可以在PL中实现缓存,然后让APU监测PL缓存,同时PL也可以窥探APU的缓存。

I/O Coherency
I/O(单向)一致的主口可以通过CCI ACE-Lite从口监测APU缓存,当APU数据正在和I/O主口共享时,当APU缓存刷新时,可以避免实现额外的软件需求来实现一致性。
所有的PS主口,包括RPU(不包括全功率DMA控制器、DisplayPort和S_AXI_HP{0:3}_FPD PS主口),都可以选择配置为I/O一致性。
PS中有两个DMA,一个位于LPD中,另一个位于FPD中。FPD DMA没有到CCI的物理通路,不支持I/O一致性。LPD DMA有一个通过CCI到DDR控制器的替代路径,这允许它被标记为I/O一致性。

ACP Coherency
PL的主口一样可以通过APU的ACP端口去监测APU缓存,ACP访问还能被用于分配L2缓存。

一、write_back_test

        当受snoop的master传输了dirty data给CCI的时候,CCI执行WriteBack 操作。

        流程:

  1. 使用来自ACE主控的ReadShared事务预加载snoop filter。
  2. 配置ACE主控,使其始终以干净数据响应。
  3. 发送不同可共享类型的读写操作,并期望没有CCI生成的写回。
  4. 配置ACE主控,使其始终以脏数据响应。
  5. 再次为不同的可共享类型发送读写操作。检查CCI生成的写是否被发送,以响应ReadOnce(一次读取)、ReadClean(干净读取)、CleanInvalid(无效干净)、CleanShared(干净共享)和WriteUnique(唯一写入)触发的事务。

没法传波形简单记录一下传输的情况:

由上面流程的1、2、3可以知道snooped ACE master一直响应clean data,所以CCI不需要创建transaction去更新主存的数据。当由于4的发送,snooped ACE master会响应dirty data数据,根据ACE协议,当snooped ACE master的cache line状态是Dirty时,需要进行data transfer。

针对进行了write back的transaction操作进行协议确认:

1)当进行ReadOnce snoop transaction的时候,协议推荐传输clean态的data,虽然也支持传输dirty态的,此时需要interconnect将data writeback 到主存中。此刻cci完成write back操作。snooped master cacheline状态转变成sharedclean或者invalid。

2)针对ReadClean snoop transaction时,当写回主存的责任转移到interconnect上时,及PassDirty时,互联及CCI需要立即将data写入到主存中,且建议snooped master中的cacheline仍然保持dirty状态。 换句话说发送ReadClean transaction的master没有能力去接收dirty状态的cacheline,或者是使用了Write-through的cache。

3)针对ReadShared时没有发生writeback,根据协议描述和波形的状态可以分析出将data写回到主存的责任会从snooped master转移到initial master身上,主要由哪一个来承担这个责任是由谁是下一个访问这个cacheline的master来决定。所以cci不负责writeback或者说不会立即writeback到主存中。

4)研究协议后interconnect会根据passdirty的状态将数据写入到主存中,原文如下,解决了我对于为什么CRESP有passdirty但是传给initial master的RRESP没有passdirty的疑惑。有一类的传输是不允许assert RRESP PassDirty的。

对于CleanShared的transaction,保证拥有main memory同样localtion的copy数据都是clean的状态,换言之它会将其他master中的dirty data写回到主存中来更新主存的数据,所以它是允许有copy在snooped master中的。而且在CleanShared传输完成之前initial master是允许对cacheline进行写操作的,所以CleanShared完成之后cacheline的状态是有可能变成Dirty态的。

那为什么CleanUnique、CleanInvalid在这个case中没有做写回操作而CleanShared做了写回操作呢?

因为1、2、3步骤中针对所有的transaction已经进行了一次操作,对于CleanUnique来说一般是在进行full cacheline store操作的时候进行的transaction,①如果master本身是unique的直接进行store操作,②如果master中cache的状态不是unique的,且snooped master中有dirty的data会确保dirty的data写回到主存中,然后保证initial master中的cache处于unique态。对于CleanInvalid来说已经确保主存中的数据是最新的且没有这个location的copy存在于master的cache中,综上第二次传输的时候这2个类型的传输是无法hit的。而CleanShared操作之后master中依然可以保持cacheline的copy存在。 

说点人话就是CleanUnique不让别人存自己要存。CleanInvalid就是大家都别存了发送指令的master自费武功自己的也要invalid掉,有dirty状态的要写回保证主存里面是最新的。CleanShare是普天同庆,大家都保持于主存中的一致,都是clean状态的。

仿真case中还有个现象记录一下,原因同上哈,举例:对于ReadUnique的transaction,在第一次传输的时候在snoopfiliter中是hit的状态,但是第二次的时候因为snooped master中的状态已经被清掉了,所以不会再发snoop transaction到snooped master了,直接从主存中取值。

二、coherent writes,cci_coherent_write

这个测试展示了一致性写事务,即WriteUnique和WriteLineUnique,正确地在系统周围传递。它还检查了当电源状态改变时,窥探过滤器是否正确初始化。

测试步骤:

  1. 使用来自ACE主设备的ReadShared事务预加载窥探过滤器。
  2. 通过转换到静态窥探过滤器RAM保留电源状态,然后再回到开启状态,来测试P-Channel。 预期RAM内容被保留。
  3. 配置ACE主设备始终将数据标记为脏(dirty)。 ACE-Lite主设备发出WriteUnique和WriteLineUnique事务。预期CCI-500生成WriteBacks。通过读取回写入的值来检查数据完整性。预期WriteBack和WriteUnique事务的数据是合并的。
  4. 配置ACE主设备始终将数据标记为干净(clean)。 ACE-Lite主设备向新的地址区域发出WriteUnique和WriteLineUnique事务。
  5. 检查是否没有生成WriteBack事务。

由协议得知,WriteUnique的awsnoop为000,WriteLineUnique的awsnoop为001,贴上一段协议中对这2个transactions的讲解如下:

由协议我们知道WriteUnique和WriteLineUnique大部分由non-shareable 的master或者说没有cache的master想要对shareable memory进行写操作发起的,所以我们可以这样来记忆,由于是从另外一个域来访问的,那么当前shareable域的整体状态就需要更新,否则可能造成原本shareable域中dirty的信息都没来得及写入到主存中就被non-shareable的master写入新的数据了,所以WriteUnique和WriteLineUnique需要将dirty的data更新到主存,它们之间的主要不同是一个可以写partial cacheline或full cacheline,另一个只能对full cacheline做写操作。所以WriteUnique对应的to Snooped master的传输就是CleanInvalid需要将Dirty的数据写回将cacheline内的data移出,而WriteLineUnique对应的to Snooped master的传输就是MakeInvalid将cacheline内的data移出不需要将Dirty的数据写回。

这里贴一段协议中描述的使用两个transaction时的限制。

这段限制的描述表达的意思是在使用WriteUnique和WriteLineUnique之前进行的WriteBack、WriteClean、WriteEvict或Evict 传输都需要完成,且在WriteUnique和WriteLineUnique进行的期间不能使用WriteBack、WriteClean、WriteEvict或Evict来完成任何传入的snoop transactions。

分析波形这个case的波形就比较简单了因为类型比较少,首先是ReadShared将snooped master中载入一些值,然后由snooping master发送WriteUnique的transaction,转移到AC通道上snooped master会执行CleanInvalid将data从CDATA通道传出,CCI执行写回将snooped master的数据写入到主存中然后再将snooping master的partial cacheline写入到主存中,partial写通过WSTRB的有效位来实现。

三、地址映射访问,cci_addr_map

这个测试展示了每个主设备都能够访问每个可能的地址映射区域中的每个从设备。它还展示了配置寄存器是否在预期的地址上可访问。

测试步骤:

  1. 每个主设备从它能够访问的每个从设备上进行写入和读取。 读取的数据将检查其正确性。
  2. APB主设备对CCI-500寄存器进行写入和读取,以确认它们可以按照预期被写入和读取。

四、DVM activity,cci_dvm 这个测试展示了DVM消息能够正确地在系统周围传递。

测试步骤:

  1. 一个发起主设备向CCI-500发送DVM消息,随后发送一个DVM同步事务。
  2. CCI-500将这些消息广播给所有其他主设备,它们正确响应。
  3. 所有被窥探的主设备随后必须通过AR通道向CCI-500发送一个DVM完成事务。
  4. 然后CCI-500收集所有DVM完成事务,并通过AC通道向发起主设备发送一个DVM完成消息。
  5. 发起主设备通过CR通道响应以完成整个过程

五、Split read,cci_long_read

这个测试展示了跨多个缓存行的读取事务被分割成多个短读取事务。

测试步骤:

  1. 改变突发长度和地址偏移。
  2. 检查长突发是否如预期被分割成多个短突发。
  3. 测试ReadNoSnoop和ReadOnce两种情况。

CCI500有一个Burst splitting 功能,开启后shareable的传输需要按照64B的边界进行切割。

分享几篇别人写的缓存一致性的文章

MPSOC——详解ACP、HPC和HP接口_hpc接口-CSDN博客

https://www.cnblogs.com/gujiangtaoFuture/articles/11543133.html

  • 9
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值