1. 1bit DRAM 1bit DRAM由一個電晶體以及一個電容器組成. Bitline | | +---| |--- VCC | | | | [---] --+-- | RowLine 利用電晶體控制線路是否與電容相接. 接著以電容內的電位高低(有無電荷) 決定這個bit內容是1還是0. 但是這樣結果就是.電容內的資料只要一讀取 就會消失.所以必須讀取後將資料回寫.同樣的電容 一段時間沒理他電荷還是會跑掉.因此必須一段時間內 (按:不超過幾十ns等級的時間)就refresh一次. 當然DRAM(1T,T=transistor)因此可以比起SRAM的4T/6T 擁有較低成本以及高容量單位密度的優勢.因此DRAM佔據了 主流的記憶體系統很長的一段時間,而修正DRAM的效率的各種 實作也是曾出不窮.也幾乎都曾經採用於顯示系統上. =============================================== 詳細原理請翻查數位系統或是電子電路相關教科書. 這裡重點是.DRAM的效率問題來自於電容導致在讀取 後需要寫回以及必須定期refresh.限制了效率表現. =============================================== 2. DRAM array 實際上的DRAM晶片是以2D array的方式組成的. Col 0 ----------------------------------------- | | | | VCC ........................................... | | | | Col 1 ------------------------------------------ | | | | VCC ........................................... | | | | Col 2 ------------------------------------------ | | | | VCC ........................................... | | | | Col 3 ------------------------------------------ | | | | VCC ........................................... | | | | Row0 Row1 Row2 Row3 (每個Row,Col相連的地方都有如上圖的1bit DRAM存在. 但是我畫不進去...放棄) 每1bit的資料都可以Row/Col的位址決定.當在外部 決定好Row/Col的位址後.也就可以從DRAM array中 讀寫這1bit的資料. 一個典型的RAM晶片規格標示,如16Mx8,表示這顆的傳輸 資料寬度為8bit,而ADDRESS總共有8Mega"組"8bit資料. 因此總容量是128Mbit. 這樣一顆晶片就可以看成有如上的DRAM array 8組. 而每組的Row/Col數量?通常兩者數量會僅可能的接近. 那麼就是有4096 Row以及4096 Column. 3. A DRAM Chip 那麼要如何把以上16Mx8的設計出一個對應晶片的介面呢? Column以及Row的address各需要12bit.不過我們可以讓它 使用同一組訊號線分兩次傳遞(這稱作row/column multiplexing, 而DRAM基本上都是採用此種方式.也因此影響了效能).因此只要 一組12bit的位址線就夠了.但是需要額外的訊號線通知晶片 正在送的是Row還是Column,因此可以增加兩條1bit的訊號線. RAS#(Row Access Signal)以及CAS#.當然還要訊號線告知 現在是讀取或是寫入.以及當晶片準備好傳送資料時通知完成的 訊號線.以及8bit的資料線. [-------] Address=| |=Data Output(1:8) (0:11) | | | | WE#-| | RAS# -| |-OE# CAS# -| | [-------] 內部應該是長的這樣: Address(0:11) ==================| || [Column Decoder] || ------------------ || Row | | === | DRAM Array | Dec | | ode | | r | | -------------------- | | | | | | | | v v v v v v v v ---------------- DRAM Sense --->Output Buffer==>Data Output Amplifier ---> Address送入後.依照RAS#,CAS#判斷現在是Row還是Col的定址. 然後把位址送到ROW or Col的decoder,由decoder啟動對應的 row/col的線路.Row/Col的位址都決定後.Sense Amplifier 會偵測電壓變化來判定bit的1/0,並順便回寫資料. 最後讀取到的資料送到output buffer.因為這顆是16Mx8的晶片. 所以晶片內部應該會有8組同上的Array/Decoder/Sense Amp. Output buffer將它組成8bit輸出. DRAM Read Timing RAS# ----|__________________|-- CAS# --------|______________|-- ADR ====XOOOXOOOX============ 11:0 Row Col WE# _|-----------------------|_ OE# ----|____________________|- DQ ===============XOOOOOOX=== 8:1 Valid Data DRAM Write Timing RAS# ----|__________________|-- CAS# --------|______________|-- ADR ====XOOOXOOOX============ 11:0 Row Col WE# --------------|_______|--- OE# _|----------------------|_ DQ ===============XOOOOOOX=== 8:1 Write Data 嗯,好極了.終於可以開始傳資料,我們只要"每次" 都送Row,Col位址進去,就可以讀或者寫入8bit的資料. 等等.這是否有哪裡不對勁......?? 每次都要送Row/Col,那麼是不是花在送Row/Col的時間 比等待資料傳輸的時間還要多??沒錯..... 所以這顯然不是個好現象.有沒有辦法改進呢? ================================== Row/Column multiplexing也限制了DRAM的性能 ================================== DRAM的加速: Paged Mode/Fast Paged Mode 既然送Row,Col要花很多時間,可不可以偷懶不送..?? 但是不送的話,又要怎麼知道要存取哪邊呢?折衷一下. 只送一個.而另外一個不送的話就假設跟以前一樣. 這是DRAM系統第一個普遍的加速手段.稱為Paged Mode 或者是Fast Paged Mode(事實上這兩者有少許差異, edge trigger的方式不同,但是原理相同) 原先DRAM中,Row,Col必須都送. Addr <Row><Col>------<Row><Col>------<Row><Col} Data <Data> <Data> <Data> Paged Mode/Fast Paged Mode Addr <Row><Col> <Col> <Col> <Row><Col> Data <Data> <data> <data> <data> 可以大幅度增加DRAM的效率. DRAM的加速: EDO RAM(Hyper Paged Mode DRAM) EDO RAM是在SDRAM之前普遍的一種加速DRAM.它進一步 擴展了fast paged mode,主要的改進為送下一個Column Address 的時候可以不用等待前一個Data輸出完成.而重疊兩者的時間. EDO RAM(Hyper Paged Mode) Addr <Row><Col 0><Col A><Col B> <Row><Col> Data <Data0><dataA><dataB> <data> 另外我還找到一個說法表示.EDO RAM會預設下個Col為這個Col 的次一個而預先準備,進一步縮短access time.不過我不確定 是否所有的EDO RAM都支援.或者是僅有部分access time 較低的EDO RAM是如此.還是這是burst EDO才加入的. Burst EDO:快速消失 Burst EDO支援burst Mode.基本原理為...在DRAM 內部將array再分割成更小可獨立運作的internal bank. 然後同步存取這些internal bank,讓它們在同一段latency 後差不多都準備好了.而可以在接下來最短的時間內依次 寫入或讀出資料. Normal Mode Burst Mode Buffer <---Bank 1 Buffer <-----Bank 1 <---Bank 2 <--Bank 1 <-Bank 2 Timing Addr <Row><Col> Data <Data> burst Addr <Row><Col> Data <Data><Data><Data><Data> 以基本Latency差不多的DRAM而言,晶片組 在66MHZ外頻下使用Fast Paged Mode 可以達到X-3-3-3的Timing.使用EDO RAM可以達到 X-2-2-2.而使用burst EDO可以達到X-1-1-1. (以上是讀取,寫入都比較慢) 但是Burst EDO只存在少量以及短時間.而立即被JEDEC SDRAM取代. JEDEC SDRAM同樣也是利用internal bank而支援burst Mode. ============================================== 你不想休息嗎?我都想了 ============================================== SDRAM:採用同步傳輸 介紹SDRAM之前要先定義好SDRAM是什麼.是不是如字面上 一樣.採用Synchoronos transfer的就算嗎?不.事實上Rambus 跟1T-SRAM也都是同步傳輸.一般說的SDRAM指的是JEDEC SDRAM. 包含在PC66/PC100/PC133下的SDR SDRAM.DDR SDRAM,DDRII SDRAM 等.也有許多基於相關標準的衍生型,如SGRAM,GDDR/2/3,Enhanced SDRAM(又稱為cached SDRAM,也就是加入SRAM為cache..另外也有 Enhanced/Cached EDO),NEC的Virtual Channel(PC133/DDR/DDR2) 等.. 所以,一般稱的DDR RAM是不是JEDEC SDRAM?當然是. 只是在DDR SDRAM未出來之前,當然PC66/PC100/PC133 那時都直接稱為SDRAM,在DDR SDRAM出現之後為了區分 才將它們稱為SDR SDRAM.不過稱DDR SDRAM是SDRAM的一種 或者是SDRAM的演進/改良仍然沒錯. synchronous bus ? 同步傳輸介面指的是什麼意思?與非同步Asynchronous的差異? 簡單一點的比喻,就好像一堆人合作作事情. 非同步傳輸: A做好後通知B,C等待B完成後才開始作,D等待A以及C兩個 人一起通知它開始做事etc..... 同步傳輸: 所有人都事先收到一份嚴格規定好的行程表(timing diagram) 隨著時間的進行(clock).在行程表內定好的時間一定會完成. 沒達成的就地處決(........有嗎??) 效率上的差異是很明顯的. 可是SDRAM只是把DRAM改成synchronous介面嗎? 很不幸的,如果只是這樣做對效率一點幫助都沒有.雖然 如FPM DRAM及EDO RAM是非同步介面.但是主機板晶片組或者是 顯示晶片上的記憶體控制器存取它們仍然是照著固定的Timing 如6-3-3-3,4-1-1-1,只是需要依照外頻以及RAM的規格手動設定 不同的timing....... JEDEC SDRAM主要的加速機制仍然發揚了過去有的方法. 省略重複的Row Addr,傳輸Col Addr可以與資料讀寫同時進行, Burst Mode等..前面簡介過的方法都以另外一種形式在JEDEC SDRAM上實作. 除此之外JEDEC SDRAM還有Mode Register可以動態改變 SDRAM的存取方式,burst length,各種相關的timing如CL等. (Mode Registry和SPD不要混淆,作用算是相反吧) ==================================================== 最早的SDRAM並沒有SPD ==================================================== JEDEC PC66/PC100/P133 SDRAM在介面上增加了BA(Bank Address),以指定internal bank,SDR SDRAM有2組internal bank,DDR SDRAM有4組. internal bank Bank 0 Bank 1 v v Control |-------------| ----| Logic --> | Bank 0 array| nk1 | | | | |-------------|-----| |Sense Amp | Amp | --------------------| Buffer 所以SDRAM存取的時候會碰到三種情況. 1.在同一個page/row中(同一個row中的位址稱為page). Timing : CL-1-1-1...傳到burst length結束,SDRAM支援1/2/4/8 (CL=Cas Latency) 以及page結束這幾種 2.不同的row address.沒有bank conflict RtC-CL-1-1-1... (Ras to CAS latency) 3.不同的row address而碰上bank conflict. 該bank正在使用中 Precharge-RtC-CL-1-1-1.... 而三者發生的機率.除了應用程式的種類外,memory controller 的規劃以及整個記憶體系統的配置(SDRAM不是拼命把記憶體頻寬 加大或是增加多通道效率就會持續增加的)都會有影響.最佳化 記憶體系統.對SDRAM來講可能就是平均有效傳輸速率33%與66% 的差異. 比如說以CL,RtC,Precharge都是3cycle的SDRAM來說 (其實哪裡有這麼好的??),burst length=4,那麼有效傳輸比例 分別是66%,44%,33%.但是memory系統的排程決定了三者的機率. 尤其是效率的bank conflict,在不同的情況下比例可以由5% 到25%以上不等. Latency:貨真價實的效能障礙. 相對於DRAM密度的快速成長.DRAM對於存取的latency 卻是緩慢的改進.DRAM密度以符合電晶體密度的標準(1.5X/year) 成長的同時,DRAM latency的改進卻不到每年7%. 也就是說,看的到的RAM,雖然好像PC133跳DDR400,DDR2-533, 或者GDDR3 1.xGHZ等.可是真正的latency沒改進的情況下,採用的 是如同更多的internal bank去實作,得到的是更低的有效傳輸比例 .效能改進並沒有如同帳面數字一般. ===================================== 待續: DDR2 DirectRambus 1T-SRAM Embedded DRAM 記憶體系統的設置參數對效能的影響 改進記憶體存取的軟體技巧 =====================================