首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

求助:程序可以下载到SDRAM中,但是执行不正确,为什么啊

求助:程序可以下载到SDRAM中,但是执行不正确,为什么啊

调试2C20+SDRAM,折腾了N天,程序下载时终于没有提示Verify failed了,但是下载进去后程序运行不正确,进入调试界面观察其汇编代码,发现有时汇编代码正确,有时是乱码,而有时能跳到main()函数中,有时又不能,直接就跑飞,即使能跳到main()函数,其汇编代码也是乱的,都是0xFFFFFFFF。我已经将PLL的相移从-2度以9度为步进调整到了-297度,系统主频是80M,SDRAM是三星的8M的,K4S641632,软件Quartus8.0。大家说一下还有可能是什么问题啊?

[此贴子已经被作者于2008-8-6 23:17:23编辑过]

楼主可以先把主频降低些,比如10M或更低,看看sdram是不是好的,当然这时相移在-30~-70左右就可以了。

楼主看看程序有没有问题,可以建一个小的nios程序和小的ram on chip,在fpga上面单独跑,看程序有没有问题。

硬件问题出错可能性比较多啊,楼主需要好好分析,关键是思路要清晰。

这个版主不太冷 =========================== 我的中电网博客:http://blog.chinaecnet.com/u/20/index.htm

谢谢版主,降频我还没有试,今天试了一下在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这个地址,又能正常执行,真是奇怪啊。

这样比一下可能就不奇怪了,我觉得楼主如果有其他的sdram可以比较一下,我觉得sdram还是有可能有硬件的问题啊。
这个版主不太冷 =========================== 我的中电网博客:http://blog.chinaecnet.com/u/20/index.htm

我也遇到到楼主同样的问题,不知楼主是否已经找到解决方法?

楼上要PLC编程电缆联系我啦
[em01][em01]
长沙博为自动化设备有限公司 三菱、欧姆龙、西门子、松下等品牌PLC编程电缆 了解更多:=http://csbowei.zke360.com= QQ:535710450 宋先生 0731-2894960
我的经常跑不到main();唉
返回列表