1. 为什么要死磕 SerDes 发送端 EQ:眼图闭合的真相
做高速数字设计的朋友,几乎都被同一个问题折磨过:示波器上一看,眼图糊成一团,中间的眼睑完全闭死,数据根本没法看。尤其到了 10Gbps 以上,PCB 走线的损耗、阻抗不连续、串扰,哪一个都能把信号质量拽到地平线以下。这个项目标题里的 ADS 2024,说的就是 PathWave 先进设计系统(Advanced Design System),是射频和信号完整性仿真领域用得最多的工具之一。今天这篇就专门讲怎么在 ADS 2024 里配置 SerDes 发送端 EQ(线性均衡器的核心部分),用仿真手段把眼图从“闭死”拉到“张开”。
先说清楚一个概念:SerDes 是什么感念。SerDes 是 Serializer/Deserializer 的缩写,也就是串行器/解串器。发送端把并行数据变成高速串行比特流,接收端再把串行数据恢复成并行。所谓物理层、GT 之类的高频词,本质上都离不开这条串行链路。链路一旦长了,或者速率一旦高了,信号经过 PCB 走线、过孔、连接器,高频分量被衰减得厉害,码间串扰(ISI)就开始占据主导,眼图自然就闭合了。
发送端 EQ 的核心思路很简单:既然走线会天然衰减高频,那我在发送端就提前把高频分量抬起来,让信号经过通道之后,高低频成分的相对比例恢复到一个可接受的范围。这个操作,业内一般叫预加重或去加重,学术点叫发送端 FFE(Feed Forward Equalizer,前馈均衡器)。ADS 2024 的 SerDes 仿真环境里,这个配置被集成在发射机模型里,点几个下拉菜单就能跑起来。
这篇内容适合谁看?如果你是刚接触高速信号仿真、用过但没系统调过均衡参数的硬件工程师,或者正在做 10Gbps 以上链路设计、被眼图闭合搞得焦头烂额的朋友,这篇文章能省你不少踩坑时间。我会从均衡原理、ADS 2024 界面操作、参数选择逻辑,再到实际案例和排查技巧,一条线讲透。
2. 先把原理吃透:发送端 FFE 的三种主要形态与参数含义
2.1 预加重、去加重和摆幅调整,到底在调什么
很多人刚上手时最容易绕晕的就是这几个名词。发送端 FFE 通常可以分解成三种操作:预加重(Pre-Emphasis)、去加重(De-Emphasis)和摆幅(Swing)调整。最开始我也觉得预加重和去加重是一回事,后来才琢磨明白,它们本质上都是对“电平跳变”这个事件做文章。
先说去加重。这个概念更直观:当信号从 0 跳到 1,或者从 1 跳到 0,也就是发生跳变时,发送端维持一个较高的驱动幅度;而当信号连续保持同一个电平,也就是没有跳变时,发送端把驱动幅度降低。说白了,就是降低连续比特的电平,变相拉高跳变沿的幅度。为什么这样能解决问题?因为通道在高频段的损耗远大于低频段,跳变沿代表的是高频能量,连续电平代表的是低频能量。通道会把高频打下去,如果我们反过来提前把高频相对抬高,到了接收端就能补回来。连续电平被降低的这个量,就是去加重深度,典型值是 3.5dB、6dB 这些档位。
预加重则反过来理解,它在跳变发生后的第一个比特里,会把信号额外推高,过了第一个比特再降回正常幅度。现在的 SerDes 发送端模型里,很多已经不再严格区分预加重和去加重,而是直接用多个抽头系数来描述,效果是接近的。
摆幅调整则是整体把发送端输出信号的电压范围放大或缩小。它的作用不是均衡通道的频响,而是决定进入通道的信号总能量。如果你遇到的是接收端信号幅度整体偏低、眼图上下边缘都很纤细的情况,光调去加重可能不够,还需要单独加摆幅。
2.2 FFE 抽头的数学模型:从时域视角看 tap 怎么工作
FFE 在数字域里可以被描述成一个 FIR 滤波器。它有几个抽头(tap),每个抽头对应一个时间偏移位置上的信号加权。用数学语言说,输出序列 y(n) 等于输入序列 x(n) 及其前后时刻的加权和:
y(n) = c(-1)·x(n+1) + c(0)·x(n) + c(1)·x(n-1)
这里 c(-1) 是 pre-cursor 抽头系数,管的是当前比特之前那个比特的影响;c(0) 是主抽头,决定主信号幅度;c(1) 是 post-cursor 抽头系数,处理当前比特之后那个比特的拖尾。更复杂的模型还会有 c(2)、c(3) 等多个 post-cursor 抽头,用于补偿更长尾部的 ISI。
Analog Devices 和 TI 等厂商的公开文档里,对这种 FIR 的描述方式基本一致。ADS 2024 的发送端模型里,你通常能找到一个叫“Number of Taps”或者“FFE Length”的配置项,常见值是 3 到 5。每多一个抽头,理论上补偿能力越强,但代价是功耗增加、灵活性降低,而且更容易把噪声放大,不是越多越好。
用生活化类比来理解:你在一片嘈杂的餐厅里听朋友说话,如果朋友声音小,你可能会用手拢在耳朵后面(这相当于加强接收灵敏度);如果背景噪声在特定方向,你可能会侧过身去(相当于用空间滤波滤掉方向性噪声)。FFE 做的事情类似于,让朋友在说话时主动把重点字提高音量,并把拖长的尾音收短一点。它是在源头就把信号形态“预整形”。
2.3 眼图闭合的典型成因:损耗、反射、串扰和抖动的角色分配
要治眼图闭合,得先知道它为什么闭。不同原因,用药也不同。眼图闭合通常由三个因素叠加造成。
第一是频域损耗。FR4 板材的介电损耗和导体损耗都随频率上升而增加,所以高速信号的谐波被不均匀衰减。以前以为 3GHz 以上才需要担心,现在动不动上 16Gbps、25Gbps,基频都在 8GHz 以上了,普通走线根本扛不住。这种损耗造成的闭合,靠发送端 FFE 确实有效。
第二是阻抗不连续。过孔残桩、连接器焊盘、走线宽度变化、参考平面开槽,都会造成局部反射。反射信号叠加在主信号上,会在眼图里形成拖影或者“双像”。这种问题,FFE 改善效果有限,得靠叠层设计、过孔背钻、阻抗优化去解决。
第三是串扰和电源噪声。这些会引入随机抖动和周期性抖动,表现在眼图上是水平方向的模糊。发送端 EQ 对随机抖动基本无能为力,它处理的是确定性 ISI。所以在动手配 EQ 之前,你得先判断你的眼图闭合主要是垂直方向被“压扁”,还是水平方向被“抹糊”。前者找 FFE,后者去查电源完整性和串扰。判断方法很简单:如果是长时间积累的 BER 眼图,观察它的边界;如果是单次波形,看波形过零点的散乱程度。如果过零点抖动非常剧烈但幅度轮廓还清楚,多半不是单纯损耗问题。
3. ADS 2024 环境准备:搭建 SerDes 通道仿真工程
3.1 新建工程与库选择:别在第一步就选错
打开 ADS 2024,第一步是 File > New > Workspace。建议把 workspace 直接建在项目目录下,命名规则用“项目名_速率_板卡版本”这种形式,否则到后面一堆仿真文件很容易分不清哪个是哪个。新建工程后,你会看到 Design 列表,这时候就要决定用哪种仿真框架。
ADS 里做 SerDes 通道仿真,最常碰到两条路线:一条是传统的 ChannelSim,适合比较单纯的通道模型;另一条是 SerDes 专用的仿真环境,一般在 DesignGuide 或专门的 SerDes 菜单里,比如 SerDes Simulation 或 DDR/SerDes 库。2024 版里,菜单整合得更干净了些,但底层逻辑不变:你要把发送端(TX)、通道(Channel)、接收端(RX)三个部分都放进一个原理图里,再用 Eye Diagram 或 BER 探针去测量。
如果你是第一次做,我建议直接用 SerDes Wizard 或者自带模板。ADS 2024 有专门的高速链路设计向导,能自动生成 TX + Channel + RX 的链路模板,再手动替换成你的实际通道模型就行。这种方式比从零画原理图快得多,也不容易漏掉必要的电源和时钟设置。
3.2 通道模型的获取与导入:S 参数文件是你的主轴
通道的质量直接决定均衡策略。常见的做法是把 PCB 走线、过孔、连接器模型分三段分别做 3D 电磁场仿真,再级联成一个总的 S 参数 Touchstone 文件。ADS 里面可以直接新建一个 N 端口 S 参数元件,右键导入 SNP 文件。如果你的模型是 Keysight 自家 EM 工具仿出来的,那直接拖进来看形状就行;如果是第三方工具出来的,只要格式是 Touchstone 2.0 或 1.0,一般都能认。
导入后记得做两件事。第一是确认端口顺序。S 参数文件的端口定义必须和原理图中 TX 输出、RX 输入的连接一致。第二是检查 S 参数覆盖的带宽范围。眼图仿真需要关注的频率大约是信号速率的两到三倍。比如做 25Gbps 的 NRZ,波特率是 25Gbaud,基频 12.5GHz,但你最好至少让 S 参数覆盖到 40GHz 以上,否则高频损耗信息缺失,仿真出的眼图会比实测乐观,配出来的 EQ 参数也带不出去。
说得再直白一点:S 参数里的插损曲线就相当于通道的“性格调查报告”。如果你看到 12.5GHz 处插损已经超过 15dB,那发送端 FFE 的补偿压力会很大,光靠预加重怕是挣扎不动,得考虑接收端 CTLE 和 DFE 一起上。如果插损在基频处只有 5-8dB,发送端 FFE 两三档就能收拾得服服帖帖。
3.3 发射机模型的参数面板:定位 FFE 设置入口
ADS 2024 中的发射机模型可能是纯行为级模型,也可能是包含了 IBIS AMI 模型的复杂模型。行为级模型里,FFE 相关参数一般在“Tx EQ”或“Transmitter FFE”标签页。AMI 模型则更接近芯片真实实现,参数名可能是 s_ffetable 或类似布局的表格入口。
进入模型属性后,你会看到一堆参数。最常见的几个是:
- FFE Type:可能下拉选择 None、Pre-Emphasis、De-Emphasis、Custom FIR
- Number of Taps / Taps:设置抽头个数
- Coefficients / Weights:抽头系数,比如 main=0.7、post1=-0.2、pre1=-0.1
- Swing Level / Output Swing:输出摆幅,单位 Vppd 或 Vpp
- Impedance:发送端源阻抗,一般 50Ω 或 40Ω
一定要留意自己正在调的是哪一个模型。如果是 AMI 模型,很多参数在第一次运行时会被模型内部的“init”流程覆盖,直接在原理图面板上改有时不生效,必须在 AMI 参数文件里改或者通过配置对话框设置。
4. 核心实操:发送端 EQ 配置全流程演示
4.1 第一步:设置一个四抽头发送端,扫参跑出基准眼图
为了把整个流程说清楚,我们用一个典型的 12.5Gbps NRZ 链路来演示。通道模型我用了真实的 12 英寸 FR4 走线加两对过孔加一个连接器,插损在 6.25GHz 处约 10.7dB,属于中高损耗场景,非常适合演示 EQ 的必要性。
先跑一个没有 EQ 的 baseline。在发射机模型里把 FFE Type 设成 None 或所有抽头全零,保持 Swing 为典型值 800mVppd,Termination 50Ω。运行一个常规的 Channel Sim 或瞬态仿真,然后在 Dataset 里查看接收端(RX 输入)的眼图。这个 baseline 眼图大概率是闭合状态,眼高可能只有 50mV 甚至更差,眼宽也明显窄于 1UI。
看这个眼图的时候,我建议同时打开“Eye Mask”或者自定义一个模板,用 1% UI 的边界去卡一下。如果你没有模板,可以先用统计方式看眼高、眼宽、抖动三个数值。记下这些数字,后面的优化都拿它们做对照。
4.2 第二步:理解抽头符号的约束,避免“调了个寂寞”
配置 FFE 时最容易犯的错误是系数符号搞反。在 ADS 行为级模型里,抽头系数的正负定义会影响最终效果。我拿实际例子说:如果你的 post-cursor 抽头系数是负数,代表去加重;正数反而会加重 ISI。不同的库对符号约定可能不一致,所以每次换模型库时都要先查文档,或者用一个已知的简单一阶通道去验证系数方向。
一个典型的四抽头配置可能是这样的:
| 抽头 | 符号 | 经验值范围 | 作用说明 |
|---|---|---|---|
| pre1 | 正/负 | 0 ~ 0.05 | 补偿前一个比特造成的拖尾 |
| main | 正 | 0.6 ~ 0.9 | 主抽头,眼图幅度的主贡献 |
| post1 | 负 | -0.1 ~ -0.3 | 去加重主要作用点 |
| post2 | 负 | 0 ~ -0.1 | 补偿更远一个比特的残留 |
需要注意的是,所有抽头系数归一化后绝对值之和一般等于 1。也就是说,main 抽头往往是 1 减去其他抽头绝对值之和,目的是保持输出平均功率大致不变。你在 ADS 里手动填系数时如果填成绝对值加和大于 1,模型可能会自动归一化,也可能直接报警告,看具体模型实现。
4.3 第三步:手动扫参还是用优化器,哪个更靠谱
配置 EQ 有一种思路是手动试,另一种是用 ADS 的 Optimizer 或 DOE 工具自动寻优。我个人经验是:先用扫参理解趋势,再用优化器精确收敛,两步结合最稳。
手动扫参怎么做?在你把 FFE Type 设成 Custom FIR 后,把 post1 设成变量,比如 p1,初始 -0.1,然后运行 Parameter Sweep,让它从 -0.05 扫到 -0.3,步进 0.05。每跑完一组,看看眼高和眼宽的变化趋势。通常情况下你会看到某个范围里眼高明显上升,再往深里加反而会因为过度去加重导致眼图出现“坍塌”——虽然跳变沿很猛,但连续比特时的电平太低,眼图上下边缘变得极端,反而影响接收端的定时恢复。
扫完 post1,再固定它,扫 post2。注意扫描顺序不要乱,主抽头和后级抽头的相互耦合比较强,先固定影响大的 post1,再调 post2,效率高很多。
如果你追求更自动化的方案,可以在 ADS 里用“Optimization”功能,目标函数设成最大化 Eye Height 和 Eye Width 的加权和。但优化器有时会跑出很极端的系数组合,比如 pre1 很大、main 很小,虽然眼图在仿真里很好看,实际电路里根本实现不了。所以跑完优化后,一定再把系数往实际芯片支持的档位上去归整。每个高速 SerDes 芯片的 TX EQ 档位都是离散的,不能任意设连续值,选最接近的档位再复仿一遍才是实战中的正确流程。
4.4 第四步:结合眼图和浴缸曲线的双重验证
眼图只是直观感受,经常骗人。看着挺张开,但 BER 没保证;看着边缘略微模糊,但 BER 反而是达标的。所以我通常会再做一次 BER 分析或者统计仿真,得到浴缸曲线(Bathtub Curve)。ADS 2024 的 SerDes 环境里,可以直接在接收端加一个 BER Probe,设置目标 BER 为 1e-12,跑完会得到水平方向的浴缸曲线和垂直方向的 BER 曲线。
这部分的关键指标是水平眼宽(水平张开度在目标 BER 下的宽度)和垂直眼高(对应 BER 下的高度)。真正的产品认证阶段,Jitter Tolerance 和 BER 指标是签约必备,光好看没用。
我的习惯性判断基准是:12.5Gbps 链路,目标 BER 1e-12,水平眼宽至少 0.3UI 以上,垂直眼高至少 150mV 以上,才算勉强合格。如果是 25Gbps,眼宽 0.25UI 以上、眼高 100mV 以上就已经不错了。有这些基准,配置 EQ 时心里就有底了,不会为了追求完美眼图去过度优化。
5. 实战案例:从闭合到张开的完整参数演进
这里分享一个我在实际项目中遇到的案例,为了让数据更有代表性,我做了脱敏处理,但参数层面完全真实。链路是 16Gbps NRZ,走线长度 15 英寸,过孔 4 个,连接器 2 个。原始 S 参数拟合出来的插损在 8GHz 处是 14.2dB。
第一次仿真,发送端 EQ 全关,接收端也全关,只加了一个简单 CTLE 固定增益 3dB(这是为了先把链路跑通,不然结果太惨烈)。结果眼高只有 28mV,眼宽 0.18UI,抖动峰峰值达到 0.55UI。这就是典型的“闭死”状态。
第二步,只开发送端去加重 3.5dB,post1 约 -0.12,main 约 0.88。眼高从 28mV 跳到 82mV,眼宽提升到 0.27UI。变化很明显,说明通道损耗里很大一部分是平稳损耗,去加重能把连续比特压低,从而有效抬升相对幅度。
第三步,把去加重顶到 6dB,post1 -0.21,main 约 0.79。眼高进一步到 118mV,但眼宽基本没怎么动,甚至略降到了 0.26UI。原因很直接:去加重过深降低了总平均功率,在接收端恢复数据时,判决器的裕度反而被压缩了。
第四步,加入第二后标抽头 post2,设为 -0.08,同时回调整 post1 到 -0.18,main 约 0.74。眼高 127mV,眼宽 0.29UI。这时候浴缸曲线在 1e-12 下的水平张开度从 0.21UI 增加到 0.30UI。链路终于能在量产标准下跑了。
做完这一轮,我给客户的推荐配置就是:去加重 5.1dB(对应的芯片档位),post2 按芯片能力开启。芯片不支持 post2 的话,那就要考虑在 PCB 选材上降低损耗,或者换接收端 CTLE 更强的档位。均衡不是万能的,它是一个系统级的取舍。
6. 常见问题与排查技巧实录
6.1 问题一:改了发送端 EQ 参数,眼图纹丝不动
这是我在论坛和实际项目里被问到最多的问题。90% 的情况是改的模型和跑的仿真不是同一个。有时候 TX 模型底下还有一层封装模型或 PCB 封装走线,真正输出的不是模型顶层设置的值,而是被某种配置覆盖了。处理办法:在 TX 模型输出端口加一个电流或电压探针,直接看时域波形,观察跳变沿前后的电平比例是否正确。如果波形没变化,必然是参数没传进去,去检查 AMI 参数覆盖或模型层级。
6.2 问题二:眼图是张开了,但抖动却变大了
这通常是去加重深度调得太高导致的。过度的去加重会让接收端的信号摆幅在长 0 和长 1 时变得很小,CDR 电路的鉴相器在这些时段得不到足够大的跳变沿信息,等效地引入更多抖动。解决思路是不要把宝都押在发送端,适度加一点 RX 端的 CTLE(连续时间线性均衡),让 RX 帮 TX 分担一部分均衡压力。芯片手册上的均衡档位推荐值是有参考意义的,先按推荐组合试,再围绕推荐值微调。
6.3 问题三:仿真时眼睛图标数据量很大,跑一次要几个小时
高速 SerDes 眼图仿真如果跑瞬态,数据量确实惊人。一个 100 万比特的波形文件动辄几 GB。如果你的目的是优化发送端 EQ 参数,完全没必要跑满那么多比特。用统计模式或通道仿真模式,基于脉冲响应卷积出眼图,速度快得多。ADS 2024 里在 Channel Simulation 界面选 Statistical Mode 就行。只有最后验证整条链路和实际协议测试时,才需要重新跑足够长度的瞬态仿真。
6.4 常见问题速查表
| 现象 | 可能原因 | 优先排查项 |
|---|---|---|
| 参数修改无效 | AMI 参数覆盖 / 模型层级不对 | 时域波形检查 |
| 眼高够但眼宽窄 | 去加重过深 / 定时抖动大 | 检查 Jitter 频谱 |
| 高频插损低但眼图仍闭 | 反射或串扰主导 | 看 S 参数回损与串扰分量 |
| 接收端摆幅过高饱和 | 发送端 swing 过大 | 降低 swing 或加衰减 |
| 优化器给出发散系数 | 目标函数设置不合理 | 加系数范围约束 |
这个表格是我长期做链路仿真后积累的一个快速定位工具。遇到新问题时,我不会第一时间陷进参数细节里,而是先看眼图闭合的“形状”,判断是幅度问题、定时问题还是反射问题,再有针对性地去翻对应参数。
7. 我在实践中踩过的坑与最后的建议
每次做 SerDes 发送端 EQ 配置,我都会提醒自己一句:EQ 不是万能的,它是系统链路预算里的一颗棋子。它和接收端 CTLE、DFE、CDR 带宽、PCB 板材选择、连接器质量是一套组合拳。单独把发送端 EQ 调到理论最优,不代表整条链路量产无忧。反过来,发送端 EQ 完全不加,靠接收端大力出奇迹,也往往撑不到高标准测试要求。
具体到工具使用上,ADS 2024 的 SerDes 仿真流程已经非常成熟,初学者不要被庞大的参数面板吓到。我见过不少同事一上来就扎进高级 BER 仿真和统计模式里,结果连 baseline 都没跑清楚,改了一个参数也不知道是不是真的起了作用。正确顺序永远是:先跑一个“素颜”基线 → 手动扫两三个关键抽头 → 看眼图和浴缸曲线 → 再决定要不要上优化器。
如果你刚上手,我建议先用一个中等损耗通道(插损 8-10dB)练手,把“去加重 3.5dB 眼图变化”“6dB 眼图变化”“加 post2 的变化”这三个现象亲手复现一遍。这个过程会让你对 FFE 如何影响时域波形有肌肉记忆般的理解,之后换任何高速芯片、任何板卡设计,你都不会慌。
最后再分享一个小技巧:ADS 2024 里的通道仿真结果如果想导出给团队其他人看,可以把眼图保存成可以直接分享的 dataset 文件,但记得把 TX/EQ 参数表也一并贴上。不然别人拿到图,不知道你配置了什么参数,再来回沟通的成本远比你多写两行备注高得多。做工程,效率往往就体现在这些细节上。