关于XILINX SP6 MCB使用 调试经验分享
时间:10-02
整理:3721RD
点击:
最近一直在调试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的认识,也是有收获的。
,不错,希望继续分享
支持干货
lz可以考虑写个完整的开发调试文档,把项目背景、所用到的网络资源的链接附上
给大家更多的帮助、指导!
谢谢小编。呵呵
请教小编一个问题,我使用vivado block design 链接ddr3,整个系统中有clock模块,那DDR3的时钟如何接clock模块的输出时钟?我把DDR3的时钟设置为非差分的,然后链接到clock模块的输出时钟上,报buf的错误。但ddr3内部输入时钟的buf我在配置中也消除不了,这个应该怎么解决?谢谢。
赞一个
你出这个问题其实很大的原因都在于粗心,一般按照core生成的ucf去约束的人基本不会碰到这种问题。
另外,另外虽然修改ucf把问题解决了,但是还是不知道每个修改的意义,既然已经确定是约束导致的问题,建议去了解一下你添加或者修改的那几个约束对MCB会有什么具体的影响,这样你这篇帖子才有意义。
谢谢小编分享
