· cpu / memory
DB ODT、RDIMM 和 LRDIMM:先把两段链路画出来
从电路节点到 DDR5:一步步理解高速信号反射(10)
看到 DB ODT、RW85 或类似配置字段时,直接猜它代表哪一个电阻,通常很容易出错。第一步应该是确认这个参数属于链路中的哪个节点。
1. UDIMM、RDIMM、LRDIMM 的抽象差异
从信号完整性角度,可以先忽略具体厂商实现,只看信号是否经过中间器件:
点到点抽象:
Controller <----------------> DRAM
带寄存器/缓冲器的抽象:
Controller <---------------> Register/Buffer <---------------> DRAM
这不表示所有模块都只有一颗中间芯片,也不表示所有信号都经过同一种器件。它只是提醒我们:出现中间节点后,原先的一段通道变成了多段通道。
2. DB 在哪里
对于带 Data Buffer 的模块,可以先画出:
Memory Controller
|
| Host-side channel
v
DB
|
| DRAM-side channel
v
DRAM devices
于是至少要分别分析:
Controller <-> DB
DB <-> DRAM
每一段都有自己的走线、封装、驱动器、接收器和终端状态。一个看似简单的 ODT 名字,可能是在描述 DB 端、DRAM 端或控制器端的行为。
3. DB ODT 为什么不能等同于 DRAM ODT
ODT 是功能类别,不是一个脱离节点的全局电阻。DB ODT 和 DRAM ODT 至少有三个区别:
| 问题 | DB ODT | DRAM ODT |
|---|---|---|
| 所在节点 | Data Buffer 的 I/O | DRAM 的 I/O |
| 所在链路 | Host-side 或 DB 相关侧 | DRAM-side 或 DRAM I/O |
| 有效负载 | 取决于 DB 状态和连接 | 取决于 DRAM 状态和 rank 拓扑 |
实际控制方式、阻值编码和启用条件需要查对应器件和平台文档。不能仅凭字段名把 DB ODT 替换为 $R_\mathrm{TT}$,也不能把一个模块的值推广到另一个模块。
4. RW85 应该如何读
像 RW85 这样的名字,首先是一个实现或配置上下文中的符号,不是通用电路定律。阅读它时可以按下面的顺序:
字段定义
-> 所属器件和 I/O 方向
-> 生效状态:read / write / park / idle
-> 对应哪一段 channel
-> 最终影响源端还是负载端
只有拿到字段定义、拓扑图和调用上下文后,才可以判断它是一个阻抗目标、编码、状态选择,还是训练结果索引。
5. 两段链路的反射问题
DB 的加入可能改变:
- 每一段的 $Z_0$ 和传播延迟;
- 中间节点的输入输出阻抗;
- 反射波的返回路径和时间间隔;
- 同一数据周期内反射叠加的位置。
因此调一个 DB 端终端,可能改善 DB 侧波形,却让 DRAM 侧摆幅或功耗变差。调参必须观察两段链路,而不是只看控制器引脚上的一个波形。
本篇结论
先定位节点,再解释参数。
先画两段链路,再讨论 DB ODT。
先确认状态,再把字段映射到 ΓS 或 ΓL。
下一篇进入真实芯片的非理想性:为什么需要 RCOMP、校准和训练,以及它们各自解决什么问题。
References
- Transmission line:多段传输线、阻抗不连续和反射的通用分析背景。
- Characteristic impedance:特性阻抗与终端匹配关系。
- Micron DDR5 SDRAM:DDR5 模块和 ODT/训练特性概览;具体模块拓扑仍需查对应产品资料。