基于FPGA的DDR3控制器設(shè)計
摘要 介紹了DDR3 SDRAM的技術(shù)特點、工作原理,以及控制器的構(gòu)成。利用Xilinx公司的MIG軟件工具在Virtex-6系列FPGA芯片上,實現(xiàn)了控制器的設(shè)計方法,并給出了ISim仿真驗證結(jié)果,驗證了該設(shè)計方案的可行性。
本文引用地址:http://2s4d.com/article/201609/303621.htmDDR3 SDRAM是第三代雙倍數(shù)據(jù)速率動態(tài)同步隨機存儲器的簡稱。是SDRAM內(nèi)存產(chǎn)品家族中的一員。DDR3內(nèi)存模組是采用多顆DDR3 SDRAM,并根據(jù)JEDEC的相關(guān)內(nèi)存模組設(shè)計標(biāo)準而制作。DDR3SDRAM有如下技術(shù)特點:(1)DDR3新增了重置(RESET)功能,并為此新功能設(shè)置了管腳,當(dāng)RESET命令有效時,DDR3將終止所有操作,此時處于活動量最少的狀態(tài),以降低功耗。(2)DDR3新增ZQ校準功能,ZQ也是一個新的管腳,這個引腳通過一個命令集及片上校準引擎(On—Die Calihration Engine,ODCE)自動校驗數(shù)據(jù)輸出驅(qū)動器導(dǎo)通電阻與ODT的終結(jié)電阻值。(3)在DDR3系統(tǒng)中,將參考電壓分成兩個:一個是為地址和控制總線提供服務(wù)的VREFC,另一個是為數(shù)據(jù)總線提供服務(wù)的VREFDQ,兩個不同的參考電壓為DDR3提供更好的抗噪能力。(4)在DDR3系統(tǒng)中,控制器和存儲器是一一對應(yīng)的,由此便可大幅減輕地址、控制、數(shù)據(jù)信號的總線負擔(dān),提供了信號的完整性。這是DDR3和DDR2的一個關(guān)鍵區(qū)別。對單個Rank的模組,控制器和內(nèi)存是點對點(Point to Point)的連接關(guān)系,對雙Rank的模組,控制器和內(nèi)存是點對雙點(Point to 2Points)的連接關(guān)系。(5)DDR3存儲器模塊的地址、命令、控制信號和時鐘采用了“Fly—by”的拓撲結(jié)構(gòu),大幅減輕了地址、命令、控制和數(shù)據(jù)總線的負載,提高了信號的完整性。
1 DDR3 SDRAM工作原理
系統(tǒng)上電后,在DDR3 SDRAM進行正常讀寫操作前,必須按照規(guī)定步驟完成初始化操作,然后才能進入空閑的狀態(tài),等待控制器的訪問。初始化操作過程中主要完成對模式寄存器的配置工作,DDR3芯片上有4個模式寄存器,通過模式寄存器的配置,可完成比如突發(fā)長度、讀取突發(fā)種類、CAS長度、測試模式、DLL復(fù)位、輸出驅(qū)動能力等的設(shè)置。
DDR3 SDRAM的工作狀態(tài)轉(zhuǎn)換是通過指令來實現(xiàn)的,主要通過CS#(片選信號)、RAS#(行選通信號)、CAS#(列選通信號)、WE#(讀寫控制信號)之間的組合狀態(tài)實現(xiàn),DDR3 SDRAM支持的命令主要有:
(1)預(yù)充電命令。作用是關(guān)閉特定Bank中打開的行或者所有Bank中打開的行,SDRAM尋址具有較強的獨占性。對于第一次的讀寫,只需用激活命令打開此行即可,而對于當(dāng)前行仍處于打開狀態(tài),要對新一行進行讀寫,此時就要關(guān)閉當(dāng)前行,此命令就是預(yù)充電命令。
(2)刷新命令。SDRAM單元有個缺點就是用電容存儲數(shù)據(jù)。但由于漏電流的存在,數(shù)據(jù)不能長時間存在存儲單元中,需要周期性的刷新來保持數(shù)據(jù),所以在SDRAM進行存儲工作時,必須進行刷新操作。刷新間隔和存儲芯片的溫度有關(guān),刷新方式分為自刷新(SREF)和自動刷新(AREF)。自刷新用于正常模式下,而自動刷新用于低功耗情況下。
(3)激活命令。用于激活所要進行讀或者寫操作的Bank、行和列。在讀或者寫命令到達DDR3 SDRAM的行之前,要先對要讀或?qū)懖僮鞯男杏眉せ蠲钸M行激活。與激活命令一起發(fā)送的地址位用于尋找進行操作的Bank和行,與讀或?qū)懨钜黄鸢l(fā)送的地址位用于尋找進行操作的起始列單元。
(4)讀命令。用于對一個已激活的行進行讀操作。在讀操作完成之后,被訪問的行依然處于打開狀態(tài),直到被預(yù)充電命令關(guān)閉。BA0~BA2用來選擇Bank的地址,A0~Ai提供的輸入地址用于選擇開始列地址,讀命令操作如圖1所示。
(5)寫命令。用于啟動一個突發(fā)的存儲器寫操作,由FPGA向DDR3 SDRAM中寫入數(shù)據(jù)。BA0~BA2用于選擇Bank的地址,A0~Ai提供的輸入地址用于選擇開始列地址由FPGA將數(shù)據(jù)寫入DDR3 SDRAM中。寫命令操作如圖2所示。
DDR3芯片內(nèi)部控制器中有8個Bank處于開放的狀態(tài),Bank開放的順序由控制器發(fā)出的命令決定。若8個Bank均處于開放狀態(tài),但還有數(shù)據(jù)要進入Bank,則最后開放的Bank將被關(guān)閉,以打開一個新的Bank。在自刷新時,所有Bank都會被關(guān)閉,一旦有預(yù)充電命令,Bank就會開放。
2 DDR3 SDRAM控制器設(shè)計方案
設(shè)計采用Xilinx公司提供的DDR3 SDRAM控制器IP核。采用此方案的好處是縮短開發(fā)周期、簡化系統(tǒng)設(shè)計。設(shè)計者只需在Xilinx公司提供的MIG3.92軟件工具界面上選擇FPGA及DDR3 SDRAM芯片型號、總線寬度、速度級別,設(shè)置突發(fā)長度、CAS延遲、引腳分配等參數(shù),即可生成DDR3 SDRAM控制器。FPGA芯片采用Xilinx公司的Virtex-6系列XC6VLX240T-1FFG1759C型號,DDR3 SDRAM芯片采用鎂光公司的MT8JSF25664HZ-1C4D1,該內(nèi)存芯片行地址寬度為15位。列地址寬度為10位,Bank地址位寬為3位,總?cè)萘繛? GB。設(shè)置突發(fā)長度為8位,數(shù)據(jù)寬度為64位,速度級別為-2,時鐘頻率為400 MHz。
DDR3 SDRAM控制器的主要功能是完成對DDR3SDRAM的初始化,將DDR3 SDRAM復(fù)雜的讀寫時序轉(zhuǎn)化成用戶簡單的讀寫時序,將DDR3 SDRAM接口的雙時鐘數(shù)據(jù)轉(zhuǎn)化成用戶的單時鐘數(shù)據(jù),并發(fā)送周期性的刷新命令來維持DDR3 SDRAM中的數(shù)據(jù)??刂破髦饕譃閭鬏攲雍臀锢韺?,傳輸層負責(zé)接收上層用戶邏輯的訪存請求,并將這些請求轉(zhuǎn)換成DDR3SDRAM所需的時序發(fā)送給物理層。物理層負責(zé)將控制和地址信號按照DDR3 SDRAM需要的時序發(fā)送給存儲芯片,同時在傳輸層和存儲芯片之間創(chuàng)建地址通路和數(shù)據(jù)通路,捕獲DDR3 SDRAM發(fā)出的數(shù)據(jù),通過輸入輸出緩存發(fā)送DDR3 SDRAM所有的控制信號、地址信號以及數(shù)據(jù)信號,同時保證指令與地址,數(shù)據(jù)的同步,DDR3 SDRAM接口模型如圖3所示。
DDR3 SDRAM內(nèi)存控制器的設(shè)計必須滿足兩大基本要求:(1)所設(shè)計的控制器要實現(xiàn)對內(nèi)存模組的管理,完成CPU的訪存要求。(2)需盡可能提高訪問內(nèi)存的速度和帶寬,這是衡量內(nèi)存控制器性能的重要指標(biāo),同時還需考慮內(nèi)存的兼容性和成本問題。
3 實驗結(jié)果
為驗證DDR3控制器IP核的正確性,對MIG生成的測試模塊在ISE14.2環(huán)境下進行功能仿真驗證,該模塊可以對DDR3存儲器進行一系列操作,并對寫入和讀出的數(shù)據(jù)進行比較,從而驗證控制器的正確性。仿真結(jié)果如圖4所示,phy_init_done的值為1,說明初始化完成。當(dāng)app_cmd=000時,表示當(dāng)前進行寫操作,只有同時app_en=1和app_rdy=1,app_ addr才能寫入成功。當(dāng)app_cmd=001時,表示當(dāng)前操作為讀操作,可通過rror這一比較信號驗證控制器是否正確。從仿真結(jié)果可看出,比較信號error始終為低電平,說明寫入和讀出的數(shù)據(jù)是一致的。
4 結(jié)束語
通過對DDR3的技術(shù)特點和工作原理進行分析,將DDR3控制器的從層次上分為傳輸層和物理層,然后給出了DDR3 SDRAM控制器的設(shè)計方法,將控制器在Xilinx公司的Virtex-6系列FPGA芯片上實現(xiàn),通過ISim軟件仿真結(jié)果,證明了設(shè)計的可行性和正確性,以及IP核設(shè)計的DDR3控制器具有較好的適應(yīng)性和靈活性,縮短了系統(tǒng)開發(fā)周期、降低了系統(tǒng)開發(fā)成本。
評論