DDRSDRAM技術專題.doc_第1頁
DDRSDRAM技術專題.doc_第2頁
DDRSDRAM技術專題.doc_第3頁
DDRSDRAM技術專題.doc_第4頁
DDRSDRAM技術專題.doc_第5頁
已閱讀5頁,還剩15頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

DDR SDRAM技術專題DDRSDRAM是“雙倍數(shù)據(jù)速率同步動態(tài)隨機訪問存儲器”double date rate synchronous dynamic random access memory的縮寫,是一種低成本、高容量的存儲器,在計算機、消費類電子、通信等領域中一些要求高容量存儲空間的場合有著廣泛的應用。本技術專題試圖以從事DDRSDRAM使用及其控制器設計的電子工程師的角度對DDRSDRAM進行較為詳細的討論。我們希望本技術專題能夠為廣大電子設計工程師提供有益的參考。1. DDR SDRAM概述SDRAM是同步動態(tài)隨機訪問存儲器的縮寫,是一種低成本、高容量的存儲器。它在計算機、消費類電子、通信等領域中一些要求高容量存儲空間的場合有著廣泛的應用。傳統(tǒng)的SDRAM采用一種單倍數(shù)據(jù)速率(SDR)的結構執(zhí)行訪問操作,它在每個時鐘周期的上升沿傳輸數(shù)據(jù),因此SDRSDRAM的帶寬等于其時鐘其頻率乘以其數(shù)據(jù)總線寬度 w=f*bus。例如,如果SDRSDRAM的操作頻率為100MHz,其數(shù)據(jù)總線寬度為16位,則其總線帶寬為100MHzx16bit=1600Mbit/S,也就是1.6Gbps。而對帶寬的需求是無休止的!為了增加總線帶寬,如果使用傳統(tǒng)的方法,我們要么增加數(shù)據(jù)總線寬度,要么提高其操作頻率。那么,有沒有可能在既不增加數(shù)據(jù)總線寬度也不提高工作頻率的條件下增加總線帶寬呢?為適應這種需求,DDRSDRAM出現(xiàn)了!DDRSDRAM使用一種雙倍數(shù)據(jù)速率的結構來獲得高性能的操作。雙倍數(shù)據(jù)速率結構本質上是一種2n預取結構,在輸入/輸出管腳上,每個時鐘周期可以傳輸兩個字。對于一次DDRSDRAM的訪問操作(寫操作、讀操作),在芯片的內部,一個時鐘周期執(zhí)行一個位寬為2n的數(shù)據(jù)傳輸,而在DDRSDRAM器件的管腳上則每半個時鐘周期執(zhí)行一次n位的數(shù)據(jù)傳輸。因此,DDRSDRAM的總線帶寬為:工作頻率數(shù)據(jù)總線寬度2可見,在相同的數(shù)據(jù)總線寬度和工作頻率下,DDRSDRAM的總線帶寬比SDRSDRAM的總線帶寬提高了一倍。概括起來,DDRSDRAM具有如下特點: 雙倍數(shù)據(jù)速率結構,每個時鐘周期完成兩次數(shù)據(jù)傳輸; 雙向的數(shù)據(jù)選通信號(DQS)伴隨數(shù)據(jù)一起傳輸。在接收側,它用來捕獲數(shù)據(jù); 在讀操作過程中,DQS與數(shù)據(jù)沿對齊,在寫操作過程中,DQS與數(shù)據(jù)中央對齊; 差分的時鐘輸入(CK與/CK); DLL將DQ和DQS的躍變與CK的躍變對齊; 在每個CK的上升沿接收命令字;數(shù)據(jù)和數(shù)據(jù)掩碼參考于DQS的上升沿和下降沿; 內部的四個BANK可以并發(fā)操作; 寫數(shù)據(jù)時支持數(shù)據(jù)掩碼(DM); 支持的突發(fā)長度:2、4、或8; CAS潛伏期:2或2.5,DDR400還包括CL=3 為每一次突發(fā)訪問提供了AUTOPRECHARGE選項; 自動刷新與自刷新模式; 2.5V(SSTL_2兼容)I/O; 對于DDR200、DDR266、DDR333:VDDQ為+2.5V0.2V;對于DDR400:+VDDQ為2.60.1V; 對于DDR200、DDR266、DDR333:VDD為+3.3V0.3V或+2.5V0.2V;對于DDR400:+VDDQ為2.60.1V;2. DDR SDRAM與SDR SDRAM的功能比較在對DDRSDRAM進行詳細描述之前,我們首先對DDRSDRAM與SDRSDRAM的功能作一個簡要的對比。下表列出了它們之間在外部接口上的一些不同之處:SDRSDRAM與DDRSDRAM的內部存儲核本質上是相同的。它們都具有相同的尋址和命令控制接口;都具有4個BANK的存儲陣列;都具有相同的刷新要求。它們之間基本的不同點在于數(shù)據(jù)接口。SDRSDRAM的數(shù)據(jù)接口是一個系統(tǒng)同步的設計,它僅僅在時鐘的上升沿捕獲數(shù)據(jù)。它的內、外部數(shù)據(jù)總線具有相同的寬度,當數(shù)據(jù)穿越I/O緩沖器時被順序地鎖存到內部存儲陣列。SDRSDRAM還支持一個DQM信號,它在寫操作過程中作為數(shù)據(jù)掩碼使用;在讀操作過程中作為輸出使能使用。DDRSDRAM的數(shù)據(jù)接口是一個源同步的設計,數(shù)據(jù)在每個時鐘周期被捕獲兩次,并伴隨一個雙向的數(shù)據(jù)選通信號。DDRSDRAM采用了一種2n預取結構,它的內部數(shù)據(jù)總線寬度是外部數(shù)據(jù)總線寬度的兩倍。這就使得內部存儲單元以成對的方式向I/O緩沖器傳遞數(shù)據(jù)。DDRSDRAM在讀操作時沒有輸出使能信號,但它支持一個BURSTTERMINATE命令來快速中止正在執(zhí)行的READ命令。在WRITE操作過程中,DM信號被用來屏蔽無效的寫數(shù)據(jù)。DDRSDRAM的命令總線包括時鐘使能、芯片選擇、行地址、列地址、BANK地址、以及寫使能信號。DDRSDRAM采用一對差分時鐘(CK和CK#)進行工作,DDRSDRAM的命令信號(地址和控制信號)使用CK的上升沿鎖存。與SDRSDRAM不同,DDRSDRAM采用一個雙向的數(shù)據(jù)選通信號(DQS)伴隨著數(shù)據(jù)一起傳輸。DQS信號在DDRSDRAM的讀訪問操作中由DDRSDRAM輸出并與數(shù)據(jù)總線沿對齊,而在寫訪問操作中由DDRSDRAM控制器輸出,并與數(shù)據(jù)總線中央對齊。DDRSDRAM的輸入數(shù)據(jù)使用DQS的上升沿和下降沿進行鎖存,而其輸出數(shù)據(jù)則以DQS的上升沿和下降沿作為參考時鐘。在CK的上升沿和下降沿進行鎖存?接下來,我們首先對DDRSDRAM的功能作一個簡要的描述,然后我們會對DDRSDRAM的一些基本概念以及各種操作進行詳細的描述。3. DDR SDRAM功能描述DDRSDRAM是一種高速CMOS動態(tài)隨機訪問存儲器,它在內部被配制成4個BANK的DRAM,外部數(shù)據(jù)具有X4位、X8位、X16位三種寬度。DDRSDRAM具有如下的容量: 64Mb(即67,108,864位):16MX4(4MX4X4banks)、8MX8(2MX8X4banks)、4MX16(1MX16X4banks); 128Mb(即134,217,728位):32MX4(4MX4X4banks)、16MX8(2MX8X4banks)、8MX16(1MX16X4banks); 256Mb(即268,435,456位):64MX4(4MX4X4banks)、32MX8(2MX8X4banks)、16MX16(1MX16X4banks); 512Mb(即536,870,912位):128MX4(4MX4X4banks)、64MX8(2MX8X4banks)、32MX16(1MX16X4banks); 1Gb(即1,073,741,824位):256MX4(4MX4X4banks)、128MX8(2MX8X4banks)、64MX16(1MX16X4banks);DDRSDRAM中每一個BANK中的存儲單元被組織成正方陣列,由若干行和若干列組成,這些存儲單元通過行和列的地址譯碼器來尋址。對于任何一個單元的讀操作,整個行均被讀出,然后重新寫回(刷新)。對于任何一個單元的寫操作,整個行均被讀出,然后改變其中一個單元的值,最后將整個行寫回。DDRSDRAM的功能框圖如下圖所示。DDRSDRAM的接口信號描述如下表所示:對DDRSDRAM不同容量、不同數(shù)據(jù)寬度的尋址信號如下圖所示:DDRSDRAM在上電后必須由一個初始化操作來配置DDRSDRAM的模式寄存器,模式寄存器的設置決定了DDRSDRAM的工作模式。 為了減少IO引腳的數(shù)量,DDRSDRAM的行地址和列地址復用相同的地址引腳。因此,在訪問DDRSDRAM的時候,要先由ACTIVE命令來激活需要訪問的BANK、并鎖存行地址(BA0、BA1用來選擇BANK;A0A13用來選擇行),然后才能發(fā)布READ或WRITE命令。對應于READ或WRITE命令的地址信號用來選擇突發(fā)訪問的起始列地址。 DDRSDRAM使用雙倍數(shù)據(jù)速率結構來獲得高速操作。雙倍數(shù)據(jù)速率結構本質上是一個2n預取結構,在I/O管腳上,它每個時鐘周期傳輸兩個數(shù)據(jù)字,也就是每半個時鐘周期傳輸一個數(shù)據(jù)字。而對應DDRSDRAM內部的DRAM核,則每個時鐘周期執(zhí)行2n位寬度的數(shù)據(jù)傳輸。在沒有數(shù)據(jù)傳輸?shù)臅r候,DQ、DQS、DM可以處于懸浮態(tài)。對DDRSDRAM的讀訪問和寫訪問都是面向突發(fā)的,訪問操作從一個選定的位置開始,以可編程的順序持續(xù)幾個可編程數(shù)目的位置。 DDRSDRAM的存儲單元由電容組成,我們知道,電容總是趨向于釋放電荷,因此DDRSDRAM還需要周期性的刷新操作,只有這樣才能保證其存儲的數(shù)據(jù)不會丟失。DDRSDRAM的生產廠商規(guī)定,DDRSDRAM的每一行都必須在64ms以內刷新一次。 在以后的章節(jié)中,我們會對DDRSDRAM的初始化、模式寄存器定義、DDRSDRAM操作的一些基本概念、命令描述和操作進行詳細的描述。4. DDR SDRAM的初始化DDRSDRAM是一種易失性存儲器器件,也就是說,當器件掉電后,存儲在DDRSDRAM中的所有內容及其配置信息將會丟失。DDRSDRAM每次上電后,必須按一定的順序來初始化其內部狀態(tài)機并配置用戶定義的操作參數(shù),否則會引起不可預料的操作結果。在本節(jié)中,我們會對DDRSDRAM的初始化順序進行詳細描述(有關模式寄存器的具體含義我們會在下一節(jié)中詳細描述)。我們首先討論DDRSDAM的上電順序。DDRSDRAM的上電必須滿足下列之一的條件: VDD和VDDQ從同一個電源轉換器提供,并且 VTT被限制成1.35V,并且 VREF設置成VDDQ/2?;蛘撸?VDDQ在VDD之后或與VDD一起提供,并滿足VDDQVDD+0.3V,并且 VTT在VDDQ之后或與VDDQ一起提供,并滿足VTTVDDQ+0.3V,并且 VREF在VDDQ之后或與VDDQ一起提供,并滿足VREFVDDQ+0.3V。上述的兩個條件中,至少有一個必須被滿足。DDRSDRAM每次上電后,必須按下列順序進行初始化。1. 將時鐘使能信號(CKE)驅動成LVCMOS低電平LVCMOS低電平?SSTL_2電平?。CKE是一個SSTL_2電平的輸入信號,但在施加了VDD電源后可以檢測一個LVCMOS低電平。在上電過程中將CKE保持為LVCMOS低電平,能夠阻止DDRSDRAM接收不期望的命令,并能夠保證DQ和DQS輸出在正常操作之前保持為高阻狀態(tài);2. 在為DDRSDRAM提供了穩(wěn)定的電源供應并將CKE保持為低后,我們就可以為DDRSDRAM提供一個穩(wěn)定的時鐘;3. 在向DDRSDRAM發(fā)布命令之前,必須等待至少200us;4. 為了初始化DDRSDRAM的內部邏輯,將CKE置為SSTL_2邏輯高并在命令總線上發(fā)布一個NOP命令或一個DESELECT命令。注意,此時CKE輸入從LVCMOS輸入轉變?yōu)镾STL_2輸入并保持為SSTL_2輸入;5. 發(fā)布一個PRECHARGEALL命令;6. 在至少tRP的時間內為DDRSDRAM發(fā)布NOP或DESELECT命令(也就是說至少tRP時間后才能發(fā)布其它命令);7. 使用LMR命令編程擴展模式寄存器。此時,必須配置DLL(將E0設置為0以便使能DLL)和I/O驅動強度(將E1設置為1提供標準驅動,或者將E1設置為0來提供縮減驅動強度),所有其它的位必須設置成0;8. 在至少tMRD的時間內為DDRSDRAM發(fā)布NOP或DESELECT命令(也就是說至少tMRD時間后才能發(fā)布其它命令);9. 使用LMR命令將DDRSDRAM的模式寄存器設置為期望的操作模式。注意,除了M0到M7之外的所有其它MR位必須被設置成0。在這一步驟還執(zhí)行一個DLL復位。只要DLL被復位,那么需要至少等待200個時鐘周期才能發(fā)布可執(zhí)行命令(例如READ命令);10. 在至少tMRD的時間內為DDRSDRAM發(fā)布NOP或DESELECT命令(也就是說至少tMRD時間后才能發(fā)布其它命令);11. 發(fā)布一個PRECHARGEALL命令并將A10設置成邏輯高電平,這一命令將所有BANK置入空閑態(tài);12. 在至少tRP的時間內為DDRSDRAM發(fā)布NOP或DESELECT命令(也就是說至少tRP時間后才能發(fā)布其它命令);13. 發(fā)布一個AUTOREFRESH命令。注意,作為DDRSDRAM初始化的一部分,必須發(fā)布兩個AUTOREFRESH命令:在本步驟時發(fā)布一個,在第15步時再發(fā)布一個;14. 在至少tRFC的時間內為DDRSDRAM發(fā)布NOP或DESELECT命令(也就是說至少tRRF時間后才能發(fā)布其它命令);15. 發(fā)布第二個AUTOREFRESH命令;16. 在至少tRFC的時間內為DDRSDRAM發(fā)布NOP或DESELECT命令(也就是說至少tRRF時間后才能發(fā)布其它命令);17. 發(fā)布一個LMR命令來清除DLL位(將M8設置為0);18. 在至少tMRD的時間內為DDRSDRAM發(fā)布NOP或DESELECT命令(也就是說至少tMRD時間后才能發(fā)布其它命令);至此,DDRSDRAM的初始化過程就結束了,此后,我們可以發(fā)布任何有效的命令。注意:從第9步的DLL復位到任何后續(xù)命令之間至少需要200個時鐘周期。上述的初始化過程可以用下面的簡化流程圖表示:DDRSDRAM初始化的時序圖如下圖所示:在上面所描述的初始化操作中,一個很重要的命令就是加載模式寄存器命令,在接下來的一節(jié)中我們會對DDRSRAM的模式寄存器進行詳細的描述。5. DDR SDRAM的模式寄存器在DDRSDRAM的初始化過程中,我們必須配置DDRSDRAM的操作參數(shù)。操作參數(shù)是通過DDRSRAM的兩個內部寄存器進行配置的,這兩個內部寄存器分別為:模式寄存器(ModeRegister,MD)和擴展模式寄存器(ExtendedModeRegister,EMR)。在上一節(jié)所提到的LMR(加載模式寄存器)命令就是用來編程這兩個寄存器。在發(fā)布LMR命令的時候需要與DDRSRAM的BANK地址(BA1:0)和行地址(A13:0)配合使用。其中BA1:0用來選擇MR或EMR;A13:0用來提供寫入的配置碼,A13:0的最低有效位對應模式寄存器的最低有效位。其時序圖如圖5-1所示:模式寄存器DDRSDRAM模式寄存器的定義如圖5-2所示:模式寄存器用來定義DDRSDAM的特定操作模式,包括突發(fā)長度、突發(fā)類型、CAS時延、以及復位DLL等。在發(fā)布LMR命令來編程模式寄存器時BA1:0必須設置為2B00來選擇模式寄存器,所加載的配置參數(shù)會一直保持(M8位除外,它是自清除的)直到模式寄存器被重新編程或DDRSDRAM掉電。模式寄存器只有在所有BANK都處于空閑狀態(tài)并且所有突發(fā)傳輸都已經結束的情況下才能夠被加載,而且在發(fā)布完該命令后必須等待一個特定的時間才能執(zhí)行后續(xù)操作,否則會引起不可預料的操作結果。模式寄存器的M8位用來復位DDRSDRAM內部的DLL,當改位置位后會復位DLL,并且它是一個自清除的位,也就是說當DLL復位完成后改位會自動清除成0。模式寄存器的M2:0用來指定突發(fā)長度、M3用來指定突發(fā)類型(順序或交錯的)、M6:4用來指定CAS時延、M13:7用來指定操作模式(M12在256Mb及以上的器件中使用、M13在1Gb容量的器件中使用)。有關突發(fā)長度、突發(fā)類型、CAS時延的詳細描述我們將會在下一節(jié)中給出。擴展模式寄存器DDRSDRAM擴展模式寄存器的定義如圖5-3所示:擴展模式寄存器用來控制DDRSDRAMDLL的使能/關閉以及輸出驅動強度的選擇。在發(fā)布LMR命令來編程擴展模式寄存器時BA1:0必須設置為2B01來選擇擴展模式寄存器,所加載的配置參數(shù)會一直保持直到擴展模式寄存器被重新編程或DDRSDRAM掉電。擴展模式寄存器只有在所有BANK都處于空閑狀態(tài)并且所有突發(fā)傳輸都已經結束的情況下才能夠被加載,而且在發(fā)布完該命令后必須等待一個特定的時間才能執(zhí)行后續(xù)操作,否則會引起不可預料的操作結果。 DLL的使能與關閉:DLL的使能/關閉通過E0位來控制。在正常操作模式下,DLL必須被使能。每次DLL被使能后必須緊跟一個DLL的復位操作(通過編程模式寄存器),并且必須在200個時鐘周期后才能發(fā)布其它可執(zhí)行命令(讀或寫等); 輸出驅動強度選擇:DDRSDRAM所有輸出的正常驅動強度是SSTL_2,某些器件制造商可能會支持一個較弱的驅動強度來驅動更輕的負載或者在點到點環(huán)境中使用。擴展模式寄存器的E1位用來選擇驅動強度,在使用時注意具體器件的數(shù)據(jù)手冊。接下來我們首先對DDRSDRAM使用中的一些基本概念、術語進行詳細描述。SDRAM操作小結前幾天在21IC上看到有一個家伙問SDRAM的問題,什么地址線連接啊,操作啊,看完后,只能輕嘆一聲,菜鳥啊,估計SDRAM從來沒使用過,只會使用普通的一些存儲器的家伙?;叵胍幌伦约哼@3年來做過的系統(tǒng),用了各種各樣的存儲器,想想是不是要小結一下,以至紀念我的技術歲月,因為以后打算開始混日子了。1,SDRAM的地址線在我們一般用的什么SRAM啊,PSRAM啊,RAM啊,一般而言都是有多少根地址線,然后可以算出尋址空間,比如有11根地址線,那尋址空間就是2的11次方減1。但是SDRAM是分列地址和行地址的,行、列地址線是復用的,所以有時候我們看到說尋址空間有多大多大,但是看看地址線怎么就那么幾根啊,呵呵。SDRAM一般還有2根BANK的線,分成4個BANK,在有的處理器的SDRAM控制模塊中,這兩根線可能映射到地址線的某兩根去。一般芯片常按照以下方式寫芯片的配置,比如4Megx4x16,那這個芯片就是256Mbits。其中16指數(shù)據(jù)線是16根,中間一個4是只分4個BANK,每個BANK是4Meg。2,SDRAM的初始化SDRAM上電后使用前必須要經過一段初始化操作才可以使用。這個操作過程是標準的過程。這個過程如下A:prechargeB:auto-refreshC:LoadModeRegisterD:NormalRead/Write在上電后輸入初始化命令之前,最少要100us延遲(這個其實很容易滿足,呵呵)。在輸入precharge命令后,因為必須是對所有BANK進行Precharge,所以A10這個管腳要設置成高,因此在Precharge后面要做一個讀的操作,這個操作最主要的是在SDRAM的尋址空間里設置的地址必須是A10是高的。在輸入Auto-refresh命令后,一般要跟幾句空操作或者讀什么之類的,反正要達到延遲的目的,以使得SDRAM有時間來完成refresh。之后就是要設置SDRAM的模式寄存器,這個寄存器里一般設置了burst長度,CAS,burst類型,操作模式,還有是設置SDRAM是工作在單個讀寫操作還是burst操作下。而這個寄存器的設置也是通過地址線來設置的,所以在發(fā)出LoadModeRegister命令后要做一個操作可是使得在SDRAM的地址線上出線的值就是你要設置的值。這里很有必要提醒的一下的是,這個操作是8位的操作,切記切記。設置完模式寄存器后就進入正常操作模式。實際上具體的操作要跟選用的處理器的SDRAM控制模塊相結合來設置。對于這些初始化命令比較直觀的理解就是拿邏輯分析儀來分析。在這里需要提醒一下CAS這個參數(shù)很重要。還有SDRAM必須要刷新的,因此刷新頻率可以按照手冊算出來的,但是設置的高一點也是可以的。常常SDRAM都有工作頻率,但是也可以工作在低一點的頻率上,比如PC133的,你工作到100也是可以的,設置基本不需要修改。3,其他我們有時候看到有的原理圖上數(shù)據(jù)線有倒過來接的,其實這個無所謂的,反過接,寫進去的就是反的,但是讀出又反了一下,反反兩次正好沒反。延伸一下到DDR,其實DDR就是SDRAM外面加了一個烏龜殼。因此初始化是一樣的。當然DDR一是多了一個把時鐘頻率反相的時鐘,因此有2個相位差180度的時鐘。這兩個一般都是用同一個時鐘源產生,一致性會比較好。還有多了2個DQS,這個也是一個時序要求,一般CPU的控制模塊都有設置好了。如果你使用的CPU不含有控制模塊,那用FPGA去做一個控制模塊的話,那就要好好研究時序了。在有些處理器的控制模塊中,由于EMI的設置,地址線映射關系復雜,因此推算會比較麻煩,一般如果沒有什么映射的話,還是很容易操作的。DDR SDRAM在嵌入式系統(tǒng)中的應用 引言 很多嵌入式系統(tǒng),特別是應用于圖像處理與高速數(shù)據(jù)采集等場合的嵌入式系統(tǒng),都需要高速緩存大量的數(shù)據(jù)。DDR(Double Data Rate,雙數(shù)據(jù)速率)SDRAM由于其速度快、容量大,而且價格便宜,因此能夠很好地滿足上述場合對大量數(shù)據(jù)緩存的需求。但DDR SDRAM的接口不能直接與現(xiàn)今的微處理器和DSP的存儲器接口相連,需要在其間插入控制器實現(xiàn)微處理器或DSP對存儲器的控制。 隨著密度與性能的不斷提升,現(xiàn)場可編程門陣列(FPGA)已被廣泛應用于各種嵌入式系統(tǒng)中。而且,現(xiàn)在很多的FPGAs都提供了針對DDR SDRAM的接口特性:其輸入輸出引腳都與SSTL電氣特性兼容,內部提供了DDR觸發(fā)器、鎖相環(huán)等硬件資源。使用這些特性,可以更加容易地設計性能可靠的高速DDR SDRAM存儲器控制器。 1 DDR SDRAM 在嵌入式系統(tǒng)中的應用圖1是DDR SDRAM在高速信號源系統(tǒng)中的應用實例。 在該系統(tǒng)中,由FPGA的完成各模塊之間的接口控制。FPGA接收從前端傳送過來的高速數(shù)字信號,并將其存儲在DDR SDRAM中;DSP通過FPGA讀取DDR中的數(shù)據(jù),處理后再送回到DDR SDRAM,最后由FPGA負責將數(shù)據(jù)分兩路輸出。 該系統(tǒng)對存儲器的要求是能夠高速地存儲大量的數(shù)據(jù),DDR SDRAM正好能滿足這一要求,此時,F(xiàn)PGA是否能對DDR SDRAM進行有效控制就成為影響系統(tǒng)性能的關鍵。最后的試驗結果表明,F(xiàn)PGA是能夠勝任這一任務的。 2 DDR SDRAM的工作方式 在DDR SDRAM能夠被存取數(shù)據(jù)之前,需要先對其初始化。該初始化流程是預先定義好的。不正確的操作將導致無法預料的結果。初始化的過程中將設置DDR SDRAM的普通模式寄存器和擴展模式寄存器,用來制定DDR SDRAM的工作方式,這些設置包括突發(fā)長度、突發(fā)類型、CAS潛伏期和工作模式以及擴展模式寄存器中的對DDR SDRAM內部DLL的使能與輸出驅動能力的的設置。模式寄存器可以被再編程,這時需要DDR SDRAM的各個區(qū)(bank)處于空閑狀態(tài),從而改變存儲器的工作模式。如果操作正確,對模式寄存器的再編程不會改變存儲器內存儲的數(shù)據(jù)。 初始化完全之后,DDR SDRAM便進入正常的工作狀態(tài),此時便可對存儲器進行讀寫和刷新。DDR SDRAM在一對差分時鐘(CLK與CLKn;CLK的上升沿與CLKn的下降沿的交點被認為是CLK的上升沿)的控制下工作。命令(地址和控制信號)在每個時鐘(CLK)的上升沿被觸發(fā)。隨著數(shù)據(jù)一起傳送的還包括一個雙向的數(shù)據(jù)選通信號,接收方通過該信號來接收數(shù)據(jù)。DQS作為選通信號在讀周期中由DDR SDRAM來產生,寫周期中由存儲器控制器來產生。該選通信號與數(shù)據(jù)相關,其作為類似于一個獨立的時鐘,因此也需要滿足相應的時序要求。讀周期中,DQS與數(shù)據(jù)是邊沿對齊的;寫周期中,DQS與數(shù)據(jù)是中心對齊的。存儲器輸入的數(shù)據(jù)在DQS的兩個沿都觸發(fā),輸出的數(shù)據(jù)也是以DQS的兩個沿作為參考,同時還要以時鐘CLK的兩個沿作為參考。不單單以CK邊沿為參考么?因此,由于接口在時鐘的兩個沿的觸發(fā)下工作。其數(shù)據(jù)寬度(n)是存儲器數(shù)據(jù)寬度(2n)的一半。圖2描述了DDR SDRAM的工作方式。 對DDR SDRAM的讀和寫操作是基于突發(fā)的:從一個選定的地址單元開始,連續(xù)存取設置好長度的地址單元。該長度就是所謂的突發(fā)長度。DDR SDRAM提供的可編程的讀或寫的突發(fā)長度為2,4或8。數(shù)據(jù)的存取以一個激活命令(ACTIVE command,RAS_n low)開始,接著便是讀(CAS_n low)或寫(CAS_n low and WE_n low)命令。與激活命令一起被觸發(fā)的地址位用來選擇將要存取的區(qū)(bank)和頁(或行);與讀或寫命令一起觸發(fā)的地址位用來選擇突發(fā)存取的起始列單元。使用控制器讀取DDR SDRAM的仿真波形示意圖如圖2所示。讀命令被觸發(fā)后,數(shù)據(jù)將在1.53個時鐘周期之后觸發(fā)在數(shù)據(jù)總線上。這個延遲就是所謂的CAS潛伏期(CL, CAS latency),即從DRAM內核讀出數(shù)據(jù)到數(shù)據(jù)出現(xiàn)在數(shù)據(jù)總線上所需要的時間 。CAS潛伏期的大小與SDRAM的速度和存儲器的時鐘頻率有關。 當要存取一個不同行的地址單元時,需要通過一個預充電(PRECHARGE)操作關閉當前行。自動刷新(AUTOREFRESH)命令用來周期性地刷新DDR SDRAM,以保持其內部的數(shù)據(jù)不丟失。 3 DDR SDRAM控制器的設計 DDR SDRAM控制器的功能就是初始化DDR SDRAM;將DDR SDRAM復雜的讀寫時序轉化為用戶方簡單的讀寫時序,以及將DDR SDRAM接口的雙時鐘沿數(shù)據(jù)轉換為用戶方的單時鐘沿數(shù)據(jù),使用戶像操作普通的RAM一樣控制DDR SDRAM;同時,控制器還要產生周期性的刷新命令來維持DDR SDRAM內的數(shù)據(jù)而不需要用戶的干預。 3.1 DDR SDRAM控制器的控制流程 DDR SDRAM提供了多種命令,整個控制狀態(tài)機非常復雜。但很多應用場合中,并不需要用到所有的命令我們需要實現(xiàn)哪些命令呢?,因此為了簡化設計,但同時又兼顧盡可能多的應用場合,在控制器的設計中制定了如下幾種功能:DDR SDRAM的初始化、可變長度的突發(fā)讀寫,自動刷新功能,預充電以及模式寄存器的重置(reload)。圖3是控制器整個狀態(tài)轉移圖。 系統(tǒng)上電后,DDR SDRAM處于空閑狀態(tài)(Idle),在對存儲器進行讀寫操作之前,需要先對其進行初始化。初始化的過程中,將設置突發(fā)長度,突發(fā)類型,CAS潛伏期等參數(shù)。DDR SDRAM的初始化有一個固定的步驟,錯誤的操作將導致DDR SDRAM進入不確定狀態(tài)。在控制器中使用了一個專門的初始化狀態(tài)機來對DDR SDRAM進行初始化。 初始化完之后便可對DDR SDRAM進行讀、寫或其他操作。在執(zhí)行讀(寫)命令之前,先要激活(Active)將要讀(寫)的行,之后便可對該行進行突發(fā)讀(寫),在控制器的設計中,所有的讀寫命令都是不帶預充電的,因此,某一行被激活之后將一直處于激活狀態(tài),直到用戶發(fā)送突發(fā)終止命令,此時控制器將自動產生一個預充電命令來關閉當前行。這樣,某一行被激活之后用戶便可進行連續(xù)的突發(fā)讀(寫)操作,從而節(jié)省了每次突發(fā)讀寫所需要的激活時間,提高了系統(tǒng)的數(shù)據(jù)吞吐率。 控制器同時提供了一個自動刷新(auto refresh)計數(shù)器,每隔一定的時間間隔(即DDR SDRAM的刷新周期,根據(jù)所使用的存儲器而定,可在控制器中設定),便會產生一個刷新請求,如果此時DDR SDRAM處于空閑狀態(tài),控制器便會發(fā)生一個自動刷新命令來對DDR SDRAM進行刷新;如果此時DDR SDRAM正在進行讀(寫)操作,控制器將會等到當前的讀(寫)操作完全之后再發(fā)送新命令。在刷新過程中,用戶如果有讀(寫)請求,控制器將在當前的刷新周期完成之后再響應用戶的請求。 正常的操作過程中,當DDR SDRAM處于空閑狀態(tài)時,用戶還可以根據(jù)實際的需要來重置存儲器的控制寄存器,重新設定存儲器的突發(fā)長度、突發(fā)類型、CAS潛伏期等參數(shù)。 3.2 控制器數(shù)據(jù)通道的結構 圖4是DDR SDRAM控制器數(shù)據(jù)通道的結構圖。圖4中完整的顯示了控制器讀和寫數(shù)據(jù)通道上DQ與DQS的結構關系。前面提到過,Cyclone系列FPGA沒有帶DDR觸發(fā)器的輸入輸出單元什么結構才是DDR觸發(fā)器輸入輸出單元?是不是在時鐘的兩個邊沿都對D觸發(fā)器進行觸發(fā)來得到類似的雙倍速率的結構?如圖中所示的兩個D觸發(fā)器,第一個是用clk_90,第二個是用clk,這樣的話,輸入的數(shù)據(jù)對于每一個時鐘來說都只是保持了半個周期,從而達到一個時鐘周期傳送兩次數(shù)據(jù)的目的?,但完全可以用靠近輸入輸出引腳處的邏輯資源來實現(xiàn)DDR觸發(fā)器,而

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論