3. SerDes关键架构:发送器架构(TX)、接收器架构(RX)、锁相环(PLL)在SerDes中的作用

好,咱们今天聊聊SerDes的核心架构。说白了,SerDes就是三大部分:发出去(TX)、收回来(RX)、以及让它们步调一致的那个节拍器(PLL)。这三者缺一不可,任何一个环节出问题,整个链路就废了。

我刚开始接触SerDes时,总觉得PLL就是个产生时钟的东西,没什么了不起。直到有一次调试一个10Gbps的链路,眼图怎么都睁不开,折腾了两周才发现是PLL的抖动超标了。嗯,从那以后我再也不敢小看这个“节拍器”了。

3.1 发送器架构(TX)

发送器的任务很简单——把并行数据转成串行,然后以高速差分信号的形式推出去。但简单背后全是坑。

3.1.1 核心模块

  • Serializer(并串转换器):把N位并行数据变成1位串行流。常见的有8:1、16:1、32:1等。
  • 预加重/去加重(Pre-emphasis / De-emphasis):补偿信道损耗。高频信号衰减大,预加重就是在跳变沿处加大幅度。
  • 输出驱动器(Output Driver):提供足够的电流驱动差分对,同时控制阻抗匹配。
  • 时钟分频与相位调整:确保串行时钟与数据对齐。

关键参数:TX的抖动(Jitter)、摆幅(Swing)、上升/下降时间、预加重阶数。这些直接决定信号能跑多远、跑多快。

3.1.2 预加重到底怎么调?

我个人习惯是先看信道损耗曲线。如果信道在5GHz处有-6dB的损耗,那预加重就得补偿6dB左右。但别补过头了——补多了会产生过冲,反而恶化眼图。

我曾经在一个项目中,预加重调了整整一周。最后发现是PCB走线的阻抗不连续导致的反射,跟预加重本身没关系。所以啊,先确认信道没问题,再调预加重。

3.1.3 TX架构示例(8:1 SerDes)

// 简化版8:1并串转换逻辑
// 实际Vivado实现中会使用OSERDESE2原语
module tx_8to1 (
    input  wire        clk_ser,    // 串行时钟 (如 10GHz)
    input  wire        clk_par,    // 并行时钟 (如 1.25GHz)
    input  wire [7:0]  data_par,   // 并行数据
    output wire        data_ser    // 串行数据
);

    reg [7:0] shift_reg;
    reg [2:0] bit_cnt;

    always @(posedge clk_ser) begin
        if (bit_cnt == 3'd0)
            shift_reg <= data_par;  // 加载并行数据
        else
            shift_reg <= {shift_reg[6:0], 1'b0}; // 移位
        bit_cnt <= bit_cnt + 1;
    end

    assign data_ser = shift_reg[7];

endmodule

小提示:实际项目中别自己写移位寄存器,用Xilinx的OSERDESE2原语。它内置了DDR、三态控制、预加重等特性,比自己写的可靠得多。

3.2 接收器架构(RX)

接收器比发送器复杂得多。为什么?因为信号经过信道后已经面目全非了——衰减、反射、串扰、抖动全来了。RX的任务就是从这堆“垃圾”里把原始数据捞出来。

3.2.1 核心模块

  • 均衡器(Equalizer):补偿信道损耗。常见的有CTLE(连续时间线性均衡器)、DFE(判决反馈均衡器)。
  • 时钟数据恢复(CDR):从数据流中提取时钟,并调整采样相位。
  • 解串器(Deserializer):把串行数据转回并行。
  • 判决器(Slicer):把模拟信号判决为数字0/1。

3.2.2 均衡器怎么选?

CTLE是线性均衡,放大高频分量。DFE是非线性均衡,消除码间干扰(ISI)。

我的经验是:短距离(<10cm)用CTLE就够了,长距离(>30cm)必须上DFE。但DFE有个问题——它会产生错误传播。如果判决错了,后面的均衡也会跟着错。

注意:DFE的抽头系数需要自适应算法来调整。常见的算法有LMS(最小均方)和Zero-Forcing。我建议用LMS,收敛更稳定,虽然慢一点。

3.2.3 CDR的工作原理

CDR说白了就是“猜”数据的采样点。它用PLL产生一个本地时钟,然后通过鉴相器比较数据边沿和时钟边沿的相位差,再反馈调整时钟相位。

常见的CDR架构有两种:

架构类型 优点 缺点 适用场景
基于PLL的CDR 抖动小、频率跟踪好 锁定时间长 连续数据传输
基于相位插值的CDR 锁定快、面积小 抖动较大 突发传输、低功耗

我个人更倾向于基于PLL的CDR,尤其是高速场景(>10Gbps)。虽然锁定慢一点,但稳定性好。你想想看,如果CDR抖动大,眼图直接就闭合了。

3.3 锁相环(PLL)在SerDes中的作用

PLL是SerDes的心脏。没有它,TX和RX就是两盘散沙。

3.3.1 PLL的核心功能

  • 频率合成:从低频参考时钟(如100MHz)产生高频串行时钟(如10GHz)。
  • 抖动滤除:滤除参考时钟和电源噪声引入的抖动。
  • 相位对齐:为TX和RX提供精确的相位关系。

3.3.2 PLL的关键指标

指标 含义 典型值(10Gbps)
RMS抖动 时钟边沿的随机偏移 < 1ps
锁定时间 从启动到稳定输出所需时间 < 100μs
相位噪声 频域上的抖动分布 -120dBc/Hz @ 1MHz
环路带宽 PLL能跟踪的频率变化范围 1-10MHz

核心原则:PLL的环路带宽要小于参考时钟的抖动频率,但又要大于数据中的频率变化。这是个权衡——带宽太窄,锁定慢;带宽太宽,滤不掉抖动。

3.3.3 PLL在TX和RX中的角色

在TX中,PLL提供串行时钟。在RX中,PLL(通常是CDR的一部分)从数据中恢复时钟。

我曾经遇到过一个案例:TX的PLL和RX的PLL用的是同一个参考时钟,但PCB走线长度差了5mm。结果呢?相位差太大,CDR锁不住。后来加了可调延迟线才解决。所以啊,时钟分配网络的设计跟PLL本身一样重要。

3.4 知识体系结构图

SerDes关键架构 发送器 (TX) 接收器 (RX) 锁相环 (PLL) Serializer 预加重 输出驱动器 均衡器 (CTLE/DFE) CDR 解串器 频率合成 抖动滤除 相位对齐 三者关系 PLL为TX提供串行时钟 → TX发送数据 → RX用CDR恢复时钟和数据 PLL的抖动直接影响TX输出质量和RX锁定能力

3.5 实战中的避坑指南

最后,分享几个我踩过的坑:

  • PLL电源噪声:PLL对电源噪声极其敏感。我曾经用开关电源直接给PLL供电,结果抖动大了3倍。后来加了LDO和π型滤波才搞定。
  • TX预加重与信道不匹配:预加重不是越大越好。我见过有人把预加重开到最大,结果眼图反而更差。用仿真工具先扫一遍信道响应,再确定预加重系数。
  • CDR锁定失败:如果CDR锁不住,先检查数据中是否有足够多的跳变。连续长0或长1会导致CDR失锁。所以SerDes通常会用8b/10b或64b/66b编码保证DC平衡。
  • 阻抗匹配:TX和RX的阻抗必须匹配。我遇到过PCB走线阻抗设计成50Ω,但TX输出阻抗是100Ω,结果反射严重。用TDR(时域反射计)测一下,一目了然。

我的习惯:每次做SerDes设计,我都会先画一张“信号链路图”,把TX、信道、RX、PLL的每个参数都标出来。然后做一遍链路预算,确认每个环节的裕量。这一步做好了,后面调试能省一半时间。

好了,这一章的内容就到这里。TX、RX、PLL这三者就像一支乐队——PLL是指挥,TX是演奏者,RX是听众。任何一个掉链子,音乐会就砸了。下一章咱们聊聊SerDes的时钟架构和CDR的详细设计,到时候我会带一个实际项目的案例来讲解。

可可精品资料库