DDR学习心得(一)

前言

最近在学习DDR3/DDR4相关知识,从中总结了一些心得,想放在CSDN上记录下来。之前在CSDN上看了不少大神的帖子,对我的学习颇有帮助,现在我也想把我的学习进程记录下来,希望可以和各位大神进行技术交流。这也是我第一次写技术文章,如有错误还请各位及时指正

一、SDRAM介绍及DDR3的结构

SDRAM从发展到现在已经经历了五代,分别是:第一代SDR SDRAM,第二代DDR SDRAM,第三代DDR2 SDRAM,第四代DDR3 SDRAM,第五代DDR4 SDRAM。
SDRAM:(Synchronous Dynamic Random Access Memory,同步动态随机存取存储器),是在DRAM的基础上发展而来,为DRAM的一种,同步是指Memory工作需要同步时钟,内部命令的发送与数据的传输都以时钟为基准;动态是指存储阵列需要不断的刷新来保证数据不丢失;随机是指数据不是线性依次存储,而是由指定地址进行数据读写。
下面,我们来了解一下DDR3内部结构。 DDR3的内部是一个存储阵列,类似于 一张excel表格,有相应的行(row)和列(column),我们可以通过行和列的编号来快速找到我们所需要的格子。而每一张表格我们也对其进行编号,我们称之为存储单元,这也就是我们常说的逻辑Bank(L-Bank)。
而存储单元中的每个格点,我们称之为cell。下图中黑色格点的地址为B1,R6,C5,如果寻址命令为B1,R6,C5,那么存储在这个地址中的数据将被读取出来。
在这里插入图片描述
注意:要搞清楚地址和数据的关系。把内存看成是一个大仓库,地址就是小仓库的门牌号,数据就像存放在仓库中的货物。寻址就类似通过门牌号找到数据的位置,读取或写入数据就类似把货物从仓库中取出来或者存进去。
那么每个cell中的数据量是多少呢,这就涉及到了位宽的概念。DDR的规格一般都会标注x4、x8、x16等字样,这个x后面的数字就代表DDR芯片的位宽。分别为4bit,8bit,16bit位宽的芯片。芯片中每个cell中存储的数据量和位宽是相等的,也就是说对于x4、x8、x16规格的芯片,他们内部的每个cell中存储的数据量分别为4bit,8bit,16bit。
除了逻辑Bank外,DDR3系统还存在物理Bank的概念。也叫做RANK,对SDRAM器件而言,常见的单Die数据位宽为4Bit(x4),8Bit(x8)和16Bit(x16)配置。对于现代的64Bit计算机而言,需要多个SDRAM拼接才可以完成所需的数据位宽。以常见的x8配置的SDRAM颗粒而言,需要8颗芯片拼接完成64Bit的数据位宽,这样,在Memory controller寻址一个数据单元时,8组芯片都会被选中,因此这8组芯片公用一个Cs_n信号,我们称之为1个RANK。

二、DDR3容量计算与BANK的理解

DDR容量计算个人认为最简单的方法就是 地址数x位宽 ,也可以理解为用cell数量x每个cell单元的数据量
在这里插入图片描述
这张图想必很多人都看到过,这是一颗位宽为8bit的DDR3架构图,行地址复用线为14根,列地址复用线为10根,Bank数量为8(2^3)。那么这颗芯片的地址数就为:
2的14次方×2的10次方×2的三次方=128M个地址
128M×8bit=1Gb
因此此芯片存储的数据量为1Gbit,又因为8bit=1B,所以1Gb=128MB。这也就是我们日常所说的128MB的内存条。当然,这张图片最上面已经标出了128Meg×8,这个128Meg的意思就是此芯片有128M个地址(128M个cell)
然后位宽为8,就可以直接算出来容量的大小。
还有一些标识比如16 Meg x 16 x 8 Banks,这个16Meg则代表的是一个Bank中cell的数量,16为16bit位宽,8为Bank的数量。
像上图那个8bit位宽的芯片,想要组成一个RANK需要8个芯片组合在一起,也就是组成1GB的内存条,CPU可以访问的内存大小为1GB。当CPU对内存进行访问时,给出一个类似于B1,R6,C5的地址,此时CPU认为只有一块内存,只会给出一个地址,但是拼接起来的8个芯片都会收到此地址,他们会将相应地址中的数据传出来,每颗芯片传出8bit数据,八颗芯片共64bit组成一个RANK.

三、DDR3数据传输

1.预取

DDR一大特点就是预取特性,第一代DDR为2-bit预取,第二代为4-bit预取,第三代为8-bit预取,一些公司将其称为8-n-Prefetch技术,这里的8-bit或8-n代表的是8“位”数据,也就是说DDR芯片每次预取的数据量为 8×位宽 个bit,比如一个8bit位宽的DDR3芯片,那么在每个DDR内部逻辑处理时钟(此时钟频率为DDR的核心频率)的上升沿,都有64bit数据以并行的方式被取出,注意预取时采取的方式是并行,而传输时采取的方式为串行。中间经过复杂的并行转串行结构最后输出数据,大致意思如下图所示。
在这里插入图片描述
说的简单一些,假如外部数据位宽8bit,DDR3内部就按8*8的位宽把八个相邻的数据一次读出来再并串转换输出,所以它内部100MHz就可以达到800MHz的数据率。以此来达到一个提速的目的。

2.传输速率

由于计算机现在一个RANK大多为64-bit,所以内存条每次传输的数据就为64-bit。我们首先把DDR芯片时钟引脚的频率称为工作频率,而DDR传输的方式是在时钟的上升沿和下降沿各传输一次,因此传输速率就是工作频率的二倍,也就是说;
每秒钟传输的次数=工作频率×2
传输的数据量=每秒钟传输的次数×64bit=工作频率×2×64bit
那么工作频率与核心频率是什么关系呢,我们通过一个简单的例子来看一下
就以上面图中那个8-bit位宽的128MB芯片为例,假设其核心频率为100MHz,每次预取的数据量为64-bit,但是此芯片共有八根数据线,那么意味着每根数据线要以串行的方式在10ns内输出8-bit数据,由于DDR上升沿和下降沿各传输1个bit,那么只需要在10ns内产生4次时钟,则此时钟周期为2.5ns,频率为400MHz,此频率就为DDR芯片时钟引脚的频率,也就是工作频率。可以看出:
工作频率=核心频率×4
传输速率=工作频率×2=核心频率×4=核心频率×预取数
那么内存每秒的数据量是多少呢
在这里插入图片描述
拿核心频率100MHz,位宽8bit的DDR3举例,八个DDR颗粒组成一个位宽为64bit的内存。此条内存每次传输的数据量都为64bit
传输速率=100MHz×8=800M次
也就是说每秒传输数据次数为800M次,每次传输64bit,那么总数据量为
总数据量=800M×64bit÷8=6400MBytes=6.4GB
可以看到,核心频率为100MHz的DDR3的带宽已经达到6.4GB/s了,可以看出,DDR技术对传输速率的提升是十分巨大的。

猜你喜欢

转载自blog.csdn.net/weixin_45618498/article/details/109309631