【ARM Cache 及 MMU 系列文章 6.4 -- ARMv8v9 如何读取 Cache Tag 及分析其数据?】
Cache Tag 数据读取
在处理器中,缓存是一种快速存储资源,用于减少访问主内存时的延迟。缓存通过存储主内存中经常访问的数据来实现这一点。为了有效地管理这些数据,缓存被组织成行(lines)或块(blocks),每个行或块包含了一段连续的内存数据。每个缓存行都与一个缓存标签(cache tag)相关联,这个标签用于标识存储在缓存行中的数据属于内存的哪个位置。本文将介绍如何读取Cache Tag 中的数据。
读取命令 :
选择读取的路和组 :
读取tag数据并解析 :
测试代码
如下测试代码,读取了第0组,和共4路的tag:
void a520_cache_read(void)
{
*(uint64_t *)(0x99900000) = 0x5a5a5a5a;
for (int way = 0; way < 4; way++) {
uint64_t tag = a520_dcache_tag(0, way);
log_info("set %d, way %d, tag %lx\n", 0, way, tag);
}
}
tag 读取汇编代码实现:
/*
* set
* way
* /
func a520_dcache_tag
LSL w0, w0, #6
LSL w1, w1, #30
orr w0, w0, w1
sys #6, c15,c2,#0, x0
isb
mrs x0, S3_6_C15_C0_0
ret
endfunc a520_dcache_tag
测试结果 :

bit[27:0] 的值为 0x99900 正好对应上物理地址的 bit[39:12] 。


浙公网安备 33010602011771号