打印

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

[复制链接]
5038|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
dq51|  楼主 | 2007-9-19 11:42 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我在使用6713时将cache设置为64k,同时将HPI接口的数据缓存区设置在SDRAM区,因为cache不对外部存储器执行一致性检查,这样在DSP这边在第一次cache命中后如果cache区没有被刷新就不在从外部读取数据了,这样在主机在SDRAM区写入数据后,实际DSP这端有可能检测不到外部数据改变了,同样DSP写数据后也有可能存入不到SDRAM区。
此时必须通过人工干预使cache中与SDRAM缓存相关的内容无效,采用CACHE_flush和CACHE_clean来维护cache与SDRAM的内容一致。同时由于L2和L1之间也存在不一致问题,同样需要维护,但是这样会造成系统性能下降。
内部RAM对于L1来说相当于cache,如果将HPI缓存放置在内部RAM中则没有外部存储器一致性问题,但是也存在L2与L1之间的不一致问题,也需要干预。
当然L2和L1不一致问题在程序比较大时几率比较小,几乎可以忽略。
以上是我的理解,不知是否正确请大家看一下,提提意见,谢谢!
另:新库中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的答复。
试验了一下,如果将HPI接口的缓存放置在内部RAM,则所有的操作均正确,如果将HPI的缓存放置在外部SDRAM中,如果不禁用cache,无论采用查询方式还是中断方式则读取数据和写数据会出错,明明HOST端修改了内容,就是读不到,不修改程序,仅仅禁用cache则数据正确。
HPI使用的是EDMA,ti资料spru609b中原话是这样的:
Notice that the hardware ensures that accesses by the CPU and EDMA to
internal SRAM addresses are coherent, but external addresses are  not.
Software must ensure external addresses accessed by the EDMA are not held in cache when the EDMA accesses them.
我现在遇到的问题是在打开cache,将HPI的缓存放置在外部SDRAM中时,即使采用CACHE_flush和CACHE_clean来维护cache与SDRAM的内容一致,读到的结果也不对,这应该是我哪里操作错了,现在正在检查中,希望很快能解决。
但是奇怪的是我使用CCS看内存的工具也看不到host端修改的数据变化,同样禁用cache后就可以看到了,可能仿真器也是从cache中读取数据的,现在也在查资料中。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

3

帖子

0

粉丝