4. PRBS 同步与失步:同步机制、失步检测、重同步

咱们做PRBS测试,说白了就是让发送端和接收端对暗号。两边用的多项式一样,初始状态一样,才能比对数据有没有出错。同步是这一切的基础,失步是测量中最怕碰到的坑。

我自己刚接触高速串行测试时,遇到过一回。眼图明明挺张开的,误码率却奇高。查了半天,发现是PRBS没对上,接收端一直在瞎比划。从那儿以后,我再也不敢小看同步这个环节了。

4.1 PRBS同步机制

PRBS序列看起来是随机的,其实有严格的规律。接收端要做的就是:猜出发送端此刻的移位寄存器状态,然后自己跑起来,跟收到的码流比对。

常见的同步方法有两种:

  • 本地序列同步法:接收端本地也跑一个同样的PRBS发生器,通过调整相位跟输入信号对齐。优点是同步快,缺点是硬件资源多。
  • 滑动相关同步法:接收端的移位寄存器用收到的数据不断填充,跟本地产生的期望值做对比。一旦匹配上,认为同步建立。

你想想看,实际工程里哪种更常用?我个人偏好滑动相关法。为什么呢?因为它对发送端没额外要求,用现成的数据流就能搞定。

同步方法同步时间硬件开销适用场景
本地序列同步快(几十比特)高测试仪器、专用芯片
滑动相关同步中等(几百到几千比特)低FPGA、通用接收机

同步的过程其实就是一个锁定过程。收到一个比特,挪动一位,跟本地期望值比较,对了就继续,错了就再滑动。嗯,这里要注意,滑动窗口大小直接影响同步时间。

// 伪代码:滑动相关同步
for (i = 0; i < MAX_WINDOW; i++) {
    local_prbs = generate_prbs(length);
    if (correlate(received_data, local_prbs) > THRESHOLD) {
        sync_locked = true;
        break;
    }
    // 滑动一个比特
    shift_received_data();
}

4.2 失步检测

同步状态不是一劳永逸的。信号抖动、噪声干扰、码间串扰,都可能把好不容易建立起来的同步给打掉。怎么判断失步了?

我常用三种判据:

  • 误码率超标:连续一段时间内,误码率超过预设门限。比如1e-3以上,基本可以判定失步了。
  • 连续错误计数:收到N个连续的错误比特,直接报告失步。N一般取4到16。
  • 同步锁定丢失:锁相环(PLL)失锁,或者时钟数据恢复(CDR)跑飞了。

有一次我在调一个10Gbps的链路,眼图看起来还行,但误码仪一直报错。我怀疑是同步有问题。后来加了失步检测,发现每几十微秒就会有一次失步,然后又马上重同步。原来是电源纹波太大,导致时钟抖动超标。要不是失步检测的日志,我可能要排查好几天。

失步检测三要素

  1. 错误率门限:通常设为1e-3 ~ 1e-2
  2. 检测窗口:至少包含PRBS一个周期以上
  3. 去抖动逻辑:连续确认,防止误判
失步判据典型阈值响应时间误报风险
误码率超标BER > 1e-3中等低(窗口平均后更稳)
连续错误计数连续8个错误比特快高(突发干扰可能导致误报)
CDR失锁PLL失锁标志最快低(但需要硬件支持)

4.3 重同步策略

失步之后怎么办?当然不能摆烂。重同步的策略直接影响链路的可用时间。

我建议分三种场景处理:

  • 快速重同步:丢少量数据后,直接重新滑动搜索。窗口可以缩小,目标是尽快恢复。
  • 完整重同步:重新进行完整的同步流程,包括复位PRBS发生器、清空移位寄存器。
  • 链路重训练:如果是物理层完全失锁,需要通知对端重新发训练序列。

这里有个避坑指南:我曾经设计过一个重同步策略,失步后立刻开始快速重同步。结果信号还在抖动中,连续失败,反而浪费了时间。后来加了一个重同步死区,等信号稳定一会儿再操作,效果好了很多。

// 重同步状态机(简化版)
if (sync_lost_detected) {
    wait_for_stable();
    resync_attempts = 0;
    while (resync_attempts < MAX_RETRY) {
        if (fast_resync() == SUCCESS) {
            sync_locked = true;
            break;
        }
        resync_attempts++;
    }
    if (resync_attempts >= MAX_RETRY) {
        full_resync(); // 完整重同步
    }
}

经验之谈:

实际项目中,重同步最好是分级的。先尝试快速同步,不行再完整同步。别一上来就推倒重来,那样恢复时间会太长。

小心同步死循环:

如果信道条件实在太差,重同步会反复失败。建议设置重试上限,超过后上报链路故障,通知上层协议处理。不然就是无底洞。

讲了这么多,PRBS同步的核心其实就是三个字:对齐、判断、恢复。对齐是找初始相位,判断是确认对齐了没有,恢复是掉了之后怎么拉回来。把这三点想明白了,PRBS测试的同步问题就不会再让你头疼。

下面这张图把整个流程串起来了,你可以边看边回想刚才说的要点。

PRBS同步与失步全过程 发送端PRBS 接收端移位寄存器 滑动相关比较 同步建立 误码率超标 (BER > 1e-3) 连续错误 (N > 8) CDR失锁 (PLL失锁) 触发重同步 (分级恢复) 同步保持 同步建立后持续监测 三种失步判据

节奏再捋一下。发送端不停地发PRBS,接收端用滑动相关去跟它对齐。对齐了,进入同步保持。一旦检测到三种失步判据中的任何一种,触发重同步。重同步成功了,回到同步保持;失败了,继续尝试或上报故障。这就是整个闭环。

说白了,PRBS测试的成败,一大半看同步做得怎么样。