1. AXCACHE属性介绍
AWCACHE和ARCACHE信号统称为AXCACHE,用来表示请求的内存属性,可以控制请求在SoC系统里的传输、控制cache和buffer对请求的处理等。
AWCACHE[3:0]信号的编码如下:allocate、other allocate、modifiable、bufferable。
ARCACHE[3:0]信号的编码如下:other allocate、allocate、modifiable、bufferable。
1. AXCACHE[0],Bufferable属性:
该bit表示请求可以被暂时缓冲在某个中间组件(如SoC系统中的Home Node节点)中。
该bit主要用于写事务:
当bufferable bit为0时,写响应表示数据达到最终目的地(例如DDR)。
当bufferable bit为1时,写响应可以从中间节点(例如Home Node)就返回,只要满足observe就可以。这样可以极大提高写性能。
2. AXCACHE[1],Modifiable属性:
AXI4/ACE的AXCACHE[1]和AXI3的AXCACHE[1]的名字不一样。前者叫Modifiable,后者叫Cacheable,但是两者对应的功能是一样的。
当modifiable bit等于0时,表示该事务是不可修改的(non-modifiable)。axaddr、axsize、axlen、axburst、axprot、axnse参数一般不允许改变。
当modifiable bit等于1时,表示该事务的某些特性可以改变,具体如下:
1. 一个事务可以被拆分为多个事务;
2. 多个事务可以被合并为一个事务;
3. 读事务可以获取比需求更多的数据;
4. 写事务可以访问比需求地址范围更大的区域,可以使用WSTRB信号防止更新不相关的数据。
5. axaddr、axsize、axlen、axburst、axcache属性可以改变。
3. AXCACHE[3:2],allocate和other allocate属性:
Allocate bit为1表示先前的数据可能已经缓存到cache里,需要在cache中查找对应cacheline。推荐将数据分配到cache里,以供将来使用。
Other Allocate bit为1表示先前的数据可能已经缓存到cache里,需要在cache中查找对应cacheline。不推荐将数据分配到cache里,因为不期望再次访问该数据。
如果Allocate和Other Allocate都为0,不需要在cache中查找对应cacheline。
Memory type:AWCACHE和ARCACHE对应的内存类型如下:
2. AXDOMAIN属性介绍
在包含cache的系统中,必须采取措施来保证cache一致性。在AMBA协议中,有以下三种方法来维护cache coherency:
使用Non-cacheable事务。
使用CMO操作的软件coherency。
使用snoop和自动维护cache的机制的硬件coherency。
为了表示数据的shareable属性,ACE协议定义了三种domain:System、Shareable和Non-shareable。
1. System domain
System domain里的地址必须对所有能访问它们的manager可见。这是通过以下机制来保证的:确保System domain的请求是non-cacheable的,因此不会存到local cache里。使用System domain会使coherence变简单,但一般不会有很高的性能。
访问device类型的内存需要使用System domain。
2. Non-shareable domain
Non-shareable domain里的地址不需要对其它manager可见。访问Non-shareable domain的地址不需要触发硬件coherence机制。
如果Non-shareable数据在Manager之间共享的话,那么必须在数据被读之前,发送cache维护操作(CMO)来clean和invalidate来自任何local cache的数据。
使用CMO操作来进行数据共享也叫作软件coherency,并且是一种有效的方法(如果共享行为是已知的)。例如,有可预测的数据会先被一个master写,再被另一个master读。这种方法的主要缺点是依赖软件的正确性,软件容易产生coherency bug且不易定位。
为了避免coherency丢失的问题,缓存Non-shareable的cacheline时有以下规则:
不允许对clean的Non-shareable数据进行evict和write-back。这样可以避免clean数据将下游cache中有其他manager写入的dirty数据给覆盖掉。
在从一个cache到另一个cache读Non-shareable数据时,不允许传递dirty数据。cacheline必须以clean状态传递,并且cacheline的writeback由下游cache负责。这样可以避免接下来对该cacheline的write-back覆盖后续其他manager的更新。
3. Shareable domain
Shareable domain里的地址必须对将这些地址标记为Shareable的master可见。shareable属性的地址必须snoop local cache并且在cache里查找可能来自其他manager的Shareable数据。
AXI组件需要支持Shareable Domain有两个原因:使能IO coherency和支持Shareable cacheline在上下游cache之间的移动。
Shareable domain的请求可以使用INCR和 WRAP的burst类型,不能使用FIXED。
axdomain信号的定义如下,在AMBA5协议中,不再区分inner shareable和outer shareable,统一为shareable。
Domain consistency:一个地址可以被一个master标记为shareable且被另一个master标记为Non-shareable。为了避免coherency丢失,作为Non-shareable来缓存的数据必须先进行CMO操作来保证可见,然后才能被将其标记为Shareable的master访问。
axcache和axdomain的合法组合如下表,device属性必须使用system domain,normal non-cacheable属性三种domain都可以使用,cacheable属性可以使用shareable和non-shareable domain。
参考:
AMBA AXI/ACE Protocol Specification
https://zhuanlan.zhihu.com/p/26258598959?share_code=13AenGsF9Lx9j&utm_psn=2036774311961342844
254