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,至此三個時間全部清清楚楚了。