Gen5均衡化:我们到底在解决什么问题?

各位工程师朋友,欢迎来到《Gen5均衡化流程与系数更新实战》的第一章。我先说说自己的感觉:做高速串行通信这些年,从Gen1做到Gen5,每次升级都像是在跟物理极限搏斗。Gen5均衡化,说白了就是一套在收端和发端配合的“信号修复”技术。

为什么需要修复?因为信号从A点跑到B点,经过PCB走线、连接器、背板,会变得歪歪扭扭。你想想看,32Gbps甚至更高的速率,一个UI只有30ps左右。这么短的脉冲,稍微遇到点阻抗不连续或介质损耗,眼图就闭上了。均衡化做的就是——把闭上的眼睛重新睁开。

1.1 高速串行通信的发展脉络

我从PCIe 1.0时代开始跟这个领域打交道。那时2.5Gbps,简单加个去加重就能搞定。到了PCIe 5.0(也就是Gen5),速率冲到32Gbps,还用了PAM4调制(虽然PCIe 5.0是NRZ,但Gen5均衡器设计理念已经为PAM4做了铺垫)。

为什么速率提升这么难?我画了个简图,你看一眼就明白了。

Gen5 均衡化系统结构(PCIe 5.0 NRZ 收端) 物理通道 (PCB+连接器)

上图是Gen5收端均衡器的典型结构(我只画了核心部分,没画时钟恢复的细节)。信号从左边的物理通道进来,先经过连续时间线性均衡器(CTLE),把低频衰减补一补,再把高频噪声压一压。然后进入5抽头的判决反馈均衡器(DFE),把码间干扰(ISI)给减掉。最后采样判决,输出数字比特。

经验之谈: 我早期做Gen4时发现,CTLE的自动增益控制(AGC)如果调不好,DFE再努力也白搭。后来学乖了——先把CTLE的增益和零点位置固定好,再让DFE自适应。

1.2 为什么Gen5均衡化比以往更难?

你可能会问:Gen4也是均衡化,Gen5差别在哪里?我列个表你就清楚了。

对比项Gen4 (16Gbps)Gen5 (32Gbps)
符号间干扰长度约4~6个UI约8~12个UI
信道损耗@Nyquist~15dB~25dB
均衡器抽头数(DFE)3~4抽头5~7抽头
系数更新速度要求宽松严格(需快速收敛)
常见调制方式NRZNRZ(PAM4预备)

看到没?Gen5的ISI长度翻倍了,信道损耗也增加了近10个dB。光靠固定系数根本不行,必须用自适应的系数更新算法。而且因为UI只有31.25ps,系数更新的计算必须在几个时钟周期内完成,否则就跟不上信道变化。

踩过的坑: 我曾经在Gen5硅前仿真时,用了理想的LMS(最小均方)算法,结果以为收敛速度还挺快。一上硬件测试,发现实际芯片的定点精度和量化噪声让收敛变得非常慢,最后眼图根本没打开。那一次让我意识到——理论算法和工程实现之间有一条巨大的鸿沟。

1.3 均衡器类型与适配场景

Gen5均衡化不是单一技术,而是多种均衡器的组合。一般来说分为三种:

  • CTLE(连续时间线性均衡器)——在模拟域做,补偿信道的中低频衰减。缺点:放大高频的同时也会放大噪声。所以它的作用范围有限。
  • FFE(前馈均衡器)——通常放在发端,对发送信号进行预失真。Gen5规范里发端设了3~5个抽头,用于预加重。
  • DFE(判决反馈均衡器)——收端主力,利用已经判决出的符号来消除后续符号上的ISI。不会放大噪声,但存在误差传播问题。

在实际的Gen5 SerDes IP中,这三者会一起上。发端FFE用来解决前导ISI,收端CTLE压制低频后,再让DFE消灭剩余的拖尾干扰。我个人习惯把DFE放在最后级,因为它的反馈路径延迟必须小于一个UI,否则时序就崩了。

1.4 系数更新的核心思想

系数更新,说白了就是让均衡器的抽头权重“自动调优”。我们通常用以下几种方法:

  1. 基于训练序列的更新——协议会在某些阶段发送固定的训练序列,收端用已知的参考信号计算误差,然后调整系数。收敛快,但不能在正常数据传输时做。
  2. 基于数据驱动的自适应更新(DDLMS)——用判决后的符号当参考,时时刻刻更新系数。适合跟踪慢变信道。
  3. 基于眼图监测的更新——通过采样眼图的垂直张开度和水平余量,指导系数微调。我常用这种方法做芯片调试。

这三种方法各有适用场景。我参与的一个Gen5项目中,训练序列阶段用了LMS快速锁定,然后切到DDLMS跟踪,最后再用眼图监测做一次精细校准。效果还行,收敛时间控制在20μs以内。

1.5 实战工程师的视角:Gen5均衡化的关键挑战

总结下来,Gen5均衡化要过三关:

  • 收敛速度关:链路建立初期需要在几微秒内完成系数初始化,否则协议层会超时。
  • 精度关:定点实现中,系数位数选少了,稳态误差大;选多了,面积功耗受不了。
  • 鲁棒性关:温度变化、电源噪声都会让信道缓慢漂移,系数必须持续自适应。

我在第一版芯片测试时就遇到过——正常温度下眼图不错,一升温眼高就塌了。原因就是DFE系数没有对温度做补偿。后来加了一个温度查表修正的模块,才解决。

记住一句话: Gen5均衡化不仅是算法问题,更是系统问题。发端FFE、收端CTLE和DFE的配合,以及系数更新算法的收敛性,缺一不可。

好了,这一章我们做了个全景扫描。后面章节我会手把手教你:怎么设计CTLE的自适应环路,怎么写DFE系数的LMS更新代码,怎么在硬件里做定点化。咱们一步一步来。