為什麼這篇dram原理鄉民發文收入到精華區:因為在dram原理這個討論話題中,有許多相關的文章在討論,這篇最有參考價值!作者eola (eola)看板VideoCard標題簡介]DRAM系統時間Mon Feb 6 04...
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
記憶體系統的設置參數對效能的影響
改進記憶體存取的軟體技巧
=====================================
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.113.23.107
※ 編輯: eola 來自: 140.113.23.107 (02/06 04:32)