ARM memory属性的理解
参考文献
ARM各种Memory类型理解 - 知乎
Cache知识整理-Read-Allocate/Write-Allocate_IC小牛牛的博客-CSDN博客_write allocate
Write-back,Write-through及write allocate_wenxiaohua_supper的博客-CSDN博客
CHI到底是干嘛的 保证cache一致性 2.3 snoop_数字芯片设计与验证--关易寿的博客-CSDN博客_cache一致性的 chi协议
CHI中对属性的描述
memattr和snpattr,在CHI的协议层通道域段中,是有单独表述的。
MemAttr
根据链接,可以看到memattr(memory attributes),涵盖的是EWA(early write acknowledgement),Device,cacheable和allocate这几个属性的信息。
EWA
EWA主要是针对写事务响应的来源进行了指示,
这部分内容主要与保序机制相关。
写事务完成与否,是需要给出反馈的,
这里的early,涵盖的意思就是写完成响应能不能提前返回。
什么叫提前返回呢,这里涉及到CHI总线的结构,
当某个请求节点发出写事务,会经过中间节点,然后再发给实际进行写的节点,比如一个ddr memory。
那么,如果写完成响应,是在写数据实实在在的到达了ddr memory以后才发出,这就属于标准的完成响应。
如果,在写事务从中间节点发出了, 不管有没有真的写到ddr memory,都算写事务完成了,然后中间节点直接返回了一个写完成响应,那么这就叫做提前返回。
EWA指示的就是,本次事务能不能提前返回写完成响应。
Device
device属性是和normal memory相对应的概念。
Device,就是设备。表面这段memory空间是一个设备在使用的。
这里简单理解就是,它不是一个单纯的存数据的memory空间。
很多Device memory空间,里面放的是对这个设备进行控制的信息,比如是否使能这个设备。
所以对于这种Device属性,会有很多特殊的要求,比如保序要求会更高。
normal memory就是我们普通概念的内存,如DDR。
Cacheable
顾名思义,就是可缓存性。
如果一个事务访问的memory空间是可缓存的,这代表该段内存的数据在cache中也有,
本次事务可以先去看看cache里面数据是否有效,如果能直接从cache中把数据读走,那就最好了。因此访问cache的速度是远快于访问内存的。
Allocate
关于allocate,需要展开说说Read-Allocate/Write-Allocate
它指示的是在访问cache以后发生的行为。
假定现在进行读事务,访问cache miss了,
如果是Read through,即直接从内存中读取数据;
如果是Read allocate,则需要先把数据读取到Cache中,再从Cache中读数据。
如果是写事务,则不太一样,需要分为hit和miss的情况,
hit的时候看的是Write through还是Write back。
miss的时候看是否Write allocate。
假定现在进行写事务,访问cache hit了,
如果是Write through,就把数据同时写到Cache和内存中;
如果是Write back,则先只把数据写到Cache中,等到释放这个cache的时候,才把修改后的内容刷新到内存中。
写事务访问cache miss了,
如果是Write allocate,就先把要写的数据载入到Cache中,等到释放这个cache的时候,才把修改后的内容刷新到内存中。
一般,Write Allocate与Write Back一起使用,No Write Allocate与Write Through一起使用。
SnpAttr
这个属性域段就比较简单,与snoop行为相关
这个东西倒是在CHI中才有,CHI协议全称是Coherent Hub Interface。
重点就在这个coherent一致性上,该协议用来确保Cache的一致性。
而Snoop就是CHI实现一致性维护的机制,这里就不展开说明了。
这个域段就是用来描述本次事务是否会进行snoop。
汇总
这个表中还讲了下order,这里的保序是CHI中使用的,就不进一步展开了。
看这个表,前面的多种属性描述,最终会汇总为一个Memory type属性。
AXI相关属性描述
AxCACHE
在AXI总线协议中,主要是在AxCACHE这个域段中对事务的memory属性进行了定义。
这边会简单一点,因为没有一致性维护的工作。保序机制也不是通过这个属性域段实现的。
可以看到,这边最后也是汇总描述为memory type,
可以对比看一下上面那个表,它是非常接近的,
所以说,ARM整个架构中,对于memory属性的描述是有一套非常丰富的机制的,
如果要将各种协议融汇贯通使用起来,对memory 属性的深入理解应该是必不可少的。
ARM架构手册相关描述
关于memory属性最全面的描述,那当然还是在ARM架构手册中
在B2.7这一个章节中,对所有的memory 属性表述都进行了说明
内容实在是太多了,本文讲不完,以后再针对性的进行学习。