魏騰飛
(西安電子科技大學,西安,710000)
目前由于DDR2 成本低,PCB 設(shè)計和信號完整性設(shè)計的相對容易,所以仍廣泛使用。DDR2 和以前傳統(tǒng)的SDRAM 不同,DDR2 采用雙倍數(shù)據(jù)速率接口,也就是說在相同的系統(tǒng)時鐘頻率下DDR2 的接口數(shù)據(jù)速率是SDRAM 的兩倍。而且由于DDR2 接口工作頻率較高,所以DDR2 的數(shù)據(jù)線一般是每8bit 就有一位獨立的數(shù)據(jù)采樣信號DQS。這樣就能較好的滿足數(shù)據(jù)采樣的建立和保持時間。而且DDR2顆粒的工作時鐘使用差分時鐘線,能夠減少共模干擾和時鐘的抖動,提高了時鐘信號的質(zhì)量。
在一般的工程應用中,基本使用的是xilinx 或Altear 公司的FPGA。各自都提供有DDR2 控制器的IP CORE,其使用也比較簡便。但是在一些特定的應用環(huán)境下,并不能達到最優(yōu)的效果。而且IP CORE 內(nèi)部代碼是不可見的。由此考慮到,設(shè)計一個DDR2 PHY 層控制器,把和DDR2 控制相關(guān)的邏輯,全都放在PHY 層。而最底層的DDIO 和上層的應用邏輯,則可以根據(jù)實際情況來設(shè)計。這樣,使得邏輯的代碼修改量減小,提高了重用性。下面就Altera 的Cyclone系列的FPGA 來介紹設(shè)計的相關(guān)重點。
DDR2 PHY 層控制器主要由命令解釋邏輯,DDR2 控制邏輯和DDIO 邏輯三部分構(gòu)成。其中DDIO 邏輯,由于各個系列的IOB 結(jié)構(gòu)有所不同,需要根據(jù)器件,并由工具生成。在Altera 的Cyclone 系列中DDIO 邏輯的IP CORE 使用是免費的。本著使用簡便,和接口信號少的原則,DDR2 PHY 層控制器的整體結(jié)構(gòu)如圖1。
控制器的信號介紹,整個系統(tǒng)的時鐘由clk 和clk_90 輸入,clk 和clk_90 同頻,但是clk_90 的相位超前clk 相位為90 度。一般有FPGA 內(nèi)的PLL 鎖相環(huán)提供這兩路時鐘信號。Cmd 信號是控制整個邏輯的命令線由3bit 組成,命令包括:NOP,BANK_ACTIVE,DDR2_INIT,AUTO_REFRESH,WRITE,READ 和PRECHARGE_ALL。具體的對應關(guān)系見表1。address 是控制器的地址輸入線,位數(shù)由 DDR2 顆粒的容量決定。input_data 是數(shù)據(jù)的輸入端。init_valid 信號輸出高電平表示DDR2 顆粒初始化完成可以進行其他操作。data_valid 信號輸出高電平表示output_data 輸出數(shù)據(jù)線上的數(shù)據(jù)有效。cmd_ack 信號為高表示控制器正在執(zhí)行當前命令。為低表示當前命令完成,并進入到NOP 狀態(tài)。
DDIO 接口邏輯是連接FPGA 和DDR2 之間的橋梁。它完成如下功能:數(shù)據(jù)輸入,通過特有的DQS 信號采樣。數(shù)據(jù)輸出,并產(chǎn)生相應的DQS 信號。實現(xiàn)數(shù)據(jù)速率的轉(zhuǎn)換。因為在系統(tǒng)時鐘頻率和DDR2顆粒數(shù)據(jù)位寬一定的情況下,F(xiàn)PGA 內(nèi)部一般是單沿數(shù)據(jù)處理的,而DDR2 是雙沿采樣,所以如果DDR2 顆粒的數(shù)據(jù)位寬為16bit 的情況下,那么轉(zhuǎn)換到FPGA 內(nèi)部就形成了一拍32bit 的數(shù)據(jù)位寬。
在Altera 的Quartus 中的MegaWizard Plug 先生成8bit 的DDIO 和1bit 的DDIO_OUT 的例化模塊。具體結(jié)構(gòu)如圖2。
其 中 的Clock delay control circuitry 是Cyclone 系 列FPGA 內(nèi)部的一個固件邏輯。固定連接在一個PIN 上面,所以在分配PIN 的時候,要把DQS 分配在有延時功能的PIN 上面。Cyclone系列構(gòu)成的高數(shù)據(jù)速率的DDIO 接口,在寫周期時,其DQS 信號是由DDR2 PHY 控制器產(chǎn)生的,而DQS 的邊沿和DQ 數(shù)據(jù)組的中心對齊。在讀周期時,其DQS 信號是由DDR2 顆粒產(chǎn)生的,而DQS 的邊沿和DQ 數(shù)據(jù)組的邊沿對齊。這個要特別注意。因此在讀周期時,DQS通過FPGA 內(nèi)部的Clock delay control circuitry 模塊,將DQS的邊沿和DQ 數(shù)據(jù)組的中心對齊,實現(xiàn)DQ 數(shù)據(jù)組的采樣。在寫周期時,DQS 的邊沿和DQ 數(shù)據(jù)組的邊沿相差90 相位移,所以要用超前90 度的Clk_90 來打DQ 數(shù)據(jù),而用clk 來輸出DQS,這樣就實現(xiàn)了DQS 的邊沿和DQ 數(shù)據(jù)組的中心對齊。
本邏輯是整個DDR2 PHY 層控制器的核心,所有操作DDR2 顆粒的工作,都由其完成。在應用本控制器前,需要根據(jù)DDR2 顆粒器件的數(shù)據(jù)手冊,來設(shè)置一些合適的參數(shù)才能正常工作。包括上電延時,用來等待時鐘信號穩(wěn)定POWER_UP_DELAY 延時,空操作到預充電的NOP_TO_PRE_DELAY 延時,tRCD,tRP,tMRD,tRFC,MRS,EMRS 等。由于本控制器使用了verilog 的parameter 來定義。使得參數(shù)可以任意修改,來應用在多種DDR2 器件上面。DDR2 大部分的不同器件的參數(shù)是一樣的,有時只是,不同廠家的參數(shù)稍有不同而已。從而使得模塊的靈活性增強。參數(shù)的設(shè)置如下:
以上參數(shù)都是參考DDR2 芯片手冊設(shè)定的,本例參考MT46V16M16 的器件手冊設(shè)置的。在使用過程當中如果想將tRFC改為90ns 而系統(tǒng)時鐘改為125MHz,其他不變時,那么只需這樣例化即可:
這樣根據(jù)具體的DDR2 的器件,來例化一個可用的PHY 層控制器。
DDR2 PHY 層控制器是由一個狀態(tài)機來控制運行的,通過當前的命令和當前的狀態(tài)來決定下一步的操作。而且為了提高時鐘頻率和滿足時序要求,控制器中用了流水線。當在連續(xù)讀或連續(xù)寫的時候,流水線內(nèi)部邏輯的處理速度達到時鐘頻率。但是單次操作時效率會有所降低,所以因盡量多使用連續(xù)的讀寫操作來達到較高的數(shù)據(jù)吞吐速率。下圖介紹了DDR2 PHY 層控制器的狀態(tài)跳轉(zhuǎn)圖3,表2 為各狀態(tài)的描述表。
如圖3 所示,這里主要介紹NOP,AUTO_REFRESH,READ 和WRITE。NOP 是控制器的空閑狀態(tài)。在沒有其他操作的時候,應該給出NOP 命令使控制器跳入空閑狀態(tài)。好處是在NOP 狀態(tài)下,DDR2 顆粒的nCS 為高,沒有選中DDR2 顆粒,這樣可以降低部分功耗。在READ 和WRITE 時,控制器輸入或輸出的數(shù)據(jù)長度,由READ和WRITE 命令給定的時鐘周期個數(shù)決定。例如READ 命令給出的2個時鐘周期,那么就會執(zhí)行2個讀命令,WRITE 命令同理。唯一的區(qū)別是在READ 命令中,由于使用了流水線,所以讀出的數(shù)據(jù)有效必須由data_valid 信號來指示。即在發(fā)出READ 命令后,當data_valid 信號為高時表示控制器的輸出數(shù)據(jù)線的數(shù)據(jù)是有效的,可以進行采樣。AUTO_REFRESH 為刷新命令,最好跟據(jù)具體的應用情況來安排AUTO_REFRESH 命令的發(fā)出周期和發(fā)起時間。但是在某些應用中甚至可以不用AUTO_REFRESH 命令。比如在一些視頻圖像數(shù)據(jù)緩沖的應用中,數(shù)據(jù)只是在DDR2 中臨時存儲,但很快就會被取走,寫入和取走的間隔小于64ms。在這樣的應用中,就可以不用AUTO_REFRESH 命令。這樣不但簡化了DDR2 的操作,也使得DDR2 的數(shù)據(jù)吞吐的可用帶寬提高。
下面介紹DDR2 PHY 層控制器的讀寫時序。仿真是在modelsim6.0 下進行的行為仿真。DDR2 用的是Micron SDRAM DDR2 的BFM(MT46V16M16),此BFM 帶有狀態(tài)命令打印,可以實時的在命令行里看到BFM 的狀態(tài),比較方便。在進行讀寫時,提前要激活BANK。圖省略了BANK 的激活。
本文介紹的DDR2 PHY 層控制器,在Cyclone II 系列的FPGA 上使用,占用的資源情況和性能如下表3:
可以看出它的資源占用率是比較少的,而且工作頻率也較高。而Altear 的DDR and DDR2 SDRAM Controller 9.0 版本的IP CORE 在Cyclone II 系列上使用頻率為167MHz。在實際的項目應用中,操作簡便,性能良好。應用在不同的DDR2 器件上只需修改參數(shù)即可應用。加快了項目的進度。
[1] Altera.Cyclone III Device Handbook,2010.
[2] Altera.Quartus II 12.0 手冊,2012.
[3] XILINX.針對Spartan-3 FPGA 的DDR22 SDRAM 存儲器接口,2011.
[4] Micron.Double Data.Rate SDRAM,2010