PRBS误码注入与比特错误定位 - 第1节
一、PRBS 是什么?说白了就是个“看起来随机”的序列
做高速串行接口测试,PRBS 是你绕不开的东西。我刚开始接触 SerDes 测试时,总觉得这个名字挺唬人——伪随机二进制序列?伪在哪儿?随机又在哪儿?
其实,PRBS 就是一串 0 和 1 组成的序列。它有两个关键特点:
- “看起来”随机: 你盯着这个序列看,很难找到规律,高频和低频成分都很丰富
- “实际上”确定: 只要生成多项式定了,种子值定了,每次跑出来的序列完全一样
为什么会这样?因为 PRBS 是用线性反馈移位寄存器(LFSR)生成的。每次移位、反馈的计算方式固定,所以它本质上是个周期性的确定性序列。但周期足够长的时候,你根本看不出它重复。
二、数学定义——其实就是多项式的事
PRBS 的核心数学工具是本原多项式。你想想看,一个 n 阶的 PRBS,它的生成多项式长这样:
P(x) = x^n + a_{n-1}·x^{n-1} + ... + a_1·x + 1
这里的系数 a_i 要么是 0,要么是 1。说人话就是:
- 多项式的次数 n 决定了寄存器的位数
- 哪些项存在(系数为1),决定了反馈的抽头位置
- 最后那个 +1 是必须的,没有它就不是本原多项式了
举个例子,PRBS7 的多项式是 x^7 + x^6 + 1。这意味着:
- 用 7 个 D 触发器串起来
- 把第 7 级和第 6 级的输出做异或,再反馈到输入端
- 寄存器全 0 是禁止状态——一旦出现,序列就卡死了
核心公式: 一个 n 阶 PRBS 的最大序列长度为 2^n - 1。减去的那个 1,就是全 0 状态。
三、常见阶数——选对 PRBS 才是真本事
做测试这么多年,我见过不少人选错了 PRBS 阶数,结果测出来的眼图惨不忍睹,还以为是芯片的问题。其实,不同阶数有不同的用武之地。
1. PRBS7(2^7 - 1 = 127 位)
- 多项式: x^7 + x^6 + 1
- 特点: 序列最短,低频分量最少,能量集中在高频
- 应用: 8b/10b 编码的链路测试(比如 PCIe Gen1/2、USB 2.0)
我个人的经验:调 1Gbps 以下的链路,我习惯用 PRBS7 来怼。因为它的重复周期短,跑一轮眼图测试很快,适合做初步的“能不能通”验证。
2. PRBS15(2^15 - 1 = 32,767 位)
- 多项式: x^15 + x^14 + 1
- 特点: 序列长度适中,低频分量开始出现
- 应用: 64b/66b 编码的链路测试(比如 10G 以太网)
避坑提醒: 我曾经遇到过 PRBS15 序列里出现了超长的连 0 连 1,导致接收端的 CDR 失锁。后来排查发现并不是 CDR 的问题,而是这个阶数本身就容易产生长的游程。所以,测试时一定要让 CDR 先锁定再开始误码统计,不然数据全是假的。
3. PRBS23(2^23 - 1 = 8,388,607 位)
- 多项式: x^23 + x^18 + 1
- 特点: 低频分量更丰富,能更好地模拟真实数据
- 应用: 带扰码的链路测试(比如 SDH/SONET)
4. PRBS31(2^31 - 1 ≈ 21 亿位)
- 多项式: x^31 + x^28 + 1
- 特点: 序列极长,低频成分接近理论极限,最接近真实业务数据
- 应用: 高速串行链路压力测试(比如 100G/400G 以太网、PCIe Gen5/6)
说白了,PRBS31 就是测试界的“终极武器”。链路能扛住 PRBS31 的考验,基本上真实数据跑起来也不会掉链子。
| 阶数 | 多项式 | 序列长度 | 典型应用 |
|---|---|---|---|
| PRBS7 | x⁷ + x⁶ + 1 | 127 位 | 8b/10b 编码链路 |
| PRBS15 | x¹⁵ + x¹⁴ + 1 | 32,767 位 | 64b/66b 编码链路 |
| PRBS23 | x²³ + x¹⁸ + 1 | 8,388,607 位 | SDH/SONET 链路 |
| PRBS31 | x³¹ + x²⁸ + 1 | 2,147,483,647 位 | 高速串行总线压力测试 |
四、PRBS 的核心特性——你必须要知道的
我记得有一次评审测试方案,团队里新来的同事问我:“PRBS 和真随机数到底有啥区别?”这是个好问题。我通常从三个维度来理解:
- 平衡性: 在一个完整周期里,0 和 1 的数量只差 1 个。以 PRBS7 为例,127 位里 64 个 1、63 个 0。这种平衡性对 AC 耦合链路特别重要,否则会发生基线漂移。
- 自相关特性: PRBS 的自相关函数近似于冲击函数。通俗地说,把序列和自己错位相乘再累加,除了对齐时输出很大,其他时候都趋近于 0。这意味着它的频谱很平坦,能均匀激励链路的所有频率点。
- 游程分布: 长度为 K 的连 1 或连 0 出现的次数符合几何分布。打个比方,PRBS7 中长度为 1 的游程占 50%,长度为 2 的占 25%,以此类推。这能有效检验 CDR 对长连 0 连 1 的跟踪能力。
说实话, 我见过太多人只看眼图不看误码率。眼图漂亮不代表链路没错误。PRBS 的真正价值在于——它能让你数清楚到底错了多少个 bit,这是判断链路质量最硬核的指标。
五、为什么测试要用 PRBS 而不是其他码型?
你可能要问:我直接发方波或者特定码型不行吗?嗯,你要这么想:
方波的频谱太窄,只能测试链路在单一频率下的表现。真实数据跑的可是宽频谱信号。PRBS 的频谱从直流到奈奎斯特频率都有能量分布,就像给链路做了一次“全频段体检”。
而且,PRBS 还有一个杀手锏——可同步性。接收端可以用同样的 LFSR 结构和种子值,和发送端“对表”。一旦同步上了,接收端就知道接下来应该收到什么 bit。收到的和预期的不一样?那就是误码了。
我之前遇到的一个场景: 测试 25Gbps 背板时,用 PRBS31 跑 10 分钟,误码率稳定在 1E-15 以下。换成自定义码型跑同样的时间,结果完全不一样。只有 PRBS 能给出“这个链路到底能好成什么样”的底线答案。
六、一点实践建议
选 PRBS 阶数其实没想象中复杂。我一般按这个经验来:
- 看编码: 8b/10b → PRBS7;64b/66b → PRBS15 或 PRBS23;没编码或需要极致压力 → PRBS31
- 看速率: 1Gbps 以下 PRBS7 足矣;10Gbps 以上老老实实用 PRBS31
- 看测试目的: 调通链路用 PRBS7;压力测试用 PRBS31;中间场景用 PRBS15 或 PRBS23
千万别干那种“图省事全程用 PRBS7”的事。等你产品量产了,客户用的可都是真随机数据,PRBS7 通过不代表 PRBS31 能过。这个问题,我希望你一开始就记住。