在应用时遇到cache一致性问题:
1,我定义的全局变量放在L2内存中,在程序运行时更新L2内存中数据,L1D cache中数据并未更新。TI资料说明L1D cache和L2 MEM的cache一致性是硬件维护的,但我测试时发现并没有。
2,下图是我在memory browser中观察到的数据,我勾选L1D cache选项发现L2中的数据在变化,以此判断数据是否一致,不知道这种方式对不对。
a:L2中的数据(红色数据)
b:勾选L1D cache选项时红色的数据在变化
Shine:
请问L1, L2 cache使能了么?
Ming LEO:
回复 Shine:
使能了,L1D_cache=32k,L2_cache=128k
Ryan BL:
是这样的,木有问题,这样的显示可用于分析cache覆盖等问题。
你能看到L2与L1中的数据不一致,实际上无论你使用CORE访问还是外设访问L2 SRAM中的值,都能正确访问到的。
这也是ti哥经常推荐的将高速数据放置于L2SRAM可以提高速度的同时免除cache一致性的维护。这个一致性会在真实的地址访问的时候由硬件做一致性维护;
除非你故意使用cache的freeze冻结了cache而后在LL2 SRAM里面对已cache的内容做了修改,才可能导致不一致的情况发生,这也是经常的验证SRAM的ECC特性是否正确开启的验证手段。
另外就是真的发生了SRAM的内存错误,ECC就会被触发,这期间的访问可能得到错误的数据,所以也建议开启EDC功能。
Ming LEO:
回复 Ryan BL:
非常感谢你的回复
Ryan BL:
回复 Ming LEO:
不客气。