DRAM内存架构&原理

DRAM内存架构&原理

DRAM 简介

DRAM(Dynamic Random Access Memory, 动态随机访问内存),是现在主流的内存形式。基本单元主要由一个晶体管和一个电容组成,电容中有电荷代表“1”,没有电荷代表“0”。由于电容中的电荷会随着时间而慢慢泄露,所以需要周期性地进行“充电”,这也是“Dynamic”的由来。Random Access的意思则是,读取/改写其中任何一个bit所需要的时间是一样的。由于DRAM低廉的价格以及不慢的访问速度,以及构造上的简单非常有利于大规模的集成,所以现在被广泛地应用。

DRAM的层级

层级(由底层到高层) 级别简介 备注
1 晶体管级 (CMOS晶体管) 最底层,物理实现
2 存储单元级 (1T+1C单元) 基本存储单位(0 or 1)
3 阵列级 (Memory Array) 二维存储阵列
4 Bank级 (Bank) 并行访问单元
5 芯片级 (DRAM Die) 完整存储芯片
6 封装级 (Package) 物理封装
7 模块级 (DIMM/SO-DIMM) 内存条
8 通道级 (Channel) 系统总线
9 系统级 (Memory System) 完整内存系统

下面从微观到宏观的角度逐级介绍下。

存储单元级(Memery Cell)

Memery Cell由单个一个电容和一个晶体管组成

![memory cell](/images/memory cell.jpg)

Transistor:晶体管
Capacitor:电容
Gate:栅极
Source:源极
Drain:漏极
WordLine:字线/行线
BitLine:位线/列线

a. 当WordLine激活时,Gate ON,Source和Drain联通,电容与BitLine接通;
b. 当WordLine不激活,Gate OFF, Source和Drain阻断,电容与BitLine阻断;
当电容中充满正电荷的时候,表示为1;否则为0

阵列级(Memory Array)

![Memory Array](/images/Memory Array.png)

注意: sense amplifier 由一对bit line组成差分感知器

读:

  1. bit line(列)预加电至DRAM供电电压(3V)的一半,则1.5V。
  2. word line(行)被加了高电压,这个过程称之为置位。通道三极管打开。

如果电容器充满了电(1),电荷会从电容流向bit line。电容也会放掉一点电,bit line的电压会升高一点。相反的,如果电容器没电,电荷会从bit line流向电容,电容会充一点电,bit line电压会降低一点。这个正负电压变化发生时间短且变化微小(因为bit line电容量远大于存储单元里的电容),需要感测放大器去捕捉。

因为是破坏性的读,每次读完必须立刻进行 写操作。

“1”的读取

1的读取

  1. 在WordLine不被激活的时候,两侧的BitLine的电压保持为0.5V;
  2. 接通WordLine后,电容与右侧BitLine接通,部分电荷从电容流出,使其电压小幅增加(足够被检测到);
  3. 在放大器的作用下,电压较高的一侧越来越高,低的越来越低,最后输出可识别信号;
  4. 在电压的帮助下,电荷重新流入电容,使其充满电。

“0”的读取

0的读取

  1. 在WordLine不被激活的时候,两侧的BitLine的电压保持为0.5V;
  2. 接通WordLine后,电容与右侧BitLine接通,部分电荷流入电容,使其电压小幅下降(足够被检测到);
  3. 在放大器的作用下,电压较高的一侧越来越高,低的越来越低,最后输出可识别信号;
  4. 在电压的帮助下,电荷重新被抽出电容。

数据写入

与数据的读取的过程是一致的。

  1. 双侧的BitLine预充电到0.5V;
  2. 激活WordLine,BitLine设置成相应的电压;
  3. 数据写入Cell。

在Memory Array里读取某个特定的bit

读取特定的bit

对一个8x8的Memory Array进行某个bit的读取

需要的控制线:

- 对于8x8的memory array来说,定位一个bit需要3条Row Address Line和3条Column Address Line;
- 但是,当array比较大的时候,需要的线实在太多。所以,我们采取对Row和Column进行先后访问的方式,这样就可用共用一条Address Line了,但同时也需要添加两条控制线,RAS (Row Address Strop)和 CAS(Column Address Strop).
- 最后还需要一条读写的控制线 WE

读取过程:

  1. 所有的BitLine进行预充电;
  2. RAS信号传入,选择整行,,把Array中选择的一行存入放大器中,一般burst length为8;
  3. CAS信号传入,选中特定的bit所在的列,然后传出。

Bank级 (Bank)

Bank为DRAM内的最小可控制单元。Memory Controller是直接对Bank进行下达读写指令的。每次读写都是以8bits为单位。一般来说,一个bank由八个同样的Array组成。同时进行同一位置的读取,一次性输出8bits,也就是一个字节1Byte

bank

Bank示意图,bank中的所有array共享同一个RAS和CAS

这也是为什么通常计算机不支持bit级的访问。而且从这里可以看出,1Byte中的8个bit在实际[物理空间中其实并不是连续的。

chip和Rank

![Rank](/images/DRAM hierarchy.jpg)

名词解释

存储阵列

把 2 个 CSL 和 2 个 WE 分别并联,合并成 1 个列选择信号( CSL+ WE),如下图所示:

存储阵列

此时,这个存储阵列的对外控制信号有 8 个行选择信号(Wordline)、 1 个列选择信号

一次行列选择操作能同时选中 2 对 Bitline 连通后端的读写驱动电路,同时访问 2 个 Cell,进行 2 个 Bit 的读写操作。

具体来说,对于读操作,一次列选择操作后,有 2 个 CSL 同时有效(4个bitline选通),打开 2 个 IO Gating 让 2 对 Bitline 连通后端的两个读写电路,再结合行选择操作,某一 Wordline 有效后,同一 Wordline 上连接的 2 个 Cell 中的 MOS 管导通, 2 个 Cell 中电容的电平被加载到 Bitline 上,2个读写电路同时读取 4 根 Bitline 上的电平到锁存器,即完成一次读操作。

​ 写操作也类似,只是额外激活了 2 个 WE 信号,同时驱动 2 个 Write Driver 电路,把寄存器中的状态加载到 IO Gating 连通的 4 根 Bitline 上,最终对行选择信号选中的那条 Wordline 上的 2 个 Cell 中的电容充电即可。

​ 这种布局可理解为 8 * 1 * 2 的存储阵列,m * n * w 的存储

其中,m 为 Wordline 的数量、n 为列选择控制信号(对应 CSL 和 WE)的数量、w 则为多少个读写驱动电路(CSL/WE)合并为一,也即一次行列选择后可以同时选中多少个 Cell 进行读写操作的位数。

在实际的应用中,我们通常以 Rows * Columns * DataWidth 来描述一个 存储阵列(Memory Array)。

数据位宽

​ 通过存储阵列的解释可知,存储阵列(Memory Array)的数据位宽(Data Width)是指对该阵列进行一次读写操作所访问的位数(Bits),是数据总线宽度的简称。

​ 假如某一存储阵列的数据位宽为 w,那么,在 DRAM 芯片内部,通常有 w 个读写驱动电路(Read Latch 和 Write Driver),将会有 w 对 CSL/WE 控制线合并为一,能同时选通 w 个 IO Gating 电路,让 w 对 Bitline 连通读写驱动电路,w 个读写驱动电路同时读取连通的 Bitline 上的 w 个 Cell。我们可以认为,芯片内部将有 w 根内部数据总线。

​ 需要注意的是,芯片内部的数据总线宽度与芯片对外接口的数据总线宽度是两个概念。DRAM 芯片的 Data Width 一般被设计为 4 位、8 位或16 位,这指的是接口的位宽,而非内部的位宽。

地址解码器

注意:

1.DRAM为什么要不断刷新电路?

电荷泄露

1.在理想状态中,当电容中充满正电荷时,如果WordLine为非激活状态,电容中的电荷应该不随时间变化。但由于熵增原理,实际上还是会有一些微弱的电荷移动。假设电容充满电的时候的电压为3V,而随着时间的流逝,电容中的电荷也随着缓慢泄露,电压随之降低。等降低到1.5V(bit line会预充至DRAM正常电压的一半,后面会讲)以下的时候,我们就无法有效检测了,“1”也就变成了“0”

2.对DRAM进行读操作的时候需要将电容与外界形成回路,通过检测电流变化判断存储元存储的是1还是0(是1就有电荷流出产生电流,是0则没有),WordLine为激活状态。在进行读操作时,如果原来的数据是1,读完之后电荷顺着电流探测电路流走了,就变成0了,下次再读的时候就不是原来的数据了。所以在读操作结束后需要刷新电路,重新将数据写回DRAM中。

​ 因此,JEDECJoint Electron Tube Engineering Council)指定了一个标准,DRAM的刷新时间间隔要小于等于64ms。

2.多久刷新一次?

因为,电容上的电荷也只能保存2ms左右,计算机一般每隔2ms也都会进行DRAM刷新。

3.每次刷新多少存储单元?

以行为单位,每次刷新一行存储单元。

4.如何刷新?

不需要CPU控制,有硬件支持,读出一行的信息后重新写入,占用1个读/写周期。


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 351134995@qq.com

×

喜欢就点赞,疼爱就打赏