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 知识体系结构图
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的详细设计,到时候我会带一个实际项目的案例来讲解。