动态随机存储器

<image>

<image>

动态随机存储器，又称动态RAM（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）