原创 MicroBlaze通过MPMC控制器连接SDRAM中遇到的问题

2010-7-9 14:53 4780 3 3 分类: FPGA/CPLD

    项目需要MicroBlaze1将采集到的大批数据缓存到SDRAM中,然后再通知MicroBlaze0将该数据读出再通过Ethernet接口送给PC。由于特殊原因,FPGA在一块现成的控制卡上,需要将该卡插到我们的母板上。但是该控制板最初的设计是用来控制电机的,所以根本就没考虑过什么端接电阻匹配和等长这些问题,给项目带来了意想不到的问题。所以以后做SDRAM控制的时候,硬件上一定要提前考虑好,这样的话后期逻辑的设计就会省事多了,特别是做DDR的设计。言归正传,还是看怎么倒腾这块控制卡吧,当然母板设计的时候考虑了等长和匹配,但只是母板上。


     什么都不动的情况下用MPMC来访问SDRAM,最高只能跑到80MHz,与客户最低100MHz最好125MHz的时钟需求差距还很大。首先从硬件上考虑,做到阻抗匹配,将控制卡上与SDRAM连接的所有端口上已有的电阻去掉(有的没有,有的有,还不一样33,100)。结果并不是很理想,但是在现有的这样的硬件条件下,可改的就这些电阻了,除非重新做板。看来只好在MPMC控制器和约束上做文章了。


    首先添加了DRIVE约束,试了4,8,12下发现8的时候示波器看到波形效果最好(太大会导致过冲较大,太小会导致上升时间变长)。至此SDRAM访问频率达到了90MHz,但是还是不能满足客户需求。


    给MPMC时钟引脚添加SLEW = FAST约束发现时钟频率可以达到了100MHz,并进行了全容量测试没有问题。所以感觉还是时钟的问题,毕竟MPMC输出的时钟的原则上的上升沿是对准数据和控制数据的中间的,保证数据被正确采集。但是由于硬件设计的原因致使可用采集窗口变窄,致使无法正确采集到数据。


    上面的结果使得P1的母板能够工作在100MHz频率下,但是P2的板子回来以后发现可能是做工的原因导致P2的板子读写数据个别位不一致。真是头疼加郁闷。没办法,还得继续想办法。结合前面的调试,数据、地址和控制线无法再做调整,除非加IODELAY(这个工作量太大)。还是从时钟上想办法,10.0.3版本EDK上的MPMC控制器的时钟是不能够调整相位的,也就是说除了MPMC内部对时钟进行了180度相移外,用户无法再进行调整。所以只好不用MPMC提供的时钟,自己用DCM来产生时钟,并且利用DCM相位可调的功能调整输出的时钟相位(这种方法Xilinx网站上也有介绍,从11版本后的MPMC输出时钟据说可调相位了,没有用过还)。经过大量的测试终于找到了能够100MHz工作的窗口。至此彻底解决该问题。


经验总结:


    1、对SDRAM访问关键是硬件设计时要考虑好;


    2、适当的添加约束能使改善工作频率


    3、通过调整时钟相位可以手动找到数据访问窗口,改善工作频率

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
3
关闭 站长推荐上一条 /3 下一条