4. 误码率(BER)基础
各位工程师朋友,咱们今天聊点基础但不能含糊的东西——误码率。
很多人觉得BER就是数数错了多少个bit,然后除一下完事。我也曾经这么想。直到在一次UCIe链路调试中,一块板子跑1000 Gb数据只错了1个bit,按公式算BER刚好10⁻¹²,看起来完美。但那个bit偏偏丢在了关键的控制序列里,直接导致整个链路重启了三次。嗯,从那以后我明白了,只看数字是不够的,你得理解BER背后那些细节。
4.1 误码率的定义
误码率(Bit Error Rate, BER),定义很简单:
BER = (接收到的错误bit数) / (发送的总bit数)
举个例子:你发了10¹²个bit,只有1个bit错了,BER就是10⁻¹²。单看公式确实简单。但我个人习惯在做工程测算时,把公式写成带时间维度的样子:
BER = 错误bit数 / (数据速率 × 测试时间)
为什么这么写?因为你做一致性测试或者眼图扫描时,总时间是有上限的。知道速率,就能反推出要测多少秒才能验证目标BER。
我建议所有做PHY测试的同事,随身记住一个比例关系:测BER=10⁻¹²,至少需要发送10¹²个bit;测BER=10⁻¹⁵,至少需要10¹⁵个bit。速率96 GT/s时,那就是至少6分钟——你不算这个就去进场测,很容易白干一天。
4.2 测量单位与常用量级
BER本身是无量纲比例。但它太小了,所以我们用科学记数法。下面是UCIe场景下最常用的几个量级:
| BER量级 | 典型场景 | 工程含义 |
|---|---|---|
| 10⁻⁶ ~ 10⁻⁹ | 无FEC的原始链路 | 链路质量较差,FEC必须介入 |
| 10⁻¹² | UCIe PCIe模式典型值 | 有FEC时,大部分链路的目标 |
| 10⁻¹⁵ | UCIe RAW模式无FEC | 信号质量极好,但实现代价极高 |
| 10⁻¹⁸ | 内部BIST精度极限 | 实验室级别验证,量产几乎不追求 |
你可以这么理解:10⁻¹²是一个典型的“头发丝”分界线。低于它,FEC能轻松兜住;高于它,你就要开始怀疑信号完整性设计是不是出问题了。
4.3 BER与信噪比的关系
BER和信噪比(SNR)之间的关系,几乎是所有高速链路设计的“第一性原理”。
对于NRZ调制(UCIe目前主要用的),简化理论关系是:
BER ≈ 0.5 × erfc(√(SNR / 2))
其中erfc是互补误差函数。这个公式看着头疼?没关系,我用实际经验给你翻译一下:
- SNR每提升1 dB,BER大约可以下降一个量级——具体要看链路噪声底色。
- 当你发现BER从10⁻¹²跳到10⁻⁹,别急着换芯片,先去查一下接收端眼图的高度是不是降了20 mV。
- SNR在6 dB以下时,不管你什么FEC都会很吃力。我曾经在某个早期UCIe样片上看到BER跑到10⁻⁴,查到最后是VCO的相位噪声超标了6 dB。
注意:上面的公式只适用于理想加性高斯白噪声(AWGN)信道。UCIe链路里,串扰、反射、电源纹波造成的误码,并不严格服从这个公式。你的眼图可能看起来还很“胖”,但BER已经爆炸了——这类情况我遇过不下三次,后来养成了“看眼图之前,先看PRBS的BER”的习惯。
4.4 误码类型
只懂一个BER总数是远远不够的。你得知道背后的误码长什么样。这三种我在调试中遇到最多:
4.4.1 单bit误码
单个bit发生反转。通常由加性噪声或很弱的串扰随机引发。特点:
- 误码之间独立,没有相关性
- UCIe的RS-FEC对这种误码修复能力最强(代码里的t=15就是为这个设计的)
- 要是你发现FEC纠错计数器里单bit误码一直往上涨,链路可能要降速了
4.4.2 多bit误码
同一个码字或同一个数据包内出现多个bit错误。原因通常是突发噪声或短时间内的信号塌陷。特点:
- 如果多bit数超出FEC纠错能力(比如RS里超过15个符号错),FEC会报Uncorrectable
- 我调试过一个案例:PCIe链路报Uncorrectable,扫了四版PCB没发现问题。最后用实时示波器抓到——电源模块的纹波在HBM训练期间产生了800 ps的塌陷,直接带乱了12个bit。多bit往往不是“多个独立噪声”,而是“一个事件塌了一片”
4.4.3 突发误码
连续多个bit甚至多个符号连续出错。特征更明显:
- 典型成因:ESD事件、电源瞬态跌落、时钟抖动突变、通道反射引入的码间干扰
- UCIe RS-FEC对突发误码有专门的交织保护——这是个非常巧妙的设计,后面我们会专门讲
- 你在调试软件里看到“Burst Error Detected”标志时,基本可以判定链路物理层有大问题。这时候不要去分析随机噪声,直接查电源域和通道阻抗
一个实用经验:当FEC纠错计数器里单bit和突发同时增加时,我优先去查发送端的TX EQ。因为TX EQ调不好,既会引入码间干扰(导致突发),又会在高频段放大噪声(导致单bit)。这个现象我在两款不同的UCIe控制器上都验证过。
这张图把BER基础拆成了三个分支。你拿到一根UCIe链路时,先去问自己三个问题:我的目标BER是多少量级?眼图处的SNR能不能支撑到这个量级?现在看到的误码属于哪一种类型?三个问题都答清楚了,再去开调试流程。