DDR系列之三: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是读取数据的流程

本处先从一个最基本的存储单元入手
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
以上为DDR存储内部存储1bit数据的结构图。

结构说明:

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、 1~3位001,用来选择需要访问的存储块组,2的3次方刚好等于8块

B、 4~5位10,用来选择这一块组中具体的哪一块
在这里插入图片描述

C、 6~21位,0110001101011100这16位可以用来确定65536中具体所在的行
在这里插入图片描述

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

3、 通过以上地址,我们可以在这个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、 当我们读写内存上的所有芯片上时,所有的地址线是相同的,但是每块芯片上的数据线是不一致的。
在这里插入图片描述

2、 每个DDR二进制1对应电源电压对应如下:

DDR1 2.5V1.25V

DDR2 1.8V0.9V

DDR3 1.5V0.75V

DDR4 1.2V0.6V

DDR5 1.1V0.5V
在这里插入图片描述

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

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

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

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

五、 DDR刷新的过程

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

1、 由于结构的特殊性,每一次的读取对整个字线来说都是破坏性的(每一次的读取都将导致电容电压的变化),因此需要进行刷新恢复到之前的样子。

2、 充当开关的晶体管很小,电容里面的电荷会通过这个通道泄露到位线,经过一段时间之后,会造成电容的电压发生改变,影响下一次的读取。

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

刷新的过程如下:

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

对于每个存储块,刷新操作每64ms发生一次,用统计显示,如果刷新时间高于这个时间,将会导致数据丢失。
对于一个存储块数组(32块的),大约每秒可以刷新16次
在这里插入图片描述

六、 补充说明

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

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

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

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值