[此贴子已经被作者于2008-8-6 23:17:23编辑过]
楼主可以先把主频降低些,比如10M或更低,看看sdram是不是好的,当然这时相移在-30~-70左右就可以了。
楼主看看程序有没有问题,可以建一个小的nios程序和小的ram on chip,在fpga上面单独跑,看程序有没有问题。
硬件问题出错可能性比较多啊,楼主需要好好分析,关键是思路要清晰。
谢谢版主,降频我还没有试,今天试了一下在RAM里运行对SDRAM读写操作的程序,主要功能是向SDRAM的一段地址写入一些给定的数据,然后再读取出来进行比较。下面是主要实现代码:
for(i = 0;i < PRO_LENGTH;i++)
{
sdw = i + 1;
}
while(j < 32)
{
for(i = 0;i < PRO_LENGTH;i++)
{
addr = 50*j+i+5000;
IOWR(SDRAM_BASE,addr,sdw);
}
IOWR_ALTERA_AVALON_PIO_DATA(LED_PIO_BASE, 0xFF);
for(i = 0;i < PRO_LENGTH;i++)
{
addr = 50*j+i+5000;
sdr = IORD(SDRAM_BASE,addr);
}
IOWR_ALTERA_AVALON_PIO_DATA(LED_PIO_BASE, 0x00);
for(i = 0;i < PRO_LENGTH;i++)
{
if(sdr != sdw)
{
alt_printf("i=%x\n",i);
alt_printf("j=%x\n",j);
alt_printf("sdr=%x\n",sdr);
alt_printf("sdw=%x\n\n",sdw);
counter++;
}
}
j++;
}
结果发现,当写入的SDRAM地址addr为0x1400时,执行写入函数IOWR(SDRAM_BASE,addr,sdw)时,程序就会复位,然后从头开始运行,后来经试验,发现只要在测试循环中写入的是256的倍数处的地址(即0x100、0x200、0x300...),都会发生上面的现象,但是要是在这段循环之前(即while(j < 32)语句之前)直接写入256这个地址,又能正常执行,真是奇怪啊。
我也遇到到楼主同样的问题,不知楼主是否已经找到解决方法?
欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) | Powered by Discuz! 7.0.0 |