关于使用cache造成的一致性问题

[复制链接]
6112|2
 楼主| dq51 发表于 2007-9-19 11:42 | 显示全部楼层 |阅读模式
我在使用6713时将cache设置为64k,同时将HPI接口的数据缓存区设置在SDRAM区,因为cache不对外部存储器执行一致性检查,这样在DSP这边在第一次cache命中后如果cache区没有被刷新就不在从外部读取数据了,这样在主机在SDRAM区写入数据后,实际DSP这端有可能检测不到外部数据改变了,同样DSP写数据后也有可能存入不到SDRAM区。<br />此时必须通过人工干预使cache中与SDRAM缓存相关的内容无效,采用CACHE_flush和CACHE_clean来维护cache与SDRAM的内容一致。同时由于L2和L1之间也存在不一致问题,同样需要维护,但是这样会造成系统性能下降。<br />内部RAM对于L1来说相当于cache,如果将HPI缓存放置在内部RAM中则没有外部存储器一致性问题,但是也存在L2与L1之间的不一致问题,也需要干预。<br />当然L2和L1不一致问题在程序比较大时几率比较小,几乎可以忽略。<br />以上是我的理解,不知是否正确请大家看一下,提提意见,谢谢!<br />另:新库中CACHE_wbL2=CACHE_flush,CACHE_wbInvL2+CACHE_wbInvL1d=CACHE_clean?
wowow 发表于 2007-9-19 13:02 | 显示全部楼层

也许不需要人工干预

HPI接口传数据使用的是DMA,应该在更新数据后会通知cache。如果这都实现不了,DSP内部那么多DMA都会有相同的问题了。想办法做个测试再把结果报告一下吧。
 楼主| dq51 发表于 2007-9-19 18:26 | 显示全部楼层

谢谢wowow的答复

谢谢wowow的答复。<br />试验了一下,如果将HPI接口的缓存放置在内部RAM,则所有的操作均正确,如果将HPI的缓存放置在外部SDRAM中,如果不禁用cache,无论采用查询方式还是中断方式则读取数据和写数据会出错,明明HOST端修改了内容,就是读不到,不修改程序,仅仅禁用cache则数据正确。<br />HPI使用的是EDMA,ti资料spru609b中原话是这样的:<br />Notice&nbsp;that&nbsp;the&nbsp;hardware&nbsp;ensures&nbsp;that&nbsp;accesses&nbsp;by&nbsp;the&nbsp;CPU&nbsp;and&nbsp;EDMA&nbsp;to<br />internal&nbsp;SRAM&nbsp;addresses&nbsp;are&nbsp;coherent,&nbsp;but&nbsp;external&nbsp;addresses&nbsp;are&nbsp;&nbsp;not.<br />Software&nbsp;must&nbsp;ensure&nbsp;external&nbsp;addresses&nbsp;accessed&nbsp;by&nbsp;the&nbsp;EDMA&nbsp;are&nbsp;not&nbsp;held&nbsp;in&nbsp;cache&nbsp;when&nbsp;the&nbsp;EDMA&nbsp;accesses&nbsp;them.<br />我现在遇到的问题是在打开cache,将HPI的缓存放置在外部SDRAM中时,即使采用CACHE_flush和CACHE_clean来维护cache与SDRAM的内容一致,读到的结果也不对,这应该是我哪里操作错了,现在正在检查中,希望很快能解决。<br />但是奇怪的是我使用CCS看内存的工具也看不到host端修改的数据变化,同样禁用cache后就可以看到了,可能仿真器也是从cache中读取数据的,现在也在查资料中。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

3

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部