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,确保全工况覆盖。

三者关系与调试要点

这三个参数不是孤立的。我画了一张图帮自己理解它们的关系(下面就是):

Gen4 链路训练参数关系 链路训练开始 选择 Preset P0~P7 根据通道损耗选择 Equalization 调整 CTLE + DFE 自适应 Margin 评估 眼图/电压/时序余量 合格 → 锁定参数 不合格 → 重选 Preset 或重试 核心:Preset 决定 EQ 起点 → EQ 调节影响 Margin → Margin 决定训练成败

从图上可以清楚看到:训练从 Preset 开始,经过 Equalization 动态调整,最后用 Margin 做判决。不合格时既有机会调整 Equalization(红色返回箭头),也可能需要回退到 Preset 选择(橙色虚线箭头?——图上简化了,实际更复杂)。

我经常在调试时用一套固定流程:

  1. 固定一个 Preset(比如 P1),观察训练能否走到 Equalization 阶段。
  2. 如果能,记录最终 CTLE 和 DFE 值。如果 CTLE 接近上限(>12dB),换 Preset 提高去加重。
  3. 训练完成后读取 Margin 值。如果 Margin < 20%,微调 Preset 或调整发射端摆幅。
  4. 在高温和低压下复测 Margin,确保全场景余量。

这套方法帮我在好几个项目中快速定位了训练问题。说实话,Gen4 训练不像 Gen3 那么“皮实”,稍有偏差就降级。但你只要把 Preset、Equalization、Margin 这三者串起来,大部分异常都藏不住。

避坑指南:我曾经遇到一个 case,训练始终卡在 Coeff_Update 阶段。最后发现是 Preset 里的摆幅参数和接收端 CTLE 的输入范围不匹配——接收端被输入信号“压”饱和了。解决办法是降低 Preset 的摆幅,而不是盲目调 CTLE。嗯,有时问题出在前端,别老盯着后端。

这三个参数,你心里有数了吗?下一次抓训练 log 时,不妨先按这个顺序捋一遍,说不定能省掉半天抓瞎的功夫。