版主: 51FPGA |
scw0220
最后登陆时间:2015-01-13 22:03:44 |
最近一直在调试XILINX SP6的 MCB 从DDR2到DDR3。DDR2调试还算顺利,移植到DDR3出现了一些意外情况,在网上搜索没有找到相似的答案,自己研究终于搞定,鉴于自己一直在网上享受别人的成果,没有贡献过自己的成果,这一次我决定花点时间,写下这次调试过程给大家分享,以免跟我遇到一样问题的人浪费不必要的时间。
移植到DDR3后发现,cmd_fifo的cmd_full会跑一段时间后一直拉高,相当于死掉。一开始怀疑是电源供电不足,检查了电源,发现电源稳定,经过一系列验证后,基本确定是FPGA的问题。 然后从FPGA入手,换了好几个版本的MCB依然不能解决,后来开始查UCF,首先发现自己UCF用的是DDR2改过来的,发现时序约束3.333ns而我跑的是333MHz,以为找到原因,修改UCF发现仍然没解决。 而后又发现,SP6-2生成333MHz的MCB后ucf中 : CONFIG MCB_PERFORMANCE= EXTENDED; 而以前ddr2的ucf中是 : CONFIG MCB_PERFORMANCE= STANDARD; 修改后,发现仍然没有搞定。 然后我只好降频,把DDR3的频率由333MHz降到300MHz,综合加载后,发现现象消除能解决。这样我就基本确定是时序跑不对, 应该是板子制造工艺没达到要求。 但是我没有放弃,我继续对照ucf发现,ddr3的 ucf中,sdram_xx信号的IOSTANDARD约束后面还增加了OUT_TERM = UNTUNED_50的约束,怀疑既然特别增加的肯定有它的意义,是不是就是这个影响了板子时序呢,再次把ddr3的频率修改回成333MHz,把“OUT_TERM = UNTUNED_50”约束加上,至此,ucf已经全部改成和生成core时推荐的一样,跑bit加载,发现现象解决了。 总结:由于自己是从ddr2的设计直接改过来的,没有注意到细节,所以最最重要的用xilinx 的mcb一定要遵循xilinx 的任何推荐,除非他有说明,可以怎样怎样,不然完全遵循,肯定不会出错。 现在看来,原因是找到了,但是自己一开始怀疑是我控制用户接口的逻辑错了,着实让我花了很多时间和精力。但是这个却是一开始可以避免的,但是通过这个错误,更加让我加深了对MCB的认识,也是有收获的。 |
共1条 1/1 1 |