当前位置: 首页 > article >正文

DDR原理详解

DDR原理详解

在这里插入图片描述

存储器主要分为只读存储器 ROM 和随机存取存储器 RAM两大类。

ROM:只读存储器 ROM 所存数据,一般是装入整机前事先写好的,整机工作过程中只能读出,ROM所存数据稳定,断电后所存数据也不会改变。

RAM:随机存取存储器RAM 是与 CPU 直接交换数据的内部存储器,它可以随时读写,速度快,通常作为操作系统或其他正在运行中的程序的临时数据存储媒介,当电源关闭时 RAM 不能保留数据。

DDR SDRAM 在系统时钟的上升沿和下降沿都可以进行数据传输 DDR SDRAM在 SDRAM 的基础上发展而来,这种改进型的 DRAM和 SDRAM 是基本一样的,不同之处在于它可以在一个时钟读写两次数据,这样就使得数据传输速度加倍了,也是目前电脑中用得最多的内存,而且具有成本优势。DDR 已经发展至今已经进化到 DDR5,与 DDR4相比,DDR5 在强大的封装中带来了全新的架构。

从内存控制器到内存颗粒内部逻辑,笼统上讲从大到小为:channel>DIMM>rank>chip>bank>row/column,如下图:

在这里插入图片描述

对于DDR可以按照如下层次来区别:

一个DDR有多个内存通道,每个通道可以插若干个DIMM,而每个DIMM上有至少一个以上的RANK,每个RANK由若干个内存芯片组成,这些芯片可能是4/8/16bit的,他们组合的原则就是将位宽凑齐至通道位宽(64bit)。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

接下来,我们来看一下RANK和CHIP里面有什么:

在这里插入图片描述

这是DDR3一个Rank的示意图。我们把左边128MB Chip拆开来看,它是由8个Bank组成,每个Bank核心是个一个存储矩阵,就像一个大方格子阵。这个格子阵有很多列(Column)和很多行(Row),这样我们想存取某个格子,只需要告知是哪一行哪一列就行了,这也是为什么内存可以随机存取而硬盘等则是按块存取的原因。

实际上每个格子的存储宽度是内存颗粒(Chip)的位宽,在这里由8个Chip组成一个Rank,而CPU寻址宽度是64bit,所以64/8=8bit,即每个格子是1个字节。选择每个格子也不是简单的两组信号,是由一系列信号组成

DDR工作原理

了解了DDR的基本组成后,我们来看看DDR如何来完成一次的读写过程。如下图所示,DRAM 的相关操作在内部大概可以分为以下的四个阶段:

在这里插入图片描述

  • command transport and decode: 在这个阶段,Host 端会通过 Command Bus 和 Address Bus 将具体的 Command 以及相应参数传递给 DRAM。DRAM 接收并解析 Command,接着驱动内部模块进行相应的操作。其中会根据将addr bus上的数据解码成对应的row address和通过bank control解码后得到对应的bank,其次对应的column也会解码得到对应的地址

  • in bank data movement: 在这个阶段,第一阶段发送需要读取的 Column 的地址给 DRAM。然后 DRAM 再将 Active Command 所选中的 Row 中,DRAM 就将 Memory Array 中的数据从 DRAM Cells 中读出到 Sense Amplifiers,或者将数据从 Sense Amplifiers 写入到 DRAM Cells。

  • in device data movement: 这个阶段中,数据将通过 IO 电路缓存到 Read Latchs 或者通过 IO 电路和 Write Drivers 更新到 Sense Amplifiers。

  • system data transport: 在这个阶段,进行读数据操作时,SDRAM 会将数据输出到数据总线上,进行写数据操作时,则是 Host 端的 Controller 将数据输出到总线上。

在上述的四个阶段中,每个阶段都会有一定的耗时,例如数据从 DRAM Cells 搬运到 Read Latchs 的操作需要一定的时间,因此在一个具体的操作需要按照一定时序进行。同时,由于内部的一些部件可能会被多个操作使用,例如读数据和写数据都需要用到部分 IO 电路,因此多个不同的操作通常不能同时进行,也需要遵守一定的时序。此外,某些操作会消耗很大的电流,为了满足 SDRAM 设计上的功耗指标,可能会限制某一些操作的执行频率。

会消耗很大的电流,为了满足 SDRAM 设计上的功耗指标,可能会限制某一些操作的执行频率。


http://www.kler.cn/a/540619.html

相关文章:

  • HTML 属性
  • 云原生(五十四) | RDS数据导入与导出
  • 如何实现图片式按钮的功能
  • C语言预处理艺术:编译前的魔法之旅
  • 如何在Android Studio中开发一个简单的Android应用?
  • 【后端开发】系统设计101——Devops,Git与CICD,云服务与云原生,Linux,安全性,案例研究(30张图详解)
  • 计算机毕业设计SpringBoot+Vue.js飞机票在线订购系统(源码+文档+运行视频+讲解视频)
  • 11.直接内存
  • RabbitMQ 在 Spring Boot中使用方式
  • 分桶函数的使用
  • 深入理解概率密度函数和概率的关系
  • redis高级数据结构Stream
  • 控制论与信息论:维纳和香农的核心分歧在于对「信息本质」的理解
  • AntDesign X 报错:Cannot read properties of undefined (reading ‘_context‘)
  • 一个树形结构表格数据库建表语句
  • Json-RPC项目框架(二)
  • 宝珀乾坤卡罗素(Blancpain Carrousel of Yin and Yang):故宫收藏的机械艺术瑰宝
  • 【浏览器多开】Google Chrome 谷歌浏览器分身术
  • 2.4 异步回调参数捕获技巧详解
  • 使用LangChain自定义tools的三种方式
  • 穷举vs暴搜vs深搜vs回溯vs剪枝系列一>不同路径 III
  • c/c++蓝桥杯经典编程题100道(19)质因数分解
  • 博客项目-day02(登录功能)
  • Django在终端创建项目(pycharm Windows)
  • Ollama+Chatbox本地部署运行deepseek
  • MySQL主从同步+binlog