[技術] SDRAM研究心得

Written on 12:23 上午 by Yu Lai

唉,只能說大學老師教的時候沒學好。
導致現在要和SDRAM打交道時被它欺負啊 >__<~。
以下主要是參考http://www.eetop.cn/bbs/thread-57279-1-1.html
後而寫出來覺得有用到的心得,就當做個記錄吧。

一. 基本結構
1. Physical Bank
在CPU的Memory system中,為確保CPU的正常運作,讀寫時必須一次將整個data bus的位寬的data進行傳輸。也就是說Memory Chip與CPU之間必須以此位寬來進行傳輸,此位寬稱為Physical Bank的位寬。簡稱P-Bank或Rank。

2. Chip bit width
由上文得知,Memory System必須組成一個P-Bank的位寬才能使CPU正常運作。加上Memory Chip也有自己的bit width,也就是每次傳輸所能提供的data量。所以在使用上會把數個Memory Chip組合成一個P-Bank的bit width來使用。
例如: CPU的data bus的bit width為64-bit,SDRAM為16-bit,所以需要4顆(4x16=64bit)。
當然,理論上可以實做出64-bit的bit width的SDRAM Chip,但因成本與實用性方面的考良,一般不太會這樣用。

二. SDRAM的內部結構
1. Logical Bank與Chip bit width
SDRAM內部是由儲存陣列所組成,這個儲存陣列就像一個表格(Table)一樣,先指定好行(Row),再指定列(Column),我們就可以準確地找到所需要的欄位(Field),這就是memory chip addressing的基本原理,這種Row-Column定址的方式稱為Multiplexing。對於Memory來說,這個Field我們稱為儲存單元(Cell),也有廠商稱之為Word,而這個儲存陣列就是Logical Bank,簡稱L-Bank或Bank。
由於技術與成本的原因,我們不可能只做一個全容量的Bank,而且由於SDRAM的工作原理限制,單一個Bank會造成嚴重的Addressing Collision,大幅降低效率。所以我們會在SDRAM內部分割成多個Bank,目前SDRAM規範是4個,而DDR-II的標準則是8個。
這樣在Addressing時就要先確定是哪個Bank,然後再這個選定的Bank中選擇對應的Row與Column。也就是說一次只能是一個Bank在運作,每次運作的data量就是Bank中一個Cell的容量。由前面我們得知,Memory Chip一次傳輸的data量即為Chip的bit width,也就是說Cell的大小也就是Chip的bit width。

2. Memory Chip的容量
在瞭解SDRAM的內部結構後,我們知道Memory Chip的所有儲存容量就是所有Bank中儲存單元的容量總合。也就是 儲存容量 = L-Bank的數量 x 行數 x 列數 x Cell的大小。
一般在表示上會採用MxW或是BxMxW的方式來表示。
如"8M x 8",8M個Word,1個Word有8bit width,總共為64Mbit。
或"4-BANKS x 2,097,152-WORDS x 8-BITS",總共為64Mbit。

三. SDRAM腳位說明
CLK : Master Clock
CKE : Clock Enable
/CS : Chip Select
/RAS : Row Address Strobe
/CAS : Column Address Strobe
/WE : Write Enable
DQn : Data I/O
DQM : Output Disable / Write Mask
An : Address Input
BAn : Bank Address
Vdd : Power Supply
VddQ : Power Supply for Output
VSS : Ground
VSSQ : Ground for Output

四. SDRAM命令真值表

CommandSymbol/CS/RAS/CAS/WEBAnA10An
Device deselectDSLHXXXXXX
No operationNOPLHHHXXX
Burst stopBSTLHHLXXX
ReadRDLHLHVLV
Read(with PRE)RDALHLHVHV
WriteWRLHLLVLV
Write(with PRE)WRALHLLVLV
Bank activateACTLLHHVVV
Precharge bankPRELLHLVLX
Precharge all BankPALLLLHLXHX
Mode register setMRSLLLLLLX

(V=Valid, X=Don't Care, H=Logic High, L=Logic Low)

FunctionSymbolCKE/CS/RAS/CAS/WE/Address
Auto RefreshREFHLLLHX
Self RefreshSREFLLLLHX

(V=Valid, X=Don't Care, H=Logic High, L=Logic Low)

五. SDRAM的內部基本操作
1. Power-up與Initialization Sequence
SDRAM在Power up時必須完成下列的步驟。
-CLK, CKE, /CS, DQM和DQ腳位須維持在low直到供電穩定(Power stabilize)為止。
-在Power stabilize後的100us內,chip的CLK必須有穩定的clock提供進來。
-同時要將CKE和DQM驅動到high,直到100us後完成整個Power-up sequence。
在完成Power-up sequence後接著就是要做Initialization sequence。在SDRAM內部裡有一個Logical Control Unit,並有一個Mode Register(MR)為期提供控制參數。而設定MR也是Initialization sequence最主要的動作。其過程如下:(PALL和REF會在下面說明)
-首先必須先等至少200us的clock輸入穩定期。
-接著對所有的Bank進行Precharge命令(PALL)。
-在等tRP時間後,做至少2次的Refresh命令(REF)。
-最後配合An和BAn做Mode Register Set命令(MRS)將控制參數設置到SDRAM中。An和BAn的控制參數定義如下:A0~A2:Burst Length,A3:Burst Type,A4~A6:CAS Latency,Other:0。設定完MR後就開始進入正常的工作狀態。

2. Bank Active (Row addressing)
在進行Read/Write操作前,對應的Bank和Row位址必須先透過Bank activate命令(ACT)來指定。在/CS和Bank定址的同時,RAS(Row Address Strobe)也處於有效的狀態。此時An位址線則發送Row Address。從An的位址線數量我們也可以知道該SDRAM具有多少個Row(取2的n+1次方)。

3. Read/Write (Column addressing)
在Bank和Row Address確定後,就要進行Read/Write命令和Column addressing。此時除了/CS外,CAS(Column Address Strobe)也被處於是有效的狀態,不過此時用到的An位址線中,A10為特殊用途,用來指示Auto Precharge外,其餘的被拿來發送Column Address。這裡使用到的位址線數量我們可以得知該SDRAM具有多少Column。在這同時,Read和Write命令是透過/WE來分別的。
然而,在輸入read/write命令時必須要與ACT命令有一個間隔,這個間隔被定義為tRCD,即RAS to CAS Delay,這是根據chip內電子元件影響時間所制定的delay。tRCD是個重要的參數,在設定SDRAM Controller時必須特別注意。

4. Data Output (Read)
在選定Column Address後,就已經確定了具體的Cell,剩下的就是等Data通過I/O通道(DQ)輸出到腳位上。但是在CAS發出之後仍要經過一定的時間才能有Data輸出,這段時間被定義為CL(Cas Latency)。由於CL只在讀取時出現,所以CL又被稱為Read Latency(RL)。
其實,CAS並不是在經過CL後才送到Cell裡的。實際上CAS和RAS一樣,都是瞬間送到的。但由於Chip體積的原因,Cell中的電容容量很小,所以信號要經過放大來保證其有效的識別性,這個放大/驅動的工作由S-AMP負責。但它要有一個準備時間才能保證信號發送強度,這也是需要CL的原因。

5. Data Input (Write)
Data寫入的動作也是在tRCD之後進行的,不過此時沒有CL。由於Data Signal是由Controller發出,SDRAM只需將Data輸入到register中,然後再該Cell的儲存電容進行充電操作,因此Data可以與CAS同時發送,也就是說Write Delay為0。不過Data並不是即時地寫入儲存電容中,因為電容的充電都必須要有一段時間,所以Data的真正寫入需要一定的週期。為了保證Data的可靠寫入,都會留出足夠的tWR(Write Recovery Time)。tWR至少會佔用一個或一個以上的時間週期(頻率越高,佔用週期越多)。

6. Burst Length
Burst是指在同一Row中相鄰的Cell連續進行Data傳輸的方式,這樣連續傳輸所涉及到的Cell數量就是Burst Length(簡稱BL)。
因為就算連續的Read/Write命令可以讓Data的傳輸在I/O端是連續的,但它佔用了大量的Memory控制資源,在Data進行連續傳輸時無法輸入新的命令,效率很低。為此,開發了Burst傳輸技術,只要指定好起始的Column Address和BL,SDRAM就會依次地自動對後面相對應數量的Cell進行Read/Write操作,而不用再需要Controller提供Column Address。這樣除了第一筆Data傳輸需要tRCD+CL的Delay外,後面的每一個只需一個Clock即可獲得。
至於BL的數值,也不能隨便設或在要Read/Write前臨時決定。它是在一開始的Initialization Sequence時設定MRS時就設定好的。目前可用的選項有1、2、4、8、Full Page等,一般常見的是設為4或8。

7. Precharge
由於SDRAM的Addressing具有獨佔性,所以在進行Read/Write操作後,如果要對同一個Bank的另一個Row進行Addressing,就要將原本有效(Working)的Row關閉,重新發送Row/Column Address。Bank關閉現有Working Row,準備打開新的Row的操作就是Precharge。Precharge可以通過命令控制,也可以通過輔助設定讓SDRAM在每次Read/Write後自動進行Precharge(Auto Precharge)。
Precharge是一種對Working Row中所有的Cell進行Data重寫,並對Row Address進行回覆,同時釋放S-AMP,以準備新Row的工作。因為即使是沒有工作過的Cell也會因Row被選中而使Cell受到干擾,所以也需要S-AMP進行讀後回寫來保持Cell內電容的電壓,用以維持其邏輯值。邏輯值的判定,基本上是設定一個臨界值,一般是電容電量的1/2,超過它為邏輯1,S-AMP在回寫時會重寫;低於它為邏輯0,S-AMP不進行重寫(等於放電)。而釋放S-AMP就是重新加入比較電壓(即電容電壓的1/2),用以幫助S-AMP之後判斷讀取Data的邏輯電位。
上述提到的輔助控制即為An中的A10在Read/Write命令發送時,決定是否在Read/Write之後對當前的Bank進行Auto Precharge的動作。除了Auto Precharge功能外,在單獨的Precharge命令中,A10還控制著是否對單一Bank或全部的Bank做Precharge。在Precharge命令發出後,要經過一段時間才能允許發送ACT命令繼續新的Working Row,這個間隔被稱為tRP(Precharge command Period)。

8. Refresh
DRAM內部是許多電容所組成,它需要不斷的進行Refresh才能保持住Data,所以Refresh是DRAM中最重要的操作。Refresh和Precharge是一樣的,都是用S-AMP先讀後寫。但Precharge是對一個Bank或是所有Bank進行的不定期操作,所以還需要有固定週期依序對所有Row進行操作,以保持那些久久沒經歷重寫的Cell內的Data。
目前Cell中電容的Data有效保存上限公認的標準是64ms,也就是每一行的刷新循環週期是64ms。這樣刷新速度就是Row數量/64ms。在Data Sheet中,經常會看到4096 refresh cycles/64ms或8192 refresh cycles/64ms的標準,這裡4096或8192就代表這個SDRAM每個Bank中的Row數量。Refresh命令一次對一Row有效,所以發送間隔也是隨著Row數而變化,4096Row為15.625us,8192Row為7.8125us。
Refresh命令分為2種:Auto Refresh(REF)和Self Refresh(SREF)。不管是哪種Refresh,都不需要外部提供Row Address,因為這是一個內部的自動操作。對於REF,SDRAM內有一個Row Address Generator(也稱Refresh Counter)用來自動依次生成Row Address。由於Refresh是對所有Bank操作,所以在Refresh時所有的Bank都停止工作,而每次Refresh所佔用的時間為9個clock(PC133標準),這個時間稱為tARFC,之後才可以進入正常的工作狀態。而對於SREF則是主要用於休眠模式下的Data保持,在發出REF命令時,將CKE=Low就進入了SREF模式。此時不再依靠CLK工作,而是根據內部的CLK進行Refresh操作。在SREF期間,除了CKE之外的外部signal都是無效的,只有重新使CKE=High才能退出SREF模式。

9. Data Mask
上述提到Read/Write操作配合Burst Length可以一次傳送多筆Data。假設BL=4,也就是一次能傳送4x64bit的Data。但若我們只需比BL還少的Data時,,怎麼辦?此時就需要Data I/O Mask(DQM)技術。通過DQM,Controller可以控制I/O取消哪些Input或Output的Data。不過在Read時,被Mask掉的Data仍然會從SDRAM傳出,只是會被Mask Logic Unit處被Mask掉。DQM為了精確的Mask一個Bank位寬的每一個byte,每個DQM信號線針對一個byte。這樣對於4bit的Bank位寬的SDRAM,2個Chip共用一個DQM信號線,對於8bit的SDRAM,一個Chip佔用一個DQM信號線,而對於16bit的SDRAM,則需要2個DQM信號線。
SDRAM官方規定,在Read時,DQM發出2個clock後生效。而在Write時DQM與WR一樣是立即生效的。