跳到主要内容

DRAM 参数调试

在掌握了DRAM基础知识后,本文介绍如何通过参数调试确保DDR子系统稳定运行。DDR调试涉及读写训练和信号完整性两个核心环节,直接影响系统的性能和稳定性。

本文适用读者:硬件工程师、驱动开发人员

DRAM 调试概述

为什么需要 DRAM 调试?

DRAM 子系统工作在高频环境下,信号传输受到多种因素影响:

影响因素说明
信号完整性高频信号在传输过程中会出现反射、衰减等问题,影响接收端采样
时序裕量频率提升后,信号的建立时间和保持时间裕量减小,需要精确调整
PVT变化工艺、电压、温度的变化会影响信号延迟和驱动能力
颗粒差异不同DRAM颗粒的特性存在差异,需要针对性配置

如果不进行调试,可能导致:

  • 数据读写错误,系统不稳定
  • 无法达到标称频率,性能受限
  • 兼容性问题,部分颗粒无法正常工作

调试的主要内容

DDR调试主要包含两个方面:

读写训练(Training):帮助每个信号找到眼图上的最佳采样点,确保在各种条件下都能正确采样数据。

信号完整性优化:通过调整驱动能力和端接电阻,优化信号眼图质量,获得更大的时序和电压裕量。

理解调试目标后,我们先学习读写训练的核心原理。


读写训练原理

什么是读写训练?

读写训练(Training)是DDR初始化过程中的关键步骤,目的是为每个信号找到最佳的采样点。

核心思路

  • 在电压轴上寻找最佳参考电平(Vref)
  • 在时间轴上寻找最佳采样时刻(延迟值)
  • 两者结合确定眼图的中心位置

眼图与采样点

什么是眼图?

眼图是评估信号质量的可视化工具,通过叠加多次传输的信号波形形成。眼图的"眼睛"张开越大,表示信号质量越好,采样裕量越大。

image-20260327113740560

最佳采样点的确定

轴方向寻找目标方法
电压轴最佳Vref值找时间裕量最大的电压值
时间轴最佳延迟值在最佳Vref上找左右边界,取中心

信号相位关系

不同类型的信号之间存在特定的相位关系,正确理解这些关系是调试的基础。

CK与CA/CS相位

CK(时钟)信号用于采样CA(命令/地址)和CS(片选)信号。

初始相位要求

  • CK的相位比CA/CS大90度
  • 这样可以满足在CK上升沿采样时,CA/CS信号已稳定

WDQS与WDQ相位(写方向)

WDQS(写数据选通)和WDQ(写数据)从PHY端发出时基本对齐,但需要调整相位关系以满足颗粒端采样要求。

不同DRAM类型的相位要求

DRAM类型相位关系说明
DDR3/DDR4/LPDDR3WDQS比WDQ大90度颗粒在DQS边沿采样DQ
LPDDR4/4XWDQ比WDQS大90度颗粒在DQ中心采样

RDQS与RDQ相位(读方向)

RDQS(读数据选通)和RDQ(读数据)由颗粒端发出。

相位关系

  • 颗粒发出的RDQS和RDQ是边沿对齐的
  • 主控端需要将RDQS的相位设置得比RDQ大90度
  • 这样主控可以在DQS边沿正确采样DQ数据

眼宽范围调试

在保证DRAM能正常读写的前提下,通过调节DQ信号及DQS采样信号,可以得出每个信号的可用范围。将延迟值设置到可用范围的中心点,即为当前最优配置。

调试方法

  1. 固定DQS延时值为0,调节DQ延时值,记录能正常读写的DQ延时范围
  2. 如果DQ延时值为0也能正常读写,固定DQ延时值为0,调节DQS延时值,记录能正常读写的DQS延时范围
  3. 计算中心点:DQS延时最大值到DQ延时最大值这段范围内的中心值

完成读写训练后,还需要优化信号完整性以保证眼图质量。


信号完整性优化

什么是信号完整性?

信号完整性(Signal Integrity, SI)是指信号在传输过程中保持其原始特征的能力。在高频环境下,信号会受到反射、衰减、串扰等影响,导致接收端信号失真。

信号完整性调试的目标

  • 阻抗匹配:减少信号反射
  • 眼图优化:增大眼高和眼宽
  • 时序裕量:满足建立/保持时间要求
  • 电源稳定:抑制噪声和纹波

端接模型

什么是端接(ODT)?

端接(On-Die Termination, ODT)是在芯片内部添加电阻,用于匹配传输线阻抗,消除信号反射。没有端接时,信号在阻抗不匹配点会产生反射,影响信号质量。

输出驱动模型

输出驱动采用推挽结构:

  • 输出高电平:上拉电阻导通,下拉电阻截止
  • 输出低电平:下拉电阻导通,上拉电阻截止

端接电阻位置

不同DRAM类型的端接配置不同:

DRAM类型端接信号说明
DDR3/DDR4/LPDDR3DQS、DQ、DM仅数据信号有端接
LPDDR4/4XDQS、DQ、DM、CK、CA数据和命令信号都有端接(除RESET和CKE)

image-20260327113953600

驱动能力与ODT配置

驱动能力(DRV)和端接电阻(ODT)的默认配置按SI仿真建议进行,后续根据实际调试情况确定最优值。

配置原则

  • 驱动电阻越小,驱动能力越强,信号边沿越陡
  • 端接电阻需要与传输线阻抗匹配,减少反射

Vref 理论计算

什么是Vref?

Vref 是接收端的参考电平,用于判断接收信号是高电平还是低电平。最佳 Vref 应该设置在眼图中心。

DDR3示例计算

以DDR3为例,假设:

  • DQ驱动能力设置为 RDRV=40ΩR_{DRV}=40\Omega
  • ODT电阻设置为 RODT=100ΩR_{ODT}=100\Omega
  • 工作电压 VCC=1.5VV_{CC}=1.5V

高电平计算

输出高电平时,上拉导通,分压电路为:

VH=VCC2+RODTRDRV+RODT×(VCCVCC2)V_H = \frac{V_{CC}}{2} + \frac{R_{ODT}}{R_{DRV}+R_{ODT}} \times \left(V_{CC} - \frac{V_{CC}}{2}\right)

代入参数:

VH=0.75+10040+100×0.75=1.286VV_H = 0.75 + \frac{100}{40+100} \times 0.75 = 1.286V

低电平计算

输出低电平时,下拉导通,分压电路为:

VL=RDRVRDRV+RODT×VCC2V_L = \frac{R_{DRV}}{R_{DRV}+R_{ODT}} \times \frac{V_{CC}}{2}

代入参数:

VL=4040+100×0.75=0.214VV_L = \frac{40}{40+100} \times 0.75 = 0.214V

最佳Vref

Vref=VH+VL2=1.286+0.2142=0.75VV_{ref} = \frac{V_H + V_L}{2} = \frac{1.286 + 0.214}{2} = 0.75V

image-20260327114111939

DDR4/LPDDR4差异

不同DRAM类型的最佳Vref位置存在差异:

DDR3

  • 接收端ODT从 40Ω40\Omega 减弱到 120Ω120\Omega 时,信号幅度变大
  • 最优Vref始终固定在 VDDQ/2V_{DDQ}/2
颜色ODT值
紫色120Ω120\Omega
橙色60Ω60\Omega
黄色40Ω40\Omega

image-20260327114151687

DDR4

  • 接收端ODT从 80Ω80\Omega 增强到 40Ω40\Omega 时,信号幅度变小
  • 低电平被拉高,高电平基本固定在 VDDQV_{DDQ}
  • 最优Vref随ODT强度增加而上移(VDDQ/2≥V_{DDQ}/2
颜色ODT值
蓝色80Ω80\Omega
绿色60Ω60\Omega
黄色40Ω40\Omega

image-20260327114259111

各DRAM类型最佳Vref汇总

DRAM类型CA颗粒接收VrefDQ读方向主控VrefDQ写方向颗粒Vref
DDR3引脚输入,VDDQ/2V_{DDQ}/2寄存器设置,VDDQ/2V_{DDQ}/2引脚输入,VDDQ/2V_{DDQ}/2
DDR4引脚输入,VDDQ/2V_{DDQ}/2寄存器设置,VDDQ/2≥V_{DDQ}/2MR调节,VDDQ/2≥V_{DDQ}/2
LPDDR3引脚输入,VDDQ/2V_{DDQ}/2寄存器设置,VDDQ/2≥V_{DDQ}/2引脚输入,VDDQ/2≥V_{DDQ}/2
LPDDR4/4XMR调节,VDDQ/2≤V_{DDQ}/2寄存器设置,VDDQ/2≤V_{DDQ}/2MR调节,VDDQ/2≤V_{DDQ}/2

眼图调优实践

提频过程中,如果眼图眼宽或眼高变小,可以通过驱动电阻和端接电阻进行调节。

驱动电阻调节效果

驱动电阻阻值越小,驱动能力越强:

  • 信号边沿越陡
  • 眼图眼高越大
  • 但可能引入更多噪声

端接电阻调节效果

端接电阻阻值越小,导流能力越强:

  • 信号边沿越缓
  • 眼图眼高越小
  • 但能更好地吸收反射

image-20260327114709095

理解调试原理后,本节介绍具体的配置参数。


DRAM配置参数详解

参数概述

DRAM参数保存在 sys_config.fex 配置文件中,用于初始化DDR子系统。参数主要分为以下几类:

参数类别主要参数作用
时钟与类型dram_clk, dram_type设置工作频率和DRAM类型
容量配置dram_para1, dram_para2配置Bank、Row、Col、位宽等
驱动与端接dram_zq, dram_odt_en配置驱动能力和端接电阻
相位延迟dram_tpr10/11/12调整信号相位延迟
模式寄存器dram_mr0~mr3配置DRAM工作模式

典型配置示例

[dram_para]
dram_clk = 1056
dram_type = 3
dram_zq = 0x7b6bfb
dram_odt_en = 0x1
dram_para1 = 0x000010d2
dram_para2 = 0x00000000
dram_mr0 = 0x1c70
dram_mr1 = 0x2
dram_mr2 = 0x18
dram_mr3 = 0x0
dram_tpr0 = 0x004A2195
dram_tpr1 = 0x02423190
dram_tpr2 = 0x0008B061
dram_tpr3 = 0xB4787896
dram_tpr4 = 0x0
dram_tpr5 = 0x48484848
dram_tpr6 = 0x48
dram_tpr7 = 0x1621121e
dram_tpr8 = 0x0
dram_tpr9 = 0x0
dram_tpr10 = 0x0
dram_tpr11 = 0x00460000
dram_tpr12 = 0x00000055
dram_tpr13 = 0x34010100

参数配置器

配置导入

粘贴已有的 dram_para 配置文本,点击解析后会自动填充到下方各参数输入框。

基础配置(容量参数)

自动计算结果

Page Size: 0 Bytes (0 B)

DRAM 总容量: 0.00 MB

基础参数输出

dram_clk: 1056

dram_type: 3 (DDR3)

dram_para1: 0x0

dram_para2: 0x0

高级配置(驱动/ODT/相位/MR)

驱动能力与ODT配置

相位延迟配置 (范围: 0-F)

MR 寄存器配置 (十六进制, 参考对应JEDEC协议文档)

高级参数输出

dram_zq: 0x0

dram_odt_en: 0x1

dram_tpr10: 0x0

dram_tpr11: 0x0

dram_tpr12: 0x0

dram_mr0: 0x1c70

dram_mr1: 0x2

dram_mr2: 0x18

dram_mr3: 0x0

参数配置

[dram_para]
dram_clk = 1056
dram_type = 3
dram_zq = 0x0
dram_odt_en = 0x1
dram_para1 = 0x0
dram_para2 = 0x0
dram_mr0 = 0x1c70
dram_mr1 = 0x2
dram_mr2 = 0x18
dram_mr3 = 0x0
dram_tpr0 = 0x004A2195
dram_tpr1 = 0x02423190
dram_tpr2 = 0x0008B061
dram_tpr3 = 0xB4787896
dram_tpr4 = 0x0
dram_tpr5 = 0x48484848
dram_tpr6 = 0x48
dram_tpr7 = 0x1621121e
dram_tpr8 = 0x0
dram_tpr9 = 0x0
dram_tpr10 = 0x0
dram_tpr11 = 0x0
dram_tpr12 = 0x0
dram_tpr13 = 0x34040500

时钟与类型参数

dram_clk

DRAM时钟信号频率,单位为MHz。

说明

  • 例如 672 表示时钟频率为 672MHz
  • 数据速率 = dram_clk×2dram\_clk \times 2(DDR双倍速率)
  • 例如 672MHz 时钟对应 672×2=1344672 \times 2 = 1344 Mbps 数据速率
  • 调整最小步进单位为 12MHz

dram_type

DRAM类型配置。

DRAM类型
2DDR2
3DDR3
4DDR4
6LPDDR2
7LPDDR3
8LPDDR4
9LPDDR5

容量配置参数

dram_para1

配置Bank数量、地址行数、页大小。

BIT含义
31:16RFU(预留,不要使用)
15:12Bank Size:Bank数量
0 = 4 banks
1 = 8 banks
11:4Row Number:地址行数
3:0Page Size:页大小
0 = 512Byte
1 = 1KByte
2 = 2KByte
4 = 4KByte
8 = 8KByte

dram_para2

配置DRAM容量、Rank数量、总线位宽。

BIT含义
31Size Mode
0 = 自动识别DRAM大小
1 = 使用手动提供的DRAM大小
30:16DRAM Size(需配置Bit 31启用):
n = n MByte
15:12Rank Number
0 = 1 Rank
1 = 2 Rank
11:4RFU(预留,不要使用)
3:0Bus Width
0 = 16bit(Full DQ)
1 = 8bit(Half DQ)
提示

dram_para1dram_para2 用于容量识别结果回写,或手动强制配置容量。一般使用自动识别,无需手动配置。

驱动与端接参数

dram_odt_en

控制器DX读ODT使能。

BIT含义
31:1RFU(预留,不要使用)
1:0Read ODT
0 = 关闭
1 = 开启

dram_zq

控制器DX ODT、输出驱动能力,以及CK、CA输出驱动能力配置。

BIT含义
23:20DX2/3 ODT(不使用)
0x1 = 150Ω150\Omega
0x2 = 100Ω100\Omega
0x3 = 75Ω75\Omega
0x4 = 60Ω60\Omega
0x5 = 50Ω50\Omega
0x6 = 42.86Ω42.86\Omega
0x7 = 37.5Ω37.5\Omega
19:16DX2/3 驱动能力(不使用)
0x0 = 480Ω480\Omega
0x1 = 240Ω240\Omega
0x3 = 120Ω120\Omega
0x5 = 80Ω80\Omega
0x7 = 60Ω60\Omega
0xb = 40Ω40\Omega
0xf = 30Ω30\Omega
15:12DX0/1 ODT
0x1 = 150Ω150\Omega
0x2 = 100Ω100\Omega
0x3 = 75Ω75\Omega
0x4 = 60Ω60\Omega
0x5 = 50Ω50\Omega
0x6 = 42.86Ω42.86\Omega
0x7 = 37.5Ω37.5\Omega
11:8DX0/1 驱动能力
0x0 = 480Ω480\Omega
0x1 = 240Ω240\Omega
0x3 = 120Ω120\Omega
0x5 = 80Ω80\Omega
0x7 = 60Ω60\Omega
0xb = 40Ω40\Omega
0xf = 30Ω30\Omega
7:4CK 驱动能力
0x1 = 150Ω150\Omega
0x2 = 100Ω100\Omega
0x3 = 75Ω75\Omega
0x4 = 60Ω60\Omega
0x5 = 50Ω50\Omega
0x6 = 42.86Ω42.86\Omega
0x7 = 37.5Ω37.5\Omega
3:0CA 驱动能力
0x0 = 480Ω480\Omega
0x1 = 240Ω240\Omega
0x3 = 120Ω120\Omega
0x5 = 80Ω80\Omega
0x7 = 60Ω60\Omega
0xb = 40Ω40\Omega
0xf = 30Ω30\Omega
提示

驱动和 ODT 阻值档位因芯片而异。档位越高,阻值越小,驱动或端接能力越强。

V86x 芯片是 16 位 DDR,所以 DX2/DX3 不使用,配置不生效

相位延迟参数

dram_tpr10

调整CK、CA、CS信号的相位延迟。

BIT含义
31:16RFU(预留,不要使用)
15:12CS1 Write bit delay
[0:3] delay值,范围 0x0 ~ 0xF
只对2个CS的DDR3/DDR4有效
11:8CS0 Write bit delay
[0:3] delay值,范围 0x0 ~ 0xF
7:4CA Write bit delay
[0:3] delay值,范围 0x0 ~ 0xF
3:0CK Write bit delay
[0:3] delay值,范围 0x0 ~ 0xF

dram_tpr11

调整DQS/DQ写方向的相位延迟。

BIT含义
31:24RFU(预留,不要使用)
23:20DQS1 Write bit delay
[0:3] delay值,范围 0x0 ~ 0xF
19:16DQS0 Write bit delay
[0:3] delay值,范围 0x0 ~ 0xF
7:4DX1 Write bit delay
[0:3] delay值,范围 0x0 ~ 0xF
3:0DX0 Write bit delay
[0:3] delay值,范围 0x0 ~ 0xF

dram_tpr12

调整DQS/DQ读方向的相位延迟。

BIT含义
31:24RFU(预留,不要使用)
23:20DQS1 Read bit delay
[0:3] delay值,范围 0x0 ~ 0xF
19:16DQS0 Read bit delay
[0:3] delay值,范围 0x0 ~ 0xF
7:4DX1 Read bit delay
[0:3] delay值,范围 0x0 ~ 0xF
3:0DX0 Read bit delay
[0:3] delay值,范围 0x0 ~ 0xF

其他参数

dram_tpr5

配置主控端CA VREF、DX读数据内部VREF。与控制器相关,一般不建议修改。

dram_tpr13

灵活用于功能控制等用途,具体因项目而异,没有固定规范。

dram_mr0~mr3

对应JEDEC规范的MR寄存器:

参数说明
dram_mr0MR0寄存器,对应JEDEC DDR3/DDR4/LPDDR3/LPDDR4规范
dram_mr1MR1寄存器,对应JEDEC规范
dram_mr2MR2寄存器,对应JEDEC规范
dram_mr3MR3寄存器,对应JEDEC规范

具体寄存器位定义请参考相应DRAM类型的JEDEC规范文档。


调试流程建议

掌握上述知识后,DDR调试可按以下流程进行:

  1. 初始化配置

    • 根据颗粒Datasheet设置dram_type、dram_clk
    • 使用默认驱动能力和ODT配置
  2. 读写训练

    • 执行Read/Write Training确定最佳延迟值
  3. 信号完整性优化

    • 检查眼图质量
    • 根据眼高/眼宽情况调整驱动和端接电阻
    • 调整Vref到最佳位置
  4. 稳定性验证

    • 进行压力测试(长时间读写、温度变化)
    • 验证不同颗粒的兼容性

通过合理的参数调试,可以确保DDR子系统在各种工作条件下稳定运行,发挥最佳性能。