關 閉

        新聞中心

        EEPW首頁 > 工控自動化 > 設計應用 > DDR內存接口的設計與實現

        DDR內存接口的設計與實現

        作者: 時間:2007-06-14 來源:網絡 收藏

        摘 要: 針對當今電子系統對高速大容量的需要,本文闡述了使用控制器IP核來設計實現接口的方法。該方法能使設計盡可能簡單,讓設計者更專注于關鍵邏輯設計,以便達到更高的性能。該設計經過仿真顯示,完全符合要求。
        關鍵字 IP核 地址產生邏輯 FIFO

        1.引言
        在當今的電子系統設計中內存被使用的越來越多,用來存放數據和程序。并且對內存的要求越來越高,要求內存讀寫速度盡可能的快,容量盡可能的大。面對這種趨勢,設計實現大容量高速讀寫的內存顯得尤為重要。

        本文結合筆者承擔的T比特路由器項目,對其中的大容量高速DDR內存實現進行了詳細闡述。本文第2節對與DDR內存相關的知識做了簡單的介紹,從總體上對DDR內存有個認識;第3節闡述了DDR內存接口模塊的整體設計;第4節對整個設計中的關鍵設計地址產生邏輯進行了詳細闡述;最后總結全文。

        2.DDR內存相關知識介紹
        DDR SDRAM是雙數據率同步動態隨機存儲器的縮寫。它能夠在一個時鐘周期內傳送兩次數據,也就是說數據速率是時鐘頻率的兩倍,可以達到很高的數據讀寫速度。此外它通過對地址線的分時復用,可以做到很大的容量。比如我們設計實現的DDR內存時鐘頻率可達到150MHz,數據速率為300MHz,容量達到1M x 72bit。

        DDR內存為了更精確的同步使用若干對差分時鐘;它還有一個獨特的數據脈沖信號(DQS)。DDR內存就是根據DQS來分割一個時鐘周期內的兩次數據。更需要注意的是:DDR內存沒有一個信號是發送讀或寫的明確命令的,而是通過芯片的可寫狀態來達到讀/寫的目的。具體為:片選信號(CS),行地址有效信號(RAS),列地址有效信號(CAS),寫允許信號(WE)。它們都是低電平有效,它們的不同組合構成了對DDR內存的不同命令。比如CS,CAS有效,RAS無效,WE無效,表示從現在地址線指示的存儲單元處讀出一個數據放到數據線上;再如CS,CAS有效,RAS無效,WE有效,表示將數據線上的數據寫入現在地址線指示的存儲單元處。

        DDR內存可以支持突發讀寫,并能根據不同的需要選擇不同的突發長度(BL);位寬也可以選擇,并能利用掩碼技術靈活的選擇每次讀寫的有效數據寬度(以8bit為單位);此外由于DDR內存讀寫時需要先激活(Active)將要讀寫的存儲單元行,然后再讀寫,但DDR內存任何時候只能有一存儲行是打開的(處于激活態),因此在需要讀寫不同存儲行時,要先關閉前已打開的存儲行,才能打開現在將要讀寫的存儲單元行,這一操作被稱為預充電(precharge)。另外由于DDR內存是動態存儲器,需要對存儲體進行周期性的刷新(refresh)。

        從上面的介紹中可以看出DDR內存的性能雖然好,但接口控制很復雜。為了快速實現DDR內存接口,縮短設計周期,我們使用已經成熟的商業化內存控制器 IP 核對DDR內存進行控制。我們使用的是Altera公司的DDR Controller IP核,版本為2.2.0,使用的開發工具為Quartus II 4.1,使用VHDL語言進行描述。

        3.獨立內存接口模塊整體設計
        為了將內存接口模塊設計成相對獨立的模塊,也為了調整不同模塊之間的時鐘相位差,使數據穩定輸入輸出,我們給DDR內存接口模塊前端增加了一個入口FIFO,出口增加了一個出口FIFO。我們的功能需求是根據出口FIFO的狀態確定是否將數據送往DDR內存條中進行緩存,并且設計中必須充分考慮DDR內存條存儲器帶寬的利用效率,設計成批量讀寫的模式,減少讀寫切換工作的開銷。該內存模塊具體完成以下功能:
        1)使用DDR控制器IP核完成對DDR內存的初始化配置,產生讀寫命令和其他各種控制信號;
        2)根據出口FIFO狀態產生對DDR內存接口的讀寫請求;
        3)并且整個系統對數據的緩存處理應該公平,不能有系統差別,也就是說要保證在任何情況下讀出的數據都是有效的數據,寫入的數據不覆蓋DDR中的原有效數據;DDR內存接口模塊主要功能由DDR控制器IP核完成,對DDR內存進行初始化配置,產生讀寫命令和其他各種控制信號。DDR控制器有兩個接口:DDR-interface和local-interface。DDR-interface直接與DDR內存條相連,不需要干預。local-interface就是根據不同需要輸入不同信號,可以增加自己的邏輯。我們需要設計的邏輯就是產生讀寫請求信號和對應的地址信息送給DDR控制器,DDR控制器把這些請求轉換為對DDR內存的數據讀寫。因此DDR內存接口模塊的重點是對地址產生邏輯的設計。我們的內存模塊設計框圖詳見圖1。

        圖1 DDR內存接口模塊設計框圖

        4.內存讀寫地址產生邏輯的FPGA設計實現
        根據本模塊的功能需求,在出口FIFO的狀態為忙時,要將數據送往DDR內存條緩存,當出口FIFO的狀態為非忙時,要將數據從DDR內存條讀出送到出口FIFO。并且設計必須充分考慮DDR內存條存儲器帶寬的利用效率,設計成批量讀寫的模式,減少讀寫切換工作的開銷。出口FIFO的狀態能由門限信號th1和th2反映出來,從而根據th1和th2反饋控制地址產生邏輯。

        此外還要注意數據的次序,要保證對數據的公平處理,不能對數據造成系統差別,因此整個DDR內存邏輯上是一個循環隊列。還要保證:DDR內存滿時,不應再寫DDR內存;DDR內存空時,不應再讀DDR內存。DDR內存的空滿對地址產生邏輯也有重要影響。

        從上面分析中看出:對地址產生邏輯有影響的信號是出口FIFO的狀態指示信號th1和th2,DDR內存的空滿信號;輸出信號為對DDR內存的讀請求rd_req和寫請求wr_req,地址addr。規定:th1=1表示出口FIFO幾乎空,出口FIFO狀態為非忙,可以對DDR內存發出讀請求,直到th2=1為止;th2=1表示出口FIFO幾乎滿,出口FIFO狀態為忙,可以對DDR內存發出寫請求,直到th1=1為止。

        DDR內存的空滿由讀寫地址的比較得出,并且要提前幾個時鐘周期置出。非空標志由這樣的地址比較得出:rdaddr/= wraddr-2 and rdaddr/= wraddr-1 and rdaddr/=wraddra;非滿標志由這樣的地址比較得出:wraddr+2/=rdaddr and wraddr+3/=rdaddr and rdaddr/= wraddr+1。
        讀請求rd_req產生條件是: ①DDR內存非空,DDR內存滿且th2=0;
        ②DDR內存非空,DDR內存非滿且th1=1至th2=1。
        寫請求wr_req產生條件是:①DDR內存非滿,DDR內存空;
        ②DDR內存非滿,DDR內存非空且th2=1至th1=1。
        DDR內存模塊的地址產生邏輯使用VHDL語言在Quartus II 4.1上實現,最后編程例化到Altera公司的Stratix GX系列FPGA中物理實現。具體仿真波形詳見圖2。



        圖 2 DDR內存模塊地址產生程序的信號仿真波形
        仿真說明:輸入時鐘為150M,復位信號高有效,ready為DDR控制器準備好信號,th1=1表示出口FIFO幾乎空,在DDR內存非空時,應該讀DDR內存;th2=1表示出口FIFO幾乎滿,在DDR內存非滿時,應該寫DDR內存;輸出數據為讀請求信號rdreq,寫請求信號wrreq,輸出地址信號ddraddr(為仿真方便,仿真時的地址位寬設定為5bit)。

        通過仿真從Quartus II 4.1的報告中可以看到如此設計的時鐘可以最高達到162.92MHz,符合設計要求的150MHz。其它功能要求也能滿足。

        5.結束語
        本文根據電子系統對高速大容量內存的需要,使用成熟商業化DDR控制器IP核來設計獨立的DDR內存接口模塊,不僅能從控制的細節中解脫出來,專注于系統的關鍵功能設計,并且能夠獲得更高的性能,完全滿足我們的功能性能需要。經測試該設計性能穩定,整個工作流程簡單實用,符合設計要求。

        參考文獻
        1 stratix_GX_datasheet. Altera公司,2003
        2 Double Data Rate(DDR)SDRAM Handbook.Micron公司,2004
        3邊計年,薛宏熙.用VHDL設計電子線路[M].北京:清華大學出版社,2000



        關鍵詞: DDR 內存 接口的設計

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 德清县| 自治县| 道真| 古蔺县| 方城县| 宁国市| 临安市| 南木林县| 日土县| 黑龙江省| 广德县| 铜梁县| 察雅县| 香格里拉县| 怀宁县| 万安县| 遂昌县| 佛山市| 麻城市| 光泽县| 桦南县| 报价| 凤城市| 观塘区| 英吉沙县| 泸西县| 淄博市| 交口县| 楚雄市| 玉山县| 抚宁县| 淮北市| 昌宁县| 大洼县| 阿坝县| 格尔木市| 五大连池市| 清苑县| 望江县| 太康县| 石阡县|