Gen4链路训练的关键时序参数:Preset、Equalization、Margin
谈到 Gen4 链路训练,有三个参数我几乎每次调试都会反复核对——Preset、Equalization 和 Margin。说白了,它们就是链路能否跑稳的三个支点。缺一个,训练就可能在某个环节卡死。
我在项目里遇到过一种典型场景:板卡在实验室能跑 Gen4,一到整机联调就降级到 Gen3。抓 log 一看,Preset 没配对,Equalization 跟着乱跳,Margin 直接为负。嗯,从那以后我养成了一个习惯——调链路之前,先把这三个参数的关系想清楚。
一句话总结:Preset 是起点,Equalization 是动态调整,Margin 是最终判据。训练能否通过,最终看的其实是 Margin 够不够。
1. Preset——发射端的“初始档位”
Preset 的全称是 Preset Hint,其实就是告诉发射端:你该用哪一套 EQ 预设值。Gen4 规范定义了 7 组 Preset(P0~P6/P7,不同实现略有差异),每组 Preset 对应一组发射端均衡参数组合,包括去加重(De-emphasis)、摆幅(Swing)和预强调(Pre-shoot)。
我个人习惯在训练开始前先确认 Preset 号。如果选错,Equalization 阶段再怎么调也很难弥补。举个例子,假如通道损耗很大,你选了 P0(去加重最小),接收端看到的信号眼图可能根本没睁开,CTLE 哪怕开到最大也救不回来。
我曾经踩过的坑:某次高速背板项目,Preset 寄存器默认值写错了(实际写成了 P4 而需求是 P1),导致训练总是在 Equalization 阶段反复 timeout。后来用示波器看发射端波形,发现预强调完全相反,等于在给信号“减补偿”……调回正确 Preset 后,一次训练就通过了。
Preset 的选择通常根据 通道插入损耗 来定。下表给出了常用参考:
| Preset 编号 | 去加重 (dB) | 适用场景 |
|---|---|---|
| P0 | 0 ~ 0.5 | 超短通道(< 5cm 板内走线) |
| P1 | 1.0 ~ 2.0 | 中等损耗(10~20cm) |
| P2 | 2.5 ~ 3.5 | 较高损耗(20~30cm) |
| P3 | 4.0 ~ 5.0 | 高损耗背板或长线缆 |
| P4 | 5.5 ~ 6.5 | 极端损耗(>40cm 或连接器较多) |
| P5 | 7.0 ~ 8.0 | 特殊板对板,极少使用 |
| P6/P7 | 厂家自定义 | 保留或厂家优化模式 |
小技巧:如果无法提前知道通道损耗,可以先用 P1 或 P2 尝试。训练成功后通过读取 Equalization 阶段的 TX EQ 最终设置 反推最佳 Preset,下次直接固定。
2. Equalization——链路的“均衡器”
Equalization 是训练中最动态的部分。发射端已经把 Preset 打出去了,接收端需要根据实际收到的信号自适应调整均衡参数。主要分两段:
- CTLE(连续时间线性均衡器):补偿高频损耗,增益可调(典型范围 0~15dB)。
- DFE(判决反馈均衡器):消除码间干扰(ISI),通常有 1~5 个抽头。
训练过程中,接收端会依次尝试不同的 CTLE 增益和 DFE 抽头值,然后测量眼图的各项指标。如果眼图满足规范(比如眼宽、眼高、抖动),就锁定该组参数;否则继续“扫”下一档。
我建议重点关注 CTLE 的增益边界。有一次项目里,接收端把 CTLE 增益调到了极限(15dB),眼图勉强睁开,但信号过冲严重——DFE 的 tap 系数也偏大。后来降了一档 Preset,CTLE 只用 10dB 就稳定了。所以 Equalization 并不是增益越高越好,要学会“放过”发射端。
Equalization 调试口诀:Preset 先给够,CTLE 不过激,DFE 补剩下。如果 CTLE 需要 >12dB 才能通过,大概率 Preset 选低了。
3. Margin——链路的“安全余量”
Margin 是训练完成后才最终确认的指标。它衡量的是在当前参数下,链路是否还有足够的抗干扰余量。主要看三个维度:
- 电压余量(Voltage Margin):眼图垂直张开的高度,通常要求 ≥ 100mV。
- 时序余量(Timing Margin):眼图水平张开宽度,通常要求 ≥ 0.5 UI。
- 抖动余量(Jitter Margin):在信号抖动累加后,眼图是否仍然闭合。
训练器内部会有一个统一的“Margin 打分”机制。如果 Margin 低于阈值(不同芯片厂家略有差异,但一般要求总 Margin ≥ 15%),链路会判定训练失败,重新开始或降级到 Gen3。
我记得在某款交换芯片上遇到过怪事:log 显示训练成功,但跑吞吐测试经常丢包。抓眼图发现电压余量只有 60mV,勉强达标。后来把 Preset 从 P2 换成 P3(去加重更大),电压余量提升到了 120mV,再也没丢过包。所以 Margin 不是“通过就行”,要留足余量。
注意:Margin 受温度和电压影响很大。实验室常温下 Margin 够,高温 85°C 时可能直接变负。我一般要求训练后在高温+低电压条件下重新测量一次 Margin,确保全工况覆盖。
三者关系与调试要点
这三个参数不是孤立的。我画了一张图帮自己理解它们的关系(下面就是):
从图上可以清楚看到:训练从 Preset 开始,经过 Equalization 动态调整,最后用 Margin 做判决。不合格时既有机会调整 Equalization(红色返回箭头),也可能需要回退到 Preset 选择(橙色虚线箭头?——图上简化了,实际更复杂)。
我经常在调试时用一套固定流程:
- 固定一个 Preset(比如 P1),观察训练能否走到 Equalization 阶段。
- 如果能,记录最终 CTLE 和 DFE 值。如果 CTLE 接近上限(>12dB),换 Preset 提高去加重。
- 训练完成后读取 Margin 值。如果 Margin < 20%,微调 Preset 或调整发射端摆幅。
- 在高温和低压下复测 Margin,确保全场景余量。
这套方法帮我在好几个项目中快速定位了训练问题。说实话,Gen4 训练不像 Gen3 那么“皮实”,稍有偏差就降级。但你只要把 Preset、Equalization、Margin 这三者串起来,大部分异常都藏不住。
避坑指南:我曾经遇到一个 case,训练始终卡在 Coeff_Update 阶段。最后发现是 Preset 里的摆幅参数和接收端 CTLE 的输入范围不匹配——接收端被输入信号“压”饱和了。解决办法是降低 Preset 的摆幅,而不是盲目调 CTLE。嗯,有时问题出在前端,别老盯着后端。
这三个参数,你心里有数了吗?下一次抓训练 log 时,不妨先按这个顺序捋一遍,说不定能省掉半天抓瞎的功夫。