3. 物理层(PHY)基础:SerDes、CML驱动器、接收等化、时钟与数据恢复(CDR)

物理层是所有高速串行协议的基石。JESD204B 的物理层说白了就是一套完整的 SerDes 链路——从发送端的串行化、CML 驱动,到接收端的等化和时钟恢复。你想想看,数据速率跑到 12.5 Gbps 甚至更高,信号在 PCB 上走几英寸就已经面目全非了。没有扎实的 PHY 设计,协议层再漂亮也白搭。

我在最初接触 JESD204B 时,总觉得链路建不起来是协议配置有误,折腾了几天才发现是接收端的 CTLE 增益没设对。从那以后,我养成了一个习惯:先搞定 PHY 的眼图,再谈链路同步。这一章我们就逐个拆解 PHY 的每个环节。

核心要点:PHY 层的目标是实现无误码的串行传输,关键指标是误码率(BER)< 1e-15,以及眼图的垂直/水平张开度。
JESD204B PHY 层核心架构 发送端 Tx CML 驱动器 预加重 / 去加重 50 Ω 阻抗匹配 SER 串行化 传输通道 PCB 导体损耗 介质损耗 (Df) 反射与 ISI 串扰与噪声 接收端 Rx CTLE 连续时间等化 DFE 判决反馈等化 CDR 时钟数据恢复 数据采样 & DES PHY 层核心指标 BER < 1e-15  |  眼图垂直张开度 > 30%  |  抖动容限 > 0.5 UI  |  共模电压 2.0 V ± 10%

3.1 SerDes——串行化的起点

SerDes 就是串行器/解串器。JESD204B 的发送端先把多路并行数据(比如 16 位或 32 位)通过 8B/10B 编码,再串行化成高速差分信号送出去。接收端收到串行流后,先恢复时钟,再解串回并行数据。

我个人的经验是,SerDes 的串行化速率决定了整个链路的带宽。JESD204B 的线速率范围从 1.6 Gbps 到 12.5 Gbps,更高阶的 204C 已经扩展到 32 Gbps。速率越高,串行器的 jitter 设计就越头疼。

为什么非要用 SerDes?说白了,并行总线在高速下存在严重的 skew 问题。你想想看,12 位数据线加 1 位时钟,在 1 GHz 以上几乎不可能对齐。串行化把时钟嵌入数据流,彻底消除了 bus skew。

小提示:JESD204B 的 SerDes 通常要求支持 8B/10B 编码后的净荷速率。计算线速率时,别忘了加上编码开销——实际线速率 = 有效数据速率 × 10/8。

3.2 CML 驱动器——高速信号的出口

CML(电流模式逻辑)是 JESD204B 物理层最主流的驱动器架构。它的本质是一个差分对管,尾电流源恒定,输出摆幅由电流和负载电阻决定。典型的摆幅是 400 ~ 800 mVpp,共模电压在 2.0 V 左右。

我记得在第一个 6.25 Gbps 项目中,CML 的共模电压没校准好,导致接收端输入共模范围超限,误码率直接飙到 1e-9。后来加上共模反馈环路才稳住。这里有个经验:共模电压的精度直接影响接收端 DC 工作点,必须控制在 ±10% 以内。

CML 相比其他逻辑(如 LVDS、PECL)的优势很明显:功耗低、速度快、适合差分传输。而且它的输出阻抗天然接近 50 Ω,匹配起来很方便。

表 3-1 CML 驱动器关键电气参数
参数 最小值 典型值 最大值 单位
差分输出摆幅 400 600 800 mVpp
输出共模电压 1.8 2.0 2.2 V
上升 / 下降时间 (20%-80%) 30 45 60 ps
差分输出阻抗 45 50 55 Ω
随机抖动 (RMS) — 0.5 1.0 ps
注意:CML 输出需要交流耦合到接收端。直流耦合虽然在某些场景下可行,但共模电平容易漂移,尤其是在不同电源域之间。我个人一律推荐交流耦合,省去一堆麻烦。

3.3 接收等化——把信号从噪声里捞出来

信号经过 PCB 走线和连接器后,高频分量被严重衰减。眼图闭合、ISI 码间串扰严重。这时候就需要等化器来补偿。JESD204B 接收端最常用的是 CTLE + DFE 组合。

3.3.1 CTLE(连续时间线性等化器)

CTLE 是一个模拟高通滤波器,专门提升高频增益,补偿通道的低通特性。它的优点是功耗低、实现简单;缺点是会同时放大高频噪声。

我曾经在一个 12.5 Gbps 项目中,CTLE 的增益调到了 12 dB,眼图是睁开了,但噪声也被抬得很高,BER 反而恶化。后来逐步降到了 8 dB,配合 DFE 才把 BER 压到 1e-15 以下。

CTLE 的增益设置需要根据通道损耗曲线来调整。一般芯片厂商会提供 CTLE 增益挡位,从 0 dB 到 15 dB 不等。我建议从最低挡开始,逐步增加,同时观察眼图的张开度。

3.3.2 DFE(判决反馈等化器)

DFE 是非线性的,它利用已经判决出的符号来消除后续符号的 ISI。它不会放大噪声,这是它相比 CTLE 最大的优势。缺点是复杂度高,而且存在误码传播的问题。

CTLE 和 DFE 怎么配合?我一般遵循这个原则:CTLE 负责补偿通道的全局损耗,把眼图打开到能正确判决的程度;DFE 负责消除残留的后标 ISI。两者分工明确,缺一不可。

表 3-2 CTLE 与 DFE 对比
特性 CTLE DFE
类型 线性模拟 非线性数字
噪声放大 有 无
补偿对象 高频损耗 后标 ISI
功耗 低 中等
误码传播 无 有
实现复杂度 简单 较高
经验之谈:CTLE 和 DFE 的系数通常通过自适应算法来收敛。JESD204B 的 SYNC~ 和 CGS 阶段正好可以用来做等化系数的训练。我习惯在 CGS 阶段先锁定 CTLE,然后在 ILAS 阶段让 DFE 完成收敛。

3.4 CDR——时钟和数据恢复

CDR 是接收端的心脏。它从数据流中提取时钟,并用这个时钟来采样数据。没有 CDR,接收端就不知道什么时候该采样——尤其是 JESD204B 这种嵌入式时钟。

CDR 的核心架构有两种:锁相环(PLL)型和相位插值器(PI)型。PLL 型 CDR 通过 VCO 锁定数据边沿,jitter 传递特性好;PI 型 CDR 用参考时钟产生多相位,再通过插值找到最佳采样点。

我建议在高性能 ADC/DAC 应用中优先选择 PI 型 CDR。为什么?因为它可以独立调节频率和相位,对参考时钟的 jitter 容忍度更高。我在一个 16 位 1 GSPS 的 ADC 项目中吃过 PLL 型 CDR 的亏——参考时钟的 jitter 直接调制到 VCO 上,导致 SNR 下降。

CDR 的环路带宽是个关键参数。带宽太宽,会传递参考时钟的 jitter;带宽太窄,锁定时间慢,而且对数据流的 frequency drift 跟不上。一般来说,JESD204B 的 CDR 环路带宽设计在 1 ~ 10 MHz 之间。

避坑指南:我曾经遇到过 CDR 锁定不稳的问题,现象是链路偶尔会掉同步。查了几天发现是 PCB 上参考时钟的走线太靠近开关电源,引入了周期性的 jitter。后来把时钟线包地处理,问题就解决了。CDR 对参考时钟的 purity 非常敏感,布局时必须单独隔离。

3.5 PHY 层的实际部署建议

讲完各个模块,最后聊几点我在项目中总结的实践心得:

  • 预加重要适度——预加重可以提高信号的高频分量,但加太多会让接收端饱和。一般从 1 dB 开始试,逐步增加直到眼图最开。
  • AC 耦合电容选 100 nF——这个值在几乎所有 JESD204B 设计中都通用。电容的 SRF(自谐振频率)要高于线速率的基波频率。
  • 留意 VDD 纹波——SerDes 的电源纹波要求通常 < 10 mVpp。我在项目中吃过亏,电源纹波大导致 CDR 的 jitter 超标,眼图闭合。
  • 眼图模板测试不能省——PHY 层调试的最后一步,一定是跑眼图模板测试。JESD204B 标准要求眼图在指定模板区域内无违例。

下面是一个典型的 SerDes 初始化配置伪代码,展示了 PHY 层的基本调优步骤:

// 1. 复位 SerDes 核心
serdes_reset();

// 2. 配置发送端 CML
serdes_write(TX_CTRL, 0x0A);       // 摆幅 600 mVpp
serdes_write(TX_PREEMP, 0x03);     // 预加重 1 dB

// 3. 配置接收端等化
serdes_write(RX_CTLE_GAIN, 0x05);  // CTLE 增益 5 dB
serdes_write(RX_DFE_TAPS, 0x03);   // DFE 抽头数 3

// 4. 配置 CDR
serdes_write(CDR_BW, 0x02);        // 环路带宽 5 MHz
serdes_write(CDR_PI_STEP, 0x04);   // 相位插值步长

// 5. 启动 CDR 锁定
serdes_write(CDR_EN, 0x01);

// 6. 等待 CDR 锁定完成
while (!(serdes_read(STATUS) & 0x01));

// 7. 检查眼图质量
eye_monitor_trigger();
调试技巧:如果链路建不起来,先别急着怀疑协议配置。用示波器看差分焊盘上的眼图——眼图闭了,问题在 PHY;眼图开了但链路不通,再看协议层。这个原则帮我省了至少一半的调试时间。

物理层是整个 JESD204B 链路的基础。SerDes 的串行化效率、CML 的驱动能力、CTLE/DFE 的等化效果、CDR 的时钟质量,每一个环节都直接决定最终的 BER。你想想看,一个 12.5 Gbps 的链路,每个 UI 只有 80 ps,jitter 预算通常不到 0.15 UI——也就是 12 ps。在这种 margin 下,任何一个 PHY 模块的缺陷都会导致链路失败。

把 PHY 层调稳了,后续的链路建立和同步才能顺理成章。