前面幾篇文章我們一直在講 DRAM 的位置。它不是 SSD 那樣的長期倉庫,也不是 SRAM 那樣貼在 CPU 旁邊的快取記憶體。
它更像系統執行階段的大容量工作台:程式執行起來以後,程式碼、資料、臨時狀態,都會放到 DRAM 裡,方便 CPU/GPU 快速訪問。
那在這篇文章,我們要進入 DRAM 晶片內部, 瞭解 DRAM 內部是怎麼個工作原理?很多人一聽“儲存晶片”,腦子裡可能會想像成一個個小盒子,裡面裝著 0 和 1。但真實的 DRAM 不是這樣。DRAM 並不是把資料像檔案一樣“裝進去”。
它存一個 0 或 1,本質上靠的是:一點點電荷。有電,可能表示 1。沒電,可能表示 0。當然,真實晶片裡不會這麼粗糙,它需要一整套電路來讀、寫、放大和恢復。
但先抓住這個核心:
DRAM 存資料,靠的是非常微小、非常脆弱的電荷狀態。這也是 DRAM 能做大容量的原因,也是它必須刷新、必須複雜控制的根源。
一、DRAM 的基本單元:一個電晶體,一個電容
DRAM 最經典的儲存單元叫1T1C。
T 是 Transistor,電晶體。
C 是 Capacitor,電容。
也就是說,一個 bit 通常由一個電晶體加一個電容組成。
相比 SRAM 一個 bit 往往需要多個電晶體,DRAM 單 bit 面積更小,更適合堆出很大的容量。這就是為什麼電腦記憶體、伺服器記憶體、視訊記憶體,可以做到很大的容量。
但這個設計也帶來了一個麻煩:電容裡的電荷太少,而且會漏。這個“小水杯”不是密封水箱,而是一個會慢慢漏水的小容器。所以 DRAM 的資料狀態並不是永遠穩定在那裡,而是需要後續電路不斷維護。
這點非常重要。DRAM 不是一個穩定開關。它更像是用一點點電荷暫時保存狀態。
二、Wordline 和 Bitline:DRAM 怎麼找到某一個 bit?
一顆 DRAM 晶片裡,不可能只有一個儲存單元。真實的 DRAM 是一個巨大的二維陣列。很多很多個 1T1C cell 排成行和列。
要訪問其中某個 cell,就需要兩類關鍵線路:
Wordline,字線。
Bitline,位線。
字線可以理解成“選中那一行”。位線可以理解成“這一列用來讀寫資料的通道”。當某一根 Wordline 被拉高時,這一行的訪問電晶體就會被打開。這些 cell 就和對應的 Bitline 連接起來。這時候,電容裡的電荷狀態就會影響 Bitline 上的電壓。如果電容裡有電,它會讓 Bitline 電壓發生一點變化。如果電容裡沒電,Bitline 的變化又不一樣。
聽起來好像很簡單:打開一行,看一下電壓,就知道是 0 還是 1。但問題在於:這個電壓變化非常小。DRAM cell 裡的電容非常小,存的電荷非常少。它不可能像開關燈一樣,啪一下從 0V 變成 1V,讓你一眼看出來。
原本 Bitline 預充到一個中間電壓。cell 接上來之後,只讓 Bitline 電壓產生非常微弱的偏移。這個偏移可能小到不能直接當成可靠的數字 0 或 1。所以 DRAM 還需要一個非常關鍵的電路。它叫 Sense Amplifier,感應放大器,簡稱感放。
三、Sense Amplifier:把微弱差別放大成可靠的 0 和 1
Sense Amplifier 是理解 DRAM 讀操作的關鍵。
如果說電容負責“存一點點電荷”,Wordline 負責“選中某一行”,Bitline 負責“把這個狀態傳出來”,那 Sense Amplifier 就負責:把非常微弱的電壓差,放大成可靠的數字訊號。
可以這樣理解:
DRAM cell 裡的資訊不是大聲喊出來的,而是小聲說了一句。
Bitline 聽到了一個很微弱的變化。Sense Amplifier 的作用,就是把這個小聲訊號判斷出來,並且放大成明確的 0 或 1。如果沒有 Sense Amplifier,DRAM cell 那點微弱電荷根本沒法被穩定讀取。
這也是為什麼 DRAM 不是簡單的“電容接根線”。它必須依賴外圍電路一起工作。而且 Sense Amplifier 不只是讀出來這麼簡單。它還有一個很重要的作用:恢復資料。
為什麼讀資料還要恢復?因為 DRAM 的讀操作本身會擾動 cell。當電容接到 Bitline 上,電容裡的電荷會和 Bitline 發生共享,原本 cell 裡的狀態會被破壞一部分。也就是說,DRAM 讀一次資料,不是像看一眼紙上的字那麼輕鬆。它更像是你為了看清一個很小的印記,需要把它拓印出來。拓印過程中,原來的印記也會被影響。所以讀完之後,Sense Amplifier 還要把正確的資料重新寫回 cell,把電容裡的狀態恢復好。
DRAM 的讀操作,本質上是“擾動、感放、恢復”的過程。不是簡單地看一眼。
四、寫入 0 和 1:本質是給電容充電或放電
讀操作說完,再看寫操作就更容易理解了。寫 DRAM,就是通過 Bitline 和訪問電晶體,改變電容裡的電荷狀態。如果要寫入一種狀態,就把 Bitline 驅動到對應電平。然後打開 Wordline,讓目標 cell 的訪問電晶體導通。這時電容就會被充電或放電。
寫完之後,Wordline 關閉,電晶體斷開,電容把這個電荷狀態暫時保存下來。所以寫入 1 或 0,底層並不是“寫了一個數字進去”。而是把一個很小電容的電荷狀態調整到對應狀態。
當然,不同設計裡 0 和 1 對應的具體電荷狀態可以從電路定義上理解,不要機械理解成“有電一定是 1,沒電一定是 0”。
DRAM 的資料,本質上是電容裡的電荷狀態。這個狀態由訪問電晶體控制進出,通過位線傳遞,再由感放識別和恢復。
五、為什麼 DRAM 能做大容量?
現在就能理解 DRAM 為什麼適合做大容量了。因為它的基本單元很簡單。一個 bit 主要靠一個電晶體加一個電容。單元面積可以做得很小。
當每個 bit 佔的面積足夠小,就能在同樣晶片面積裡塞進更多 bit。這就是 DRAM 相比 SRAM 的核心優勢。
SRAM 快,但一個 bit 要用更多電晶體,面積大,成本高。
DRAM 慢一些,還需要刷新和複雜控制,但密度高,容量可以做大。
所以工程上不會拿 SRAM 去做大容量主記憶體,也不會拿 DRAM 去替代 CPU L1 Cache。因為它們解決的問題不同。SRAM 是為了離計算核心更近、更快。DRAM 是為了在成本可控的情況下,提供足夠大的運行空間。這就是儲存系統裡的經典取捨。
六、但 DRAM 的代價也很明顯:資料狀態太脆弱
DRAM 的優勢來自簡單單元。但它的問題也來自簡單單元。電容很小、電荷很少、還會洩漏。讀操作還會擾動原來的狀態。這就決定了 DRAM 不是一個“寫進去就穩穩放著”的儲存。
它需要刷新、需要感放、需要預充電、需要行列控制、需要複雜的時序管理、也需要記憶體控製器配合。
所以 DRAM 看起來只是一個個 1T1C cell 排列起來,但真正能穩定工作,靠的是整套電路系統。這也是 DRAM 很有意思的地方:
儲存單元越簡單,外圍控制反而越重要。
為了讓單 bit 面積儘可能小,DRAM 把很多複雜性放到了陣列外圍和控制流程裡。這是一種典型的晶片工程取捨。用更小的 cell 換更大的容量。再用感放、刷新、控製器和時序設計,把這些脆弱的小 cell 管起來。所以 DRAM 的核心矛盾可以這樣概括:
它用很小的面積存很多資料,但必須接受電荷洩漏、讀出擾動和複雜控制。
七、從一次讀取過程,看懂 DRAM 的真實工作方式
我們用一張圖來看一次簡化版 DRAM 讀取過程:
這就是為什麼從軟體視角看,記憶體像一個大陣列;但從晶片視角看,DRAM 是非常複雜的模擬 + 數字混合系統。
八、常見誤區:DRAM 不是穩定的小開關
第一個誤區:DRAM 裡面有很多小開關,打開是 1,關閉是 0。
不精準。這更像是 SRAM 的直覺。DRAM 不是靠一個穩定開關永久保持狀態,而是靠電容裡的電荷狀態暫時表示資料。
第二個誤區:讀 DRAM 就是看一下里面是 0 還是 1。
不精準。DRAM 的讀操作會擾動 cell,本身帶有破壞性傾向。讀完之後,需要通過 Sense Amplifier 把資料恢復回去。
第三個誤區:DRAM 單元簡單,所以 DRAM 設計也簡單。
正好相反。DRAM cell 簡單,是為了高密度和大容量。但正因為 cell 太小、太脆弱,外圍電路和控制流程才非常重要。
第四個誤區:只要電容存著電,資料就一直安全。
不對。電容會漏電,溫度、工藝、干擾、時間都會影響資料保持。所以 DRAM 必須刷新,不能長期不管。
結尾:DRAM 的本質,是用脆弱電荷換巨大容量
這一篇我們正式看到了 DRAM 的基本儲存方式。一個 bit,通常由一個電晶體和一個電容組成。
Wordline 負責選中一行,Bitline 負責傳遞讀寫訊號。
Sense Amplifier 負責把微弱電壓差放大成可靠數字訊號,並在讀後恢復資料。
DRAM 能做到大容量,是因為它的單 bit 單元足夠簡單、面積足夠小。但代價也很明顯:電容會漏電、讀操作會擾動、訊號非常微弱、資料狀態需要不斷維護。
所以 DRAM 不是穩定的小盒子,也不是簡單的小開關。它更像是一個由無數微小電荷狀態組成的巨大陣列,必須依靠外圍電路不斷讀出、放大、恢復和維護。
這就是 DRAM 的工程魅力:用極小面積換大容量,再用複雜電路把脆弱狀態管理起來。 (文觀經技)
