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