hi, experts:
咨询一个flush L2 DCache by MVA问题:
对于Cortex-A7,它的Cache Line = 64 bytes.
那么,通过by MVA方式clean cache,它的最小单位就是Cache Line吗?
例如:
一个Cache Line有64 bytes,而只有1个byte被更改过,变为dirty了。
那么flush的时候,是整条cache line都被flush出去吗?
best wishes,
是的,
使用MVA的cache 操作的单位是cache line, 例如DCIMVAC, 目前都是64B
1个byte改变整个cacheline都是dirty的,flush时需要对整个cacheline操作。
hi, yongfeng:
感谢回复!
还有2个问题:
1. CA7的没一个cacheline,dirty bit只有一个bit位吗?
2. 对于一个给定的DRAM addr,如何得到它对应的way?
比如:
一个32bit DRAM addr:我们从此地址,可以得到它占用的set index / offset in a cache line.
好像无法得出它位于哪一个way.
还有一个问题:
对于Cortex-A7,一个32bit addr,哪些bits标示set index / 哪些bits标示Tag / 哪些bits标示offset?
hi,
1. CA7的每个cacheline都会有标示状态的位。CA7的cache支持多核间一致性协议,至少需要3个bit用于标示 MOESI 状态,MOESI协议可以参考AMBA spec.
2. 只能确定set,无法知道对应的way
3. 由于A7的 I/D cache 容量都是可以配置的,所以这里只以32KB Dcache 为例,其他情况你可以自己算出来:
D cache为4-way,
32K = 4 * Nsets * 64 => Nsets = 128
所以从高到低位依次为:
19bit(tag) | 7bit(set) | 6bit(offset)
Got it!
Thanks a lot!