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

DDR数据改变问题请教

请问高手, 下面是代码,当FPGA用SRIO发送51MB的线性数到DSP的DDR。

通过内存窗口改变0x8ffffffc的值,控制  DSP去检测DDR数据。看是否为线性数据。我在内存窗口里面确实是收到了51MB的线性数。
但是调用verifyDat函数,在 “if(sum==nlength)”处加断点,然后发现DDR收到的51M数据发生改变,在51MB靠后的部分,全都是0,而前面部分数据,

要没有改变的,请问高手这是什么原因?
我的检测代码,并没有对DDR进行赋值操作,为什么DDR中的数据会发生改变??

void verifyDat();
int sum = 0;
main()
{
        CACHE_setL1PSize(CACHE_L1_32KCACHE);
        CACHE_setL1DSize(CACHE_L1_32KCACHE);
        CACHE_setL2Size(CACHE_256KCACHE);
      //…
          KeyStone_SRIO_Init(&srio_cfg);
    //…..       *(volatile uint*)0x8ffffffc=0;
      while(1)
     {
                   asm(" NOP 20 ");
                if((*(volatile uint*)0x8ffffffc))
                 {
                        sum = 0;
                      verifyDat();
                 }
       }
}
void verifyDat()
{
              uint * pSRc = (uint*)0x90000000;//DDR接收数据地址
             int i = 0;
             InvalidCache((void *)pSRc, 51*1024*1024);
             int nlength = 51*1024*1024/4;
            for(i=0; i<nlength; i++)
           {
                 if(pSRc[i]!=i)
                         break;
               else
                         sum++;
           }
         if (sum==nlength)
                            printf("\n succes \n");
        else
                              printf("\n error \n");
         for(i=0; i<nlength; i++)
        {
                pSRc[i] = 0;
       }
}

jian zong1:

求,高手指点,这是怎么回事?DDR这么难用吗?

YUCHAO WANG:

回复 jian zong1:

你好:

我看了你的现象,你的过程涉及几个步骤,未必就是DDR的问题。

按我的经验,你需要这样排查问题:

第一步:检查自己的DDR是否配置正确,你可以在DSP上自己产生同样的一段数据写到DDR上,看是否能正确;

第二步:确定FPGA发数是否正确(这点很重要,后部是0很像是FPGA自己没发够数)

第三步:注意cache的一致性,把内存窗口的cache选项勾掉,看看内存里的数是不是0 另外,你如何知道收够51MB了?0x8ffffffc是FPGA写的还是别的什么机制写的?

赞(0)
未经允许不得转载:TI中文支持网 » DDR数据改变问题请教
分享到: 更多 (0)