4. Preset 系数详解:C0(Pre-cursor)、C1(Main-cursor)、C2(Post-cursor)的定义与物理意义

在 PCIe 链路调试中,Preset 系数是决定发送端(Tx)信号质量的核心参数。Preset 本质上是一组预定义的 3-tap 去加重(De-emphasis)滤波器系数,用于补偿高频通道损耗、反射和串扰。理解 C0、C1、C2 三个系数的定义与物理意义,是进行链路均衡调试的基础。

4.1 3-tap FIR 滤波器结构

PCIe 发送端采用一个 3 阶有限冲激响应(FIR)滤波器来对输出信号进行预加重或去加重处理。该滤波器的输出是当前比特(Main-cursor)与前后比特(Pre-cursor、Post-cursor)的加权和。

核心公式:
Tx_Output(t) = C1 × Data(t) + C0 × Data(t + UI) + C2 × Data(t - UI)

其中:
- Data(t):当前发送的比特(Main-cursor 的输入)
- Data(t + UI):下一个将要发送的比特(Pre-cursor 的输入)
- Data(t - UI):上一个已经发送的比特(Post-cursor 的输入)
- UI:单位间隔(Unit Interval),即一个比特的时长

三个系数必须满足归一化约束:C0 + C1 + C2 = 1.0(通常 C1 为正,C0 和 C2 为负或零)。

PCIe 3-tap FIR 滤波器结构 PCIe 发送端 3-tap FIR 滤波器结构 Data(t+UI) Data(t) Data(t-UI) D D × C0 × C1 × C2 ∑ Tx 输出 说明: C0 作用于下一个比特(Pre-cursor),C1 作用于当前比特(Main-cursor),C2 作用于上一个比特(Post-cursor)。 归一化约束:C0 + C1 + C2 = 1.0。典型 Preset 中 C1 为正,C0 和 C2 为负或零。

4.2 三个系数的定义与物理意义

系数 名称 作用比特 典型符号 物理意义
C0 Pre-cursor 系数 下一个比特(未来) 负值(-) 抑制当前比特对下一个比特的码间干扰(ISI);补偿通道的高频预冲效应
C1 Main-cursor 系数 当前比特 正值(+) 决定信号的主幅度;是输出信号的主要贡献者,通常接近 1.0
C2 Post-cursor 系数 上一个比特(过去) 负值(-) 抑制上一个比特对当前比特的拖尾干扰;补偿通道的慢衰减特性

4.3 各系数的详细物理意义

4.3.1 C0(Pre-cursor)—— 预冲补偿

  • 定义:C0 是施加在 下一个比特(Data(t+UI))上的权重系数。
  • 物理意义:当通道存在高频损耗时,信号跳变沿会变缓,导致当前比特的能量“泄漏”到下一个比特的时间窗口内。C0 通过在当前比特发送时,对下一个比特施加一个反向的预冲(Pre-shoot),来抵消这种前向 ISI。
  • 调试观察:增大 |C0|(值)会增强预冲幅度,有助于打开接收端的眼图水平方向,但过大会导致信号过冲。

4.3.2 C1(Main-cursor)—— 主幅度

  • 定义:C1 是施加在 当前比特(Data(t))上的权重系数。
  • 物理意义:C1 决定了发送信号的主电平幅度。在归一化约束下,C1 通常接近 1.0(例如 0.8~0.95),因为它是信号的主要成分。C1 的值直接决定了接收端能够获得的信号摆幅。
  • 调试观察:C1 越小,去加重程度越深(高频分量被提升更多),但信号总幅度会降低。C1 与 C0、C2 的比值决定了去加重的 dB 数。

4.3.3 C2(Post-cursor)—— 拖尾补偿

  • 定义:C2 是施加在 上一个比特(Data(t-UI))上的权重系数。
  • 物理意义:由于通道的群延迟和低频衰减,上一个比特的残余能量会拖尾到当前比特的时间窗口内。C2 通过在当前比特发送时,对上一个比特的贡献进行反向抵消,来抑制这种后向 ISI。
  • 调试观察:增大 |C2| 可以更有效地抑制拖尾,改善眼图垂直方向的开度,但过大会导致信号下冲(Undershoot)过大。
Preset 系数对眼图的影响 Preset 系数对信号波形的影响 理想波形 有 ISI 的波形(未均衡) 系数对波形的影响: • C0(Pre-cursor):控制信号上升沿之前的预冲幅度。增大 |C0| 可补偿高频预冲,改善眼图水平开度。 • C1(Main-cursor):决定信号的主电平幅度。C1 越大,信号摆幅越大,但去加重效果减弱。 • C2(Post-cursor):控制信号下降沿之后的下冲幅度。增大 |C2| 可抑制拖尾,改善眼图垂直开度。 • 三者必须满足归一化约束:C0 + C1 + C2 = 1.0,且 C1 通常为正,C0 和 C2 为负。

4.4 Preset 系数与去加重(De-emphasis)的关系

PCIe 中常说的“去加重”本质上是 降低低频分量(连续相同比特)的幅度,同时保持高频分量(跳变比特)的幅度。Preset 系数通过调整 C0、C1、C2 来实现这一目标。

场景 比特模式 输出幅度 系数作用
跳变(高频) 0→1 或 1→0 高(≈ C1) Pre-cursor 和 Post-cursor 的贡献较小,主 cursor 占主导
连续相同(低频) 0→0 或 1→1 低(≈ C1 + C0 + C2 = 1.0) 三个 cursor 同向叠加,幅度被归一化约束压低
调试技巧:在链路调试时,如果发现接收端眼图水平方向闭合严重(ISI 前向干扰大),应优先尝试增大 |C0|;如果眼图垂直方向闭合严重(拖尾干扰大),应优先尝试增大 |C2|。但需注意,增大 |C0| 或 |C2| 会相应减小 C1,导致信号总幅度下降。

4.5 常见 Preset 系数示例

PCIe 规范定义了多个 Preset 编号(P0~P10),每个 Preset 对应一组固定的 C0、C1、C2 系数。以下是几个典型 Preset 的系数示例:

Preset 编号 C0(Pre-cursor) C1(Main-cursor) C2(Post-cursor) 去加重量(dB) 典型应用场景
P0 0.000 1.000 0.000 0.0 无去加重,短距离或低损耗通道
P1 -0.050 0.900 -0.050 -0.9 轻度去加重,中等损耗通道
P4 -0.100 0.800 -0.100 -1.9 中度去加重,较长通道
P7 -0.150 0.700 -0.150 -3.1 重度去加重,高损耗通道
P10 -0.200 0.600 -0.200 -4.4 极重度去加重,极高损耗或长线缆
注意:以上系数仅为示例,实际 Preset 系数可能因 PCIe 代际(Gen3/Gen4/Gen5)和具体实现而略有差异。在调试时,应参考对应 PCIe 规范中的 Preset 表格。此外,C0 和 C2 的值通常相等(对称 Preset),但非对称 Preset 也存在于某些特殊场景中。

4.6 系数调试的物理约束

  • 归一化约束:C0 + C1 + C2 = 1.0。这是硬件实现的基本限制,确保输出信号的平均功率恒定。
  • 符号约束:C1 必须为正;C0 和 C2 通常为负或零。正值的 C0 或 C2 会导致预冲/下冲方向反转,通常不用于标准 Preset。
  • 幅度约束:每个系数的值通常不超过 0.25~0.30,过大的 |C0| 或 |C2| 会导致信号严重失真。
  • 硬件精度:实际硬件中,系数通常以 6~8 bit 的精度实现,因此存在量化误差。调试时需注意 Preset 切换时的瞬态行为。
Preset 系数与去加重关系 Preset 系数与去加重量的关系 Preset 编号(P0 → P10) 系数值 / 去加重量 C1 |C0| / |C2| 去加重量 C1 随 Preset 编号增大而减小 |C0|/|C2| 随 Preset 编号增大而增大 C1 |C0|/|C2| 去加重量

4.7 调试中的常见问题与排查思路

现象 可能原因 排查方向
眼图水平方向闭合 C0 值过小,前向 ISI 补偿不足 尝试增大 |C0|(选择更高编号的 Preset)
眼图垂直方向闭合 C2 值过小,拖尾 ISI 补偿不足 尝试增大 |C2|(选择更高编号的 Preset)
信号过冲/下冲过大 C0 或 C2 值过大 尝试减小 |C0| 或 |C2|(选择更低编号的 Preset)
信号幅度整体偏低 C1 过小,去加重过度 尝试增大 C1(选择更低编号的 Preset)
链路训练失败(LTSSM 卡在 Polling/Config) Preset 选择不当,接收端无法锁定时钟或数据 检查接收端 Preset 协商结果,尝试手动切换 Preset 进行排查
关键总结:Preset 系数 C0、C1、C2 是 PCIe 链路均衡的“三驾马车”。C0 负责前向 ISI 补偿,C1 决定主信号幅度,C2 负责后向 ISI 补偿。调试时需根据眼图测试结果和链路损耗特性,在 Preset 表格中选择合适的系数组合,以达到最优的信号完整性。