3、均衡参数详解:TxEQ(去加重/预加重)、RxEQ(CTLE/DFE)、Coefficient C-1, C0, C+1
好,咱们直接切入正题。上一节我们聊了为什么需要均衡,这一节我们来看看具体的“武器”是什么。说白了,PCIe链路均衡就是一套“发端整形、收端补偿”的组合拳。
我个人习惯把均衡分成两大部分来看:发送端(Tx)和接收端(Rx)。发送端负责“预失真”,接收端负责“再修复”。你想想看,信号在传输过程中高频分量衰减得厉害,那我在发的时候就把高频分量多给一点,低频分量压一压,这不就扯平了吗?
3.1 发送端均衡:TxEQ(去加重 / 预加重)
TxEQ,全称是Transmitter Equalization。很多刚入行的同学容易把“去加重”和“预加重”搞混。我简单解释一下:
- 预加重(Pre-emphasis):提升高频分量的幅度。说白了,就是让信号的跳变沿更“陡”。
- 去加重(De-emphasis):降低低频分量的幅度。这是PCIe里更常用的说法。实际上,我们通常保持高频分量不变,把低频分量压下去。
嗯,这里要注意:在PCIe规范里,我们通常说“去加重”而不是“预加重”。因为实现上,我们是在降低非跳变位的幅度,而不是提升跳变位的幅度。这样做的好处是——不增加总功耗。
核心概念:TxEQ的本质就是通过调整连续相同bit(非跳变位)与跳变位之间的幅度差,来补偿信道的高频损耗。
3.2 三个关键系数:C-1, C0, C+1
说到TxEQ,就绕不开这三个系数。我在项目中遇到过不少工程师,对着这三个系数一脸懵。其实没那么复杂,我换个角度给你讲。
PCIe Gen3及以后的规范,把发送端的抽头(Tap)模型抽象成了三个系数:
| 系数 | 名称 | 作用 | 典型值范围 |
|---|---|---|---|
| C-1 | 前光标(Pre-cursor) | 影响下一个bit(未来bit)的幅度 | 0 ~ 0.2(通常较小) |
| C0 | 主光标(Main-cursor) | 影响当前bit的幅度 | 0.5 ~ 0.9(最大) |
| C+1 | 后光标(Post-cursor) | 影响上一个bit(过去bit)的幅度 | 0 ~ 0.4(去加重主要靠它) |
为什么会这样设计?因为信号在信道中传输时,不仅当前bit会受到前面bit的干扰(ISI),还会影响到后面的bit。这三个系数就是用来做“前后抵消”的。
约束条件:C-1 + C0 + C+1 = 1(归一化后)。这个等式必须成立,因为总能量要保持不变。
我的经验:调试时,我一般先固定C0,然后调整C+1来补偿信道的长尾效应。C-1通常用得比较少,除非你遇到的是特别严重的“前向干扰”。
3.3 接收端均衡:RxEQ(CTLE / DFE)
发送端做完“预失真”后,信号到了接收端,还得再处理一下。接收端均衡主要分两步走:
3.3.1 CTLE(连续时间线性均衡器)
CTLE本质上是一个高通滤波器。它做的事情很简单:放大高频,抑制低频。
我曾经调试过一个板卡,眼图在CTLE之前完全是闭合的,CTLE一打开,眼图立马张开了一半。CTLE的优点是线性、无延时,但它有个硬伤——它会同时放大高频噪声。
- 优点:实现简单,功耗低,无时序问题
- 缺点:无法区分信号和噪声,高频噪声会被一起放大
- 典型参数:DC增益、高频增益、零点/极点频率
3.3.2 DFE(判决反馈均衡器)
CTLE搞不定的残余ISI,就交给DFE来处理。DFE是非线性的,它利用之前判决出的bit值来“预测”并抵消当前bit受到的干扰。
说白了,DFE就是“以毒攻毒”——用过去的判决结果来修正现在的信号。
避坑指南:我曾经遇到过DFE发散的情况,眼图反而变得更差。原因很简单——DFE的初始训练没做好,或者信道变化太快。记住,DFE对“错误传播”非常敏感,一个bit判错,后面可能跟着错一串。
DFE的典型参数包括:
- 抽头数(Taps):PCIe Gen3通常用1~2个抽头,Gen4/Gen5可能需要4~5个
- 系数(d1, d2, ...):每个抽头的权重,需要自适应算法来调整
- 自适应速率:太快容易振荡,太慢跟不上信道变化
3.4 知识体系结构图
下面这张图,是我自己总结的PCIe均衡参数全景图。你可以把它当作一个“地图”,调试时对照着看,思路会清晰很多。
3.5 实战中的调优顺序
好了,参数都认识了,那实际调试时怎么下手?我个人的习惯是:
- 先调TxEQ:用预设值(Preset)快速扫一遍,找到眼图相对较好的区域
- 再微调C+1:如果眼图有“拖尾”,适当增加C+1的值
- 然后调CTLE:增加高频增益,让眼图进一步张开
- 最后调DFE:处理CTLE搞不定的残余ISI
小技巧:调试时不要同时动太多参数。我见过有人一口气改了TxEQ、CTLE、DFE三个地方,结果眼图变差了,根本不知道是哪个参数导致的。一次只改一个变量,这是调试的基本原则。
嗯,这一节的内容就到这里。均衡参数看起来多,但核心逻辑其实很清晰——发端预补偿,收端再修复。下一节我们会把这些参数放到实际的眼图测试中去,看看它们到底是怎么影响眼图形状的。