最近在玩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
