发送端均衡(TX Equalization)原理:去加重与预加重实现
好,咱们聊聊发送端均衡。说白了,就是在信号发出去之前先做点手脚,让它到了对端能好看点。
我在PCIe Gen4的调试中遇到过几次链路不稳的情况。最后发现,问题往往出在这里——TX端没做好均衡。你想想看,信号要从芯片一路跑到连接器,再经过PCB走线到接收端。这中间有太多损耗了。
高频信号衰减得厉害。这就是所谓的「信道效应」。我习惯把信道看作一个低通滤波器。低频分量过得好,高频分量掉得惨。结果是什么?眼图闭上了,码间干扰(ISI)出来了。
那怎么办?预加重和去加重就是答案。这两个名字听起来像两件事,其实本质是一样的——在发送端调整信号的频谱。
为什么需要TX均衡
先看一张图,把核心逻辑理清楚。
我从这张图里看到了三层逻辑。最上面是信号,中间是信道的损耗,下面是我们的应对手段。
核心观点:发送端均衡不是在修复接收端的问题,而是在源头上把信号的频谱拉平。高频多放一点,低频少放一点,让经过信道后的信号变得均衡。
预加重(Pre-Emphasis)与去加重(De-Emphasis)的区别
很多工程师容易搞混这两个概念。我刚开始做SerDes设计时也一样。后来发现,记住一句话就行:
预加重是抬高频,去加重是压低频。
但它们的目标是一致的。都是为了让信号在接收端看起来更均匀。来看看具体是怎么实现的。
预加重如何工作
预加重的思路很简单。信号跳变的时候——也就是从0变1或从1变0——这些边沿包含了高频分量。我在跳变瞬间给信号多打点能量。等信号稳定在一个电平上,那个低频分量就不需要额外增强了。
我用一个简单的例子来说明。假设原始数据流是「1011」。
- 第一个跳变:从1到0,给个高摆幅
- 第二个跳变:从0到1,再给个高摆幅
- 后续连续的1:维持正常摆幅
你看懂了没有?预加重只对跳变生效。
去加重的工作原理
去加重正好反过来。它维持跳变时的摆幅不变,但在连续电平不变时,把幅度往下拉。
我做个对比。还是「1011」这个序列。
| 对比项 | 预加重 | 去加重 |
|---|---|---|
| 跳变时 | 幅度提高 | 幅度保持不变 |
| 非跳变时 | 幅度不变 | 幅度降低 |
| 实现难度 | 需要额外电压能力 | 实现更简单 |
| PCIe标准 | 早期标准使用 | Gen4主要使用 |
小提示:去加重为什么在PCIe Gen4中更流行?不需要额外的电压摆幅,功耗控制更好。我参与的项目中,大部分Gen4设计都选择去加重。
系数选择与调整
系数是怎么回事?说白了就是确定「加重多少」或者「去重多少」。这个量用分贝(dB)表示。
举个例子。一个去加重系数为-3.5 dB,意味着非跳变位的幅度比跳变位低了3.5 dB。
计算公式很简单:
去加重量(dB)= 20 × log(非跳变幅度 / 跳变幅度)
示例:
- 跳变幅度 = 1.0 V
- 非跳变幅度 = 0.67 V
- 去加重量 = 20 × log(0.67 / 1.0)
≈ 20 × log(0.67)
≈ -3.5 dB
我建议在实际调试时对照这个公式。有一次在实验室调一个Gen4链路,眼图一直张不开。我测了实际电压,算出当前去加重是-2.8 dB。把系数调到-4.0 dB后,眼图一下就干净了。
注意:系数不是越大越好。去加重过头了,非跳变位的幅度太低,接收端反而会丢失信号。这个度需要根据实际信道长度来调。
常见误区
我讲讲自己踩过的坑。
- 误以为预加重和去加重只能选一个。其实标准里允许两种混用,只是实现复杂。我建议新手先专注一种。
- 忽略链路协商。发送端均衡系数不是死值。PCIe在链路训练时会交换系数。我见过有人静态设一个值就完事了,结果换块板子就挂了。
- 轻视PCB差异。同样的系数,在这块板子上跑得好,换一块就不行。为什么?信道长度和阻抗有差异。我建议在产品开发阶段多测几块板子,找公共稳定区间。
避坑指南
我曾经犯过一个低级错误。在调试时只看发射端的波形,觉得加速了就行。结果到接收端看眼图,还是闭的。经过一番排查才发现——信道太长,我加的预加重根本不够。从那以后,我养成了习惯:
- 先测信道S参数,估算损耗
- 根据损耗初选系数
- 在接收端看眼图验证
- 反复迭代两到三轮
现在你知道了,发送端均衡不是玄学。它就是给信号做个「预补偿」。信道的坑在那里,我们提前给它填平。
总结一句话:预加重和去加重,本质都是频谱整形。一个拉高频,一个压低频。目标一致——让接收端看到最干净的眼图。