经过几天的Sdram项目调试,小编想说简直了~,感触颇深,今天就分享给大家喽~
Sdram项目调试感悟:
1. 首先保证仿真正确,能够完全读写整个sdram model【难点二】
2. 保证板子上的sdram是正常工作的。
3. 时钟:sdram的输入时钟能在数据中间采样(做相移或者output delay)【难点一】
4. 约束:时序约束和物理约束
5. 其他
(1)如果输出管脚不是时钟引脚,则需要加CLOCK_DEDICATED_ROUTE = FALSE;
(2)输出的时钟不能作为ila的采样时钟。
图Ⅰ 输出有错
接下来
跟着小编一起去攻破难点问题吧
难点一:Sdram的时钟问题
为了保证数据被时钟的上升沿采到,所以设计中使用了一个-150°的相移,示波器才采集到的时钟的确也没有问题。
(图1 黄色是pll产生的无相位偏移的时钟 蓝色是相位偏移-150°后结果)
难点二:仿真出错
当读写数据如果超过1024行,会有错误,这是因为在预充电的时候必须指定充电类型,如果A[10]为0,则需要在数据读写完成后加入一个预充电命令(关闭一行的作用);如果A[10]为1,则需要在数据读写完成后不予理会;
仿真在超过1024行出错(已解决)
难点三:上版调试
上板调试无结果这是因为inout信号最好在顶层进行处理,如果在内部处理,综合后可能会出错,反正我是入过“坑”了,搞了三天都没有数据读出。
上板调试的初始化时序
上板调试的刷新时序
上板调试的写时序
上板调试的写时序
难点四:控制信号的把握
We信号与时钟的关系
Ras与时钟的关系
Cas下降沿与时钟关系
Cas上升沿与时钟关系
因为sdram对于我们来说其实相当于是一个“黑盒子”,必须保证所有的操作都正确,才能读写。所以此处关键就是借助示波器来分析是否信号传送给sdram芯片,下面是一个几个信号的时序与时钟的相位关系。