第三章 高速串行链路基础:差分信号与阻抗匹配、预加重与均衡技术、眼图与误码率(BER)分析

各位做FPGA的兄弟,今天咱们聊聊SerDes的核心基础。说实话,这部分内容看起来理论性很强,但你要是真在项目里踩过坑,就会明白这些基础有多重要。我当年第一次调10Gbps链路时,眼图闭得跟一条线似的,折腾了两周才发现是阻抗匹配差了那么几个欧姆。嗯,咱们就从最基础的差分信号开始聊起。

3.1 差分信号:为什么SerDes非它不可?

单端信号大家都很熟悉,一根线传数据,地做参考。但到了Gbps级别,单端信号就扛不住了。为什么?说白了,地弹噪声和共模干扰会把信号淹没掉。

差分信号用两根线传互补的信号,接收端只看两根线的差值。这样做有两个好处:

  • 抗共模干扰强:外部噪声同时耦合到两根线上,一减就没了
  • 电压摆幅小:差分对只需要几百毫伏就能可靠传输,功耗更低

我个人习惯在PCB布局时,把差分对的两根线走在一起,长度差控制在5mil以内。你想想看,10Gbps的信号一个UI才100ps,5mil的走线差大概0.8ps,勉强能接受。要是再大,时序就乱了。

关键参数:差分阻抗

SerDes标准中,差分阻抗通常要求100Ω ±10%。我见过不少新手直接用50Ω单端阻抗的微带线来走差分对,结果阻抗只有80多Ω,反射严重。

3.2 阻抗匹配:信号完整性的命门

阻抗不匹配会带来反射。反射信号叠加到原信号上,轻则抖动增加,重则误码。我在项目中遇到过最夸张的一次,反射系数达到0.3,眼图直接塌了一半。

阻抗匹配的核心公式其实很简单:

反射系数 Γ = (Z_load - Z_0) / (Z_load + Z_0)

Z_0是传输线特性阻抗,Z_load是终端阻抗。理想情况下Z_load = Z_0,Γ = 0,没有反射。

实际工程中,我们主要关注三个地方的阻抗匹配:

  1. 发送端输出阻抗:通常芯片内部已经做了,但外部串联电阻有时需要调整
  2. PCB走线特性阻抗:通过叠层设计和线宽线距控制
  3. 接收端终端阻抗:一般用片内终端(OCT)或外部电阻

避坑指南

我曾经在12.5Gbps的设计中,用了FR4板材,走线长度15cm。结果信号衰减太厉害,眼图完全睁不开。后来换成了M6N板材,损耗降低了40%。记住:速率超过10Gbps,板材选择比走线长度更重要。

3.3 预加重与均衡:对抗信道损耗的两把刷子

信号在传输线上跑,高频分量衰减比低频严重得多。这就像你对着山谷喊话,高频的尖叫声传不远,低频的闷响反而能传很远。SerDes链路也一样,高频衰减导致码间干扰(ISI)。

解决思路有两个方向:

3.3.1 预加重(Pre-emphasis)

发送端在信号跳变时,把幅度临时抬高。说白了,就是给高频分量打一针强心剂。我常用的预加重参数设置如下:

// 预加重系数配置示例(以Xilinx GTH为例)
// 预加重强度:0-15,数值越大,高频提升越多
// 后加重强度:0-15,用于补偿不同频率的衰减差异

// 10Gbps链路,15cm FR4走线
// 我习惯先设预加重=8,后加重=4
// 然后扫眼图微调
GTH_TX_CTRL = 0x0A;  // 预加重=10,后加重=5

预加重不是越大越好。调太大了,信号过冲严重,反而增加EMI问题。我一般从中间值开始,配合眼图测试来微调。

3.3.2 均衡(Equalization)

接收端做补偿,把衰减的高频分量再抬起来。常见的均衡技术有三种:

均衡类型 原理 适用场景
CTLE(连续时间线性均衡) 模拟滤波器,提升高频增益 中短距离,10Gbps以下
FFE(前馈均衡) 数字滤波器,可编程抽头系数 需要灵活调整的场景
DFE(判决反馈均衡) 利用历史判决结果消除ISI 长距离,25Gbps以上

我记得有一次调试28Gbps链路,CTLE调到最大了眼图还是不行。后来打开DFE,只用了3个抽头,眼图瞬间就睁开了。DFE这东西,真是长距离传输的救星。

注意:均衡不是万能的

均衡只能补偿信道损耗,不能消除噪声。如果信号信噪比太差,均衡反而会放大噪声。我见过有人把CTLE增益调到最大,结果噪声也跟着放大,误码率反而更高了。

3.4 眼图与误码率(BER):信号质量的照妖镜

眼图是什么?说白了,就是把很多个UI的波形叠加在一起,看信号质量。一个健康的眼图,应该像一只睁开的眼睛,中间那个菱形区域越大越好。

眼图的关键参数:

  • 眼高(Eye Height):垂直方向的开度,决定噪声容限
  • 眼宽(Eye Width):水平方向的开度,决定时序容限
  • 抖动(Jitter):信号边沿的不确定性,分随机抖动和确定性抖动

误码率(BER)是最终指标。SerDes标准通常要求BER < 1e-12,也就是一万亿个bit里最多错一个。怎么测?直接跑PRBS码型,数错误bit数。

// 误码率测试流程(伪代码)
// 1. 发送端发PRBS31码型
// 2. 接收端同步后开始比对
// 3. 统计错误bit数

uint64_t total_bits = 0;
uint64_t error_bits = 0;

while (total_bits < 1e12) {
    if (rx_data != expected_data) {
        error_bits++;
    }
    total_bits += 32;  // 每次比对32bit
}

BER = (double)error_bits / total_bits;

实际测试时,1e-12的BER需要跑很久。我一般先跑1e-9快速验证,没问题再跑长时间测试。你想想看,10Gbps速率下测1e-12,大概需要100秒。要是测1e-15,得跑一整天。

3.5 知识体系总览

下面这张图把本章的核心逻辑串起来了。从差分信号出发,到阻抗匹配保证信号完整性,再到预加重和均衡对抗信道损耗,最后用眼图和BER来验证效果。每一步都环环相扣。

高速串行链路知识体系 差分信号传输 抗共模干扰 · 低摆幅 阻抗匹配 100Ω差分 · 反射控制 预加重 发送端补偿 均衡技术 CTLE · FFE · DFE 接收端补偿信道损耗 眼图与误码率(BER)分析 眼高 · 眼宽 · 抖动 · BER < 1e-12 最终验证手段 从信号传输 → 阻抗控制 → 信道补偿 → 质量验证,环环相扣

这张图我画了好几次才满意。你看,从左到右是信号从发送到接收的路径,从上到下是设计验证的流程。做SerDes设计,脑子里要有这张图,遇到问题就知道该查哪个环节。

实战总结

我做了这么多年SerDes,最大的体会是:不要迷信仿真,最终还是要看实测。仿真能帮你找到方向,但PCB的寄生参数、连接器的质量、甚至温度变化,都会影响实际性能。我的习惯是:仿真做到80分,留20分给调试余量。

嗯,这一章的内容就到这里。差分信号、阻抗匹配、预加重均衡、眼图BER,这四个知识点是SerDes的基石。你把这些搞透了,后面学PCS层、链路训练什么的,就会轻松很多。

个人小建议

初学者可以先从低速SerDes入手,比如Xilinx的GTP(最高6.6Gbps)。把眼图调好,把BER测明白,再挑战高速的GTH或GTY。我当年就是从3.125Gbps的SRIO开始练手的,踩了不少坑,但也学到了真东西。

可可精品资料库