用Xilinx FPGA實現(xiàn)DDR SDRAM控制器
1 引言
本文引用地址:http://butianyuan.cn/article/185551.htm在高速信號處理系統(tǒng)中, 需要緩存高速、大量的數(shù)據(jù), 存儲器的選擇與應(yīng)用已成為系統(tǒng)實現(xiàn)的關(guān)鍵所在。DDR SDRAM是一種高速CMOS、動態(tài)隨機訪問存儲器, 它采用雙倍數(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è)計進行了優(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)機管理的。物理層是直接與DDR SDRAM通信的平臺, 它的主要功能是:捕獲DDR SDRAM發(fā)出的數(shù)據(jù)、以及通過輸入輸出緩存發(fā)送所有DDR SDRAM的控制信號、地址信號以及數(shù)據(jù)信號。
2.1 控制層工作原理
控制層主要由一個狀態(tài)機來控制DDR SDRAM控制器的狀態(tài)轉(zhuǎn)移。狀態(tài)機如圖2 所示。
DDR SDRAM上電后必須按照規(guī)定的程序完成初始化的過程。在初始化過程中一定要注意普通模式寄存器與擴展模式寄存器的值是否正確。普通模式寄存器用來設(shè)定DDR SDRAM的工作方式, 包括突發(fā)長度、突發(fā)類型、CAS 潛伏期和工作模式;擴展模式寄存器主要實現(xiàn)對DDR SDRAM內(nèi)部DLL 的使能和輸出驅(qū)動能力的設(shè)置。在本實驗板中選擇的是MicronMT46V8M16P- 75Z 型號的DDR SDRAM, 該型號芯片CAS 潛伏期只能為2 或者2.5。
初始化完成之后, DDR SDRAM進入正常的工作狀態(tài), 此時可對存儲器進行讀寫和刷新操作。在本設(shè)計中為了計算讀數(shù)據(jù)延遲量引入了一個假讀操作(Dummy Read) , 這將在下一節(jié)中詳細分析。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ù)) 。
在進行讀寫操作之前需要先執(zhí)行ACTIVE 命令( 激活命令) , 與激活命令一起被觸發(fā)的地址用來選擇將要存取的區(qū)( bank) 和頁( 或行) 。與讀或?qū)懨钜黄鹩|發(fā)的地址位用來選擇突發(fā)存取的起始列單元。在激活指令之前還有一個預(yù)充電( PRECHARGE) 操作, 預(yù)充電操作關(guān)閉之前進行操作的存儲區(qū)或行, 此操作之后DDR SDRAM才能對新的區(qū)或者行進行讀寫操作。
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è)計相對簡單, 因此下面我們將詳細介紹讀操作中的數(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 進行邊沿檢測??刂破靼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 階延遲量完成時只檢測到一個跳變沿時, 我們認為數(shù)據(jù)延遲量為檢測到第一個跳變沿時的延遲量加上16, 因為四分之一個200MHZ 時鐘周期大約為16階延遲量( 16*75=1.2ns) 即:
延遲后的數(shù)據(jù)經(jīng)過IDDR 觸發(fā)器分別得到上升沿對應(yīng)的數(shù)據(jù)和下降沿對應(yīng)的數(shù)據(jù), 然后再通過異步查找表FIFO 使讀進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 進行仿真。板上調(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控制器。
評論