本文基于IEEE Std 802.3-2022 49章,本章介绍了10GBASE-R的PCS(Physical Coding Sublayer,物理编码子层)64b/66b原理,其中包括加解扰过程。

基本概念

加扰(Scrambling) 是一种数据变换技术,通过特定的算法将原始数据序列与伪随机序列进行异或运算,使输出数据呈现出类似随机噪声的统计特性。

解扰(Descrambling) 则是加扰的逆过程,使用相同的伪随机序列与接收到的加扰数据进行异或运算,恢复出原始数据。

目的

说明

后果

消除长连0/长连1

避免直流分量积累,降低信号质量

信号传递都有做AC耦合,直流分量传不过去,信号质量会变差

频谱展宽

使信号能量分布更均匀,降低电磁干扰(EMI)

能量集中在某个频带内,受到窄带干扰影响,另外在这部分的带宽内的能量泄露严重

提供足够的信号跳变

确保接收端能正确进行时钟恢复(CDR)

接收端的serdes 无法准确采样,PLL无法锁定

上图中:

  • 发送端扰码公式:

    s(n)=d(n)s(n39)s(n58)s(n) = d(n) \oplus s(n - 39) \oplus s(n - 58)

    其中 d(n) 是原始数据,s(n) 是扰码后输出。

  • 接收端解扰公式:

    d^(n)=r(n)r(n39)r(n58)\hat{d}(n) = r(n) \oplus r(n - 39) \oplus r(n - 58)

    其中 r(n) 是接收到的数据(理想情况下 r(n)=s(n)),代入后可以得到d^(n)=d(n)\hat{d}(n) = {d}(n)

注意:解扰器只依赖接收到的 r(n),不依赖原始数据或初始状态!这是因为即使接收端 LFSR 初始状态错误,经过最多 N 比特(N = 最大抽头延迟,如 58)后,内部状态会自动“被正确数据覆盖”而收敛到正确状态。

以一个简单的多项式1+x3 1+x^3为例:

扰码公式(发送端):

s(n)=d(n)s(n3)s(n) = d(n) \oplus s(n - 3)

解扰公式(接收端):

d^(n)=r(n)r(n3)\hat{d}(n) = r(n) \oplus r(n - 3)

假设接收端初始寄存器为 [?, ?, ?](未知),但一旦开始接收 r(0),r(1),r(2),…,从第 3 个比特起:

d^(3)=r(3)r(0)=[d(3)s(0)]s(0)=d(3)\hat{d}(3)=r(3)⊕r(0)=[d(3)⊕s(0)]⊕s(0)=d(3)

即使 r(0) 被错误地用于反馈,但从 n=3 开始,所有用于反馈的 r(n−k) 都是真实的扰码输出,因此解扰结果立即正确!即只要连续接收到 N+1 个正确的扰码比特(N 为最大延迟),解扰器就能自动输出正确的原始数据,无需知道初始状态。

串行LFSR加扰

直接根据加扰的多项式可以很方便写出代码,每个时钟周期仅输入1bit数据,对应1bit数据输出,同时LFSR中的状态全部更新。

并行LFSR加扰

很多时候输入数据并不是单比特信号,需要对上述的加扰过程进行改造,在同一个时钟周期完成多bit数据加扰,可以极大提升系统数据处理的速度,这也是现代通信中常用的加扰方式。