4、预加重(Pre-emphasis)原理:发射端均衡,如何工作

好,咱们接着聊。前面我们讲了信号为什么会劣化,那怎么解决?第一个要上场的,就是发射端的均衡技术——预加重(Pre-emphasis)。

说白了,预加重就是“在信号发射出去之前,先给它打一针强心剂”。我刚开始接触PCIe时,觉得这玩意挺玄乎。后来亲手调过几个链路,才明白它到底在干什么。

4.1 信号为什么需要Pre-emphasis?

先回忆一下传输线对信号做了什么:高频成分衰减大,低频率成分衰减小。一个0101的数字信号,在穿越长走线后,会变成什么样?

  • 从0跳到1的边沿变缓了——因为高频能量被介质吸收。
  • 一个宽脉冲(比如连续多个1)的幅度保持较好——因为这是低频。
  • 结尾处可能还有振铃和拖尾——因为阻抗不连续。

结果就是:接收端眼图闭合,误码率飙升。那发送端能不能做点什么,提前补偿一下?

预加重就是这么来的。它的核心思想是:在比特跳变时,故意增大发射幅度;比特保持不变时,维持正常或略低的幅度。 这样,高频跳变得到额外能量,经过衰减后,接收端看到的跳变幅度就跟稳态幅度差不多了。

一句话总结:Pre-emphasis = 发射端对信号做“高频增强”,补偿信道的高频损耗。

4.2 Pre-emphasis的工作原理

咱们用一张SVG图来理解它怎么工作。

发射端预加重(Pre-emphasis)工作原理 ① 原始数据 (NRZ) ...0101... Pre-emphasis 逻辑 增益级 前游标 后游标 斩波比例 ② 预加重后波形 跳变幅度↑ 稳态↓ ③ 接收端眼图效果 眼图张开度↑ 抖动↓ 误码率↓ 关键要点: • 预加重只在信号边沿(跳变)时增加幅度。 • 稳态幅度基本不变或略微降低,称为“斩波”。 • 前游标(Pre-cursor)补偿前向ISI;后游标(Post-cursor)补偿后向ISI。 • 预加重不是“加大电压”,而是调整电流源分配。

图上这个流程,其实就对应了PCIe实物里发射端的TX FIR(有限冲激响应)滤波器。它不是用模拟电路硬调,而是用数字逻辑来控制电流源的权重。

个人经验:我最早以为预加重就是简单把跳变脉冲“拉高”。实际上它是通过多个抽头(taps)来精确控制前后比特的干扰。PCIe Gen3以后,甚至允许前后各3个游标来精细调整。

4.3 关键参数:P值、前游标、后游标

预加重的效果取决于几个核心参数。这些参数你会在PCIe链路训练阶段,通过寄存器读取或写入。

参数名称 表示符号 作用 典型值范围 注意点
预设P值 P0 ~ P10 PCIe规范定义的预加重强度等级 0 ~ 10 Gen3常用P7,Gen4常用P3~P5
前游标系数 C-1, C-2 控制当前比特的前一个/前两个比特对当前的影响 0 ~ 0.2 (归一化) 补偿信号的前振铃(pre-cursor ISI)
后游标系数 C+1, C+2 控制当前比特的后一个/后两个比特对当前的影响 0 ~ 0.3 (归一化) 补偿信号的后振铃(post-cursor ISI)
斩波比例 De-emphasis (dB) 稳态幅度相对跳变幅度的衰减量 -3 dB ~ -6 dB Gen1/Gen2只用这一个参数

我列这个表,是想让你一眼看清各参数的关联。注意:P值是一个组合预设,它隐含了前游标和后游标的具体系数。而实际调试时,你往往需要绕过预设,直接设置每个游标的权重。

我曾经踩过的坑:在某个项目中,默认P值下的前游标系数太大,导致信号在发送端就产生了过冲。接收端虽然幅度够,但时序裕量反而下降了。后来我把C-1从0.15调到0.08,眼图立刻打开很多。

4.4 预加重的实际调试步骤

如果你要亲自动手调Pre-emphasis,建议按这个顺序来:

  1. 先确认链路是否进入均衡状态。 不看眼图就调,那是瞎忙。
  2. 用PCIe分析仪读出发射端的当前TX EQ寄存器。 记录当前使用的P值及各个游标系数。
  3. 扫一遍P值的调整范围。 从最低到最高,每个值测一次眼图和BER。我习惯用二分法快速收缩范围。
  4. 锁定最优P值后,微调前游标和后游标。 大多数情况下,C+1的影响比C-1大,优先调它。
  5. 交叉验证温度与电压变化。 预加重在常温下OK,但高温下可能失效。我吃过这个亏。

经验值参考(Gen3 @ 8GT/s):

短通道(< 5英寸): P值选 P2 ~ P4,前游标 C-1 ≈ 0.05,后游标 C+1 ≈ 0.10。

中长通道(5~15英寸): P值选 P6 ~ P8,前游标 C-1 ≈ 0.08,后游标 C+1 ≈ 0.18。

长通道(>15英寸): P值选 P9 ~ P10,可能还需要启用C-2或C+2。

4.5 一个真实的调试案例

我记得有一次调试一个PCIe Gen4链路,板卡走线12英寸,介质损耗比较大。默认用P4,眼图只有55%张开。我试着把P值往上调,到P8时,眼图张开到了72%。但问题是,功耗上来了,管芯温度飙到95℃。

后来我换了个思路:不单纯加P值,而是保持P6不变,单独把后游标C+1从0.12增加到0.20。结果呢?眼图张开到了78%,而且功耗只增加了不到5%。

这个例子说明了什么?预加重的核心是“匹配信道特性”,而不是一味加码。 你想想看,用最小的代价打开眼图,才是真本事。

4.6 避坑指南

最后列几个常见的误区,你调试时多留个心眼:

  • 误区一:预加重越大越好。 过大的预加重会产生严重的过冲,反而增加接收端的抖动。
  • 误区二:只看单端波形。 PCIe是差分信号,一定要看差分眼图。单端波形好,差分不一定好。
  • 误区三:忽略P值对应的功耗。 芯片的功耗预算有限,特别是移动设备里,别为了调眼图把热设计搞崩了。
  • 误区四:只调发射端不调接收端。 预加重只是均衡的一半,后面CTLE和DFE才是决定成败的关键。

我曾经见过一个团队:花了两周调TX EQ,眼图始终差一点。最后发现是接收端的CTLE增益设得太高了,导致噪声放大。把CTLE降了3dB,问题立刻解决。嗯,均衡是一个系统问题。

好,预加重的原理大概就这些。它作为发射端的第一道防线,核心就是“增强高频,抑制低频”,让信号在信道里走得匀称一点。但要注意,它并不是万能的——信道太长,或者PCB设计有硬伤,预加重也只能帮你开到眼图的极限。下一层防线,我们交给接收端的CTLE。