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

浅析DDR

一、内存条和内存颗粒

        内存颗粒指的是DDR内存芯片,其可以在电路板上单独使用,也可以通过多片内存颗粒组合成内存条进行使用。在计算机系统中,一般使用内存条。常用的内存颗粒的品牌有:镁光和三星等。镁光的某款DDR颗粒的正面和反面图片如下所示。

        内存条主要分为DIMM(Dual Inline Memory Module,双列直插内存模块)和SIMM(Single Inline Memory Module,单列直插内存模块)。从名字就可以看出,DIMM的两侧的金手指不是互通的,具备更多的传输引脚,可以独立传输信号。目前使用的大多是DIMM,此处重点看一下DIMM。DIMM的实物图片如下:

        DIMM常用的类型有以下几种:

        RDIMMs:registered DIMM。地址和控制信号在内存条上经过寄存,时钟经过PLL锁相处理。一般而言,容量更大,数据存储更稳定,但是单个数据的读写访问都要延后一个时钟周期。

        UDIMMs :unbuffered DIMM。指的是没有经过缓冲,数据和地址信号直接连接到DDR颗粒的内存模组(无缓冲器延时处理)。

        SODIMMs:Small outline DIMM,小型双列直插内存模块。SODIMMs也是无缓冲的,但是其尺寸更小,其主要用于笔记本等一些对尺寸有要求的产品中。

二、内存颗粒的结构

 1、memory cell

        DDR内存是一种随机访问的掉电丢失数据的存储器。为什么DDR中的数据掉电后会丢失数据呢? 这是内部的电路决定的。

        DDR存储数据的核心部件是电容,其存储1bit数据的最小电路memory cell如下:

        电容充满电时,保存数据为1'b1;电容放完电,保存数据为1‘b0。

        写过程中,首先使行地址有效,然后通过列地址信号,写驱动器将数据写入到电容中。

        读过程中,行地址有效,然后列地址选通,连通电容一端。此时通过采集放大器感知列地址线上的电压高低,读取到数据。

2、DDR的行列地址选通

        一个DDR颗粒,少则几百Mb的存储空间,多则几个G的存储空间,那么其内部到底是怎么的结构呢?具体如何读写呢?

        我们首先看一个简易的举例,假设有一个DDR颗粒,其只有一个BANK,行地址有8位,列地址有8位,其结构图如下:

        DDR外部接口的几个重要的引脚信号是是:行地址选中信号RAS,列地址选中信号CAS,写信号WE,地址信号,数据信号。

        读取图中黄色单元内的数据,需要执行的步骤如下:

        1、RAS信号有效,时序控制模块输出行地址至行地址解码模块,行地址解码模块将行地址6进行选通。此时位于行地址6的8个memory cells等待进行处理。

        2、由于我们的目标是黄色memory cell的内容,但是此时采样放大电路会将本行所有的memory cells读取出。

        3、。CAS有效后,时序控制模块输出列地址信号,有列地址解码器控制,选择对应列的数据进行输出。

        4、当然,这还并没有结束, 读取memory cell的过程是一个破坏性的过程,会使电容发生放电或者充电。为了保证memory cells中的数据保持不变,写驱动器需要再执行写操作,将读取的值再重新写入到每个memory cells中。

        5、关闭当前行的选通。

        6、剩下的就是预充电操作,为下一个操作进行准备。

        简单的DDR的读数据时序图如下所示。

        那么往黄色单元内写数据,需要执行的步骤如下:

        1、RAS信号有效,时序控制模块输出行地址至行地址解码模块,行地址解码模块将行地址6进行选通。此时位于行地址6的8个memory cells等待进行处理。

        2、由于我们的目标是黄色memory cell的内容,但是此时采样放大电路会将本行所有的memory cells读取出。

        3、WE信号有效,写入数据被锁存在数据缓冲器中。

        4、列地址选通信号CAS有效,此时,新输入的数据被写入到黄色memory cell中,而同时,则将采样放大器采集到的数据保持不变,写入到对应的memory cell中。

        5、关闭当前行的选通。

        6、剩下的就是预充电操作,为下一个操作进行准备。

        简单的DDR的写数据时序图如下所示。

        以上基本就是DDR颗粒的工作原理。注意的是,上述所有描述的都是1bit数据的读写,如果要实现2bits、4bits、8bits或者16bits数据的读写,只需要堆叠2个、4个、8个或者16个上述的硬件结构即可。如下图8bits的DDR颗粒结构图(一组这样的存储阵列,也称为1个BANK)。

3、DDR的BANK

        对于DDR的BANK,即将上面8bits的DDR阵列图,堆叠多个,其示意图如下:

        支持多个BANK的DDR颗粒,引脚信号是一般具有BANK_ADDR信号,用来区分访问的是哪一个BANK。同一个DDR颗粒的不同BANK不能同时访问。

        所以对于DDR颗粒而言,1个DDR颗粒多半多个BANK,1个BANK包含多个N bits存储阵列,Nbits存储阵列由N个1bits存储阵列组成,1bits存储阵列由无数个行列memory cell组成。

4、如何提高DDR数据访问速度

        a、数据突发传输

                通常DDR具备突发功能,即可以输出一行的连续列地址的数据。一般,DDR2可以突发传输4个字(DDR数据总线宽度),DDR3突发长度是8,DDR4突发长度是16。

        b、BANK交织

        最后,说一下内存的BANK交织。其目的是利用DDR的不同BANK相互独立的特性,最大限度的提高数据读写的速率:

        当读写完当前BANK的一行时,不能立刻读写此BAN的下一行,而是需要进行当前行的关闭,预充电等一系列操作,可能需要十几个或者二十几个时钟周期。为了减少时间的浪费,在当前BANK的当前行进行行关闭和预充电操作的同时,可以先行读写下一个BANK,通过这种方式实现读写速率的提高。

三,其他概念

        RANK概念:rank是为了rank是为了凑cpu的位数。例如cpu是64bit的,但是sdram一般是8bit,所以要凑8个,也就是数据位扩展,这8个就叫一个rank。

本文参考了以下视频内容,有需要的可以参考学习。DRAM基本工作原理_Memory Cells_哔哩哔哩_bilibili


http://www.mrgr.cn/news/54101.html

相关文章:

  • 第三章,使用DQL命令查询数据
  • 【STM32学习】PWM学习(四),散热风扇的控制,PWM调速调制,
  • idea 2023 创建 springboot 项目 LTS
  • Python 自编码器(Autoencoder)算法详解与应用案例
  • 每日OJ题_牛客_[NOIP2001]装箱问题_01背包_C++_Java
  • Android视频编解码 MediaCodec使用(2)
  • 【C++】类的默认成员函数:深入剖析与应用(上)
  • 编码方式知识整理【ASCII、Unicode和UTF-8】
  • 【C语言】文件操作(1)(文件打开关闭和顺序读写函数的万字笔记)
  • 父子元素中只有子元素设置margin-bottom的问题
  • 基于SpringBoot健康生活助手微信小程序【附源码】
  • 建议收藏!质量管理用ChatGPT,提升效率有手就能做!
  • Vue2 前端表格必选项,禁止更改的实现
  • 2024年微信小程序毕业设计如何选题,200 道新颖微信小程序题目推荐,持续更新
  • 即时通讯:单聊消息逻辑
  • 离线安装Kerbreos到Centos7
  • C# 字符串常用方法
  • 基于windows10的WSL详细安装与使用教程
  • Java项目实战II基于Spring Boot的毕业就业信息管理系统设计与实现(源码+数据库+文档)
  • C#中 is 和 as 运算符使用与区别
  • HTTP cookie 与 session
  • asyn queueRequest使用实例
  • ssm配置模式
  • 12.个人博客系统(Java项目基于spring和vue)
  • Java实现简单的5阶m序列密钥生成
  • java项目篇-用户脱敏展示