SDRAM调试总结
SDRAM调试做了很久,也想了很多方法。采用的是特权同学的代码,经过仿真测试,上板调试的时候,串口上总是没有数据,一直为FF。后来在synplify中修改了时钟之间的延时,改为18ns,结果发现有数据出来了,但是有数据丢失的现象。更要命的是一旦修改程序,就必须修改时间之间的延时,当时就认为只要时钟间的延时修改的恰当了,SDRAM就会工作起来。事实上这样的调试很耗费时间,而且成功率的几率很小。在这个问题上我耗费了差不多2周的时间。
后来冷静下里思考了一下,发现
自己这种思路是不是有问题,于是去网上找,找关于SDRAM时序方面的资料,因为晚上精神很好,所以看资料分析问题我一般都在晚上做。还专门去EDN网站上找关于SDRAM的一切资料。后来还真在网上找到了三星官方关于SDRAM操作的时序图。
于是对页读写的操作时序进行了仔细的分析和计算,最后对程序进行了修改。并结合板子的时序进行了input delay 和output delay的时序约束,上板调试,sdram工作正常了。
由于本控制采用的actel的A3p250,由于actel的FIFO核在读的时候,前2个周期没有数据出来,因此,即使是FIFO的空信号给出后,FIFO里面还有2个数据。所以在数据有效信号给出的时候,获取FIFO的读出的数据。
sdr_timing_diagram.pdf
SDR_control_lattice.pdf
对于调试总结如下:
1.由于做项目的时间紧,总是想越快越好,结果一出问题就容易进入“死胡同”,结果越急陷的越深,结果时间越花越多。所以一旦问题时,需要的是冷静的分析。
2.时序一定要吃透。这里特别要感谢特权同学,我的成功是建立在你的基础上的。在初始化阶段DQM一定要拉高。通过看官方的时序分析图,才找到了该问题,以及突发读/写,还有中断的发出的时间。
3.仿真很重要。这个SDRAM控制器的程序,一个个模块的做仿真,然后结合起来在做仿真。在仿真中发现问题,理解程序。
最后,真诚的感谢特权同学!
当然,本控制器功能基本上实现了,就是还没时序收敛,还在升级中。。。。。
附件说明:sdram的操作时序,lattice官方的sdram控制器的说明。
用户419392 2012-5-13 22:05
用户352991 2011-8-8 16:55
用户1563832 2011-8-4 11:12