2、SerDes基础:串行器/解串器工作原理、并行到串行转换、时钟恢复与数据对齐
SerDes(Serializer/Deserializer)是高速有线通信的物理层核心,其本质是在发送端将多路低速并行数据转换为高速串行比特流,在接收端将高速串行比特流恢复为并行数据。理解SerDes的工作原理,需要抓住三条主线:并行到串行的转换机制、时钟数据恢复(CDR)以及数据对齐与通道绑定。这三者共同决定了SerDes的吞吐量、误码率(BER)和链路稳定性。本章将从工程实践角度,拆解SerDes内部的数据通路、时钟架构和关键设计约束。
上图展示了SerDes的核心数据通路。发送端(TX)将并行数据经过FIFO缓冲后送入并转串移位寄存器(PISO),再经过发送均衡(TX EQ)和驱动器输出到差分线对;接收端(RX)通过模拟前端(CTLE/DFE)接收信号,由CDR从数据边沿恢复出采样时钟,驱动串转并移位寄存器(SIPO)完成数据串并转换,最后经过对齐和FIFO输出并行数据。整个链路中,时钟的相位关系和数据的对齐质量是决定系统能否稳定工作的关键。
2.1 并行到串行转换:PISO与SIPO的工程实现
并行到串行转换的核心器件是移位寄存器。发送端使用PISO(Parallel-In Serial-Out),接收端使用SIPO(Serial-In Parallel-Out)。在高速SerDes中,PISO/SIPO并非简单的单级移位寄存器,而是采用多级树形结构或半速率/四分之一速率架构来降低单级触发器的时钟频率。
核心原理:位宽与速率的换算
假设并行数据位宽为N位,并行时钟频率为F_par,则串行比特率F_ser = N × F_par。例如,PCIe Gen3的8b/10b编码后有效位宽为10位,若并行时钟为250MHz,则串行速率即为2.5Gbps。实际设计中,PISO通常采用2:1多路选择器树实现:第一级将N位并行数据分为N/2组,每组通过一个2:1 MUX在时钟上升沿和下降沿交替输出,从而将时钟频率减半。
操作流程:FPGA中配置PISO接口
// 以Xilinx UltraScale+ GTY为例,发送端并行接口
assign txdata = {tx_data_byte3, tx_data_byte2, tx_data_byte1, tx_data_byte0}; // 32位并行数据
assign txcharisk = 4'b0000; // 无K字符
// 并行时钟由GTY参考时钟分频/倍频产生
// txusrclk = 串行速率 / 并行位宽 = 10.3125Gbps / 32 = 322.265625MHz
always @(posedge txusrclk) begin
tx_data_fifo <= txdata; // 数据送入GTY TX接口
end
上述代码展示了典型的FPGA SerDes发送接口。并行数据宽度为32位(4字节),对应的并行时钟为322MHz。工程中需注意:并行时钟与串行时钟的相位关系必须稳定,否则会导致数据采样错误。GTY硬核内部会自动处理PISO的时钟分频,但用户必须保证txusrclk与GTY的参考时钟(REFCLK)满足频率锁定关系。
案例拆解:8B/10B编码下的PISO时序
| 参数 | 数值 | 说明 |
|---|---|---|
| 并行数据位宽 | 20位(2字节×10bit) | 8B/10B编码后每字节10bit |
| 并行时钟频率 | 125MHz | 由REFCLK分频得到 |
| 串行比特率 | 2.5Gbps | 20 × 125MHz = 2.5Gbps |
| PISO级数 | 2级 | 第一级20:10,第二级10:1 |
| 最高内部时钟 | 625MHz | 第二级MUX的切换频率 |
从表中可以看出,PISO内部并非所有级都工作在最高串行速率。通过多级分频,只有最后一级MUX需要处理2.5Gbps的比特流,前级时钟频率逐级减半。这种设计降低了功耗和时序收敛难度。
2.2 时钟恢复与数据对齐:CDR工作原理
时钟数据恢复(CDR)是SerDes接收端的核心。与源同步接口(如DDR)不同,SerDes不传输独立的时钟信号,接收端必须从数据比特流中提取时钟信息。CDR的本质是一个反馈控制系统,通过比较数据边沿与本地时钟的相位差,调整压控振荡器(VCO)或数字环路滤波器,使采样时钟始终对准数据眼图的中心。
核心原理:相位检测与环路滤波
CDR主要分为两种架构:模拟CDR(基于PLL)和数字CDR(基于过采样或相位插值)。现代高速SerDes(如56Gbps PAM-4)普遍采用数字CDR,其工作流程为:
- 相位检测:使用Alexander鉴相器(Bang-Bang PD)比较数据跳变沿与恢复时钟的相位关系,输出超前/滞后信号。
- 环路滤波:对超前/滞后信号进行积分和比例运算,生成频率控制字(FCW)。
- 相位调整:通过相位插值器(PI)或数控振荡器(DCO)调整采样时钟相位。
- 数据采样:用调整后的时钟对数据流进行过采样,选择最佳采样点。
数据对齐:Comma检测与通道绑定
CDR恢复出时钟后,还需要解决字节对齐和多通道对齐问题。字节对齐通过检测特殊字符(Comma)实现,例如8B/10B编码中的K28.5(0011111010或1100000101)。接收端在比特流中搜索Comma模式,一旦匹配即调整并行数据的边界,使后续数据按字节对齐。
案例拆解:10Gbps SerDes的CDR锁定过程
假设一个10Gbps的SerDes链路,接收端初始状态为失锁。CDR的锁定过程分为三个阶段:
| 阶段 | 时间 | 行为 | 关键指标 |
|---|---|---|---|
| 频率捕获 | 0~50μs | VCO频率从参考时钟开始扫描,接近数据速率 | 频率误差 < 1000ppm |
| 相位捕获 | 50~200μs | 相位检测器开始工作,调整采样时钟相位 | 相位误差 < 0.05UI |
| 数据锁定 | 200μs~1ms | CDR锁定指示信号拉高,开始正常接收数据 | BER < 1e-12 |
在实际调试中,如果CDR无法锁定,首先检查参考时钟的频率精度(通常要求±100ppm以内),其次检查接收信号的眼图是否张开。若眼图闭合,则需要调整CTLE/DFE的均衡参数,而非CDR本身。
2.3 弹性缓冲与时钟域交叉
SerDes系统中存在多个时钟域:发送端的并行时钟域、串行时钟域,接收端的恢复时钟域、本地并行时钟域。弹性缓冲(Elastic Buffer)用于在不同时钟域之间安全地传递数据,避免亚稳态和数据溢出/下溢。
核心原理:FIFO的读写指针管理
弹性缓冲本质上是一个异步FIFO,写时钟为恢复时钟(RXUSRCLK),读时钟为本地并行时钟(RXUSRCLK2)。FIFO的深度通常为16~32个字(每个字为并行数据位宽)。当写指针与读指针的差值超过阈值时,系统会插入或删除空闲字符(Idle/ Skip)来调整相位差。
// 弹性缓冲的指针管理伪代码
if (fifo_occupancy > HIGH_THRESHOLD) begin
// 插入Skip字符,增加读指针
rx_data <= SKIP_CHAR;
end else if (fifo_occupancy < LOW_THRESHOLD) begin
// 删除Skip字符,减少读指针
// 不输出数据,保持读指针不变
end
上述代码展示了典型的Skip字符插入/删除机制。在PCIe中,SKP字符(K28.0)专门用于补偿收发双方的时钟频率偏差。每个数据块中最多可插入/删除一个SKP字符,以保证FIFO不溢出。
操作流程:多通道对齐的工程步骤
- 通道初始化:每个通道独立完成CDR锁定和字节对齐。
- Skew检测:发送端在训练序列中插入已知的Skew模式(如PCIe的TS1中的Symbol Lock),接收端比较各通道的接收时刻。
- 延迟补偿:对延迟较大的通道增加额外的FIFO延迟,使所有通道的数据在同一时钟周期输出。
- 对齐确认:当所有通道的Skew消除后,拉高对齐指示信号,开始正常数据传输。
2.4 常见误区与设计复盘
在SerDes调试中,工程师常遇到以下问题,这里结合实战经验进行总结。
误区一:误将CDR失锁归因于信号质量
当链路BER升高时,工程师往往首先调整均衡参数,但若CDR本身未锁定,均衡调整毫无意义。正确排查顺序应为:先检查CDR锁定状态 → 再检查眼图 → 最后调整均衡。使用示波器观察恢复时钟的抖动,若抖动过大(RMS > 0.05UI),则CDR环路可能不稳定。
误区二:忽略参考时钟的相位噪声
SerDes的参考时钟(REFCLK)质量直接影响CDR的抖动性能。一个常见的错误是使用普通晶振(相位噪声-120dBc/Hz@10kHz)替代专用振荡器(-150dBc/Hz@10kHz)。在100Gbps应用中,参考时钟的相位噪声会导致CDR无法满足协议规定的抖动容限。
误区三:弹性缓冲深度设计不足
在计算弹性缓冲深度时,需考虑收发双方的频率偏差(如±300ppm)和连续数据块长度。例如,若数据块为256字节,频率偏差为300ppm,则每个数据块的最大累积偏差为256×300ppm=0.0768字节。若FIFO深度为16字节,则最多可容忍约208个数据块的连续传输。若实际传输超过该值,则需插入更多SKP字符。
本章从PISO/SIPO的工程实现、CDR的反馈控制原理、弹性缓冲的跨时钟域管理三个维度,系统梳理了SerDes的基础工作机制。理解这些底层原理,是后续学习PAM-4调制、前向纠错(FEC)和均衡技术的基础。在实际项目中,建议工程师通过FPGA硬核或专用SerDes芯片的寄存器配置,逐步验证本章所述的每个环节,将理论转化为可操作的调试经验。