3. 线速率与编码方案:线速率计算、8B/10B编码、64B/66B编码、扰码器原理

各位好,咱们今天聊聊高速收发器里一个绕不开的话题——线速率与编码方案。说实话,我刚入行那会儿,总觉得这些编码啊、扰码啊,都是些理论上的花架子。直到有一次,我调试一块25Gbps的板子,眼图怎么都睁不开,最后发现是编码方案选错了,导致DC平衡没做好。嗯,从那以后,我再也不敢小看这些“花架子”了。

3.1 线速率计算:别被数字唬住

线速率,说白了就是信号在物理链路上实际跑的比特率。它跟咱们常说的数据速率可不是一回事。你想想看,数据速率是有效载荷的速率,而线速率还得算上编码开销。

公式其实很简单:

线速率 = 数据速率 × (编码后比特数 / 编码前比特数)

举个例子,我做过一个10Gbps的以太网项目。数据速率是10Gbps,用的是64B/66B编码。那么线速率就是:

10 Gbps × (66 / 64) = 10.3125 Gbps

你看,多了312.5Mbps的开销。这可不是小数目。我在项目中遇到过有人直接把10Gbps当线速率去选器件,结果链路死活跑不通。所以啊,选型的时候一定要算清楚。

核心要点: 线速率 = 有效数据速率 × 编码开销因子。千万别忘了编码开销!

3.2 8B/10B编码:经典但有点“胖”

8B/10B编码,是SerDes领域的老前辈了。它的原理很简单:把8位数据映射成10位码字。多出来的2位干嘛用?保证DC平衡,提供时钟恢复信息。

我个人习惯把8B/10B编码的优缺点总结成一张表:

优点 缺点
DC平衡好,适合AC耦合 20%的开销,效率低
有专用控制字符(K码) 实现复杂,需要查找表
游程长度可控(最长5个连续相同位) 线速率高时功耗大

我记得在PCIe Gen1/Gen2时代,8B/10B编码是标配。但现在嘛,到了25Gbps以上,20%的开销就有点吃不消了。所以后来有了64B/66B编码。

避坑指南: 我曾经在设计中忽略了8B/10B编码的“运行不一致性”(Running Disparity)问题。结果导致链路在特定数据模式下频繁出错。解决办法是确保发送端和接收端的RD状态机初始状态一致。

3.3 64B/66B编码:更高效的“瘦身”方案

64B/66B编码,顾名思义,每64位数据只增加2位开销。效率从80%提升到了约97%。这多出来的17%可不是小数目,在高速链路里,这意味着一大笔带宽。

它的工作原理是这样的:

  • 每64位数据块前加2位同步头(Sync Header)
  • 同步头“01”表示数据块,“10”表示控制块
  • 没有专用的K码,控制信息嵌入在数据块中

我做过一个100G以太网的项目,用的就是64B/66B编码。说实话,刚开始调的时候挺头疼的。因为它的同步头只有2位,误判概率比8B/10B的K码要高。后来我加了一个同步头校验状态机,才把误锁率降下来。

注意: 64B/66B编码虽然效率高,但它的DC平衡不如8B/10B。所以通常需要配合扰码器使用。别想着只用编码就搞定一切。

3.4 扰码器原理:让数据“随机化”

扰码器,名字听着挺玄乎,其实原理很简单。它就是用伪随机序列对数据进行异或处理,让数据看起来更“随机”。为什么要这么做?

  • 避免长串的0或1,保证时钟恢复
  • 减少EMI(电磁干扰)
  • 改善DC平衡

常用的扰码器多项式有:

// 用于64B/66B编码的扰码器
// 多项式: x^58 + x^39 + 1
// 实现方式: 线性反馈移位寄存器 (LFSR)

// 伪代码示例
reg [57:0] lfsr;
always @(posedge clk) begin
    if (reset) begin
        lfsr <= 58'h1;  // 不能全0
    end else begin
        lfsr <= {lfsr[56:0], lfsr[57] ^ lfsr[38]};
    end
end

// 加扰: data_out = data_in ^ lfsr[57];

我建议你在实现扰码器时,注意两个坑:

  1. 初始值不能全0——全0的LFSR会一直输出0,等于没加扰
  2. 收发双方的扰码器必须同步——否则解扰出来的数据全是错的
经验之谈: 我曾经在调试100G链路时,发现误码率始终在10^-6量级下不去。查了三天,最后发现是扰码器的初始值没对齐。接收端比发送端晚了一个时钟周期开始解扰。从那以后,我每次都会在链路训练阶段专门做扰码器同步校验。

3.5 知识体系总览

说了这么多,咱们用一张图来总结一下本章的核心逻辑。这张图是我自己画的,把线速率、编码方案和扰码器的关系理清楚了。

线速率与编码方案知识体系 线速率计算 线速率 = 数据速率 × 编码开销因子 编码方案 8B/10B编码 开销:20% DC平衡:优秀 应用:PCIe Gen1/2 SATA, USB 3.0 64B/66B编码 开销:3.125% DC平衡:需配合扰码 应用:10G/25G/100G 以太网 扰码器(Scrambler) 多项式:x^58 + x^39 + 1 | 作用:随机化数据、改善DC平衡、降低EMI 注:编码方案与扰码器通常配合使用,共同保证链路可靠性

这张图把咱们今天讲的内容串起来了。从上往下看:先算线速率,再选编码方案,最后用扰码器兜底。三者缺一不可。

我的建议: 实际项目中,别只看理论速率。一定要把编码开销、扰码器同步时间、链路训练时间都算进去。我见过太多人只算了数据速率,结果实际吞吐量差了一大截。

好了,关于线速率与编码方案,咱们就聊到这儿。记住一句话:编码方案决定了链路的效率,扰码器决定了链路的可靠性。两者相辅相成,缺一不可。

可可精品资料库