SDRAM(Synchronous Dynamic Random Access Memory,同步動態隨機存儲器)也就是通常所說的記憶體。同步是指其時鐘頻率與CPU前端匯流排的系統時鐘頻率相同;動態是指存儲陣列需要不斷的刷新來保證數據不丟失;隨機是指數據不是線性依次存儲的。 ...
SDRAM(Synchronous Dynamic Random Access Memory,同步動態隨機存儲器)也就是通常所說的記憶體。同步是指其時鐘頻率與CPU前端匯流排的系統時鐘頻率相同;動態是指存儲陣列需要不斷的刷新來保證數據不丟失;隨機是指數據不是線性依次存儲的。
工作原理
定址
SDRAM的內部是一個存儲陣列。陣列就如同表格一樣,將數據“填”進去。在數據讀寫時和表格的檢索原理一樣,先指定一個行(Row),再指定一個列 (Column),我們就可以準確地找到所需要的單元格,這就是記憶體晶元定址的基本原理,如圖:
這個表格(存儲陣列)就叫邏輯 Bank(Logical Bank,下文簡稱 L-Bank)。 由於技術、成本等原因,不可能只做一個全容量的 L-Bank,而且最重要的是,由於 SDRAM的工作原理限制,單一的 L-Bank將會造成非常嚴重的定址衝突,大幅降低記憶體效率。所以人們在 SDRAM內部分割成多個 L-Bank(其中一個Bank在進行預充電期間,另一個Bank卻馬上可以被讀取,這樣當進行一次讀取後,又馬上去讀取已經預充電Bank的數據時,就無需等待而是可以直接讀取了,這也就大大提高了存儲器的訪問速度),目前基本都是 4個(這也是SDRAM規範中的最高L-Bank數量),由此可見,在進行定址時就要先確定是哪個 L-Bank,然後在這個選定的 L-Bank中選擇相應的行與列進行定址。因此對記憶體的訪問,一次只能是一個 L-Bank工作。如圖:
SDRAM行地址和列地址的地址線是分時復用的,而且還有高低位的掩碼信號,最終可以定位到一個位元組(通常操作系統的最小定址單位也為1個位元組)。所以整個定址流程就是:先找L-Bank,然後是行,再找列,得到存儲單元的數據,最後再根據掩碼定位到指定位元組。
存儲單元
L-Bank中的存儲單元是最基本的存儲單元,它的容量是若幹個Bit(晶元位寬),而每個Bit則存放在單獨的存儲體中,這些存儲體就是記憶體中最小的存儲單元。
SDRAM記憶體晶元一次傳輸率的數據量就是晶元位寬,那麼這個存儲單元的容量就是晶元的位寬(也是L-Bank的位寬)。記憶體晶元的容量就是所有L-Bank中的存儲單元的容量總合。
存儲容量(bit) = 行數 x 列數(得到一個L-Bank的存儲單元數量)x 位寬 x L-Bank的數量
預充電與刷新
預充電
從存儲體的結構圖上可以看出,原本邏輯狀態為1的電容在讀取操作後,會因放電而變為邏輯0。由於SDRAM的定址具有獨占性,所以在進行完讀寫操作後,如果要對同一L-Bank的另一行進行定址,就要將原先操作行關閉,重新發送行/列地址。在對原先操作行進行關閉時,DRAM為了在關閉當前行時保持數據,要對存儲體中原有的信息進行重寫,這個充電重寫和關閉操作行過程叫做預充電。預充電中重寫的操作與刷新操作(後面詳細介紹)一樣,只不過預充電不是定期的。
刷新
SDRAM之所以成為DRAM就是因為它要不斷進行刷新(Refresh)才能保留住數據,因此它是SDRAM最重要的操作。 刷新操作與預充電中重寫的操作一樣,都是用S-AMP(讀出放大器Sense Amplifier)先讀再寫。但為什麼有預充電操作還要進行刷新呢?因為預充電是對一個或所有L-Bank中的工作行操作,並且是不定期的,而刷新則是有固定的周期,依次對所有行進行操作,以保留那些很長時間沒經歷重寫的存儲體中的數據。那麼要隔多長時間重覆一次刷新呢?目前公認的標準是,存儲體中電容的數據有效保存期上限是64ms,也就是說每一行刷新的迴圈周期是64ms。我們在看記憶體規格時,經常會看到4096 Refresh Cycles/64ms或8192 Refresh Cycles/64ms的標識,這裡的4096與8192就代表這個晶元中每個L-Bank的行數。刷新命令一次對一行有效,刷新間隔也是隨總行數而變化,4096行時為 15.625μs(微秒,1/1000毫秒),8192行時就為 7.8125μs。由於刷新涉及到所有 L-Bank,因此在刷新過程中,所有 L-Bank 都停止工作,而每次刷新所占用的時間為9個時鐘周期(PC133標準),之後就可進入正常的工作狀態,也就是說在這9個時鐘期間內,所有工作指令只能等待而無法執行。顯然,刷新操作肯定會對SDRAM 的性能造成影響,但這是沒辦法的事情,也是相對於SRAM(靜態記憶體,無需刷新仍能保留數據)取得成本優勢的同時所付出的代價。
突發模式
突發(Burst)是指在同一行中相鄰的存儲單元連續進行數據傳輸的方式,連續傳輸所涉及到存儲單元(列)數量就是突髮長度(Burst Length,簡稱BL)。
上文寫到的讀/寫操作,都是一次對一個存儲單元進行定址,如果要連續讀/寫,還要對當前存儲單元的下一單元進行定址,也就是要不斷的發送列地址與讀/寫命令(行地址不變,所以不用再對行定址)。雖然由於讀/寫延遲相同可以讓數據傳輸在I/O端是連續的,但是它占用了大量的記憶體控制資源,在數據進行連續傳輸時無法輸入新的命令效率很低。為此,引入了突發傳輸機制,只要指定起始列地址與突髮長度,記憶體就會依次自動對後面相應長度數據的數據存儲單元進行讀/寫操作而不再需要控制器連續地提供列地址,這樣,除了第一筆數據的傳輸需要若幹個周期(主要是之間的延遲,一般的是tRCD + CL)外,其後每個數據只需一個周期即可。
實現
下圖為32MB(64Mb)的SDRAM內部結構圖。它有4個L-Bank,每個L-Bank有4M(4x1024x1024 = 2^13x2^9)個存儲單元,每個存儲單元16bit(16位寬,兩塊可以並聯成32bit匯流排寬度)。
管腳說明
PIN | PIN NAME | DESCRIPTION |
---|---|---|
CLK | Clock | 輸入時鐘。其他輸入管腳的信號在時鐘上升沿被鎖存 |
CKE | Clock Enable | 時鐘使能。當Disable時,SDRAM則處於power down/suspend/self refresh等狀態 |
CS | Chip Select | 片選。低有效 |
RAS | Row Address Strobe | 行地址脈衝選通信號。低有效 |
CAS | Column Address Strobe | 列地址脈衝選通信號。低有效 |
WE | Write Enable | 寫使能。低有效 |
UDQM, LDQM | Data Input/Output Mask | 高低位元組數據掩碼控制信號 |
A0~A12 | Address | 地址線 |
BA0,BA1 | Bank Address | L-Bank選擇信號線 |
DQ0~DQ15 | Data Input/Output | 數據線 |
讀寫時序
讀
SDRAM進行讀操作時,先向地址線上送上要讀取數據的地址,通過前面的知識瞭解到,地址被分成3部分,行地址,列地址,L-Bank片選信號。片選(L-Bank的定址)操作和行有效操作可以同時進行。 在CS、L-Bank定址的同時,RAS(行地址選通信號)也處於有效狀態。此時An地址線則發送具體的行地址。A0~A12,共有13根地址線(可表示8192行),A0~A12的不同數值就確定了具體的行地址。由於行有效的同時也是相應 L-Bank有效,所以行有效也可稱為L-Bank有效。 行地址確定之後,就要對列地址進行定址了。列地址復用了A0~A8,共9根(可表示512列)。讀取命令與列地址一塊發出(當WE為低電平是即為寫命令),然而在發送列讀寫命令時必須要與行有效命令有一個間隔,這個間隔被定義為 tRCD,即RAS to CAS Delay(RAS至 CAS延遲),通常tRCD以時鐘周期(tCK,Clock Time)數為單位。也可以理解為行選通周期,是根據晶元存儲陣列電子元件響應時間(從一種狀態到另一 種狀態變化的過程)所制定的延遲。 在選定列地址後,就已經確定了具體的存儲單元,剩下就是等待數據通過數據 I/O通道(DQ)輸出到記憶體數據匯流排上了。但是在列地址選通信號CAS發出之後,仍要經過一定的時間才能有數據輸出,從CAS與讀取命令發出到第一筆數據輸出的這段時間,被定義為 CL(CAS Latency,CAS潛伏期)。由於CL只在讀取時出現,所以CL又被稱為讀取潛伏期(RL,Read Latency)。CL的單位與tRCD一樣,也是時鐘周期數。不過,CAS並不是在經過CL周期之後才送達存儲單元。實際上CAS與RAS一樣是瞬間到達的。由於晶元體積的原因,存儲單元中的電容容量很小,所以信號要經過放大來保證其有效的識別性,這個放大/驅動工作由S-AMP負責。但它要有一個準備時間才能保證信號的發送強度,這段時間我們稱之為tAC(Access Time from CLK,時鐘觸發後的訪問時間)。 在讀操作的最後,要向SDRAM發出預充電(PRECHARGE)命令,以關閉已經激活的L-BANK。再同一片L-Bank上需等待tRP時間後,才開始下一次的讀、寫操作。SDRAM的讀操作支持突發模式(Burst Mode),突髮長度為1、2、4、8可選。
寫
數據寫入的操作也是在 tRCD 之後進行,但此時沒有了 CL(記住,CL 只出現在讀取操作中),行定址與列定址的時序圖和上文一樣 ,只是在列定址時,WE為有效狀態。由於數據信號由控制端發出,輸入時晶元無需做任何調校,只需直接傳到數據輸入寄存器中,然後再由寫入驅動器進行對存儲電容的充電操作,因此數據可以與 CAS 同時發送,也就是說寫入延遲為 0。不過,數據並不是即時地寫入存儲電容,因為選通三極體 (就如讀取時一樣)與電容的充電必須要有一段時間,所以數據的真正寫入需要一定的周期。為了保證數據的可靠寫入,都會留出足夠的 寫入/校正時間(tWR,Write Recovery Time),這個操作也被稱作寫回(Write Back)。tWR 至少占用一個時鐘周期或再多一點(時鐘頻率越高,tWR占用周期越多)。
重要參數
Parameter | Symbol | Description |
---|---|---|
Precharge command Period | tRP | 預充電有效周期 |
RAS to CAS Delay | tRCD | RAS 至 CAS 延遲 |
CAS Latency | CL | CAS 潛伏期,又稱為讀取潛伏期 |
Access Time from CLK | tAC | 時鐘觸發後的訪問時間 |
Write Recovery Time | tWR | 寫入/校正時間 |
Burst Lengths | BL | 突髮長度 |
References
1. SDRAM 的原理和時序
2. S3C2440 SDRAM記憶體驅動
Copyright (C) 2016 archiexie@cnblogs. All Rights Reserved.