最近在玩KC705上的ddr3.开始信誓旦旦的说要自己写controller。
于是开始读datasheet,在镁光的官网上弄了一个ddr3 的module的仿真模型,仿真读写有效的之后就屁颠屁颠的跑的群里问大家这个clock怎么匹配。然后才知道有PHY这个东西,不用PHY就玩ddr,秀逗了!
下面的过程以及结论也许对于有些人也有些秀逗,但是对于我这个初玩ddr的人来说,它还真的卡了我一个星期了。
先用MIG 玩通ddr3,再想着怎么玩MIG生成的PHY吧。
一,按照XTP196上的步骤step by step 。文档上的vivado是2014版本,我的是2016稍微有点差异。感觉有差异就参考rdf0186-kc705-mig-c-2014-3这个官方例子中的top层进行修改。比如例子中当然没有说这LED灯的控制程序你需要copy一下这里的顶层。工程做完了,编译生成bit下载到板子,ddr初始化成功。
二,自己按照XTP196上的MIG配置,再生成一个自己的project。然后用modelsim仿真一下发现ddr3初始化是成功的。自己加上一个简单的LED接口,并约束到管脚。生成bit后下板子 —— 初始化不成功。
2.1 对比example 中的xci与自己工程中的xci发现一模一样。
2.2对比example中的top层和自己的top层,还是一模一样。
初步认定是约束问题
免费版的Diffuse 软件不支持xdc文件的对比,好吧,自己来。
2.3 对比ddr的pin绑定管脚以及电平 ,还是一模一样。
再对比剩下的部分,把example中的约束一点一点的删,每删除一次就重新生成bit下板子。最后终于发现了一个东西,打开它初始化就成功了,关闭它初始化就失败了。
set_property DCI_CASCADE {32 34} [get_iobanks 33]。
在UG586中对它是这么描述的
是不是ddr的pin用到了bank33,32,34。所以需要这个约束呢? 还是因为我在MIG中把这个钩子选上了所以才需要的。
没有具体去查,以后再补上吧
欢迎加入: FPGA广东交流群:162664354
FPGA开发者联盟: 485678884