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

关于c6670的 cache coherence问题

我的C6670应用中需要由外部master通过srio DIO向多核共享存储器中写入512字节的数据(起始地址为0x0c1b1000),然后由core0进行读取。我的设置是:L1D CACHE为32kbytes,L2 CACHE为0k。为了达到cache coherence,我的步骤是:

1)程序中在外部master进行srio写入MSM之前,先通过CACHE_invL1d((void*)0x0c1b1000,512,CACHE_FENCE_WAIT)进行失效操作;

2)外部master通过srio写入MSM对应的地址中;

3)发送一个doorbell中断给core0;

4)core0通过memcpy((void*)buff, (void*)0x0c1b1000,512)将该段MSM存储器数据拷贝至L2 SRAM中的缓冲区buff内;

然后重复1)~4)的步骤。

但是现在出现的问题是:只有第一次拷贝出的数据是对的,后面几次进行memcpy()后,L2 SRAM缓冲区buff中的数据是错误的(前128byte为正确的数据、而后面384byte数据始终为外部master第一次srio写入的数据),经memory browser观察,是在拷贝时MSM的0x0c1b1000起始的地址范围对应的L1D CACHE内容不知为何突然变成“前128byte为正确的数据、而后面384byte数据为外部master第一次srio写入的数据”,但按道理我在外部srio写入之前已进行了invalid操作,而且写入之后通过memory browser观察0x0c1b1000对应的L1D CACHE也是正确的写入内容,但却在memcpy时会变化。

不知这是什么原因引起的?求高手解答!谢谢!

King Wang1:

建议你的操作顺序为:

1. 外部srio写入

2. doorbell通知

3. 无效cache

4. core读

你的顺序还是可能会有问题,因为不能确保你在SRIO写的时候不去读这个buffer。

赞(0)
未经允许不得转载:TI中文支持网 » 关于c6670的 cache coherence问题
分享到: 更多 (0)