3. 物理层(PHY)基础:SerDes、CML驱动器、接收等化、时钟与数据恢复(CDR)
物理层是所有高速串行协议的基石。JESD204B 的物理层说白了就是一套完整的 SerDes 链路——从发送端的串行化、CML 驱动,到接收端的等化和时钟恢复。你想想看,数据速率跑到 12.5 Gbps 甚至更高,信号在 PCB 上走几英寸就已经面目全非了。没有扎实的 PHY 设计,协议层再漂亮也白搭。
我在最初接触 JESD204B 时,总觉得链路建不起来是协议配置有误,折腾了几天才发现是接收端的 CTLE 增益没设对。从那以后,我养成了一个习惯:先搞定 PHY 的眼图,再谈链路同步。这一章我们就逐个拆解 PHY 的每个环节。
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。
3.2 CML 驱动器——高速信号的出口
CML(电流模式逻辑)是 JESD204B 物理层最主流的驱动器架构。它的本质是一个差分对管,尾电流源恒定,输出摆幅由电流和负载电阻决定。典型的摆幅是 400 ~ 800 mVpp,共模电压在 2.0 V 左右。
我记得在第一个 6.25 Gbps 项目中,CML 的共模电压没校准好,导致接收端输入共模范围超限,误码率直接飙到 1e-9。后来加上共模反馈环路才稳住。这里有个经验:共模电压的精度直接影响接收端 DC 工作点,必须控制在 ±10% 以内。
CML 相比其他逻辑(如 LVDS、PECL)的优势很明显:功耗低、速度快、适合差分传输。而且它的输出阻抗天然接近 50 Ω,匹配起来很方便。
| 参数 | 最小值 | 典型值 | 最大值 | 单位 |
|---|---|---|---|---|
| 差分输出摆幅 | 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 |
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。两者分工明确,缺一不可。
| 特性 | CTLE | DFE |
|---|---|---|
| 类型 | 线性模拟 | 非线性数字 |
| 噪声放大 | 有 | 无 |
| 补偿对象 | 高频损耗 | 后标 ISI |
| 功耗 | 低 | 中等 |
| 误码传播 | 无 | 有 |
| 实现复杂度 | 简单 | 较高 |
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 之间。
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();
物理层是整个 JESD204B 链路的基础。SerDes 的串行化效率、CML 的驱动能力、CTLE/DFE 的等化效果、CDR 的时钟质量,每一个环节都直接决定最终的 BER。你想想看,一个 12.5 Gbps 的链路,每个 UI 只有 80 ps,jitter 预算通常不到 0.15 UI——也就是 12 ps。在这种 margin 下,任何一个 PHY 模块的缺陷都会导致链路失败。
把 PHY 层调稳了,后续的链路建立和同步才能顺理成章。