最近在调试6678与FPGA通过SRIO通信,相同的板卡做了两块,只是焊接的时候6678外挂的DDR3不一样,第一块外挂了四块镁光的4Gb(MT41J256M16HA-125),第二块挂了四片镁光的2Gb(MT41J128M16HA-15E),这两种DDR3芯片的封装完全一样,只是4Gb的是15根地址线,2Gb的是14根地址线,原理图设计是参考开发板的设计,连接方式完全相同。
调试的程序流程是:DSP端用开发板的gel文件进行初始化,FPGA通过SRIO向DSP的DDR3两块地址(0x90000000和0x90010000)进行兵乓传输,传输的数据为自定义的递增数据(1,2,3,4,5……),并在DSP中将收到的数据用DMA搬移到0xa0000000处进行存储。
遇到的问题:
(1)调试4Gb DDR3的板卡时,没有出现什么问题,传输的数据都正确。
(2)调试2Gb DDR3的板卡时,FPGA通过SRIO直接传输数据到乒乓地址(0x90000000和0x90010000)时,会发生数据错乱,例如:FPGA发送64位的数据1,2,3,4,5,6,7,8,时,收到就是3,4,5,6,7,8,1,2,。后续的数据都是每八个数据发生如此的错乱。
(3)将数据发送到MSMC中的乒乓地址,数据是正确的,再通过DMA搬移到MSMC中也是正确的,但是如果搬移到DDR3中,就又发生了(2)中出现的错乱。
(4)写了一个简单的DSP程序,从0x80000000地址开始写入一个递增数列,在memeroy中查看是正确的。再将该递增数列写入L2或者MSMC中,并用DMA搬移到DDR3,数据也是正确的。
总结了一下:通过(3)中的描述,说明FPGA与DSP之间的SRIO传输是没有问题的,通过(4)的描述,说明DMA搬移是没有问题的。但为什么联合起来传输就出现错乱了呢,跪求大神解答!