本人参考广州创龙公司的工程范例,用DSP单核和FPGA通过EMIFA连接和读写都是正常的。但是若将ARM也加入进来,ARM跑linux3.3,由ARM通过slaveloader语句启动DSP,再次观察分析EMIFA的地址数据,发现有错误不正确的情况。反复看程序是没问题。EMIFA的频率也试着改低了,依然不正常。请问是否有标准的3核交互的范例程序可以参考呢?ARM和DSP是走SYSLINK通讯,DSP通过EMIFA和FPGA相连。
Tony Tang:
user5243180ARM跑linux3.3,由ARM通过slaveloader语句启动DSP,再次观察分析EMIFA的地址数据,发现有错误不正确的情况。反复看程序是没问题。
ARM文件系统是在NAND上吗?如果是,应该是FPGA对EMIFA时序的处理有问题。FPGA应该只对接在自己的EMIF_CS有效时才响应。
user5243180:
回复 Tony Tang:
ARM文件系统是NAND上的。你说FPGA可能处理EMIFA时序有错误,但是单核DSP和FPGA相连通讯读写都是正确的。只有若由ARM引导DSP,之后分析DSP和FPGA连接情况,才发现EMIFA读写出错了
Tony Tang:
回复 user5243180:
user5243180之后分析DSP和FPGA连接情况,才发现EMIFA读写出错了
是读出错了,还是写出错了?如何判断的?
user5243180:
回复 Tony Tang:
源程序部分如下:
int i=0;
/* 初始化数据缓冲区 */ for (i = 0; i < EMIF_BUFFER_LENGTH; i++) { emif_wbuffer[i] = (short)(i); emif_rbuffer[i] = 0xDEAD; }
/* 向FPGA写数据 */ for (i = 0; i < EMIF_BUFFER_LENGTH; i++) { ((short *)SOC_EMIFA_CS2_ADDR)[i] = emif_wbuffer[i]; }
上面是测试案例,意思是往片选2地址写一堆数值(0,1,2,3,4,5,6……)。FPGA是设计成双口RAM结构,DSP写给FPGA,应该监控内存也是可以正常读取回来的。但是若单独DSP和FPGA相连,反馈结果是正确的。若ARM引导起来DSP,再监控内存情况,就发现读取回来的数值部分是错的。详细见图。图中还试着改了EMIFA的分频情况。
user5243180:
回复 Trolong_support:
感谢回答,已经解决。结合FPGA时序情况,改变EMIFA读写时序参数目前是好了。