This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

如何调用WritebackCache((void *)uipSrc, uiByteCount);

请教专家,现在SL2设置为CACHEABL。如果为该空间中,每隔800个整形数据,赋值一个数。下面的cache写回的调用是否正确。每次给一个地址上写数据都要调用WritebackCache吗?这样会不会浪费效率? 该函数的第二个参数是要更新的字节数,最大可传入参数的大小为多少?有的时候,经常内存数据不正确,请专家指点,怎样正确调用该函数。谢谢

#define  INTERVL 800

unsigned int * Dat = (unsigned int * )0xc100000;

for(i=0; i<40; i++)

 {    

  *Dat=i;

WritebackCache((void *)(Dat+i), 4);

Dat =Dat  + i*INTERVL ;

}

  • 回答你的问题

    1。这样效率确实很低。

    2。第二个参数的字节数不限。

    内存数据不正确的可能原因:cache刷新是按照line来操作的,L1D的line应该是64byte。这表示你一次最少都是刷新64byte的内容。如果你的64byte里面,有些内容是别的core控制的,但是你还是刷出去了,可能就会有问题。原则上,如果要刷cache,L1 cache必须保证64B数据都是由该master控制的。

    如果是你这种操作,建议最好将所有需要刷cache的内容放到连续空间,然后按照64byte向上取整。全部赋值后一次性刷新。

  • 专家好,现在DDR设置为cache.FPGA在一开始,会给DSP外接的DDR发送18MB的数据。DSP只有等待这18M数据,真正的写到DDR里面之后,才会工作。请问怎么才能保证这18M数据,真正的写到DDR里面去?

  • 这个项目有点紧,请专家解答,怎么才能正确写数据到DDR。在使用的过程中,怎么才能确保DDR中的数据不被cache误操作而改变??

  • 你的应用是外设写内存而DSP去读,想要保证cache一致很简单,在读之前作inValid操作,这样就能保证你读到的数一定是FPGA写进来的数。(你不用DSP写那块地址的话就用不着writeBack)。

    数据肯定能被写到DDR,只要你不乱用writeback,cache不会影响到内存里的数