内存概念整理

引言

本文主要记录哪些问题?
1. DDR 是个什么东西,然后如何演变的;
2. DDR 中容量怎么计算,涉及到的bank、rank、channel、die分别是为了解决什么问题的?
3. DDR 与SOC 地址线如何连接,DDR寻址过程具体是怎样的?

1. 物理内存

1.1 内存概念

所谓内存,是指计算机在运行时,需要使用的数据的存放介质;
– 数据读写速度快;
– 断电数据消失,通过一定频率的电流刷新维持内部状态,断电后状态会恢复初始,即数据消失;
– 价格相对于nand、emmc等闪存比较贵;
根据上述特性,在计算机系统中,该部分被用做运行内存,即上电后将数据从存储介质中拷贝到运行内存,提供给到CPU使用;
最小系统:CPU、DDR、EMMC为计算机的三个核心部件,即计算机要运行起来,必须依赖上述核心部件;

1.2 DDR 发展过程

Random-Access Memory,随机存储器,主要分为:

  1. static Random-Access Memory:不需要一直刷新,只要通电即可保证数据存在;
  2. dynamic Random-Access Memory:需要周期性的更新,才可保证数据一直存在;
    显然,静态比动态会更贵一些(体积大,功耗大),所以一般只是内置在SOC中作为cache使用;

目前常见的运行内存都是基于SDRAM技术基础上提升而来,简单罗列:

name 存储器工作clk IO总线clk 数据速率 预取数据 电压
SDR SDRAM 100 100 100 1bit NA
DDR SDRAM 100 100 200 2bit NA
DDR2 100 200 400 4bit 1.8V
DDR3 100 400 800 8bit 1.5V
DDR3L 100 400 800 8bit 1.35V
LPDDR3 100 400 800 8bit 1.2V
DDR4 100 800 1600 8bit 1.5V
LPDDR4 100 800 1600 8bit 1.2V

速率提升主要体现在如下两个方面:

  1. clk上升沿和下降沿都取数据,数据传输是工作频率的2倍;
  2. IO总线上一次预取2、4、8bits的数据,则IO总线频率是记忆存储芯片工作频率的N倍;

PS: 上述频率只是说明比例关系,而非仅支持该频率
在这里插入图片描述
大体是这么个逻辑:
在这里插入图片描述

1.3 DDR 内部逻辑结构组成

单位描述 描述 容量(bit)
Channel 使用相同的行列地址,并联操作 根据容量有1~2个Die,目前接触到的 用于数据线匹配,可以支持两个ch各自16bit组成32bit
rank 满足SOC连接的数据线叫做一个rank,一个device 内部有更多bits可供选择,则叫做2 rank row * col * bank * IO 用于扩容
DDR Device 实际贴片的产品 row * col * bank * IO * ch * rank 实际肉眼可见的IC
存储阵列 一个行列阵,包含r行c列个存储单元 row * col 通过行列可以确定唯一存储单元,根据spec不同而有X8、X16
存储单元 最小存储单元 X8、X16 与一个地址对应
预取位宽 DDR3/4技术支持一次取8bitt row * col * bank 这个理解为1.2小节中最后一张图
晶圆(Die) 封装容器 row * col * bank * IO,LPDDR4 大多为8Gbit 需要使用CS选择使能

对应如下图示:
在这里插入图片描述

1.4 地址线的计算

要理解上述概念,还需要实际确认两个概念:

  1. 容量如何组成;
  2. 如何寻址;

地址线的组成,按照4GB 容量、32根DQ线、DDR4标准来看:

  1. 4GB = 32Gbit , 一次取32bits数据,由于DDR4一次可以预取16bit数据,需要2个channel或者2颗DDR device,则划分为2^30个地址,理论需要30根地址线;
  2. 由于行列地址线复用,则可以提供 行 * 列 * bank相当于29根地址线,实际有16 + 3 = 19根地址线 ,提供512Mbit 容量,则还差一位;
  3. 最后一根地址线由CS信号充当这个角色;

容量:

  1. 32bits DQ,对于DDR3则需要4个(可能存在4个单channel或者2个双channel),对于DDR4则需要2个(可能存在2个单channel、或者1个双channel)
  2. 则地址分了组,一组32bits,4Bytes,所以还需要 容量/4 再取一个log2,这些就划分在row 、 col、 bank 、CS(rank、cahnnel、die都体现在这里);

我们常说的8bit、16bit是指的一颗DDR的数据线(DQ),则一般和32bits(目前接触到的都是32bits)的SOC组合的话,需要4片8bit或者2片16bit或者1片32bit,即对于SOC来讲,他认为自己读取到的就是1片DRAM

1.5 寻址过程

  1. 逻辑控制核心初始化,mode register配置;这个配置不做过多了解;
  2. 行有效RAS,确认如下信息:
    1. 片选CS
    2. bank地址
    3. 行地址A0~An
  3. 列有效CAS,确认如下信息:
    1. 地址线与行地址线复用A0~An
    2. 片选CS、bank地址仍在
    3. 读写命令通过WE信号确认;
      则可确认我们所需要的地址;

两个例子:

  1. 一个DDR3L的组成结构:
    在这里插入图片描述

在这里插入图片描述

  1. 一个LPDDR4的组成结构:
    在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

2. 总结

经过整理本部分内容,后续可以处理哪些问题?

  1. 某款SOC 和 某款DDR是否可以搭配:
    1. 规格是否支持?即支持协议版本?
    2. 是否支持多channel、多die?
    3. 频率是否支持?
  2. 某款SOC 和 某款DDR需要如何搭配:
    1. 确认SOC DQ线路和DDR的规格;
    2. 主要是4 * 8bit? 2 * 16bit? 如果支持多channel则可以减少一些连接;
      实质主要是各种信号连接做在哪一层的问题;
  3. 某款SOC最大能够支持多少的mem,从地址线这里就已经限制死了;

update 于 2020.08.04


版权声明:本文为xiaoqiaoq0原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/xiaoqiaoq0/article/details/107676245