3. Preset 概念:它到底是什么?在链路训练里有什么用?

好,咱们进入第三章。前面聊了链路训练的大框架,这一节我们把焦点落在一个非常具体、但又极其关键的概念上——Preset。

先别被这个英文词唬住。说白了,Preset 就是一套预先定义好的发送器参数组合。你可以把它想象成你相机里的“人像模式”、“风景模式”——按下一个按钮,光圈、快门、ISO 全都给你配好了。在 PCIe 链路训练里,Preset 干的是几乎一模一样的事。

我刚开始接触 PCIe 的时候,也觉得这玩意儿有点绕。直到有一次,我调试一块板子,链路死活训练不到 Gen4,最后发现是 Preset 选错了,导致信号质量太差。嗯,从那以后,我再也不敢小看这区区几个 bit 了。

Preset 的技术本质:一组电压与预加重的快照

Preset 到底管什么?它主要定义了发送器的两个核心参数:

  • 电压摆幅(Voltage Swing):你可以理解为信号的“音量”大小。PCIe 规定了若干档位,从低到高。
  • 预加重 / 去加重(Pre-emphasis / De-emphasis):这是个高频补偿技巧。简单说,就是在跳变沿处给信号“踹一脚”,让它在传输线里衰减后,在接收端还能被清楚识别。

每一个 Preset 索引,都对应着一组具体的电压比和预加重深度。比如,Preset 0 通常代表全摆幅、无去加重,而 Preset 8 可能就是中摆幅、中预加重。你想想看,训练阶段,发送器和接收器就在那里“对暗号”,通过协商选出一个两边都能接受的 Preset。

💡 个人习惯:我习惯把 Preset 列表打印出来贴在工位上。调试时,一旦发现眼图闭合严重,第一步就是看看当前用的是哪个 Preset,换几个邻近的索引试试,往往能立竿见影。

Preset 在链路训练中的作用:一个不断试错的过程

链路训练的核心目标之一,就是找到一个最优的均衡配置。Preset 正是这个均衡配置的“起手式”。

训练流程大致如下:

  1. 发起协商:接收器告诉发送器:“给我一个 Preset 试试。”
  2. 发送调整:发送器切换到指定的 Preset,发训练序列。
  3. 接收评估:接收器判断信号质量是否达标。
  4. 重复或确认:不达标就换下一个 Preset 继续试;达标就锁定。

这个过程像不像你调收音机?拧到有杂音,再拧,直到声音清晰。PCIe 的 Preset 训练,就是把“拧旋钮”这个动作标准化、自动化了。

⚠️ 避坑指南:我曾经遇到过一个“幽灵”问题。板子跑在 Gen3 时一切正常,一到 Gen4 就频发“电气空闲退出(Electrical Idle Exit)”超时。查了很久,最后发现是接收端的 EQ 算法有问题,它固执地请求了一个高频性能很差、自身却无法补偿的 Preset。所以,别把 Preset 调整看成发送端的独角戏,接收端的接收均衡 (CTLE, DFE) 设置同样重要,它们是配套的。

Preset 与 Coefficient 的关系:套装与散件

你可能要问了:Preset 和前面提到的 Coefficient(系数)是什么关系?

我打个比方:Preset 是“套装”,Coefficient 是“散件”。

  • Preset:封装好的一组 3-tap 系数(前馈、主抽头、后馈),你只能整体选用,不能修改内部值。用于最初的大致匹配。
  • Cofficient:在 Preset 选定后,允许你对这 3 个抽头进行微调(比如±1或者±2的步进)。用于最后的精细校准。

整个训练过程,就是先靠 Preset 把“大方向”定下来,再靠 Coefficient “微调”出最优解。不能反过来。

特性 Preset Coefficient 调整
粒度 粗调 微调
可选范围 有限(通常 10 个以内) 细微步进(±1, ±2)
作用时间 训练早期 训练后期
修改方式 整体切换 逐个抽头微调

Preset 的实战价值:眼图就是照妖镜

在硬件调试中,Preset 的选择直接影响眼图的张开程度。一个不合适的 Preset,眼图可能眯成一条缝;而选对了,眼图立马“睁大双眼”,又大又圆。

来看一个我常用来辅助理解的结构:

Preset 在链路训练中的位置 发送器 (TX) Preset 选择器 P0: 全摆幅/无去加重 P4: 中摆幅/中去加重 P9: 低摆幅/强预加重 TXEQ 系数 链路训练状态机 接收器 (RX) 核心流程 RX 评估 → 反馈给状态机 状态机 → 选择 Preset

从这张图里可以看得很清楚:Preset 是链路训练状态机控制下的一个关键“旋钮”。它决定了发送器最基础的波形特性。选错了,后面的 TXEQ 微调怎么拧都救不回来。

Preset 的局限性:不是万能的

别把 Preset 神化了。它只是一个起点。如果链路损耗过大(比如超过了 36dB @ 16GHz),或者板级串扰严重,光靠换 Preset 是没用的。那时候,你得去看 TX EQ Preset 组合、接收端的 CTLE 增益 以及 DFE 抽头系数 是不是到了极限。

我记得在一次 Gen5 的早期验证中,有一块 PCB 走线过长,连 Preset 0 这种“最大功率”模式都打不开眼图。后来我们发现,即使 Preset 电压已经拉到最大,接收端 CTLE 也到了饱和,最后还是得改 PCB 设计才能从根本上解决问题。Preset 只能在合理的信道范围内发挥作用。

🎯 一句话总结:Preset 是链路训练中,用于快速初步匹配发送器电压和预加重参数的工具。它提供了一个标准化的切换接口,是后续精细均衡(Coefficient 调整)的基础。选对了 Preset,训练成功一半;选错了,后面全是无用功。