DDR5 内存初始化中的 VREF:给每个接收端配一条参考线

DDR5 内存初始化中的 VREF:给每个接收端配一条参考线

在很多人的印象里,DDR 是并行总线的代表:数据、地址、时钟各走各的,初始化时把时序对齐就好,至于"调参考电压",听上去是模拟实验室里的事。可今天的内存初始化流程里,专门有一个环节就是给接收端调参考电压——并行内存为什么也要做这件事?

并行内存也有接收端,任何数字接收端本质上都是比较器:采样时刻把收到的信号电平与一条参考线比一比,高则判 1、低则判 0——只要做比较,就离不开那条参考线,它在内存世界里叫 VREF(参考电压)。

在更早的时代,VREF 是可以出厂定死的板级电压;到了 DDR5,速率较 DDR4 最高档提升约 50%、带宽约为两倍,VREF 的位置直接决定眼图能不能睁开——参考线偏一点,这只眼就可能睁不开。于是它从"出厂定死"变成了"上电现调":DDR4 起就要求上电校准,DDR5 进一步把现场训练做成了初始化的常规动作(图 1)。为什么必须现场调、而不是出厂定死?下面从什么是 VREF 讲起。

图 1 眼图与 VREF:眼图垂直方向的中心线即参考电压 VREF,参考线偏移导致眼高收缩

什么是 VREF

把接收端想成一位只认一条线的裁判。任何数字接收端本质上都是一个判决器(比较器):采样时刻,它把收到的信号电平与参考电压比一比,电平高过参考线就判 1、低过就判 0——所谓"接收",不过是一次次这样的大于小于比较。既然判决依赖比较,判决器就离不开那条参考线;这条线在内存世界里叫 VREF,它放在哪里,直接决定同样一个信号被读成 0 还是 1。

把任意位模式下的波形叠加到一起,就得到眼图——两扇眼皮之间的空隙,就是判决容错的空间。VREF 恰好就是这只眼垂直方向的那条中心线:让高电平一侧与低电平一侧各留一半余量,是它最稳的位置;放高一点或放低一点,眼高都会收缩一截,偏得越远眼就越扁(图 1)。

图 1 眼图与 VREF:眼图垂直方向的中心线即参考电压 VREF,参考线偏移导致眼高收缩

更隐蔽的是对称性的破坏。VREF 一旦偏移,0 与 1 两侧的判决余量就不再相等:判 1 的那半边宽裕,判 0 的那半边拮据,占空比失衡、直流失衡随之而来。因此 VREF 的位置不仅要居中,还要维持 0 与 1 之间的对称。

如果 VREF 只是 DRAM 里的一个电压,事情就简单了。DDR5 的真实图景要复杂得多:先看 DRAM 内部,数据引脚(DQ)的接收端有 VrefDQ,命令/地址(CA)接收端有 VrefCA,片选(CS)接收端还有自己的 VrefCS,与 VrefCA 分离控制;主机侧也有一份,读路径的接收端在内存控制器里,那里的参考电压业界通称 RxVref——通用叫法,并非 JEDEC 规范名。RDIMM 里还有一个新角色:注册时钟驱动器(RCD)的 DCA/DCS 接收端各有自己的参考电压。这些位置有一个共同点:凡是做判决的地方,就要有一条线。

这中间藏着一个相对 DDR4 的结构性变化:命令通道的参考电压与数据的 VrefDQ 分离控制了。数据侧的 VrefDQ 在 DDR4 就已存在,新意全在命令通道——参考电压从板级生成的外部电压搬进 DRAM 内部,可以独立训练、独立调整;两路从此各管各的账。

家族化还没有到此为止。VrefDQ 甚至支持逐位(per-bit)微调:以基准值为参照,每一根 DQ 都能在 ±3 步的范围内单独微调,再按每颗 DRAM 逐一编程(PDA,Per-DRAM Addressability 模式)。同一组 DQ 里各根位的电气环境并不完全相同,这正是逐位微调存在的理由——每一根数据位线,都有自己的那一盆水。

数到这里,DDR5 的 VREF 早已不是"一个电压":数据、命令、片选各有各的参考,主机读路径与 RCD 也各有一份——凑成一个遍布读、写、CA 三条通路的家族(图 2)。每个判决器各有一盆水,内存初始化要做的事情之一,就是把每一盆都放到它该在的位置。

图 2 DDR5 VREF 家族全景:DRAM 侧 VrefDQ/VrefCA/VrefCS、主机侧 RxVref、RCD 的 DCA/DCS

为什么需要调整

这条参考线的合理位置,本来就不是一成不变的。它随工艺、电压、温度(PVT)一起漂移:温度变了、电压动了,甚至同一批芯片之间的工艺差异,都会让"放得最正"的位置悄悄挪动。既然如此,出厂时定死的那个值,必然不可能是所有平台、所有工况下的最优值——上电现调,不是多此一举。

信号劣化还有一笔更关键的账,要拆成直流与交流两笔来看。接收端信号电平的直流分量会随通道与负载变化,整条眼图跟着上下平移;交流层面的摆幅收缩,则表现为眼高变矮(图 3)。两笔账的解法互不相通:VREF 调整解决的是直流平移——把参考线重新放回眼图正中,让基线归位;交流摆幅的账,则由 DFE、CTLE 这类均衡器来还,与 VREF 调整正好互补。均衡管 AC、VREF 管 DC、各管一段,这正是姊妹篇那篇关于 DFE 的文章讲过的分工。

图 3 DC 偏移与 AC 摆幅收缩:左图整条眼图上下平移(VREF 调整的对象),右图眼高变矮(均衡器处理的对象)

让这件事变得迫切的,是速率演进。DDR5 以 4800 MT/s 起步,而 DDR4 的最高档是 3200 MT/s——速率提升约 50%,带宽约为两倍——工作电压却从 1.2V 降到了 1.1V。速率提上去、电压降下来,绝对的裕量越来越小:同样一小截偏移,放在宽裕的 DDR4 时代或许无伤大雅,到 DDR5 就可能把眼图压闭。

与此同时,接收端的数量也在变多。命令路径上多了 RCD——每一处新接收端,都要有自己的参考电压,这正是 VREF 家族化的又一重驱动。

也正因为如此,VREF 无法靠仿真定死。通道与 DIMM 的组合千差万别——拓扑、负载、温度各不相同——仿真可以验证设计,却预知不了每一块板子、每一根插槽上的实际工况,出厂更不可能为每一种组合预置一条恰好合适的线;只有上电后在现场逐点扫出来,才是稳妥的办法。

所以,VREF 救不了坏通道。它只负责把直流基线放对,如果通道与布局在交流层面已经劣化——损耗大、反射强——参考线调到哪个位置都无济于事。调 VREF 是锦上添花,不是化腐朽为神奇;想清楚这条边界,再看初始化里那些训练步骤,才不会被表象迷惑。至于现场怎么扫、每条线怎么定,那是训练算法的事,后面再讲。

三条通路的 VREF 调整方式

这么多条参考线,各条怎么调,其实都绕不开同一组问题:接收端在哪里,扫什么参数,拿什么衡量调得好不好,最后把结果写到哪里。这四问正是表 1 的四列。

从离主机最近的一路,读路径的接收端在内存控制器一侧,主机把读出的信号收进自己的判决器(slicer),那里的参考电压(reference voltage)业界通称 RxVref——通用叫法,并非 JEDEC 规范名。RxVref 的调整方法是电压裕量扫描(Vref sweep):把参考电压在可调范围内逐档扫过,每一档测一次裕量(margin),"裕量–VREF"曲线便标出眼心的位置。垂直一轴找准了还不够,水平方向还有采样时刻,VREF 扫描要与 timing 中心化合起来做,组成 timing × VREF 双轴的二维联合调整——业界通行的 2D 对中(2-D centering)思路。扫描结果写进控制器寄存器,这一盆水就算放正了(见表 1 读路径一行)。

读路径的参考线握在主机手里,写路径的则在 DRAM 手里。主机写出去的数据要在 DRAM 内部 DQ 接收端被读走,那里的参考电压叫 VrefDQ。VrefDQ 经 JEDEC 定义的模式寄存器(MR)编程:先设一个基准值,再借助 PDA(Per-DRAM Addressability)模式逐颗 DRAM、逐根 DQ 做 per-bit 微调——同一组 DQ 各根位电气环境不同,这正是逐位微调存在的理由。写路径训练有个绕不开的限制:DRAM 内部的判决点不可直接测量,衡量调得好不好的 FOM,只能取 DRAM 输入端可测的 Vref 眼高(eye height),也就是数据眼在参考线处的垂直开口。结果连同 per-bit 偏移写回模式寄存器(见表 1 写路径一行)。

数据通路之外,命令通道也有自己的参考线,这条路径的形态还随内存条而异。UDIMM 与内存贴片场景下,命令/地址(CA)与片选(CS)信号直接进 DRAM,VrefCA 与 VrefCS 就在 DRAM 对应接收端上,两者分离控制;VrefCA 的取值定义在模式寄存器中,调整经专用校准命令下发,由 DRAM 自身训练完成——训练时把 Vref 与 CA 对中的 timing 两轴联扫,以各信号的最小眼宽(eye width)为判据。RDIMM 场景则多出一层:命令路径上多了 RCD,其 DCA/DCS 接收端各有自己的参考电压,训练时经 RCD 的配置接口(sideband 总线,I²C/I3C 同族)写控制字编程;RCD 还会用反馈信号把训练结果回报主机,扫描就此形成闭环(见表 1 命令路径一行)。

三条通路走下来,接收端的位置、扫描的对象、衡量的标准与编程的载体各不相同,一并收进表 1(全景见图 4)。LRDIMM 的数据缓冲器(DB)还有自己的一套参考电压与训练机制,篇幅所限,这里不展开,以后有机会单独讲。

表 1 三条通路的 VREF 调整要素

位置扫什么用什么当 FOM写到哪里
读路径:主机侧读路径接收端(业界通称 RxVref)电压裕量扫描:逐档扫 VREF 找眼心各 Vref 档位下的时序眼宽、眼高与裕量曲线控制器寄存器
写路径:DRAM 数据(DQ)接收端(VrefDQ)Vref 扫描,配合逐位(per-bit)偏移微调DRAM 输入端可测的 Vref 眼高模式寄存器(MR):基准值与 per-bit 偏移字段
命令路径:DRAM 的 CA/CS 接收端(VrefCA/VrefCS);RDIMM 另有 RCD 的 DCA/DCS 接收端Vref 档位与 timing 两轴联扫各信号最小眼宽(以最差信号为准)专用校准命令(取值定义在模式寄存器中);RCD 侧写控制字(Control Word)
图 4 三条通路的 VREF 调整全景:读路径(主机侧)、写路径(DRAM DQ)、命令路径(DRAM 与 RCD)

怎么做:调整的通用方法论

实际上,三条路径共享同一套方法论:没有解析解,只能现场扫描。参考电压该放哪,没有公式能根据板子、内存条与工况直接算出来——通道损耗、负载、温度耦合在一起,解析模型根本写不出来。唯一可靠的办法,是逐档扫过可调范围,每档测一次裕量或错误率,得到一条"裕量 vs VREF"曲线(图 5),参考线的落点就从这条曲线上读。

图 5 裕量 vs VREF 曲线:逐档扫描得到"裕量–VREF"曲线,失败边沿之间即存活窗口

曲线怎么用?先找边,再定心。扫描先把两个方向的失败边沿找出来:参考电压往上推到哪一档开始出错、往下推到哪一档开始出错,两条边沿之间就是存活窗口,其中点就是参考线的落点;更精细时,多组结果合并取质心,精度还能再进一步。

垂直一轴调好了还不够,水平方向还有采样时刻。VREF 与 timing 一管垂直、一管水平,必须合在一起调:两轴同时扫描,在二维平面上找中心窗口,才算完整的对中(centering)——业界通行的做法,各家实现细节不尽相同,骨架一致(图 6)。

图 6 timing × VREF 二维联合调整:双轴同时扫描,取二维中心窗口

效率上来说,全量精扫太慢,现实做法是两段式:先用大步长快速对中,把参考电压粗粗推进到眼心附近,落在存活窗口内即可;再细粒度多点精扫,把位置钉死。粗调铺框架、精调收细账,速度与精度各得其所。

落点还要留余地。训练结果不能贴着边沿落——眼下测得正好的位置,温度一变、电压一动就会压线;所以最终落点要在理想中心的基础上留出安全余量,宁可让出一点标称裕量,换运行时的安稳。与之配套的是回退保护:万一某个环节训练失败,就回退到预先准备的安全默认值,保证系统至少能起来。

这一切还要在时间轴上延续。参考线的合理位置随温度与电压漂移,训练不是一锤子买卖:开机训一遍只是起点,DDR5 把周期性重训练(periodic retraining)写进了规范,运行期间周期性地把漂移出去的裕量追回来,这一盆水才算真正放稳。

把这套方法串起来看,每一环都扣着上一环:无解可算,所以现场扫描;窗口生在两条失败边沿之间,所以从边到心;眼图是二维的,所以两轴联调;精扫太慢,所以先粗后精;环境会变,所以留余量、设回退;时间在走,所以周期重训——三条通路上的每一盆水,都是这样放正的。

总结

回到开篇那句话:DDR5 的 VREF 早已不是"一个电压",而是一个家族——数据、命令、片选,主机侧与 RCD,每一处判决都各有一条参考线。所谓调整,本质上是给每个判决器,配上一条属于它自己的线。这条线的分量要拿捏得准:它只负责把直流基线放正,通道在交流层面坏了,它救不了。调整也从来不是一锤子买卖:开机训练只是起点,运行期间还要周期性地追着温度与电压,把漂移出去的裕量一次次追回来。

编辑于 2026-08-05 · 著作权归作者所有