lattice_ddr3調試經驗分享(二)官方testbench分析


  在 lattice_ddr3調試經驗分享(一)建立工程與仿真 博客中已經實現工程的建立以及仿真。后來公司還真的需要用lattice的FPGA。所以需要對這個example進行分析了。

         打開 test_mem_ctrl.v 這個就是tb的頂層了。當然,lattice的很多東西和xilinx的沒法比,代碼質量也是一樣的。lattice除了便宜其他都不好。然而.......... 好了,言歸正傳,不吐槽了。lattice中例化的ddr是沒有設置得像xilinx(xilinx用的是官方仿真模型)的模型一樣可以在log中看出你的讀寫時間,讀寫地址,讀寫數據,以及命令。lattice的仿真模型像剛畢業的學生寫的一樣 —— log里啥都沒有,一切自己看波形。

         折騰了好久,想自己把鎂光官方module放進去,失敗!有知道怎么放進去的攻城獅還請賜教了。

        萬般無奈之下,還是好好分析lattice自己的example


     平台:

       lattice Diamond3.5 + modelsim10.2c +ecp3 -8 + MT41K64M16TW-107



        1,test_mem_ctrl 這個modelsim中屏蔽掉自己不想要的  monitor,odt_watchdog。

            還有兩個

對於325,326兩行,是task以及調用task的case。這個寫法有些像IC設計的時候做驗證的方式。但是我也是做過IC的人,團隊中沒有人寫得這么稀爛過。屏蔽屏蔽!!

        然后自己寫個這個東西

好了,初始化成功了。

        這么寫肯定會提示reset時間不夠,reset到cke的時間不夠。先不用管

 

  init_start為1,IP核還是初始化ddr。然后重點就是這個init_done拉高一個脈沖。init_start一定要在init_done拉高的一周周期后立刻拉低,不然這個IP又來初始化一次。

 

 

 還有幾個參數需要注意:ofly_burst_len=1,選擇BL8模式     

                                      cmd_burst_cnt 這個是命令重復次數。 次數設定在0~32次之間可選。當cmd_burst_cnt =0 你寫一次命令,這個IP 就可以重復32次

         

 

 

 

  2,      先寫,不過這個不可綜合的語句我寫的有些復雜

 

 我是隨便往里面寫了兩個數。是不是覺得有些奇怪,為何代碼是這樣子的。那是因為這個IP里面有一個設定,就是寫有效到吃寫的數據之間是有latency的,方便大家用fifo。手冊上的波形圖如下:

然后坑爹的要看波形圖了

第一個箭頭的地方ddr的cmd為0011 是ACTIVE 。后面就是cmd=0100 WRITE  —— ddr的datasheet上

看到我寫入的地方是bank1,row3 ,col=0 。col在波形圖上是 0x1000,要知道col只有10bit。 

  寫的時候需要注意。這個控制器比較坑爹,因為我這個DDR的data位寬是16bit,也就是每個地址只能存16bit數據,然后這個控制器的data接口就成了64bit。要知道每次寫地址會自動益增8,也就是每次你應該放進去的數據為16bit*8=128bit,可是控制器的數據位寬只有64bit —— 少了一半,也就是說你每次寫應該寫兩個數據進去,這無疑是降低了控制器的效率啊。

圖中黃線部分后是讀取的第一個數,再后面的1122334455667788是第二個數。

 

 

 3,讀。讀的話就比寫簡單一些

 

 好了。現在想想怎么把這個模型轉換成自己想要的可綜合模塊吧。

 

 

 

 

歡迎加入: FPGA廣東交流群:162664354

      FPGA開發者聯盟: 485678884


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM