各位大神:
我在用6672编程时,发现利用指针对数据进行操作,而与6672连接的FPGA利用SRIO一直读数,此时SRIO抓到的相应的内存地址上的数据为0,而利用CCS看则内存上的数据已经改变。而其他利用变量赋值的情况则不会出现这样的问题。请问这个是不是因为内存和cache速度不一致导致的cahce一致性问题导致的呢?用于维护cache一致性的机制有哪些?可以调用那些库函数呢?
在开发中遇到问题不断,请各位大神指导。
Andy Yin1:
如果数据存放在SL2及DDR,且使能cache,则core进行读写时需要维护cache一致性,在写之后需要write back cache,读之前需要invalid cache,可以调用C:\ti\pdk_C6678_1_1_2_6\packages\ti\csl\csl_cacheAux.h中的函数,如CACHE_wbL1d等。
Di Wu4:
回复 Andy Yin1:
Andy您好:
谢谢您的讲解。还要再请教您一个问题。
按照您说的这样,这个SL2是不是就是共享内存啊?这样我将数据定义到核内部的内存就不会出现一致性问题呢?我回去做了下试验,确实在写数据的后面加上CACHE_wbinvAllL2(CAHCE_wait)(此函数为SRIO例程中调用的函数),后面的数据可以在SRIO读出。
但是我有一点很奇怪,我是在先定义了一个有参数的数组分配到了共享内存的地址上,之后再主函数对这个数组内部参数进行了一个累加的校验并把校验值赋给数组最后一位上(地址后12位为0x174)。就是这个累加值出现了cache一致性问题。之后为了做测试,我把数组后面的几个地址也挨个赋值,我发现0x178、0x17c地址赋值SRIO读不出,而0x180以后的就可以读出。这个是为什么呢?难道是核编译的时候是按照整块地址来将共享内存的数据搬移到cache中吗?在实验中,我将CACHE_wbinvAllL2(CAHCE_wait)函数放置到了校核赋值后,校核值可以读出,在此函数后面的0x178、0x17c在赋值也能读出了。这两个后面我也没有加上write back。难道是cache一致性问题只会出现在某些特殊情况下吗?
这几个地方有点没太明白,还请大神帮忙下。