《電子技術應用》
您所在的位置:首頁 > 微波|射頻 > 設計應用 > 基于FPGA的DDR內(nèi)存條的控制研究與設計
基于FPGA的DDR內(nèi)存條的控制研究與設計
李旋,劉慶華
摘要: 隨著數(shù)據(jù)存儲量的日益加大以及存儲速度的加快,,大容量的高速存儲變得越來越重要,。內(nèi)存條既能滿足大容量的存儲又能滿足讀寫速度快的要求,,這樣使得對內(nèi)存條控制的應用越來越廣泛。首先介紹了內(nèi)存條的工作原理,內(nèi)存條電路設計的注意事項,以及如何使用FPGA實現(xiàn)對DDR內(nèi)存條的控制,,最后給出控制的仿真波形。
Abstract:
Key words :

 1 內(nèi)存條的工作原理

  DDR內(nèi)存條是由多顆粒的DDR SDKAM芯片互連組成,,DDR SDRAM是雙數(shù)據(jù)率同步動態(tài)隨機存儲器的縮寫,。DDR SDRAM采用雙數(shù)據(jù)速率接口,也就是在時鐘的正沿或負沿都需要對數(shù)據(jù)進行采樣,。在本設計中采用的內(nèi)存是hynix公司的lGB的HYMD564M646CP6-J,。內(nèi)存條的工作原理與單顆粒內(nèi)存芯片的工作原理一樣,主要的控制信號以及控制信號完成的主要功能如表1所示,。

 

  以上的控制信號及地址信號都是由差分時鐘信號中CK的正沿觸發(fā),。DDR SDRAM必須按照一定的工作模式來完成初始化,完成初始化后才能進入到讀寫過程,。DDR SDRAM的控制流程如圖1所示,。

 

  初始化的過程為:(1)上電后,延時200us等待時鐘穩(wěn)定,,然后將CKE拉高,,執(zhí)行一次NOP或者DESELECT操作。(2)執(zhí)行一次precharge all操作,。(3)設置擴展模式寄存器(BAl為低電平BA0為高電平)使能DLL,。(4)設置模式寄存器(BAl,BA0均為低電平)復位DLL,。(5)執(zhí)行一次pre-charge all指令,。(6)再經(jīng)過2個自刷新(Auto refresh)指令后再次設置模式寄存器設置操作模式。(7)延時200個周期才能進行讀操作,。DDR SDRAM的擴展模式寄存器和模式寄存器的定義如圖2和圖3所示,。

 

  完成初始化后進入圖1中的IDEL狀態(tài),此時可以進行讀寫操作,。在進行寫操作時,,首先要進入Row active狀態(tài),此時選中要操作的bank與row,。然后執(zhí)行NOP操作等待tRCD的時間后可以進入寫狀態(tài),。

  2 內(nèi)存條電路設計

  由于DDR SDRAM采用的時鐘頻率較高,加上DDRSDRAM的數(shù)據(jù)率為時鐘速率的兩倍,,DDR SDRAM對時鐘質(zhì)量的要求很高,,必須保證時鐘上升沿的時間小于5%的時鐘周期。DDR SDRAM的數(shù)據(jù)線與相對應的數(shù)據(jù)采樣信號(DQS)的長度要盡量相等,,來保證數(shù)據(jù)的采樣窗口盡量要大一些,。由于信號質(zhì)量要求高,我們將所有的信號線都采用微電線和帶狀線來傳輸,。使用FPGA和內(nèi)存條的IBIS模型進行仿真來保證設計中信號的完整性,,我們將信號分為3類,第一類,,由FPGA到DDR SDRAM的時鐘差分信號,;第二類,由FPGA到DDR SDRAM的控制線,;第三類,,F(xiàn)PGA與DDR SDRAM之間的雙向傳輸線。對三類IBIS模型的herperlinx仿真如圖4:


 

  通過仿真我們可以確定3類信號線中帶狀線和微帶線板厚,,銅厚,,以及信號線的線寬,線長等參數(shù),。

  3 FPGA對DDR SDRAM的控制

  本設計中使用的FPGA是ALTERA公司的cyclone II系列的EP2C20F484C6,。對內(nèi)存條的工作模式設置為BL=4,,CL=3,如圖7為FPGA對DDR SD-RAM的控制模塊框圖,。

  其中,,Clkin為外部輸入的時鐘信號,為了使FPGA到DDR SDRAM的兩對時鐘信號的質(zhì)量盡量好,,使用FPGA內(nèi)部的兩個鎖相環(huán)輸出差分時鐘信號,。為了保證鎖相環(huán)輸出的兩路差分信號相位一致,在設計PCB時我們使晶振輸出到FPGA兩個PLL輸入的布線距離相等,,為了保證兩個鎖相環(huán)輸出信號到達DDR SDRAM接口時相位一致,,由FPGA鎖相環(huán)輸出到DDR SDRAM的接口布線長度相等。

  控制模塊采用的工作模式是按照圖2所示的狀態(tài)來跳轉(zhuǎn),,上電以后首先是對DDR SDRAM進行初始化,,初始化完成以后就可以進出等待工作的狀態(tài)。此時刷新計數(shù)器開始計數(shù),,等待7.8 us后給出刷新請求,,在空閑狀態(tài)時(IDEL)刷新請求的優(yōu)先級最高,響應刷新請求后執(zhí)行REFR-ESH指令同時復位刷新計數(shù)器,。初始化后如果FIF00的讀空標志為O說明FIF00中有數(shù)據(jù),,此時可以進入到寫狀態(tài)。由于采用的是BL=4的工作狀態(tài),,寫操作每次都寫入4個64位的數(shù),。所以,我們將輸入的數(shù)據(jù)進行并位成256位的數(shù),,每次寫操作只需要從FIF00中讀出一個256位的數(shù),。假設我們采用1OOMHz的時鐘,每寫4個64位的數(shù)大概需要10個時鐘周期,。如果輸入的數(shù)據(jù)位寬為16位,,那么由外部傳給FPGA的數(shù)據(jù)率要小于160 MHz。寫操作完成的時候進入空閑狀態(tài),,等待刷新標志或者讀空標志,。讀的時候需要等待系統(tǒng)發(fā)出讀命令(read),然后進入讀狀態(tài),,讀出的數(shù)據(jù)由Ddrout[127:O]送到FIF01和FIF02中,。通過控制FIF01和FIF02的寫請求信號來實現(xiàn)將數(shù)據(jù)分別寫入。讀的時候BL=4每次讀出4個64位數(shù),,執(zhí)行一次讀操作大約需要10個時鐘周期,。如果輸出的數(shù)據(jù)位寬為16位,那么數(shù)據(jù)由FPGA向外傳輸?shù)乃俾室∮?60 MHzo控制模塊在讀寫內(nèi)存條的時候控制數(shù)據(jù)模塊來實現(xiàn)數(shù)據(jù)率為時鐘速度的兩倍,數(shù)據(jù)模塊使用兩個時鐘一個是系統(tǒng)時鐘一個是2倍的系統(tǒng)時鐘,。

  因為DDR SDRAM的控制相對復雜,,我們可以使用內(nèi)存條的vefilog模型,通過對內(nèi)存條的vefilog仿真,,我們可以知道自己程序的正確性,,圖8為modelsim中的仿真波形。如果仿真過程正確,,我就可以對程序進行編譯,布局布線,,然后下載到FPGA中,,由于布局布線的延時,輸出的信號波形與仿真波形不一致,,此時,,可以通過調(diào)整FPGA內(nèi)部的鎖相環(huán)來調(diào)整時序,實現(xiàn)對內(nèi)存條的控制,。


  4 結束語

  通過介紹內(nèi)存條的工作原理,,以及內(nèi)存條電路設計時的注意事項的介紹,我們可以更合理的實現(xiàn)FPGA與內(nèi)存條的互連,。最后,,給出FPGA內(nèi)部對內(nèi)存條控制的方法,以及給出仿真波形,,實現(xiàn)對內(nèi)存條的控制,。實現(xiàn)FPGA對DDRSDRAM內(nèi)存條的控制,可以實現(xiàn)大容量高速的數(shù)據(jù)存儲,,在工程中的得到廣泛的應用,。

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權禁止轉(zhuǎn)載,。