Qurrtus ii下载以及SDRAM调试的问题

来源:互联网 发布:mac接外置光驱不能读取 编辑:程序博客网 时间:2024/06/05 15:28

这几天一直在调sdram的驱动,总是调不通,感觉突然不好了。

发现quartus ii真是奇葩,有时下载程序时,非得删了原来的.sof程序文件,重新添加新编译的.sof文件才能下载到正确的版本。

可能软件用到了缓冲,频繁的更新编译使得软件有时会来不及更新内存缓冲区里的文件。

调了好几天的SDRAM,还是没能调好,毫无头绪了。先放下吧,如果能找到好的参考程序,再来试一试。如果实在太耗时间就准备买个好点的开发板,可以省去许多调试的时间。

不过个人觉得,在初学阶段自己多花点时间折腾再去参考别人可行的代码还是值得的。不然都是走马观花,把别人的程序跑一下就以为学的差不多了,心里说不定还沾沾自喜以为这门技术也不过如此而已,须不知自己给自己挖了个大坑。

过段时间还是去买个比较好的开发板,趁热打铁。


这个代码调试了很久,差不多一个星期。期间暂时放了下来,今天终于把它调通了,如释重负啊!这个SDRAM芯片是已停产的H57V2562GTR,比H57V64多了四倍的容量,行多了一倍,所以如果H57V64的每行自刷新时间为15us的话,应该把H57V256相应的减少一半。
在突发传输时,一定要设置好DQM引脚(这次就是因为马虎将两个QDM引脚置于悬空状态,结果读取的数据始终不对)。


我参考的是特权的代码,他的代码是基于H57V64的,写的相当漂亮,教科书级别的!但也有一些小错误。
改动如下:
sdram_ctrl.v文件第190行
原代码是:
assign sdram_rd_ack = (work_state_r == `W_RD) & (cnt_clk_r > 9'd1) & (cnt_clk_r < 9'd10);//读SDRAM响应信号


改为:


assign sdram_rd_ack = (work_state_r == `W_RD) & (cnt_clk_r >= 9'd1) & (cnt_clk_r < 9'd9);//读SDRAM响应信号


这样改动之后,sdram_rd_ack作为写rdfifo的使能信号才能在每个数据输出的时候及时有效,否则延迟一拍会导致丢失第一个从SDRAM中读出的数据(没有被rdfifo读取)。

0 0
原创粉丝点击