问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

DDR系列之三:DDR读写过程

创作时间:
作者:
@小白创作中心

DDR系列之三:DDR读写过程

引用
CSDN
1.
https://blog.csdn.net/qq_44143897/article/details/142997547

DDR(双倍数据速率)内存是现代计算机中常见的内存类型,其读写速度直接影响计算机的整体性能。本文以DDR5为例,详细介绍了DDR内部读写数据的过程,除此之外还介绍了计算机内部DDR是如何工作的,以及DDR的刷新机制。

一、 计算机同时使用SSD和DRAM的原因

  1. SSD固态硬盘将大量的数据储存在里面
  2. DRAM将数据临时存储
  3. 访问大规模数据SSD通常需要50us,而访问相同数据量的,DRAM 大约只需要17ns
  4. DRAM容量由于结构受限,因此它的容量通常在GB,SSD可以轻松做到TB以上
  5. 当计算机同时使用固态硬盘和DRAM时,在需要数据之前,首先需要将数据从固态硬盘复制到DRAM中进行预取操作,然后计算机再从DRAM内部将这个数据提取出来。

例如,电脑在启动游戏前会有一个加载的过程,这个加载时间内,就是将游戏的运行所需要的数据复制到DRAM内部,然后加载完之后,共计算机调取使用。玩游戏过程中的数据又会临时保存DRAM,之后,保存游戏的过程,就是将临时保存的数据移动到SSD。

二、 DRAM是读取数据的流程

本处先从一个最基本的存储单元入手

结构说明:

  1. 当晶体管开通时,电流流过晶体管电容充放电
  2. 电容充满电时(电源电压),表示为1,反之为0
  3. 晶体管在这个过程中充当开关的作用,电容在90nm制程工艺中,大约为30pF,充电为几纳秒
  4. 实际上的DDR由数百万个该单元组成,其中横向的为字线,竖向为位线,如下图所示

现在,我们以一块16G内存条为例,来看看它的读取过程:

  1. 假如这个内存条上有8块DDR,则每块DDR的内存为2G。首先这个大小为2G的内存被集成到DRAM的区域中,这个DRAM被划分为8个区域,每一个区域由4个块组成,共计32 块,一块称为一个bank,总共32个bank,因此,每一块都有65536、宽8192的存储单元数组。
  2. 为了访问相应的数据,需要用到相应的地址,我们需要输入一串包含区域、行地址、列地址,例如(下式为31位,这与实际不符的原因是,他进行了一项优化,将他变成只使用21根线路来发送,这儿的地址与实际的地址管脚输有区别,并不是是直接的管脚)

001 10 0110001101011100 1001000011

A. 13位001,用来选择需要访问的存储块组,2的3次方刚好等于8块
B. 4
5位10,用来选择这一块组中具体的哪一块
C. 6~21位,0110001101011100这16位可以用来确定65536中具体所在的行

D. 22~31位,1001000011这10位用来读取列地址,之所以是10位,是因为芯片每次读取只读取8位数据,所以8192被划分成8个存储单元数组,运用多路复用技术,就可进行访问和读取。

  1. 通过以上地址,我们可以在这个65536*8192的区域内读取相应的数据,具体读取的步骤如下:

A. 首先我们通过前五位已经在由8*4的区域中选到了我们要读取的区域
B. 接着,我们关闭这个组内所有的字线(为什么是关闭,是因为读取的时候,为了防止数据丢失,他有一个不间断刷新的机制),这个操作的目的是关闭所有的晶体管开关,将每一位对应的电容隔离起来。
C. 紧接着,我们将所有的位线(8192个位线)全部充电到0.5V,即电源电压的一半。(注,这里假设DDR电源位1V)
D. 然后通过输入的16位的行地址,我们选定了特定的行,并将这个字线上的所有晶体管的开关打开,这个时候,电容不在隔离,会出现以下两种情况。

  1. 假如这个位为1,则电容上的电压为电源电压1V,这个将会导致开通时电容上的电荷流失到位线上,导致位线的电压升高
  2. 假如这个位为0,则电容上的电压为0V,这将会导致位线上的电压降低,流失部分电荷到这个电容上。

这个时候,每一列下方的感应放大器会将位线上的微小变化与0.5V进行比较放大(这是一个差分放大器),将这个变换扩大化,之前位线上电压增大的位线将变成电源电压,位线上电压减小的将变成0V。

由于这个位线比较长,而每一位上的电容又很小,所以需要一个额外的组件将位线上的数据及时的保存下来(锁存)。

E. 通过上述操作,现在所有位线上的电压不是1V就是0V,现在又将这个位线的电压及时的写入刚才开通的这个字线,完成对读取这一字行的恢复。等待下一次数据的读取或者刷新
F. 接下来利用多路复用器,使用10位地址,将相应的8位线连接到驱动器,然后将这8个值通过8条数据线发送给CPU,从而完成一次数据的读操作。

三、 DDR写入数据的流程

写数据的流程和读操作的流程相似,具体过程如下:

首先我们将要写的数据和地址发送到DRAM,

  1. 前5选择一个组
  2. 将该组的所有位线充电至0.5V
  3. 然后使用16位地址激活单个行,电容器上之前的电压会干扰位线,感测放大器会检测到这一点,并将对应的位线驱动到0或者1。
  4. 列地址转到多路复用器,多路复用器会根据发送的命令将特定的8位线连接到正确的驱动器,这些驱动器会覆盖上先前的电压,并驱动8个位线上的每一个,他们会写入1或0,这个新的位线电压会覆盖之前打开电容的值,从而将这8位数据写入地址对应的单元。

四、 以上读写需要注意的几个点

  1. 当我们读写内存上的所有芯片上时,所有的地址线是相同的,但是每块芯片上的数据线是不一致的。

  1. 每个DDR二进制1对应电源电压对应如下:
DDR
电源电压
二进制1电压
DDR1
2.5V
1.25V
DDR2
1.8V
0.9V
DDR3
1.5V
0.75V
DDR4
1.2V
0.6V
DDR5
1.1V
0.5V

位线上的预充电压,实际上为对应电源电压的一半。

对于DDR5,在写入和刷新时,施加的电压为1.4V的电压,并将这个电压存储到每个电容中。即得到二进制1。

  1. 存储块组、存储块、位线和字线的数量在每一代和容量之间的差异很大,总是为2的指数。

  2. 用于隔离电容器的晶体管非常小,因此,电荷会通过该通断泄露,因此需要不断的进行刷新操作。

五、 DDR刷新的过程

前面的章节我们已经知道,这个刷新的必要性。总结一下刷新的必要性

  1. 由于结构的特殊性,每一次的读取对整个字线来说都是破坏性的(每一次的读取都将导致电容电压的变化),因此需要进行刷新恢复到之前的样子。
  2. 充当开关的晶体管很小,电容里面的电荷会通过这个通道泄露到位线,经过一段时间之后,会造成电容的电压发生改变,影响下一次的读取。

基于以上原因,DDR内部每个会不间断刷新。

刷新的过程如下:

首先关闭所有行,将所有位线上的电压全部变成0.5V并打开第一行,进行刷新的序列,电容器扰动位线,然后感测放大器将这个位线上的变化及时的进行放大,将位线上的电压变成相应的0V或者1V,经过对电容的充分充电之后,关闭这一字行的开关,随后进行下一行,进行重复的操作。逐行进行,每一行大约需要50ns,直到所有的65536行全部被刷新,整个过程大约需要3ms的时间。

对于每个存储块,刷新操作每64ms发生一次,用统计显示,如果刷新时间高于这个时间,将会导致数据丢失。

对于一个存储块数组(32块的),大约每秒可以刷新16次

六、 补充说明

基于一些客观因素的影响,本文的有一些描述(例如括号里的内容)未能来得及叙述,基于对内容中心思想的表达,在后续的文章里,将逐步添加这部分知识的补充。

上述的读写过程为了更好的理解,其实做了部分详尽的描述和部分优化,总体的方向上,大致就是这样。后续随着内容深入,会针对读写时序进行一个说明。

实际的过程,为了提升DRAM数据的传输速率和系统的稳定性做了很多优化,后续将根据内容的需要,也将对这部分内容进行一个说明。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号