動態隨機存儲器

<image>

<image>

動態隨機存取記憶體（dynamic random-access memory, DRAM），是一種半導體存儲器，通常被用作主存儲器，用於存儲運行中的程式和數據。在DRAM中，每個記憶單元由一個電容和一個電晶體組成，主要的作用原理是利用電容內儲存電荷的多寡來代表一個二進位位元（bit）是1還是0。與大部分的隨機存取記憶體（RAM）一樣，存在DRAM中的資料會在電力切斷以後很快消失，因此它屬於一種揮發性記憶體（volatile memory）設備。

由於電晶體會有漏電流的現象，導致電容上所儲存的電荷數量並不足以正確的判別數據，進而導致數據毀損。因此對於DRAM來說，周期性地充電是一個不可避免的條件。由於這種需要定時刷新的特性，因此被稱為「動態」記憶體。相對來說，靜態記憶體（SRAM）只要存入數據後，即使不刷新也不會遺失記憶。

DRAM與靜態隨機存取記憶體（Static random-access memory，SRAM）相比，具有更高的密度和較低的成本，因為其每一個位元的資料都只需一個電容跟一個電晶體來處理，而SRAM上一個位元通常需要六個電晶體。正因這緣故，DRAM擁有非常高的密度，單位體積的容量較高，成本也較低。但相反的，DRAM也有存取速度較慢，耗電量較大的缺點。為了進一步提高速度，人們開發了同步（synchronous）DRAM或SDRAM，操作與外部時鐘同步，以實現高速運行。如今，DRAM一般都指SDRAM。

由於動態隨機存取記憶體具有較高的密度和較低的成本，因此它被廣泛應用於個人電腦、伺服器、智慧型手機和其他電腦系統中。但是，由於其刷新操作和其他諸多因素，動態隨機存取記憶體的性能和可靠性有時會受到影響。因此，在設計和實現電腦系統時，需要考慮適當的記憶體架構和控制策略，以確保高效的運行和穩定性。

動態隨機存取記憶體通常被組織成一系列的記憶體晶片，這些晶片可以通過總線或其他互連技術進行連接。每個記憶體晶片可以包含數百萬到幾十億個記憶單元。由於DRAM存儲器需要刷新操作，因此通常需要使用一些控制電路，例如記憶體控制器或記憶體介面控制器，以管理存儲器操作，如讀取、寫入、刷新等。

動態隨機存儲器的每位元價格在2017年上漲了47%，這是自1988年上漲45%以來30年中的最大漲幅。在2018年，「動態隨機存儲器市場的一個關鍵特徵是目前只有三個主要供應商——美光科技、SK海力士和三星電子」，它們「對產能保持著相當嚴格的控制」。

其他製造商製造並銷售雙列直插式存儲模塊（DIMM）但不製造其中的動態隨機存儲器晶片（例如金士頓科技），部分製造商單獨銷售堆疊式DRAM（例如用於百億億次級別的最快超級計算機中），如Viking Technology。還有些製造商將此類存儲器集成到其他產品中銷售，例如富士通將其集成到CPU中，AMD集成到GPU中，以及Nvidia在其部分GPU晶片中採用HBM2。

## 歷史

### 前身

<image>

第二次世界大戰期間，布萊切利園使用了一台代號為「水瓶座」的密碼分析機，其中包含硬連線動態存儲器。機器讀取紙帶後，將其上的字符「記憶在動態存儲庫中」。該存儲庫採用大型電容器組，通過充電與否來記錄數據：帶電電容器代表叉（1），未帶電電容器代表點（0）。由於電荷會逐漸洩漏，系統需施加周期性脈衝以補充帶電電容器的電量（「動態」一詞即源於此）。

1965年11月，東芝推出應用於其Toscal BC-1411電子計算器的雙極型動態隨機存儲器。1966年，東芝的Tomohisa Yoshimaru與Hiroshi Komikawa對一種包含多個電晶體與單個電容器的存儲電路申請了日本專利，並於1967年申請了美國專利。

上述早期動態隨機存儲器採用雙極型電晶體。儘管其性能優於磁芯存儲器，但其高昂的成本使其無法撼動當時磁芯存儲器的主導地位。電容器也曾用於早期的存儲方案中，例如阿塔納索夫-貝瑞電腦的磁鼓、威廉士管與選數管。

### 單MOS動態隨機存儲器

1966年，羅伯特·丹納德博士在IBM托馬斯·J·沃森研究中心研發MOS存儲器時，試圖尋找一種替代方案，以取代每位元需六個MOS電晶體的靜態隨機存取存儲器。在此期間，他發明了現代動態隨機存儲器架構，實現單MOS電晶體對應單電容器的設計。在研究MOS技術特性時，他發現該技術可用於構建電容器，利用MOS電容器的充放電狀態即可表示數據位元的1和0，並可通過MOS電晶體控制電荷寫入。單電晶體MOS動態隨機存儲器單元由此誕生。他於1967年提交專利申請，並於1968年獲得美國專利（編號 3,387,286）。相比磁芯存儲器，MOS存儲器性能更高、成本更低且功耗更小。專利中如此描述該發明：「在一項實施例中，每個存儲單元均由單個場效應電晶體與單個電容器構成。」

1969年，位於加利福尼亞州桑尼維爾的高級存儲系統公司（Advanced Memory Systems）將MOS動態隨機存儲器晶片商業化。這款1024位晶片被出售給霍尼韋爾、雷神公司與王安電腦等企業。同年，霍尼韋爾委託英特爾利用其自主研發的三電晶體單元製造動態隨機存儲器。該項目最終催生了1970年初的Intel 1102。然而，Intel 1102存在諸多缺陷，促使英特爾秘密啟動內部改良設計，以避免與霍尼韋爾發生專利衝突。儘管初期因掩模問題導致良率低下（直至第五次修改掩模才得以解決），該設計最終促成了1970年10月面世的首款商用動態隨機存儲器——Intel 1103。Intel 1103由喬爾·卡普（Joel Karp）設計，帕特·埃爾哈特（Pat Earhart）負責版圖規劃，掩模則由芭芭拉·馬尼斯（Barbara Maness）與朱迪·加西亞（Judy Garcia）切割。20世紀70年代初，MOS存儲器徹底取代磁芯存儲器，成為主導存儲技術。

Mostek於1973年推出了由羅伯特·普羅布斯廷（Robert Proebsting）設計的MK4096 4 Kbit動態隨機存儲器，這是首款採用多路復用行與列地址線的動態隨機存儲器。該尋址方案利用相同的地址引腳，在交替的總線周期內分次接收目標存儲單元地址的低位與高位。這一突破性進展將所需地址線數量減半，使晶片得以採用引腳更少的封裝方案。隨著存儲器容量的不斷迭代，該成本優勢愈發顯著。MK4096被證實為一款極具魯棒性的客戶級應用設計。當密度提升至16 Kbit時，其成本優勢進一步擴大；1976年問世的16 Kbit Mostek MK4116動態隨機存儲器，一舉拿下全球逾75%的動態隨機存儲器市場份額。然而，隨著20世紀80年代初存儲密度突破64 Kbit，Mostek等美國本土製造商相繼被日本企業趕超，後者在整個20世紀80至90年代徹底主導了美國及全球市場。

1985年初，高登·摩爾決定讓英特爾退出動態隨機存儲器生產業務。至1986年，絕大多數美國晶片製造商已停止生產動態隨機存儲器。僅剩美光科技與德州儀器維持商業量產，而IBM則保留生產線以供內部使用。

1985年，64K動態隨機存儲器晶片已成為電腦標配，且全球逾六成產能被日本企業壟斷。美國半導體製造商隨即指責日本企業通過傾銷手段，意圖將美國本土廠商逐出大宗存儲晶片市場。短短18個月內，64K晶片單價從3.50美元暴跌至35美分，導致部分美國企業遭受毀滅性財務打擊。1985年12月4日，美國商務部國際貿易管理局裁定該項申訴成立。

同步動態隨機存儲器（SDRAM）由三星研發。首款商用SDRAM晶片為三星KM48SL2000，其容量為16 Mbit，於1992年問世。首款商用雙倍數據率同步動態隨機存取存儲器（DDR SDRAM）晶片則是三星於1998年發布的64 Mbit DDR SDRAM晶片。

2001年，日本動態隨機存儲器製造商反控韓國同行涉嫌傾銷。

2002年，美國電腦製造商正式提起針對操縱動態隨機存儲器價格的訴訟。

## 工作原理

<image>

<image>

DRAM通常以一個電容和一個電晶體為一個單元排成二維矩陣，左圖所示是一個4×4的矩陣。部分動態隨機存儲器矩陣長寬均達數千個單元。

連接各行的長水平線稱為字線（word line）。每列單元由兩條位線組成，分別間隔連接該列內的存儲單元（右側插圖未標示此關鍵細節）。它們通常被稱為+位線與-位線。

感測放大器本質上是位於位線之間的一對交叉耦合反相器。第一個反相器輸入端連接+位線，輸出端連接-位線；第二個反相器輸入端連接-位線，輸出端連接+位線。該結構形成正反饋，當一條位線達到最高電壓且另一條位線降至最低電壓時即達到穩定狀態。

基本的操作機制分為讀(Read)和寫(Write)，讀的時候先讓Bitline(BL)先充電到操作電壓的一半，然後再把電晶體打開讓BL和電容產生電荷共享的現象，若內部儲存的值為1，則BL的電壓會被電荷共享抬高到高於操作電壓的一半，反之，若內部儲存的值為0，則會把BL的電壓拉低到低於操作電壓的一半，得到了BL的電壓後，再經過放大器來判別出內部的值為0和1。寫的時候會把電晶體打開，若要寫1時則把BL電壓抬高到操作電壓使電容上儲存著操作電壓，若要寫0時則把BL降低到0伏特使電容內部沒有電荷。

### 從動態隨機存儲器存儲單元讀取數據位的操作

- 斷開讀出放大器連接。
- 將位線預充電至介於高低邏輯電平之間的絕對相等電壓（例如若兩電平分別為0與1V，則預充電至0.5V）。位線在物理結構上保持對稱以確保電容相等，故此時兩端電壓一致。
- 關閉預充電電路。由於位線較長，其自身電容足以在短時間內維持預充電電壓。
- 隨後將目標行的字線驅動至高電平，使單元的存儲電容器接入相應位線。此時電晶體導通，電荷隨之從存儲單元轉移至位線（若存儲值為1），或從位線轉移至存儲單元（若存儲值為0）。由於位線電容通常遠高於存儲單元電容，若存儲單元電容器處於放電狀態，位線電壓僅微弱上升；若處於充電狀態則微弱下降（例如上述兩情況分別為0.54V與0.45V）。由於另一條位線維持在0.50V，兩條扭絞位線之間便產生微小壓差。
- 此時將讀出放大器接入位線對。交叉耦合反相器隨即觸發正反饋，放大特定列奇偶行位線間的微小壓差，直至一條位線徹底降至最低電壓，另一條升至最高電壓。一旦完成此過程，該行即處於「開啟」狀態（所需單元數據已可供讀取）。
- 開啟行內的所有存儲單元被同步感測，讀出放大器輸出端隨之鎖存數據。隨後列地址指定某一鎖存位接入外部數據總線。讀取同一行內的不同列無需經歷行開啟延遲，因為開啟行內的所有數據均已感測並鎖存完畢。
- 讀取開啟行內的列數據時，電流由讀出放大器輸出端沿位線回流，為存儲單元重新充電。此過程通過推高原有帶電電容器的電壓，或維持空電容器的放電狀態，鞏固（即刷新）了存儲單元內部電荷。需注意，受位線長度影響，電荷回傳至單元電容器的傳播延遲相當長。該耗時顯著超出了感測放大階段，因而會與一次或多次列讀取操作重疊。
- 當前開啟行內所有目標列讀取完畢後，關閉字線以斷開存儲單元電容器與位線的連接（即關閉該行）。隨後關閉讀出放大器，位線再次進入預充電狀態。

### 寫入存儲器

<image>

存儲數據時先開啟目標行，並將指定列的讀出放大器暫強制拉至預設的高電壓或低電壓狀態，進而通過位線對單元存儲電容器充放電至目標值。得益於讀出放大器的正反饋構型，即使撤除強制電壓，它也能將位線維持在穩定電壓。向特定單元寫入數據時，行內所有列如同讀取階段一樣被同步感測，因此儘管僅更改了單一列的存儲單元電容器電荷，但整行均被刷新（回寫），如右圖所示。

### 刷新率

根據JEDEC標準，製造商通常規定每行必須每64ms或更短時間內刷新一次。

部分系統每隔64 ms觸發一次涵蓋所有行的集中突發刷新。另有系統在整個64 ms周期內均勻交錯地逐行刷新。例如，擁有213=8,192行的系統需採用交錯式刷新率，即每7.8 μs刷新一行（64 ms除以8,192行）。少數實時系統依據控制系統其餘硬體運作的外部定時器機制分批刷新存儲器，例如影片設備中每10-20 ms出現一次的垂直空白間隙。

下一待刷新行的地址由外部邏輯或動態隨機存儲器內部的計數器維護。由系統提供行地址（及刷新命令）旨在更精確地掌控刷新時機與具體行號。由於該系統既掌握存儲器訪問模式又明晰動態隨機存儲器的刷新需求，此舉可將存儲器訪問衝突降至最低。當行地址由動態隨機存儲器內置計數器提供時，系統即放棄對目標刷新行的控制權，僅負責發送刷新指令。部分現代動態隨機存儲器具備自刷新功能；徹底免除外部邏輯發送刷新指令或提供行地址的需求。

在特定條件下，即便動態隨機存儲器數分鐘未獲刷新，內部絕大多數數據依然可被恢復。

### 存儲器時序

全面描述動態隨機存儲器運作時序需要諸多參數。以下摘自1998年發布的數據手冊，列舉了兩種速度等級的異步動態隨機存儲器時序示例：

"50ns"｜"60ns"｜描述

tRC｜84ns｜104ns｜隨機讀寫周期時間（兩個完整/RAS周期之間的間隔）

tRAC｜50ns｜60ns｜訪問時間：/RAS低電平至輸出有效數據

tRCD｜11ns｜14ns｜/RAS低電平至/CAS低電平時間

tRAS｜50ns｜60ns｜/RAS脈衝寬度（最短/RAS低電平時間）

tRP｜30ns｜40ns｜/RAS預充電時間（最短/RAS高電平時間）

tPC｜20ns｜25ns｜頁模式讀寫周期時間（/CAS至/CAS）

tAA｜25ns｜30ns｜訪問時間：列地址有效至輸出有效數據（涵蓋/CAS低電平前的地址建立時間）

tCAC｜13ns｜15ns｜訪問時間：/CAS低電平至輸出有效數據

tCAS｜8ns｜10ns｜最短/CAS低電平脈衝寬度

因此通常引述的核心指標即「/RAS低電平至輸出有效數據時間」。它涵蓋了開啟行、穩定讀出放大器並將指定列數據傳輸至輸出端所需的耗時。這也構成了最短/RAS低電平時間，因其囊括了放大後數據回傳並為單元重新充電的用時。從已開啟頁面內讀取後續位元的耗時則大幅縮短，由/CAS至/CAS周期時間決定。由於該核心指標設定了不受行長或頁面大小影響的性能下限，它便成為橫向對比各類動態隨機存儲器性能的最直觀基準。龐大的陣列不可避免地推高位線電容並拉長傳播延遲，鑑於讀出放大器的穩定耗時高度依賴電容大小與傳播延遲，上述操作時間亦被同步拉長。現代動態隨機存儲器晶片為規避速度衰減，轉而在單顆晶片內集成大量獨立且完整的動態隨機存儲器陣列，以此兼顧高容量與讀寫效率。

若由時序邏輯驅動此類RAM，相關耗時通常向上取整至最近的時鐘周期。例如經由100 MHz狀態機（即10 ns時鐘周期）訪問時，50 ns動態隨機存儲器首個讀取動作需消耗5個時鐘周期，而同頁內的後續讀取僅各需2個時鐘周期。由於頁內四次突發讀取極為普遍，此機制常被簡稱為「5-2-2-2」時序。

在描述同步存儲器時，時序由破折號分隔的時鐘周期數表示。這些數值代表了以動態隨機存儲器時鐘周期為基準的倍數關係，依次對應tCL-tRCD-tRP-tRAS。需注意，採用雙倍數據速率信號機制時，該時鐘頻率僅為數據傳輸速率的一半。在200MHz時鐘下，JEDEC標準PC3200時序標定為3-4-4-8，而主打高性能的高溢價PC3200規格DDR動態隨機存儲器DIMM則可挑戰2-2-2-5時序。

PC-3200(DDR-400)｜PC2-6400(DDR2-800)｜PC3-12800(DDR3-1600)｜描述

周期｜時間｜周期｜時間｜周期｜時間

tCL｜典型｜3｜15ns｜5｜12.5ns｜9｜11.25ns｜/CAS低電平至輸出有效數據（等同於tCAC）

高速｜2｜10ns｜4｜10ns｜8｜10ns

tRCD｜典型｜4｜20ns｜5｜12.5ns｜9｜11.25ns｜/RAS低電平至/CAS低電平時間

高速｜2｜10ns｜4｜10ns｜8｜10ns

tRP｜典型｜4｜20ns｜5｜12.5ns｜9｜11.25ns｜/RAS預充電時間（最短預充電至激活間隔）

高速｜2｜10ns｜4｜10ns｜8｜10ns

tRAS｜典型｜8｜40ns｜16｜40ns｜27｜33.75ns｜行激活時間（最短激活至預充電間隔）

高速｜5｜25ns｜12｜30ns｜24｜30ns

最小隨機訪問時間雖由tRAC=50ns縮減至tRCD+tCL=22.5ns，但即便是頂級20ns顆粒也僅達到異步動態隨機存儲器速度的2.5倍。CAS延遲的改善幅度更小，僅由tCAC=13ns微降至10ns。然而，DDR3存儲器卻硬生生榨出了32倍的帶寬躍升；依託內部流水線與極寬的數據總線，它每1.25ns便能輸出雙字數據（1），而EDO動態隨機存儲器受制於tPC=20ns的瓶頸，同期只能輸出單字（50Mword/s）。

#### 時序縮寫

- tCL–CAS延遲（CAS latency）、tCR–命令速率（Command rate）、tPTP–預充電至預充電延遲（precharge to precharge delay）、tRAS–RAS激活時間（RAS active time）、tRCD–RAS至CAS延遲（RAS to CAS delay）、tREF–刷新周期（Refresh period）、tRFC–行刷新周期時間（Row refresh cycle time）、tRP–RAS預充電（RAS precharge）｜、tRRD–RAS至RAS延遲（RAS to RAS delay）、tRTP–讀取至預充電延遲（Read to precharge delay）、tRTR–讀取至讀取延遲（Read to read delay）、tRTW–讀取至寫入延遲（Read to write delay）、tWR–寫入恢復時間（Write recovery time）、tWTP–寫入至預充電延遲（Write to precharge delay）、tWTR–寫入至讀取延遲（Write to read delay）、tWTW–寫入至寫入延遲（Write to write delay）