歡迎您光臨本站 登入註冊首頁

SDRAM模塊IP核調試經驗

admin @ 2014-03-26 , reply:0

概述

首先說明資源使用:1.硬體: 基於HY57V561620CT-H的128MPC133內存條; ALTERA公司的EP1C6Q240C8晶元;2.軟體:  lat……

首先說明資源使用:
1.硬體:

  •   基於HY57V561620CT-H的128M PC133內存條;
  •   ALTERA公司的EP1C6Q240C8晶元;

2.軟體:

  •    lattice標準SDRAM模塊;
  •    QUARTUS4.0;

    下面說明我的艱辛的調試之路,呵呵。
    我是從4月份開始學習verilog語言,然後從網上廣泛搜集SDRAM模塊,下載的有altera公司,有lattice的。經過對比,我選擇了lattice公司的標準的sdram模塊。理由如下:

  1. 模塊劃分比較合理:ctrl,sig,data;
  2. 文檔描述清晰,易於使用;

   lattic公司的這個控制器,具體針對哪個器件我不曉得;但是我要用的是HY57V561620CT-H。因此,下載下來后,首先需要吃透源代碼。看源代碼當然要從頂層設計開始看,觀察模塊如何分工,信號如何流動等。由於lattic公司隊文件組織的實在太好了,所以看懂不是太難的問題,看懂后針對自己的晶元修改,也不會太費力氣,主要修改:

  1. 地址線、數據線寬度;
  2. 數據讀寫部分;
  3. 模式寄存器初始值;
  4. 時序參數定義;

   這些修改,基本上都屬於偷梁換柱類型的。相信看過的人,都曉得。此外,我根據需要,添加了一個sdr_IDLE信號輸出,以便方便使用。
   修改完畢,重新編譯通過後,就著手編寫與該模塊介面的控制模塊,如什麼時候應該發出什麼信號給這個控制器,針對這個控制器發出的某個信號,該如何回應等。由於lattic的這個控制器給出了關鍵性的指示信號,所以介面控制模塊的編寫也不是太大的問題了。
    介面控制模塊編寫完畢,就可以進行時序模擬了。如,通過某個外部信號觸發介面控制模塊啟動一次寫--等待---讀操作,然後觀察控制器模塊輸出的信號對不對。如,讀的時候,應該有什麼信號出現;寫的時候,又該有什麼信號出現。這一步很重要,決定了時序波形是否正確。從調試情況來看,這一步如果沒有什麼問題,這個sdram控制器基本上可以工作了。希望各位和我一樣的初學者,要足夠重視模擬功能,呵呵。
    時序模擬完畢,呵呵,就該下載到目標板開始硬體調試了。
    作為初學者,我還是願意勇敢的說出自己的心得體會,希望對如我一樣的初學者有所幫助。今天我將繼續介紹我的調試SDRAM之路。
    時序模擬完成後,硬體調試相對輕鬆多了。我用到的核心設備就是一台60MHZ帶寬的Tektronix示波器。在100MHZ的工作頻率下邊,很多信號看起來都是正弦波了。更有意思的是,單次觸發方式觀察sdram的WEn信號時,看到的壓根兒就是一個有著嚴重過沖的正弦脈衝。但是這已經足夠給出需要的信息了。
    如同時序模擬,要觀察讀寫SDRAM時關鍵信號波形對不對一樣,硬體調試時也需要如此。我的做法就是,從FPGA某一個管腳觸發FPGA內部控制SDRAM讀寫的邏輯,反覆向內存條的某一地址寫入一個常數(如0x5555 5555 5555 5555),然後用示波器觀看內存條上關鍵信號的狀態:WEn,CASn,RASn,CSx。這麼做的目的就是初步觀察SDRAM控制器的流程走得對否。如果有邏輯分析儀,呵呵,這一步工作可能會更輕鬆了。像我只有示波器的,更多的依賴時序模擬了。
    反覆寫完某一個地址,接下來就要反覆讀這個地址,觀察剛才寫入的數據是否真的已經存到了sdram中去。這一步中,除了觀察關鍵信號外,要特別在意SDRAM的內存條上的每一根數據信號。內存條上的數據線不輸出數據時候是懸浮態。所以,將示波器的探頭用電阻上拉到高后再用來觀察內存條上的數據線,可以很容易區分懸浮態與接地狀態。高電平的識別自然不是問題了。用這種方法,就可以看出讀的時候內存條輸出的數據到底是什麼。如果採用雙地址反覆寫與反覆讀的模式,觀察起來會更容易:如一個地址數據為0x5555 5555 5555 5555,而另一個地址數據為0xaaaa aaaa aaaa aaaa,那麼反覆讀的時候,如果sdram工作正常了 ,就應該在內存條的數據線上觀察到規則的方波。
    一次性成功的可能性不大。所以,當觀察到讀出的數據與寫入的數據不一致的時候,就要回過頭來通過靜態檢查與時序模擬的波形分析,查找原因。從我的調試情況看,lattice公司的這個控制器,流程沒有任何問題。我做的最大的改動就是:

  1. 初始化部分:多加了四五次刷新后才開始寫模式寄存器;
  2. 增加了一個刷新模塊,刷新周期約7.68us(100MHz下計數器768);
  3. 增加了sdr_IDLE信號,以方便讀寫;

    有空的時候,我會將全部程序整理一下發布出來,供感興趣的網友參考。
    通過調試lattice公司的這個sdram模塊,我的整體感受就是:

  1. 首先要從整體上把握其功能、介面定義。簡單的說,就是它幹什麼的,應該怎麼用。如用戶介面,究竟該如何和它接駁。
  2. 然後,要通過功能模擬、時序模擬,深入觀察其輸出輸出波形,看看和手冊描述是否一致,有沒有什麼嚴重問題;
  3. 接下來,就要進行硬體調試,通過重複動作的方式,觀察關鍵信號的有無以及波形;
  4. 先整體實驗,如果不成功,再依據輸入輸出之間的信號流程,深入模塊內部,逐漸觀察特定特定信號的狀態是否與預期的一致。例如,如果IP核含有內部功能寄存器,可以實驗這個功能寄存器是否可以可*讀寫。這裡可以直接引出觀察,也可以使用SignalTap功能觀察。

    世上無難事,只要肯登攀。光看不行,要找到切入點,步步為營,各個擊破,呵呵。


[admin via 研發互助社區 ] SDRAM模塊IP核調試經驗已經有2020次圍觀

http://cocdig.com/docs/show-post-43154.html