· cpu / memory
从一次反射到振铃和眼图闭合
从电路节点到 DDR5:一步步理解高速信号反射(7)
一次反射通常不会单独出现。反射波返回源端后,如果源端也不匹配,就会再次反射;新的波又回到负载端。示波器上看到的振铃、过冲和下冲,就是这条往返链路在时间轴上的结果。
1. 反射的时间顺序
设传输线单程延迟为 $t_d$:
t0:源端发出入射波
t1=t0+td:入射波到达负载端
t2=t0+2td:负载反射波返回源端
t3=t0+3td:源端再次反射的波到达负载端
t4=t0+4td:下一次往返继续发生
每一条波都可能叠加在原有电压上。因此示波器上的电压不是一个单调的理想阶跃,而可能出现:
初始阶跃 -> 过冲 -> 下冲 -> 振铃 -> 最终稳定
2. 两端反射系数决定往返强弱
源端反射系数:
\[\Gamma_S=\frac{Z_S-Z_0}{Z_S+Z_0}\]负载端反射系数:
\[\Gamma_L=\frac{Z_L-Z_0}{Z_L+Z_0}\]理想无损线中,一次完整往返后的幅度因子大致包含:
\[\Gamma_S\Gamma_L\]真实通道还要乘上传输损耗和连接器、过孔等不连续结构的影响。
如果只看同一对端点的往返,后续反射项可以写成类似几何级数的形式:
\[1+\Gamma_L\Gamma_S+(\Gamma_L\Gamma_S)^2+\cdots\]这不是说所有实际通道都能用一个常数精确描述。封装、过孔、分支和频率相关损耗会增加更多反射点;但它清楚表达了为什么源端和负载端都匹配时,反射链条会迅速停止。
如果某一端匹配,相关反射系数接近零,反射链条会明显缩短。如果两端都严重不匹配,波形会在多个 $2t_d$ 时间点发生变化。
3. 为什么反射会关闭眼图
对连续数据,当前 bit 的反射可能落到下一个 bit 的采样窗口里。这就是码间串扰的一种来源。
理想情况:每个 bit 在采样点附近都有稳定电压
实际情况:前一个 bit 的反射叠加到当前 bit
判断反射会不会落进下一个采样窗口,要比较往返时间和一个 UI。数据速率为 $R$ 时:
\[UI=\frac{1}{R}\]一次反射往返需要 $2t_d$。于是:
2td << UI -> 反射在本 bit 内基本衰减完,主要表现为边沿畸变
2td ≈ UI -> 反射正好落在下一个 bit 的采样区域,ISI 最明显
2td >> UI -> 反射跨越多个 bit,表现为与码型相关的长尾
这解释了为什么同一块板子在低速率下可用,提速后却出错:走线没变,$t_d$ 没变,但 UI 变短了,原来被“藏”在一个 bit 内的反射现在跨进了采样窗口。DDR5 的 UI 只有几十皮秒量级,而封装加 PCB 的往返延迟很容易达到同一量级,因此对反射特别敏感。
眼图把很多个 UI 周期叠加到同一个坐标系。反射造成的幅度和时间变化会表现为:
- 眼高减小:高低电平之间的电压裕量变小;
- 眼宽减小:允许采样的时间窗口变窄;
- 交叉点变厚:不同码型的过渡时间分散;
- 基线漂移或尾巴变长:通道记忆效应变强。
因此“反射减小”和“眼图张开”不是两种并列卖点,而是物理原因和波形结果的关系。
4. ODT 和驱动器参数为什么影响眼图
终端和驱动器并不直接“制造眼图”。它们改变的是边界阻抗:
调整源端驱动阻抗或负载端终端
-> 改变 ΓS / ΓL
-> 改变反射波幅度和返回时间
-> 改变过冲、振铃和 ISI
-> 改变采样窗口和眼图
另一方面,阻抗过低可能让边沿过快、噪声和电流增大;阻抗过高又可能让边沿太慢。工程上寻找的是整个 PVT 和拓扑范围内的可用窗口。
5. 眼图不是唯一验证手段
眼图适合观察统计意义上的电压和时间裕量,但定位根因还需要结合:
- 单次阶跃或脉冲响应;
- TDR 观察阻抗不连续位置;
- 示波器探头和夹具模型;
- IBIS/AMI 或 SPICE 仿真;
- 不同温度、电压、频率和负载状态。
眼图变差只能说明采样裕量受损,不能仅凭一张眼图判断问题一定来自 ODT。
本篇结论
阻抗不连续
-> 一次反射
-> 多次往返
-> 过冲、下冲、振铃和 ISI
-> 眼高/眼宽变小
下一篇进入 DDR5:ODT、RON 和 RCOMP 分别在这个链路中控制什么。
References
- Transmission line:反射波往返、输入阻抗和损耗模型。
- Characteristic impedance:反射系数和匹配条件。
- Micron DDR5 SDRAM:DDR5 的 DQ 接收均衡、ODT 和训练相关特性概览。