2、SerDes基础:串行器/解串器工作原理、并行到串行转换、时钟恢复与数据对齐

SerDes(Serializer/Deserializer)是高速有线通信的物理层核心,其本质是在发送端将多路低速并行数据转换为高速串行比特流,在接收端将高速串行比特流恢复为并行数据。理解SerDes的工作原理,需要抓住三条主线:并行到串行的转换机制、时钟数据恢复(CDR)以及数据对齐与通道绑定。这三者共同决定了SerDes的吞吐量、误码率(BER)和链路稳定性。本章将从工程实践角度,拆解SerDes内部的数据通路、时钟架构和关键设计约束。

SerDes 数据通路与时钟恢复架构 并行数据 TX_D[7:0] + 并行时钟 TX FIFO 弹性缓冲 跨时钟域 PISO 并转串 LSB First TX EQ FFE/去加重 预加重 TX Driver CML/差分 阻抗匹配 发送时钟域:并行时钟 × N = 串行速率 差分对 TX_P / TX_N RX Front CTLE/DFE CDR 时钟恢复 SIPO 串转并 对齐/去偏斜 Comma检测 RX FIFO 弹性缓冲 并行数据 RX_D[7:0] 恢复时钟驱动SIPO采样 参考时钟:100MHz/125MHz/156.25MHz CDR锁定范围:±100ppm ~ ±300ppm 源同步/系统同步 PLL倍频 模拟前端

上图展示了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在时钟上升沿和下降沿交替输出,从而将时钟频率减半。

关键参数:PISO的建立时间(Setup Time)和保持时间(Hold Time)直接决定了最高工作频率。在FPGA中,专用SerDes硬核(如Xilinx GTY、Intel Transceiver)的PISO已集成在高速收发器中,用户只需通过FPGA逻辑接口(如Xilinx TXDATA接口)提供并行数据和并行时钟,无需关心内部移位寄存器的具体实现。

操作流程: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.5Gbps20 × 125MHz = 2.5Gbps
PISO级数2级第一级20:10,第二级10:1
最高内部时钟625MHz第二级MUX的切换频率

从表中可以看出,PISO内部并非所有级都工作在最高串行速率。通过多级分频,只有最后一级MUX需要处理2.5Gbps的比特流,前级时钟频率逐级减半。这种设计降低了功耗和时序收敛难度。

常见误区:初学者常误以为PISO的每一位输出都需要一个独立的触发器。实际上,高速SerDes的PISO采用MUX树而非纯移位寄存器,因为纯移位寄存器在极高频率下触发器的时钟偏斜(Clock Skew)难以控制。MUX树结构只需最后一级MUX工作在最高频率,前级MUX的时钟频率逐级降低,更利于时序收敛。

2.2 时钟恢复与数据对齐:CDR工作原理

时钟数据恢复(CDR)是SerDes接收端的核心。与源同步接口(如DDR)不同,SerDes不传输独立的时钟信号,接收端必须从数据比特流中提取时钟信息。CDR的本质是一个反馈控制系统,通过比较数据边沿与本地时钟的相位差,调整压控振荡器(VCO)或数字环路滤波器,使采样时钟始终对准数据眼图的中心。

核心原理:相位检测与环路滤波

CDR主要分为两种架构:模拟CDR(基于PLL)和数字CDR(基于过采样或相位插值)。现代高速SerDes(如56Gbps PAM-4)普遍采用数字CDR,其工作流程为:

  1. 相位检测:使用Alexander鉴相器(Bang-Bang PD)比较数据跳变沿与恢复时钟的相位关系,输出超前/滞后信号。
  2. 环路滤波:对超前/滞后信号进行积分和比例运算,生成频率控制字(FCW)。
  3. 相位调整:通过相位插值器(PI)或数控振荡器(DCO)调整采样时钟相位。
  4. 数据采样:用调整后的时钟对数据流进行过采样,选择最佳采样点。

数据对齐:Comma检测与通道绑定

CDR恢复出时钟后,还需要解决字节对齐和多通道对齐问题。字节对齐通过检测特殊字符(Comma)实现,例如8B/10B编码中的K28.5(0011111010或1100000101)。接收端在比特流中搜索Comma模式,一旦匹配即调整并行数据的边界,使后续数据按字节对齐。

工程经验:在PCIe、SATA等协议中,接收端不仅需要字节对齐,还需要进行通道绑定(Lane Deskew)。例如PCIe x4链路包含4个通道,每个通道的传播延迟不同,接收端必须通过训练序列(TS1/TS2)中的Skew消除机制,将4个通道的数据对齐到同一时钟周期。这一过程通常在PCS(物理编码子层)中完成,而非PMA(物理介质附加层)。

案例拆解:10Gbps SerDes的CDR锁定过程

假设一个10Gbps的SerDes链路,接收端初始状态为失锁。CDR的锁定过程分为三个阶段:

阶段时间行为关键指标
频率捕获0~50μsVCO频率从参考时钟开始扫描,接近数据速率频率误差 < 1000ppm
相位捕获50~200μs相位检测器开始工作,调整采样时钟相位相位误差 < 0.05UI
数据锁定200μs~1msCDR锁定指示信号拉高,开始正常接收数据BER < 1e-12

在实际调试中,如果CDR无法锁定,首先检查参考时钟的频率精度(通常要求±100ppm以内),其次检查接收信号的眼图是否张开。若眼图闭合,则需要调整CTLE/DFE的均衡参数,而非CDR本身。

风险提示:CDR的环路带宽设置需要权衡。带宽过宽会导致抖动传递过大,输出时钟抖动增加;带宽过窄则捕获时间过长,无法满足协议要求的锁定时间(如PCIe要求<100μs)。通常环路带宽设置为数据速率的1/500~1/1000,例如10Gbps时环路带宽约10~20MHz。

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不溢出。

操作流程:多通道对齐的工程步骤

  1. 通道初始化:每个通道独立完成CDR锁定和字节对齐。
  2. Skew检测:发送端在训练序列中插入已知的Skew模式(如PCIe的TS1中的Symbol Lock),接收端比较各通道的接收时刻。
  3. 延迟补偿:对延迟较大的通道增加额外的FIFO延迟,使所有通道的数据在同一时钟周期输出。
  4. 对齐确认:当所有通道的Skew消除后,拉高对齐指示信号,开始正常数据传输。
关键指标:通道间Skew容限通常为±1个UI(Unit Interval)以内。例如PCIe Gen3的UI为100ps,则通道间最大允许Skew为±100ps。超过该范围,接收端将无法正确恢复数据。

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字符。

复盘建议:在SerDes调试中,建议建立分层排查清单:物理层(信号完整性)→ 数据链路层(CDR/对齐)→ 协议层(训练序列)。每层都有明确的通过标准,例如物理层要求眼图高度>100mV、宽度>0.5UI;数据链路层要求CDR锁定时间<100μs、通道Skew<1UI;协议层要求训练序列成功完成。通过逐层排查,可快速定位问题根源。

本章从PISO/SIPO的工程实现、CDR的反馈控制原理、弹性缓冲的跨时钟域管理三个维度,系统梳理了SerDes的基础工作机制。理解这些底层原理,是后续学习PAM-4调制、前向纠错(FEC)和均衡技术的基础。在实际项目中,建议工程师通过FPGA硬核或专用SerDes芯片的寄存器配置,逐步验证本章所述的每个环节,将理论转化为可操作的调试经验。