TI中文支持网
TI专业的中文技术问题搜集分享网站

c674x DSP一致性问题

Hello 您好,

C674x 开发算法,并进行优化。

数据从DDR3–>L2(SRAM,没有cache使能)–>DDR3.

所有的DDR3内存通过MARn cache使能。

数据从L2到DDR3的搬移都是通过EDMA3来实现。

当我将EDMA搬移变成memcpy()时,程序能得到正常的结果。

但是当用EDMA3进行数据搬移的时候,程序不能得到正常的运行结果。

因此,问题出现是与EDMA3,操作有关。

但是我单步跟踪EDMA3搬移程序,没有发现程序有问题。

因此我怀疑问题发生在由于EDMA3进行数据搬移时,cache的不一致性所致。

如何保持cache的一致性,在这样的数据流

DDR3(cached)–>L2(SRAM,没有cache使能)–>DDR3(cached).

是否能提供这方面的例子。

非常感谢!

BRS,
Meng

Tony Tang:

感觉上面描述的有些不完全。DDR3上的buffer是不是CPU访问过,是在什么时候访问的,还有DDR3上的buffer的数据源是从哪里来的?我觉得问题在这里。

cache一致性操作参考文档sprufk5a. MARn只是控制是否可被Cache,一致性维护要操作Cache的寄存器。

还有L2是都配置成RAM了吗?还是部分Cache?

Lingcon Meng:

回复 Tony Tang:

Hello Tony,

DDR3上的buffer是在EDMA之前,算法处理的中间结果。

L2 是部分是配置成SRAM,部分配置成了Cache。我用的部分是被配置成SRAM的,DDR3是被MARn 寄存器 cache使能。

是的,我知道cache的控制需要自己L1P,L1D,L2控制寄存器来完成,MARn 只是将相应的DDR3段,设置成是否被L2 cache。

如我下面代码段中,将DMA_transfer() 换成memcpy是没有任何问题的,DSP程序能正常工作,得到期望的结果,但是换成EDMA数据搬移,则不行。

EDMA_transfer(),单步跟踪代码是没有任何问题,数据能正常传输。但是全速运行,就会出现问题。

顺便问一下,L1p,L1D,L2 的cache操作,Cache_Inv(),Cache_Wb(),Cache_WbInv()操作对应的地址,是L1地址,L2地址 or DDR3的地址?

下面是code,自己也写了cache操作函数(应该不正确)。

 附件fft_cache_functions.c是我写的cache代码,及包含DDR3–>L2–>DDR3的代码,请帮检查。

非常感谢!

BRS,

Meng

Tony Tang:

回复 Lingcon Meng:

Lingcon Meng顺便问一下,L1p,L1D,L2 的cache操作,Cache_Inv(),Cache_Wb(),Cache_WbInv()操作对应的地址,是L1地址,L2地址 or DDR3的地址?

是DDR的地址,Cache是没有地址的,Cache只是记录Cache了什么外部地址。

从上面代码来看,是刚刚CPU对DDR3上的buffer tmpAddr0, tmpAddr1做了处理,就调用EDMA将之搬到L2,这时tmpAddr0/1的数据还在Cache里,所以搬到L2的数据有可能是没更新的,所以你的判断是正确的。

这里只需要在上面Cache操作处加上Cache writeback and invalid操作即可。

后面一个对L2的write back是什么意思?而且是在EDMA操作后调用的。

Lingcon Meng:

回复 Tony Tang:

Hello Tony,

非常感谢您的回复。

也就是说所有的cache操作都是基于DDR的地址的,与L1,L2的具体地址没有关系。

Tony:后面一个对L2的write back是什么意思?而且是在EDMA操作后调用的。

EDMA数据搬移,将L2 SRAM的内容回写到DDR3。按照您的意思,应该地址参数是DDR地址,而不是L2的地址?

那么我以前对cache_inv() 和 cache_wb()理解是有偏差的。

因此我自己写的cache_Inv() 和 cache_wb()函数,是分别对L1P,L1D,L2来操作的,是有问题的。

具体函数见附件。

如何正确实现cache_Inv() 和 cache_wb()函数功能,对数据的一致性,是通过L1D,L2

共同实现的吗,还是单独L1D,L2单独来实现?

我是在裸机下来实现算法处理的。没办法直接调用sysBios的cache_inv(),cache_wb,cache_wbInv().

非常感谢您给予的帮助。

BRS,Meng

Lingcon Meng:

回复 Tony Tang:

Hello Tony,

非常感谢您的解释。

根据您的解释及我最近的对文档阅读,也就是说,我们的应用情况(提供的例程):

DDR3(cache)–>L2(as SRAM,not cache) –> DDR3(cache),每一阶段数据传送都是EDMA3来完成。

在 DDR3(cache)–>L2(as SRAM,not cache) 数据搬移EDMA3之前,cache_invL2()  DDR3所涉及地址,就ok。

数据在L2处理完,然后EDMA3将数据从L2搬移到DDR3,之后无需任何cache操作(such as cache_wbL2()).

这样的理解正确吗?

再次感谢!

BRS,

Meng

Lingcon Meng:

回复 Tony Tang:

Hello Tony,

谢谢您的耐心解释!

BRS,

Meng

赞(0)
未经允许不得转载:TI中文支持网 » c674x DSP一致性问题
分享到: 更多 (0)