跳到主要内容

DRAM 基础知识

什么是DRAM

DRAM(Dynamic Random Access Memory,动态随机存取存储器)是计算机系统中的主存储器,负责存储正在运行的程序和数据。

DRAM的基本工作原理

存储单元结构

  • 1个晶体管 + 1个电容(1T1C结构)
  • 电容存储电荷:有电荷=1,无电荷=0
  • 晶体管作为开关,控制读写操作

为什么叫"动态"?

  • 电容会漏电,电荷只能保持几毫秒
  • 必须定期刷新(Refresh)来补充电荷
  • 典型刷新周期:64ms内刷新所有行
  • 刷新操作会占用带宽,影响性能

读写过程

  1. 读操作:激活字线 → 打开晶体管 → 检测位线电压变化 → 放大并输出
  2. 写操作:激活字线 → 打开晶体管 → 对电容充电或放电
  3. 刷新:读取每行数据并重新写入,防止数据丢失

与其它存储器的对比

存储类型结构特点是否需要刷新速度密度成本应用场景
DRAM1T1C需要主存(系统内存)
SRAM6T不需要CPU缓存
Flash浮栅晶体管不需要存储(SSD、U盘)

DDR技术演进

DDR = Double Data Rate(双倍数据速率)

  • 传统SDR:每个时钟周期传输1次数据
  • DDR:在时钟的上升沿和下降沿都传输数据,带宽翻倍

技术演进路线

代际典型速率工作电压主要改进
DDR3800-2133 MT/s1.5V8位预取
DDR41600-3200 MT/s1.2VBank Group、更低功耗
DDR53200-6400+ MT/s1.1V双通道、更高密度
LPDDR4/53200-6400+ MT/s1.1V低功耗设计、移动设备优化

LPDDR的特点

  • Low Power DDR,专为移动设备设计
  • 更低的工作电压和待机功耗
  • 通常焊接在PCB上(PoP封装),不使用DIMM插槽

为什么学习DRAM基础知识?

  • DRAM是嵌入式系统的核心组件,直接影响系统性能
  • 理解DRAM架构有助于系统调试和性能优化
  • 存储子系统故障是常见的硬件问题,需要基础知识支撑排查
  • DRAM选型、适配需要掌握容量、带宽等关键参数

了解了DRAM的基本概念后,我们来看DRAM子系统的整体架构。

DRAM子系统

DRAM子系统是整个内存系统的完整架构,由多个组件协同工作,共同实现数据的存储与访问。

组成结构

DRAM子系统由以下四个核心部分组成:

组件说明关注重点
主控SOC包含控制器和PHY,通常称为DDR IP控制逻辑、时序参数
传输链路基板、PCB走线等信号通路信号质量、极限性能
DRAM颗粒数据的实际存储载体IO性能、稳定性
电源为各组件供电直流压降、纹波系数

各组件角色

主控SOC:SOC内的DRAM子系统包含控制器和PHY,是整个子系统的控制核心。

传输链路:通常包含基板、PCB走线等,影响信号质量,与子系统的极限性能有直接关系,设计与制造均需要关注。

DRAM颗粒:占子系统成本的主要部分,其IO性能以及存储单元稳定性是主要关注点。

电源:容易忽略的部分,主要关注路径直流压降以及应用端的纹波系数。

image-20260327110706629

DRAM子系统中的核心组件是DDR IP,它负责管理与DRAM颗粒的所有通信操作。下一节我们将深入了解DDR IP的内部结构。

DDR IP

DDR IP是DRAM子系统的核心处理单元,位于SOC内部,负责与DRAM颗粒的所有通信操作。

组成结构

DDR IP由两个主要部分组成:控制器(Controller)和物理层(PHY)。

控制器(Controller)

角色:整个子系统的指挥中心,所有控制/操作命令的发起者。

主要职责

  • 接收CPU/总线的内存访问请求
  • 管理命令队列和调度
  • 发起所有控制/操作命令
  • 控制时序参数和电源管理
  • 决定子系统的性能、功能和稳定性

PHY(物理层)

角色:连接DDR控制器和DDR颗粒的桥梁。

主要职责

  • 将控制器发出的数据转换为符合DDR协议的信号,发送到DRAM颗粒
  • 将DRAM发送的数据转换为符合DFI协议的信号,传送给控制器
  • 处理读写时序对齐
  • 管理信号完整性

image-20260327110758882

DDR IP与DRAM颗粒之间的通信通过传输链路完成,链路设计的质量直接影响系统的信号完整性和最高工作频率。

传输链路设计

DDR IP与DRAM颗粒之间通过传输链路连接,链路设计决定了信号质量和系统能达到的最高频率。

设计内容

DRAM子系统链路设计覆盖高速信号设计的各个关键点,主要包括:

  • DIE内设计:芯片内部的信号布线
  • 基板设计:封装基板的信号走线
  • 封装ball设计:芯片封装的球栅阵列布局
  • 原理图设计:电路原理图设计
  • PCB设计:印刷电路板走线设计

设计要点

以上设计是构建高性能内存架构的核心环节,需要兼顾:

设计维度说明
信号完整性(SI)确保信号在传输过程中不失真
电源完整性(PI)保证电源供应稳定,减少噪声
时序收敛满足信号的建立时间和保持时间要求
成本控制在性能和成本之间取得平衡
危险

注意:成熟的DRAM模板经过充分验证,不可轻易修改,否则可能引入信号完整性问题。

理解了链路设计后,我们深入了解DRAM颗粒的内部结构,这是数据实际存储的地方。

DRAM颗粒

DRAM颗粒是数据的实际存储载体,理解其内部结构对于掌握内存容量计算和性能优化至关重要。

基本存储单元:Row、Column与Page Size

Row(行):等同于Word Line,将多个存储单元晶体管的gate端挂在一条线上,这条线称为row。激活某一行时,该行上所有存储单元的晶体管被打开。

Column(列):由Bit Line组成,一列包含多个Bit Line,具体数量取决于位宽。读取数据时,通过检测位线上的电压变化来判断存储的是0还是1。

Page Size:一行的大小称为Page Size,是内存访问的基本单位。

计算公式

PageSize=列数×位宽8Page Size = \frac{\text{列数} \times \text{位宽}}{8}

其中,列数由 Column Address 的位数决定:

列数=2Column Address位数\text{列数} = 2^{\text{Column Address位数}}

因此:

PageSize=2Column Address位数×位宽8Page Size = \frac{2^{\text{Column Address位数}} \times \text{位宽}}{8}

image-20260327111227071

Bank:独立的内存阵列

什么是Bank?

Bank是一个个独立的内存阵列,每个Bank包含自己的行解码器、列解码器和读放大器。

为什么需要多个Bank?

优势说明
提高并行访问效率不同Bank可以同时进行操作
减少等待时间一个Bank在预充电时,可以访问另一个Bank
提升有效带宽多Bank交错访问,减少延迟影响

Bank的使用限制

同一Bank内不能同时激活(Active)两个Row,而 Row 的激活和关闭(预充电Precharge)需要耗时。因此,多Bank设计可以减少存储单元预充电等待时间,提高整体访问效率。

Rank:多颗粒协同工作

什么是Rank?

Rank是DRAM模块内部的逻辑结构,同一个Rank内的多个DRAM颗粒通过共享同一组控制信号协同工作,通过CS_n(片选)信号选择不同的Rank。

Rank的作用

  • 增加容量:多个Rank可以在同一Channel内共享DQ数据线,增加总内存容量
  • 提高性能:不同Rank可以交错访问,隐藏预充电延迟

Rank与Channel的关系

一个Channel内可以有多个Rank,这些Rank共用同一组DQ线,但通过片选信号独立控制。

image-20260327111335943

位宽与Channel

SoC的位宽:决定了SoC一次能处理的数据宽度。

颗粒的位宽

DRAM类型单颗粒位宽选项常用位宽说明
DDR3/DDR44bit、8bit、16bit16bit多颗粒组合实现32bit位宽
LPDDR432bit32bit内部2个独立Channel,每个Die 16bit

Channel(通道)

Channel是物理通道,每个Channel拥有独立的数据线、地址线和控制信号(时钟、片选等)。

Channel的优势

  • 多个Channel可并行传输数据
  • 对带宽有显著提升效果
  • 独立控制,互不干扰

image-20260327111411108

掌握颗粒结构后,我们来看看DRAM的信号和Pin定义,理解数据是如何在颗粒和控制器之间传输的。

DRAM信号Pin

DRAM通过一组标准的信号Pin与外界通信,了解这些信号有助于理解DRAM的工作过程和调试问题。

信号分类

DRAM信号主要分为四类:

信号类型主要信号作用
时钟信号CK_t、CK_c提供采样时钟基准
命令/地址信号CA、CKE、CS#等发送控制命令和寻址
数据信号DQ、DQS、DM传输读写数据
电源信号VDD、VDDQ等为各部分供电

CK信号(时钟信号)

组成:包含CK_t和CK_c,是一对差分信号。

作用:作为CA信号的采样时钟,所有命令和地址信号都以CK为基准进行采样。

CA信号(命令/地址信号)

包含的信号

命令信号:CKE、RST_N、CS#、ODT、RAS、CAS、WE、ACT等

地址信号:A0-A17(行/列地址)、BG0-BG1(Bank Group)、BA0-BA2(Bank地址)

作用:用于发送DRAM的相关控制命令和寻址,依据JEDEC协议规定。

数据信号

信号组成

  • DQS:数据选通信号,用于数据同步
  • DQ:数据信号,传输实际的读写数据
  • DM:数据掩码信号,用于写入时屏蔽部分字节

读写区分

  • wDQS/wDQ:写操作时的数据选通和数据信号
  • rDQS/rDQ:读操作时的数据选通和数据信号

电源信号

电源名称作用说明
VCC18-DRAM内部PHY供电控制器端
VDD-DRAM数字电路供电一般与VDD-SYS合并
VCC-DRAM/VCC-DRAMLIO供电对应颗粒端VDDQ
VDD18-LPDDR颗粒端VDD1供电LPDDR专用
VPP25-DRAM行激活电压DDR4专有

了解了信号定义后,我们再回到实际应用,看看如何从Datasheet获取颗粒信息并进行容量和带宽计算。

颗粒信息获取

在实际应用中,DRAM适配前需要从Datasheet中读取关键参数进行配置。

关键参数

从Datasheet中需要获取以下关键信息:

参数说明获取方式
Part Number准确型号通过丝印或原厂获取
Configuration容量及内存结构Datasheet规格表
Package封装类型Datasheet封装章节
Frequency最高速率IO数据率,为工作频率的2倍
DC Operating Conditions工作电压电压范围要求
Temperature Range工作温度区分商业级/工业级

DRAM容量计算

示例:以某DDR3颗粒为例,从Datasheet获取以下信息:

image-20260327113241440

Datasheet参数

  • 位宽:x16
  • Bank Address:BA0-BA2(3位,8个Bank)
  • Row Address:A0-A14(15位)
  • Column Address:A0-A9(10位)

计算步骤

  1. 计算行数215=327682^{15} = 32768
  2. 计算列数210=10242^{10} = 1024
  3. 计算Bank数23=82^{3} = 8 个Bank
  4. 计算Page Size1024×16bit÷8=2048Bytes=2KB1024 \times 16bit \div 8 = 2048 Bytes = 2KB

总容量计算

颗粒容量=行数×列数×Bank数×位宽\text{颗粒容量} = \text{行数} \times \text{列数} \times \text{Bank数} \times \text{位宽}

=32768×1024×8×16 bit=4 Gbit=512 MB= 32768 \times 1024 \times 8 \times 16 \text{ bit} = 4 \text{ Gbit} = 512 \text{ MB}

DRAM带宽计算

DDR3/LPDDR3/DDR4带宽公式

理论带宽(MB/s)=数据速率(MT/s)×位宽(bit)8\text{理论带宽(MB/s)} = \frac{\text{数据速率(MT/s)} \times \text{位宽(bit)}}{8}

示例:DDR3 16bit,933MHz时钟

理论带宽=933×2×168=3732 MB/s\text{理论带宽} = \frac{933 \times 2 \times 16}{8} = 3732 \text{ MB/s}

LPDDR4/4X带宽公式

理论带宽(MB/s)=数据速率(MT/s)×通道数×单通道位宽(bit)8\text{理论带宽(MB/s)} = \frac{\text{数据速率(MT/s)} \times \text{通道数} \times \text{单通道位宽(bit)}}{8}

示例:LPDDR4 16×2bit,1600MHz时钟

理论带宽=1600×2×2×168=12800 MB/s\text{理论带宽} = \frac{1600 \times 2 \times 2 \times 16}{8} = 12800 \text{ MB/s}

实际带宽利用率

由于刷新、预充电等操作的开销,实际有效带宽低于理论带宽:

DRAM类型DDR3LPDDR3DDR4LPDDR4
带宽利用率60%-70%50%-60%60%-70%50%-60%

通过掌握上述基础知识,可以更好地进行DRAM选型、系统设计和故障排查。