1. 程式人生 > >DDR(二)SDRAM工作時序與原理

DDR(二)SDRAM工作時序與原理

DDR出身自SDRAM,嚴格的說應該叫DDR SDRAM,DDR SDRAM是Double Data Rate SDRAM的縮寫,是雙倍速率同步動態隨機儲存器的意思,所以,有很大一部分,兩者是一樣的,理解SDRAM,然後再來理解DDR在SDRAM上的改進,效果應該更好一些,這裡要感謝Chinaunix.net的大神--Tekkaman Ninja,我的記憶體的學習資料都是Tekkaman Ninja的部落格中介紹的。以下是我對大神推薦文件的一些個人整理,OK,先上一張SDRAM的結構圖。


下面上一張我畫的簡易的SDRAM工作流程圖

圖中用紅色標明的就是我們需要找的幾個主要時間,現在開始看圖說話。
1.晶片初始化
SDRAM 晶片內部有一個邏輯控制單元,並且有一個模式暫存器為其提供控制引數。因此,每次開機時 SDRAM 都要先對這個控制邏輯核心進行初始化。

2.行有效 
初始化完成後,要想對一個 L-Bank 中的陣列進行定址,首先就要確定行(Row),使之處於活動狀態(Active),然後再確定列。簡單點理解就先傳行地址過來。

3.列讀寫
行地址確定之後,就要對列地址進行定址了。讀寫的訊號和列地址是同時發過來的,讀寫的操作取決於WE#引腳,當他使能則為寫,否則為讀。
在傳送列讀寫命令時必須要與行有效命令有一個間隔,這個間隔被定義為 tRCD,即RAS to CAS Delay(RAS 至 CAS 延遲),大家也可以理解為行選通週期,簡單點理解就是說,在發完行地址後,再發列地址和讀寫訊號時,需要延遲一下,這應該是根據晶片儲存陣列電子元件響應時間(從一種狀態到另一種狀態變化的過程)所制定的延遲。
廣義的 tRCD 以時鐘週期(tCK,Clock Time)數為單位,比如 tRCD=2,就代表延遲週期為兩個時鐘週期,具體到確切的時間,則要根據時鐘頻率而定,對於PC100 SDRAM,tRCD=2,代表1000/100 * 2 = 20ns 的延遲,下圖是tRCD=3的時序圖。


4.資料輸出(讀)
在選定列地址後,就已經確定了具體的儲存單元,剩下的事情就是資料通過資料 I/O 通道(DQ)輸出到記憶體總線上了。 
但是在CAS發出之後,仍要經過一定的時間才能有資料輸出,從CAS與讀取命令發出到第一筆資料輸出的這段時間,被定義為 CL(CAS Latency,CAS 潛伏期)。由於CL只在讀取時出現,所以 CL 又被稱為讀取潛伏期(RL,Read Latency),下圖是CL=2的示意圖。

5.資料輸入(寫)
資料寫入的操作也是在 tRCD 之後進行,但此時沒有了 CL(記住,CL 只出現在讀取操作中),行定址與列定址的時序圖和上文一樣,只是在列定址時,WE#為有效狀態。 
為了保證資料的可靠寫入,都會留出足夠的寫入/校正時間(tWR,Write Recovery Time),這個操作也被稱作寫回(Write Back)。tWR 至少佔用一個時鐘週期或再多一點(時鐘頻率越高,tWR 佔用週期越多)
 

6.突發長度--(Burst Lengths)

突發(Burst)是指在同一行中相鄰的儲存單元連續進行資料傳輸的方式連續傳輸所涉及到存儲單元(列)的數量就是突發長度(Burst Lengths,簡稱 BL)。 

只要指定起始列地址與突發長度,記憶體就會依次地自動對後面相應數量的儲存單元進行讀/寫操作而不再需要控制器連續地提供列地址。這樣,除了第一筆資料的傳輸需要若干個週期(主要是之前的延遲,一般的是 tRCD+CL)外,其後每個資料只需一個週期的即可獲得。


7.預充電
由於 SDRAM 的定址具體獨佔性,所以在進行完讀寫操作後,如果要對同一個Bank的另一行進行定址,就要將原來有效(工作)的行關閉,重新發送行/列地址。Bank 關閉現有工作行,準備開啟新行的操作就是預充電(Precharge)。 
在發出預充電命令之後,要經過一段時間才能允許傳送 RAS 行有效命令開啟新的工作行,這個間隔被稱為tRP(Precharge command Period,預充電有效週期)。和 tRCD、CL 一樣,tRP 的單位也是時鐘週期數,具體值視時鐘頻率而定。

8.重新整理
之所以稱為 DRAM,就是因為它要不斷進行重新整理(Refresh)才能保留住資料,因此它是 DRAM 最重要的操作。重新整理操作與預充電中重寫的操作一樣,都是用 S-AMP 先讀再寫。 
但為什麼有預充電操作還要進行重新整理呢?因為預充電是對一個或所有L-Bank 中的工作行操作,並且是不定期的,而重新整理則是有固定的週期,依次對所有行進行操作,以保留那些久久沒經歷重寫的儲存體中的資料。但與所有 L-Bank 預充電不同的是,這裡的行是指所有 L-Bank 中地址相同的行,而預充電中各 L-Bank 中的工作行地址並不是一定是相同的。比如我有四片,重新整理是我依次重新整理四片記憶體中的某個地址,然後再刷下一個;而預充電的工作行地址可以不同。
那麼要隔多長時間重複一次重新整理呢?目前公認的標準是,儲存體中電容的資料有效儲存期上限是64ms(毫秒,1/1000 秒),也就是說每一行重新整理的迴圈週期是 64ms。這樣重新整理速度就是:行數量/64ms。我們在看記憶體規格時,經常會看到 4096 Refresh Cycles/64ms 或 8192 RefreshCycles/64ms 的標識,這裡的 4096 與 8192 就代表這個晶片中每個 L-Bank 的行數。重新整理命令一次對一行有效,傳送間隔也是隨總行數而變化,4096 行時為 15.625μs(微秒,1/1000 毫秒),8192 行時就為 7.8125μs。 
重新整理操作分為兩種:自動重新整理(Auto Refresh,簡稱 AR)與自重新整理(Self Refresh,簡稱 SR)。
SR 則主要用於休眠模式低功耗狀態下的資料儲存,這方面最著名的應用就是 STR(Suspend to RAM,休眠掛起於記憶體)。在發出 AR 命令時,將 CKE 置於無效狀態,就進入了 SR 模式,此時不再依靠系統時鐘工作,而是根據內部的時鐘進行重新整理操作。在 SR 期間除了 CKE 之外的所有外部訊號都是無效的(無需外部提供重新整理指令),只有重新使 CKE 有效才能退出自重新整理模式並進入正常操作狀態。
 

以上就是SDRAM是主要工作步驟,對比一下最上面的簡易工作流程圖,時間是不是就很清楚了呢?

CL=6:CAS Latency,CAS 潛伏期,CAS與讀取命令發出到第一筆資料輸出的時間  ----讀操作
tRCD=6:RAS to CAS Delay(RAS 至 CAS 延遲),行地址發完後,再發列地址的延遲時間  ----行列地址延遲
tRP=6:關閉現有工作行,準備開啟新行,經過一段時間才能允許傳送 RAS 行有效命令開啟新的工作行的時間 ----預充電時間
OK,至此三個時間全部清清楚楚了。