用Xilinx FPGA實現(xiàn)DDR SDRAM控制器
1 引言
本文引用地址:http://m.butianyuan.cn/article/185551.htm在高速信號處理系統(tǒng)中, 需要緩存高速、大量的數(shù)據(jù), 存儲器的選擇與應(yīng)用已成為系統(tǒng)實現(xiàn)的關(guān)鍵所在。DDR SDRAM是一種高速CMOS、動態(tài)隨機(jī)訪問存儲器, 它采用雙倍數(shù)據(jù)速率結(jié)構(gòu)來完成高速操作。SDR SDRAM一個時鐘周期只能傳輸一個數(shù)據(jù)位寬的數(shù)據(jù), 因此在相同的數(shù)據(jù)總線寬度和工作頻率下, DDR SDRAM的總線帶寬比SDR SDRAM的總線帶寬提高了一倍。
Xilinx VirtexTM- 4 FPGA 具備ChipSync 源同步技術(shù)等優(yōu)勢。它的輸入輸出模塊( IOB) 提供了封裝引腳與內(nèi)部可配置邏輯之間的接口, 無論是輸入路徑還是輸出路徑都提供了一個可選的SDR 和DDR 寄存器。VirtexTM- 4 的IOB 專門針對源同步設(shè)計進(jìn)行了優(yōu)化, 包括每一位的偏移校正、數(shù)據(jù)的串行化和解串行化、時鐘分頻以及專用的本地時鐘資源等, 而且它在每一個I/O 模塊中都提供了64- 階延遲線。這些特性使得VirtexTM- 4 FPGA 能夠更好的實現(xiàn)DDR SDRAM控制器的邏輯設(shè)計, 準(zhǔn)確可靠的捕獲數(shù)據(jù)。
實驗板選擇專為DSP 應(yīng)用而優(yōu)化的Virtex- 4 SX35 作為DDR SDRAM控制器的實現(xiàn)平臺, 選用Micron MT46V8M16P-75Z DDR SDRAM。
2 DDR SDRAM 控制器工作原理
DDR SDRAM控制器的主要功能就是完成對DDR SDRAM的初始化, 將DDR SDRAM復(fù)雜的讀寫時序轉(zhuǎn)化為用戶簡單的
讀寫時序, 以及將DDR SDRAM接口的雙時鐘沿數(shù)據(jù)轉(zhuǎn)換為用戶的單時鐘沿數(shù)據(jù), 使用戶像操作普通的RAM一樣控制DDR SDRAM; 同時, 控制器還要產(chǎn)生周期性的刷新命令來維持DDR SDRAM內(nèi)的數(shù)據(jù)而不需要用戶的干預(yù)。該控制器的模塊化表示如圖1。
應(yīng)用層接口是DDR 控制器與FPGA 用戶設(shè)計的接口。對于DDR 控制器的用戶來說, 只需要了解如何使用應(yīng)用層接口, 通
過應(yīng)用層接口給DDR 控制器發(fā)出指令、數(shù)據(jù), 并且接收數(shù)據(jù)。這種模塊化設(shè)計增加了DDR 控制器的可移植性, 也使用戶使用起來更簡單。
要功能是:完成存儲器的初始化, 接收并解碼用戶指令然后產(chǎn)生讀、寫、刷新等指令??刂茖拥倪壿嬙O(shè)計主要是由一個狀態(tài)機(jī)管理的。物理層是直接與DDR SDRAM通信的平臺, 它的主要功能是:捕獲DDR SDRAM發(fā)出的數(shù)據(jù)、以及通過輸入輸出緩存發(fā)送所有DDR SDRAM的控制信號、地址信號以及數(shù)據(jù)信號。
2.1 控制層工作原理
控制層主要由一個狀態(tài)機(jī)來控制DDR SDRAM控制器的狀態(tài)轉(zhuǎn)移。狀態(tài)機(jī)如圖2 所示。
DDR SDRAM上電后必須按照規(guī)定的程序完成初始化的過程。在初始化過程中一定要注意普通模式寄存器與擴(kuò)展模式寄存器的值是否正確。普通模式寄存器用來設(shè)定DDR SDRAM的工作方式, 包括突發(fā)長度、突發(fā)類型、CAS 潛伏期和工作模式;擴(kuò)展模式寄存器主要實現(xiàn)對DDR SDRAM內(nèi)部DLL 的使能和輸出驅(qū)動能力的設(shè)置。在本實驗板中選擇的是MicronMT46V8M16P- 75Z 型號的DDR SDRAM, 該型號芯片CAS 潛伏期只能為2 或者2.5。
初始化完成之后, DDR SDRAM進(jìn)入正常的工作狀態(tài), 此時可對存儲器進(jìn)行讀寫和刷新操作。在本設(shè)計中為了計算讀數(shù)據(jù)延遲量引入了一個假讀操作(Dummy Read) , 這將在下一節(jié)中詳細(xì)分析。DDR SDRAM在一對差分時鐘的控制下工作。命令在每個時鐘的上升沿觸發(fā)。隨著數(shù)據(jù)一起傳送的還包括一個雙向的數(shù)據(jù)選通信號DQS, 接收方通過該信號來接收數(shù)據(jù)。該選通信號與數(shù)據(jù)相關(guān), 其作用類似于一個獨立的時鐘。DQS 作為選通信號在讀周期中由DDR SDRAM來產(chǎn)生。讀周期中, DQS 與數(shù)據(jù)是邊沿對齊的。讀操作時, DDR 控制器采用直接時鐘獲取的方式捕獲數(shù)據(jù)。讀命令觸發(fā)后, 數(shù)據(jù)將在CAS 延遲之后出現(xiàn)在數(shù)據(jù)總線上。DQS 在寫周期中是由DDR 控制器產(chǎn)生的。寫周期中, DQS 與數(shù)據(jù)是中心對齊的。讀寫操作時序如圖3(DQ 指傳輸?shù)臄?shù)據(jù)) 。
在進(jìn)行讀寫操作之前需要先執(zhí)行ACTIVE 命令( 激活命令) , 與激活命令一起被觸發(fā)的地址用來選擇將要存取的區(qū)( bank) 和頁( 或行) 。與讀或?qū)懨钜黄鹩|發(fā)的地址位用來選擇突發(fā)存取的起始列單元。在激活指令之前還有一個預(yù)充電( PRECHARGE) 操作, 預(yù)充電操作關(guān)閉之前進(jìn)行操作的存儲區(qū)或行, 此操作之后DDR SDRAM才能對新的區(qū)或者行進(jìn)行讀寫操作。
DDR SDRAM需要用自動刷新(AUTO REFRESH) 命令來周期性的刷新DDR SDRAM, 以保持其內(nèi)部的數(shù)據(jù)不丟失。自動刷新必須在所有區(qū)都空閑的狀態(tài)下才能執(zhí)行。128Mb 的DDR SDRAM執(zhí)行自動刷新的周期最大為15.625μs。
寫操作是由FPGA 向DDR SDRAM寫入數(shù)據(jù), 只需按照DDR SDRAM的工作要求發(fā)出相應(yīng)的指令即可, 邏輯設(shè)計相對簡單, 因此下面我們將詳細(xì)介紹讀操作中的數(shù)據(jù)捕獲技術(shù)。
2.2 物理層數(shù)據(jù)捕獲技術(shù)及數(shù)據(jù)通道電路
物理層的主要功能是獲得DDR SDRAM發(fā)出的數(shù)據(jù)、以及通過輸入輸出緩存發(fā)送所有DDR SDRAM的控制信號、地址信號以及數(shù)據(jù)信號。數(shù)據(jù)捕獲技術(shù)及數(shù)據(jù)通道電路是DDR SDRAM控制器的技術(shù)核心。DDR SDRAM接口是源同步接口,
即數(shù)據(jù)與傳輸時鐘是邊沿對齊的。因此, 為了在FPGA 中可靠捕獲數(shù)據(jù)要么延遲時鐘要么延遲數(shù)據(jù), 使數(shù)據(jù)與時鐘中心對齊。本設(shè)計采取直接時鐘數(shù)據(jù)捕獲技術(shù)。
所謂直接時鐘數(shù)據(jù)捕獲技術(shù)就是利用DQS 信號計算數(shù)據(jù)延遲量, 通過延遲數(shù)據(jù)使數(shù)據(jù)中心與FPGA 內(nèi)部時鐘沿對齊, 然
后用該內(nèi)部時鐘直接讀取數(shù)據(jù)。DQS 是由DDR 發(fā)出的數(shù)據(jù)選通信號, 它與FPGA 內(nèi)部時鐘頻率相同。此項技術(shù)的關(guān)鍵是確定數(shù)據(jù)的延遲時間。相對于其他的數(shù)據(jù)捕獲技術(shù), 這種直接時鐘數(shù)據(jù)捕獲技術(shù)可以應(yīng)用于更高的時鐘頻率, 精確性和穩(wěn)定性都高于其他方法。
為了得到數(shù)據(jù)應(yīng)該延遲的時間量, 首先要對DQS 進(jìn)行邊沿檢測??刂破靼l(fā)出Dummy_rd_en 信號( 即假讀信號) 使DDR
SDRAM 發(fā)出DQS 信號, 當(dāng)延遲量計算完畢時, 置Dummy_rd_en 為低。
在Xilinx VirtexTM- 4 FPGA 中實現(xiàn)該延遲檢測電路是非常容易的, 因為設(shè)計可以直接利用FPGA 內(nèi)部的IDELAY 與IDELAY_CTRL 電路。圖5 表示了邊沿檢測以及數(shù)據(jù)通道電路。
在該電路中, DQS 輸入到IDELAY 模塊, 延遲量初始化為0, 然后延遲量逐次遞增, 在這個過程中不斷檢測延遲后的DQS 的跳變沿, 并將延遲量TAP 值記錄下來, 以便計算數(shù)據(jù)DQ 的延遲量。在圖中可看出, 邊沿檢測和控制邏輯發(fā)出DLYRST、DLYCE 和DLYINC 三個信號來控制IDELAY 延遲模塊的工作模式。
由于IDELAY 模塊的最大延遲階數(shù)為64, 且在Xilinx VirtexTM-4 FPGA 中, 延遲模塊的精度TIDELAYRESOLUTION 為75ps, 所以延遲時間最大為75ps*64=4.8ns, 因此當(dāng)時鐘頻率低于200MHZ( 周期為5ns) 時, 不可能檢測到兩個跳變沿, 此時必須采取適當(dāng)?shù)拇胧﹣慝@得數(shù)據(jù)延遲量。當(dāng)64 階延遲量完成時只檢測到一個跳變沿時, 我們認(rèn)為數(shù)據(jù)延遲量為檢測到第一個跳變沿時的延遲量加上16, 因為四分之一個200MHZ 時鐘周期大約為16階延遲量( 16*75=1.2ns) 即:
延遲后的數(shù)據(jù)經(jīng)過IDDR 觸發(fā)器分別得到上升沿對應(yīng)的數(shù)據(jù)和下降沿對應(yīng)的數(shù)據(jù), 然后再通過異步查找表FIFO 使讀進(jìn)FPGA 的數(shù)據(jù)與FPGA 內(nèi)部時鐘同步方便用戶使用。
3 控制器實驗結(jié)果及結(jié)論
該DDR 控制器設(shè)計總共占用751 個4 輸入LUT, 占總LUT 資源的2%。另外, 設(shè)計還使用了3 個DCM。DDR 控制器在Xilinx ISE8.1i 編程環(huán)境下實現(xiàn), 結(jié)合ModelSim SE6.1b 進(jìn)行仿真。板上調(diào)試時時鐘選為100MHZ, 經(jīng)測試數(shù)據(jù)傳輸及捕獲準(zhǔn)確無誤。
經(jīng)實驗驗證該DDR 控制器工作穩(wěn)定可靠、確實可行, 占用邏輯資源較少, 且具有較高的可移植性, 以及簡單方便的用戶接口。該DDR 控制器經(jīng)過簡單的修改就可以控制其他型號的DDR SDRAM芯片, 因此可以極大地提高信號處理板的存儲容量, 很好的用于高速信號處理系統(tǒng)中。
本文的創(chuàng)新觀點是基于Xilinx VirtexTM- 4 FPGA, 利用DCM及內(nèi)部延遲線等優(yōu)勢, 采用直接時鐘捕獲技術(shù)實現(xiàn)DDR SDRAM控制器。
評論