前言

最近在学习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技术对传输速率的提升是十分巨大的。

DDR学习心得(一)相关推荐

  1. STM32学习心得:SPI-Flash-W25Q16DV

    前言 目前正在学习STM32单片机的基础知识,通过库函数实现想要的一些功能.这篇文章主要介绍的是片外的Flash的操作,Flash的型号是W25Q16DV(芯片介绍在后面),通信的方式是SPI通信. ...

  2. Java EE学习心得

    –Java EE学习心得   1.    称为编程专家的秘诀是: 思考-----编程--------思考------编程--.. 编程不能一步到位,不能一上来就编,必须先思考如何写,怎样写?然后再编程 ...

  3. Assembly学习心得

    http://blog.csdn.net/etmonitor/ Assembly学习心得 说明: 最近开始准备把学到的.NET知识重新整理一遍,眼过千遍不如手过一遍,所以我准备记下我的学习心得,已备参 ...

  4. 对于mysql存储过程感想_存储过程学习心得

    存储过程学习心得 (2014-12-28 17:28:06) 标签: it 我使用过几次SQL Server,但所有与数据库的交互都是通过应用程序的编码来实现的.我不知到在哪里使用存储过程,也不了解实 ...

  5. 好程序员Web前端教程分享Vue学习心得

    为什么80%的码农都做不了架构师?>>>    好程序员Web前端教程分享Vue学习心得,Vue是一套用于构建用户界面的渐进式框架.与其它大型框架不同的是,Vue 被设计为可以自底向 ...

  6. 大学计算机课英语心得体会,关于计算机网络辅助大学英语教学的思考学习心得...

    关于计算机网络辅助大学英语教学的思考学习心得 [摘要]计算机网络辅助教学可以增强学生的学习兴趣,提高他们自觉学习的能力,因而得到了大多数学生的认可,取得了比较显著的成效.计算机网络辅助教学也对大学英语 ...

  7. 我的MYSQL学习心得(十六) 优化

    原文:我的MYSQL学习心得(十六) 优化 我的MYSQL学习心得(十六) 优化 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看 ...

  8. Spring Framework------version4.3.5-----Reference学习心得-----总结

    1.Spring Framework概述: 有很多可用版本,网址http://projects.spring.io/spring-framework/       2.Spring Framework ...

  9. 计算机基础与应用(上)笔记总结,计算机基础学习心得体会范文(通用3篇)

    计算机基础学习心得体会范文(通用3篇) 当我们对人生或者事物有了新的思考时,好好地写一份心得体会,这样可以记录我们的思想活动.那么要如何写呢?以下是小编精心整理的计算机基础学习心得体会范文(通用3篇) ...

最新文章

  1. Hibernate总结
  2. Python reduce / map / filter 函数区别 - Python零基础入门教程
  3. Odoo与浪潮合资研发PS Cloud之如何配置和运行调度程序
  4. 文章点赞以及取消点赞功能
  5. 在CentOs 5.1中使用rpm安装NGINX+php+mysql(二)
  6. JavaSE基础_java简介和环境搭建_2
  7. Request,Request.Form,Request.QueryString
  8. 修改ASP.NET MVC Ajax分页组件ASP.NET MvcPager一个小Bug并修该样式为自己所用(三)...
  9. 专业PDF转换Word/PPT/Excel工具:AnyBizSoft PDF Converter绿色便携版
  10. 基于javaswing实现PC端课堂点名程序详细设计
  11. Date对象身上的绑定的属性与方法
  12. 杜兰大学计算机专业,杜兰大学计算机科学专业详解
  13. 论文写作:如何选研究题目?
  14. ei检索的cpss_我想查EI会议论文检索情况,请问是如何查询的呢?
  15. python的ide编辑器_python轻量IDE编辑器 pyscripter 免费开源 更新3.6.3版本
  16. office是什么意思
  17. mdict.cn的安卓安装包不能找到mdx文件问题解决方法
  18. HBase-11-HBase Coprocessor HBase协处理器
  19. celery 爬虫使用
  20. 在Swagger中请求API返回400BadRequest

热门文章

  1. VirtualBox中安装懒人版macOS Mojave黑苹果系统
  2. 自旋锁、乐观锁、悲观锁、重入锁、公平锁
  3. springboot Elasticsearch 配置 Demo
  4. Python爬虫工程师需要掌握哪些技术?
  5. C++ 多态(补充)
  6. android 精灵图的使用方法,css sprites(精灵图)如何使用?
  7. launchScreen与launchImage 、APP图标问题
  8. 【NOIP2009PJ】道路游戏
  9. Java常见的一些面试题目
  10. android package service