[爆卦]DRAM 原理是什麼?優點缺點精華區懶人包

為什麼這篇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)
saitoTK:I like it!!! 59.115.200.34 02/06 05:14
nhsmallcat:推 61.230.53.203 02/06 06:46
orinsinal:好文,~! 59.112.41.173 02/06 12:58
nono17:不錯文 不過有點看不懂! 219.68.190.149 02/06 13:21
SuWeiLin:好文推! (還是有點看不懂...程度差>"<) 218.161.93.17 02/06 13:36
Haiker:正點....!!218.169.242.148 02/06 14:08
wen1981:太深澳了...... 59.121.186.105 02/06 15:09
yen6991:這些計組課本不是都有嗎@@ 59.115.201.199 02/06 15:11
eola:不把這些介紹完怎麼介紹DDR2 SDRAM?? 140.114.79.128 02/06 15:18
singy:推好文 多學了些有用的東西 61.231.164.134 02/06 16:14
yen6991:期待DDR2的大作^^...感謝 59.115.201.199 02/06 16:49
icome:好專業的文章@@218.171.214.157 02/07 00:18
icome:不是念相關科系的 有些難理解 orz218.171.214.157 02/07 00:23
storier:期待"改進記憶體存取的軟體技巧"218.168.169.231 02/07 09:58
eola:改進記憶體存取的軟體技巧不是指拿套軟體 140.113.23.107 02/07 20:55
eola:按一下記憶體效能會變好..而是Compiler的最佳 140.113.23.107 02/07 20:55
eola:化,指令排程,利用cache以及寫程式的技巧等 140.113.23.107 02/07 20:56
eola:改進程式存取記憶體的效能.但是這部分和 140.113.23.107 02/07 20:56
eola:顯示系統已經差太遠了.可能會拿掉..... 140.113.23.107 02/07 20:56
storier:恩..我想看的就這些 冏218.168.169.231 02/07 21:07
Hoopt:我竟然看得懂.....220.138.221.114 02/07 23:42
eola:呃..當然是希望大家看的懂才寫的... 140.113.23.107 02/08 10:26
hans0406:推一個,不過Synchoronos是不是多打一個o 61.57.98.91 02/08 16:51
MRjk:讚!!!! 218.165.81.135 02/12 16:49

你可能也想看看

搜尋相關網站