文章目录

  • 一、DDR的演进变化
  • 二、DDR的内存组成
  • 三、DDR的内存原理

  我们常说的DDR,亦即DDR SDRAM,指的是PC端或者消费电子(手机,平板)中的内存,是 “Double Data Rate Synchronous Dynamic Random Access Memory”(双数据率同步动态随机存储器)的简称,它 允许在时钟脉冲的上升沿和下降沿传输数据,其主要作用是为了和CPU频率同步,进而大大提高数据传输效率

  SDRAM从发展到现在已经经历了五代,分别是:

  • 第一代SDR SDRAM,单边沿传输数据;
  • 第二代DDR SDRAM,允许在时钟脉冲的上升沿和下降沿传输数据;
  • 第三代DDR2 SDRAM,拥有两倍于上一代DDR内存预读取能力(即4bit数据读预取能力);
  • 第四代DDR3 SDRAM,具备更低的工作电压(1.5v),240线接口,支持8bit预读;
  • 第五代DDR4 SDRAM,16bit预取机制(DDR3为8bit),同样内核频率下理论速度是DDR3的两倍,;
  • 目前已经发展到DDR5 SDRAM;

   DDR核心技术点就在于(1)双沿传输。(2)预取prefetch。
   DDR的频率(1)核心频率、(2)时钟频率、(3)数据传输频率;核心频率就是内存的工作频率;DDR1内存的核心频率是和时钟频率相同的,到了DDR2和DDR3时才有了时钟频率的概念,就是将核心频率通过倍频技术得到的一个频率。数据传输频率就是传输数据的频率。DDR1预读取是2位,DDR2预读取是4位,DDR3预读取是8位…
   与DDR相比LPDDR内存全称是Low Power Double Data Rate SDRAM,中文意为低功耗双倍数据速率内存,又称为mDDR(Mobile DDR SDRM),主要针对于移动端电子产品
   LPDDR4X可以看作是LPDDR4的省电优化版本,比LPDDR4功耗更低、更省电;目前市面上主流旗舰手机内存使用的都是LPDDR4X和LPDDR4,由于二者经常同时出现,名字也十分相似,所以很容易让人混淆。

一、DDR的演进变化

  DDR到DDR5的主要变化主要表现在DDR的性能,容量和省电三个方面:IO的速率也越来越高,规范的工作电压越来越低,芯片容量越来越大。除了电压,容量和IO的速率变化之外,还包含Bank,Bank Group,Prefetch和Burst Length的演进,bank数越来越多,到DDR4出现bank group,prefetch也从2n增加到4n,8n。
  详细的变化图示:
      
  DRAM是怎么实现用比较低的核心传输频率来满足日益高涨的高速IO传输速率的需求呢?这就是靠prefetch来实现的。

  • 从DDR开始到DDR3很好理解,Prefetch相当于DRAM core同时修了多条高速公路连到外面的IO口,来解决IO速率比内部核心速率快的问题,IO数据速率跟核心频率的倍数关系就是prefetch
  • burst length的长度跟CPU的cache line大小有关。Burst length的长度有可能大于或者等于prefetch。但是如果prefetch的长度大于burst length的长度,就有可能造成数据浪费,因为CPU一次用不了那么多。所以从DDR3到DDR4,如果在保持DDR4内存data lane还是64的前提下,继续采用增加prefetch的方式来提高IO速率的话,一次prefetch取到的数据就会大于一个cache line的大小 (512bits),对于目前的CPU系统,反而会带来性能问题。
  • DDR4出现了Bank Group,这就是DDR4在不改变prefetch的情况下,能继续提升IO速率的秘密武器。DDR4利用Bank group的interleave,实现IO速率在DDR3基础上进一步提升。

二、DDR的内存组成

  DDR SDRAM内存条从外观上可以看出由很多内存颗粒组成。从内存控制器到内存颗粒内部逻辑,笼统上讲从大到小为:Channel>DIMM>Rank>Chip>Bank>Row/Column,如下图:

  • Channel:一个主板上可能有多个插槽,用来插多根内存。这些槽位分成两组或多组,组内共享物理信号线。这样的一组数据信号线、对应几个槽位(内存条)称为一个channel(通道)。简单理解就是DDRC(DDR控制器),一个通道对应一个DDRC。CPU外核或北桥有两个内存控制器,每个控制器控制一个内存通道。内存带宽增加一倍。(理论上)
  • DIMM(dual inline memory module)是主板上的(一条可传输64bit数据的内存PCB,也就是内存颗粒的载体)。
  • Rank是一组内存芯片的集合,当芯片位宽x芯片数=64bits(内存总位宽)时,这些芯片就组成一个Rank。一般是一个芯片位宽8bit,然后内存每面8个芯片,那么这一面就构成一个Rank(为了提高容量,有些双面内存条就有两个rank。在DDR总线上可以用一根地址线来区分当前要访问的是哪一组)。同一个Rank中的所有芯片协作来共同读取同一个Address(一个Rank8个芯片 * 8bit = 64bit),这个Address的数据分散在这个Rank的不同芯片上。设计Rank的原因是这样可以使每个芯片的位宽小一些,降低复杂度。
  • Chip是内存条上的一个芯片俗称内存颗粒。由图中是由8个bank组成了一个memory device。
  • Bank:Bank是一个逻辑上的概念。一个Bank可以分散到多个Chip上,一个Chip也可以包含多个Bank。Bank和Chip的关系可以参考下面的图,每次读数据时,选定一个Rank,然后同时读取每个chip上的同一bank。
  • Row/Column组成的Memeory Array:Bank可以理解为一个二维数组bool Array[Row][Column]。而Row/Column就是指示这个二维数组内的坐标。注意读取时每个Bank都读取相同的坐标。

三、DDR的内存原理

  如DDR4芯片有20根地址线(17根Address、2根BA、1根BG),16根数据线。在搞清楚这些信号线的作用以及地址信号为何还有复用功能之前,我们先抛出1个问题。假如我们用20根地址线,16根数据线,设计一款DDR,我们能设计出的DDR寻址容量有多大?

Size(max)=(2^20) * 16=1048576 * 16=16777216bit=2097152B=2048KB=2MB。

  但是事实上,该DDR最大容量可以做到1GB,比传统的单线编码寻址容量大了整整512倍,它是如何做到的呢?答案很简单,分时复用。我们把DDR存储空间可以设计成如下样式:
  首先将存储空间分成两个大块,分别为BANK GROUP0和BANK GROUP1,再用1根地址线(还剩19根),命名为BG,进行编码。若BG拉高选择BANK GROUP0,拉低选择BANK GROUP1。(当然你也可以划分成4个大块,用2根线进行编码)

  此时,我们将DDR内存颗粒划分成了2个BANK GROUP,每个BANK GROUP又分成了4个BANK,共8个BANK区域,分配了3根地址线,分别命名为BG0,BA0,BA1。然后我们还剩余17根信号线,每个BANK又该怎么设计呢?这时候,就要用到分时复用的设计理念了。
  剩下的17根线,第一次用来表示行地址,第二次用来表示列地址。现在修改为传输2次地址,在传输1次数据,寻址范围最多被扩展为2GB。虽然数据传输速度降低了一半,但是存储空间被扩展了很多倍。这就是改善空间。
所以,剩下的17根地址线,留1根用来表示传输地址是否为行地址

  • 在第1次传输时,行地址选择使能,剩下16根地址线,可以表示行地址范围,可以轻松算出行地址范围为2^16=65536个=64K个。
  • 在第2次传输时,行地址选择禁用,剩下16根地址线,留10根列地址线表示列地址范围,可以轻松表示的列地址范围为2^10=1024个=1K个,剩下6根用来表示读写状态/刷新状态/行使能、等等复用功能。
  • 这样,我们可以把1个BANK划分成67108864个=64M个地址编号。如下所示
  • 所以1个BANK可以分成65536行,每行1024列,每个存储单元16bit。
所以1个BANK可以分成65536行,每行1024列,每个存储单元16bit。每行可以存储1024*16bit=2048B=2KB。每行的存储的容量,称为Page Size。单个BANK共65536行,所以每个BANK存储容量为65536*2KB=128MB。单个BANK GROUP共4个BANK,每个BANK GROUP存储容量为512MB。单个DDR4芯片有2个BANK GROUP,故单个DDR4芯片的存储容量为1024MB=1GB。

  至此,20根地址线和16根数据线全部分配完成,我们用正向设计的思维方式,为大家讲解了DDR4的存储原理以及接口定义和寻址方式。
  但是细心的同学发现一个问题,对于每一个bank,按照正常的10位数据,那么col应该是1024,而现在是128,是什么原因呢?

  那么问题又来了,为什么Column Address的寻址能力只有128呢?请继续看下图:

  在上图中,可以清晰地发现,10bits的Column Address只有7bits用于列地址译码!列地址0,1,2并没有用!!!列地址0,1,2,这3bits被用于什么功能了?或者是DDR的设计者脑残,故意浪费了这三个bits?在JESD79-3规范中有如下的这个表格:

  可以发现,Column Address的A2,A1,A0三位被用于Burst Order功能,并且A3也被用于Burst Type功能。由于一般情况,我们采用的都是顺序读写模式(即{A2,A1,A0}={0,0,0}),所以此时的A3的取值并无直接影响,这个后面章节中重点介绍。
  CA[2:0]的值决定了一次Burst sequence的读写地址顺序。

比如一次Burst Read的时候如果CA[2:0]=3’b001表示低三位从地址1开始读取,CA3=0的时候按顺序读取1,2,3,0,5,6,7,4,CA3=1的时候交错
读取1,0,3,2,5,4,7,6。对于Prefetch而言,正好是8N Prefetch,对于Burst而言对应BL8。
BC4其实也是一次BL8的操作,只是丢弃了后一半的数据。

  更形象地理解就是对于一个Bank里面的Memory Array,每个Memory Cell可以看作是一个Byte的集合体。CA[9:3]选中一行中的一个特定Byte,再由CA[2:0]选择从这个Byte的哪个位置开始操作。CA3既参与了列地址译码,也决定Burst是连续读取还是交错读取。Prefetch也决定了I/O Frequency和SDRAM Core Frequency之间的关系。

参考引用:
https://www.cnblogs.com/shengansong/archive/2012/09/01/2666213.html
https://blog.csdn.net/u012489236/article/details/107730731

(一)DDR 基础介绍——(演进、构成、存储原理)相关推荐

  1. 8.Docker容器镜像仓库存储原理(前世今身)与搬运技巧

    文章目录 0x00 镜像如何炼成 1.OCI 标准协议 image-spec - 镜像规范 runtime-spec 运行时规范 distribution-spec 镜像仓库规范 2.Dockerfi ...

  2. 存储系统基础知识与RAID存储技术介绍【转载自微信公众号开源Linux】

    存储系统基础知识与RAID存储技术介绍 存储系统是整个IT系统的基石,是IT技术赖以存在和发挥效能的基础平台.早先的存储形式是存储设备(通常是磁盘)与应用服务器其他硬件直接安装于同一个机箱之内,并且该 ...

  3. CV:计算机视觉技术之图像基础知识(二)—以python的skimage和numpy库来了解计算机视觉图像基础(图像存储原理-模糊核-锐化核-边缘检测核,进阶卷积神经网络(CNN)的必备基础)

    CV:计算机视觉技术之图像基础知识(二)-以python的skimage和numpy库来了解计算机视觉图像基础(图像存储原理-模糊核-锐化核-边缘检测核,进阶卷积神经网络(CNN)的必备基础) 目录 ...

  4. IPv6基础介绍--IPv6路由基础--DHCPv6原理与配置——总结

    一.IPv6基础介绍 1.IPv6是Internet工程任务组(IETF)设计的一套规范,它是网络层协议的第二代标准协议,也是IPv4(Internet Protocol Version 4)的升级版 ...

  5. DDR存储原理,AC/DC判别标准深度解析(官方手册整理)

    DDR存储原理 1. 1个三极管和1个电容构成一个最基本的存储单元.多个存储单元组合成存储矩阵,bit line连接到比较放大器,word line控制三极管的通断状态.相邻的.未使用的bit lin ...

  6. FPGA ——DDR基础概念详解

    目录 DDR基础知识 DDR存储机制 DDR3详解 DDR3型号 DDR3引脚 DDR操作 DDR读操作 DDR写操作 DDR基础知识 DDR=Double Data Rate双倍速率,DDR SDR ...

  7. ClickHouse特性及底层存储原理

    ClickHouse的特性 ClickHouse是一款MPP架构的列式存储数据库,但MPP和列式存储并不是什么"稀罕"的设计.拥有类似架构的其他数据库产品也有很多,但是为什么偏偏只 ...

  8. AXI三种接口及DMA DDR XDMA介绍(应用于vivado中的ip调用)

    一.AXI--高级可扩展接口(UG1037) 参考资源: [SDK篇_58~62_AXI接口简介[Xilinx]+[Vivado]+[AXI4总线]+[FPGA]-哔哩哔哩] 关于AXI握手过程都讲解 ...

  9. ai一个线段多个箭头_初学设计却分不清PS和AI?超详细的AI基础介绍包你一看即会!...

    以前提到AI,第一个想到的就是人工智能.自从扎进设计的神坑,再提到AI,我可只认软件了~ 包括小ke在内的很多设计小伙伴在最开始入行的时候都认为,只要学好PS就可以稳打设计圈了~毕竟那么多公号一提到设 ...

最新文章

  1. 下载、安装、配置 java jdk1.8
  2. 慎重选型:PG还是MySQL?Uber的案例不能作为参考!
  3. SpringBoot配置Mybatis在控制台打印sql
  4. 24、HTML 属性
  5. C语言如何返回格式化日期时间(格式化时间)?(将日期和时间以字符串格式输出)ctime()、asctime()、localtime()、strftime()
  6. FLutter入门:异步加载组件FutureBuilder
  7. linux系统正常停机的命令,Linux系统重启命令大全
  8. python生物数据分析师职业技能_数据分析行业各个职业需要的技能是什么?
  9. 中控ecs700 mysql_浙大中控ECS700工程指导手册.pdf
  10. 做主管常犯的毛病毛病六:忘了公司的命脉:利润(转)
  11. 快捷键截屏_笔记本电脑截屏的快捷键是什么
  12. npoi 未将对象引用设置到对象的实例_带你探索JVM的对象
  13. apache rewrite支持post数据
  14. 程序批量将文本文件中的某字符替换
  15. 树莓派-python之adc电压采集的实现
  16. 这件小事,我坚持了 200 天
  17. 山地车中轴进水表现_4种自行车中轴的拆卸和保养方法
  18. NeRF 源码分析解读(二)
  19. 深度学习中常见的损失函数(L1Loss、L2loss)
  20. 简单而有韵味,让你get最浪漫的表白编程代码大全

热门文章

  1. 连分数分解法寻找整数的因子(Python)
  2. 9364件!三年领跑,百度AI专利申请量、授权量蝉联第一
  3. 正则表达式_Pattern_Marcher_System类_Date\SimpleDateFormat
  4. ASP.NET关于引用bootstrap.css导致Gridview Header无法居中
  5. Tomcat war exploded: Artifact is being deployed, please wait...
  6. 安卓的蓝牙全面开发教程
  7. 前端入门学习笔记八十七
  8. flask_测试数据平台
  9. Linux命令:tar压缩/解压包, zip/unzip
  10. VUE+ElementUI+PHP+MySQL实现仿照印记中文网站(2)----前端架构