发送端PMA详解:Serializer、差分驱动与预加重/去加重

咱们开始聊GTY发送端的核心部分——PMA。很多人一看到PMA就觉得是纯模拟电路,敬而远之。其实你把它拆开看,主要就三块:并串转换(Serializer)、差分输出驱动、以及信号调理(预加重/去加重)。我当年刚接触高速串行设计时,就是卡在这三者的配合上,吃了不少苦头。

Serializer结构:并到串的硬功夫

Serializer,说白了就是把PCS送过来的并行数据,变成一对高速差分信号。GTY的Serializer速率能跑到32.75Gbps,这个速度下,时序窗口小得可怜。

咱们先看看它的基本架构:

  • 输入:来自PCS的并行数据,通常是8B/10B或64B/66B编码后的数据宽度(常见40位、80位或160位)
  • 核心:多级级联的并串转换树(PISO结构)
  • 输出:一对差分信号,速率等于并行时钟频率 × 并行数据宽度

我记得有一块板子,Layout没控制好Serializer的时钟域,结果在10Gbps速率下误码率高得离谱。后来发现是并行时钟和串行时钟的相位关系没处理好,Serializer在边界采样时送出了毛刺。

核心结构是这样一个多级树:

级数 输入宽度 输出宽度 时钟频率(GHz)
第1级 40b 20b 时钟/2
第2级 20b 10b 时钟/4
第3级 10b 5b 时钟/8
第4级 5b 1b 时钟/40
我个人的习惯:初始化Serializer时,一定要确认锁定状态。GTY的Serializer锁定需要一段时间,没锁定时输出全是0或1,会搞崩整个链路。我调试时先看TXPRBSERR,确认无误后再切回正常数据。

差分输出驱动:把电信号送上通道

Serializer输出的是单端小信号,这玩意儿在板上跑不了几厘米。差分输出驱动的作用就是把这小信号变成大摆幅的差分电流,驱动PCB走线。

GTY采用CML(Current Mode Logic)架构驱动。特点就是:

  • 输出共模电压固定(通常是GND + 一个电平)
  • 输出阻抗匹配50Ω(单端到地)
  • 摆幅可通过寄存器调节(400mV~1000mV峰峰值,差分)

你可能会问,为什么不直接用LVDS?嗯,LVDS摆幅太小了,在长距离背板上不够用。CML能提供更大的驱动电流,适合更长的通道。

我曾经遇到过一个坑:输出摆幅设太大,导致近端串扰严重。当时调试一块16口的PCIe Gen4交换机,信号质量死活过不去。后来发现是TX摆幅设到了最大值,串扰把相邻通道全覆盖了。降到800mV之后,一切都好了。

这里有组经验数据:

通道长度(英寸) 建议摆幅(mV,差分) 预加重设置
<5 500~600 关闭或低档
5~15 600~800 轻档
15~30 800~1000 中档
>30 900~1000 高档
注意:驱动不是越大越好。摆幅大,功耗就大,干扰也大。我见过有人把摆幅开满,结果板子发烫,信号反而变差。关键是找到平衡点。

预加重与去加重:给信号打上补丁

高速信号在PCB走线上跑,会有个叫“趋肤效应”的东西——高频损耗严重。同样跳变的信号,从0到1比从0到0损耗大得多。这就导致你这个“1”到了接收端,可能已经瘪成了“0”。

预加重和去加重,就是专门对付这个问题的。嗯,我先说白了一句话:

  • 预加重:在信号的跳变沿,额外多给一点能量
  • 去加重:在信号的平稳段,稍微压低一点

这两个技术听起来名字相反,但目的一样——让接收端看到的眼图“睁”得更大。

预加重的原理:

假设我要发送一个“00111100”的序列。第一个“1”从“0”跳变过来,通道损耗最大。预加重会在这一拍多输出一个大的摆幅,后续连续的“1”则恢复正常摆幅。这样接收端看到的“1”幅度均匀了。

去加重的原理:

去加重正好相反。我不主动加强跳变,而是压低连续的“1”或“0”。这样,在接收端看来,跳变沿的幅度没变,但平稳段的幅度低了,相对而言跳变就更突出了。

GTY系列推荐使用去加重——因为它在低功耗下获得更好的信号质量。我个人也用它多一些。

举个例子:

假设基本摆幅是800mV。去加重设为-3dB:

  • 跳变沿:输出800mV(全摆幅)
  • 后续连续位:输出800mV × 10^(-3/20) ≈ 566mV

这样在接收端,跳变沿和连续位之间的幅度差更大,眼图更清晰。

我曾经调试过一块背板,走线长36英寸,怎么调都过不了误码率。后来试着把去加重从-3dB调到-6dB,眼高瞬间从5%提升到15%。嗯,这个世界就是那么魔幻。

预加重 vs 去加重

对比项 预加重 去加重
实现方式 增加跳变沿幅度 降低平稳段幅度
功耗 略高(增加输出摆幅) 较低(压低输出幅度)
适用场景 通道损耗极严重 一般高速链路
GTY支持 部分优化 主要模式
关键一句话:去加重更常用,因为它能用更低的功耗换来更好的结果。我建议新手从去加重开始调试。

GTY发送端PMA核心结构流程 PCS并行数据 Serializer PISO多级树 预加重/去加重 FI滤波 CML驱动 TXp/TXn 无预加重眼图 眼高小,眼宽窄 信号质量差 有去加重眼图 眼高提升,眼宽增大 抖动减小 去加重通过压低连续位幅度,相对突出边沿,改善接收端眼图

这图展示了PMA发送端的完整数据流。从PCS的并行数据进来,经过Serializer变成串行,再经过预加重/去加重调理,最后由CML驱动送出去。下方的眼图对比说明:去加重后,眼图质量明显提升。

调试小技巧:我习惯先看TX端输出眼图,不接接收端。直接用示波器测TX差分对上的眼图。眼图不好看,后面的接收端再厉害也救不了。眼高低于10%的建议先调去加重,不要急着调摆幅。

总结下来,发送端PMA就这么三块东西。理解它们,你就能搞定GTY的发送链路了。嗯,千万别小看这些细节,我当年花了整整两周才把一条链路的信号质量调到能过一致性测试。