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的链路,眼图看起来还行,但误码仪一直报错。我怀疑是同步有问题。后来加了失步检测,发现每几十微秒就会有一次失步,然后又马上重同步。原来是电源纹波太大,导致时钟抖动超标。要不是失步检测的日志,我可能要排查好几天。
失步检测三要素
- 错误率门限:通常设为1e-3 ~ 1e-2
- 检测窗口:至少包含PRBS一个周期以上
- 去抖动逻辑:连续确认,防止误判
| 失步判据 | 典型阈值 | 响应时间 | 误报风险 |
|---|---|---|---|
| 误码率超标 | 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测试的成败,一大半看同步做得怎么样。