仿真Ethernet 2500 PCS/PMA IP时,用到了8B10B编解码技术,本文基于IEEE 802.3标准,总结一下8B10B编解码相关,并赋pcs_8b10b编解码仿真代码和8023-2022.pdf。

1、概述

8B/10B编码是一种广泛应用于高速串行通信的线路编码技术,在IEEE 802.3标准中,8B/10B传输码被详细定义于协议36.2.4章节,用于以太网的物理编码子层(PCS)。

28B/10B编码目的

8B/10B编码的主要目的是改善信息在链路上的传输,具体体现在以下几个方面:

  • 确保足够跳变:编码后的比特流中含有充分的电平跳变,使接收端能够可靠地恢复时钟
  • 增强错误检测:编码冗余性使得接收端能够检测传输过程中发生的单比特或多比特错误
  • 实现DC平衡:通过控制"0"和"1"的数量比例,避免直流分量累积
  • 便于对齐:特殊的码组(如逗号序列)包含独特且易于识别的比特模式,辅助接收端实现码组对齐

38B/10B编码规范

3.1 符号表示约定

8B/10B编码采用字母符号来描述未编码的信息字节和控制变量:

  • 未编码信息字节:8位数据表示为A B C D E F G H,其中A是最高有效位(MSB),H是最低有效位(LSB)
  • 控制变量:Z,取值为D(数据码组)或K(特殊码组/控制码组)
  • 编码后字节:10位码组表示为a b c d e i f g h j

3.2 编码转换格式

8B/10B编码将8位数据分解为两个子块进行编码:

  • 5B/6B编码:将低5位(EDCBA)编码为6位(abcdei)
  • 3B/4B编码:将高3位(HGF)编码为4位(fghj)

3.3 码组命名规则

每个有效码组采用以下命名约定:

  • 数据码组:/Dx.y/,其中x是EDCBA的十进制值,y是HGF的十进制值
  • 控制码组:/Kx.y/,同样基于x和y的值

IEEE 802.3标准中定义了256个有效数据码组和12个有效控制码组,控制码组用于实现有序集、包定界等功能。全量的数据码表定义请参考协议。

4 运行差异(Running Disparity)机制

4.1 基本概念

运行差异(RD)是8B/10B编码中维持DC平衡的核心机制:

  • 不平衡度(Disparity):码字中"1"的数目与"0"的数目的差值。通常"1"计为+1,"0"计为-1
  • RD状态:二进制参数,只有负(-)和正(+)两种状态
  • 初始状态:发送器在上电或退出测试模式后,应假定初始运行差异为负值

4.2 子块级别的RD计算

运行差异基于子块进行计算:

  • 6位子块:对应abcdei,编码后检查1和0的数量差异
  • 4位子块:对应fghj,编码后检查1和0的数量差异

4.3 RD更新规则

运行差异的更新遵循以下规则:

  • 子块中1多于0 → RD变为正(+)
  • 子块中0多于1 → RD变为负(-)
  • 1和0数量相等 → RD保持不变
  • 特殊子块:
    • 6位子块为000111时,RD变为正(+)
    • 6位子块为111000时,RD变为负(-)
    • 4位子块为0011时,RD变为正(+)
    • 4位子块为1100时,RD变为负(-)

4.4 编码表结构

为支持RD控制,每个8位数据对应两个10位编码:

  • RD-表:当前RD为负时使用
  • RD+表:当前RD为正时使用

编码器根据当前RD值选择对应的码组输出,同时根据输出码组的极性更新RD状态。

5 IEEE 802.3中的8B/10B编解码规则

5.1 发送器操作规则

根据IEEE 802.3 Clause 36,发送器应遵循以下规则:

  1. 初始RD:上电或退出测试模式后,发送器应假定初始运行差异为负值
  2. 码组选择:对于每个要编码的字节,根据当前RD值在编码表(Table 36–1a或Table 36–2)的对应列中选择码组
  3. RD更新:每个码组传输后,基于其内容计算新的RD值,作为下一字节编码的当前RD
  4. 控制标识:输入数据伴随1位控制标识,高电平表示输入为控制码组(K),低电平表示数据码组(D)

5.2 接收器操作规则

接收器在解码时应遵循以下规则:

  1. 初始RD:接收器可以假定初始运行差异为正或负
  2. 码组有效性检查:根据当前RD值在编码表的对应列中查找接收到的10位码组
    • 若找到则码组有效,解码出对应的8位数据
    • 若未找到则码组无效,标记为错误
  3. RD更新:无论码组是否有效,都基于其内容计算新的RD值,用于下一码组的解码
  4. 控制码组识别:若接收到的码组是12个控制码组之一,则输出控制标识为高电平

5.3 无效码组与错误监控

  • 无效码组的检测不一定意味着该码组本身出错,可能是由于先前错误改变了RD值
  • 无效码组的计数与链路误码率(BER)成比例,可用于链路错误监控

5.4 有序集(Ordered Sets

IEEE 802.3定义了多种有序集,由单个或多个码组组成,用于包定界、同步等功能:

  • 所有有序集的第一个码组必须是特殊码组
  • 多码组有序集的第二个码组必须是数据码组,用于区分不同的有序集,详细定义解释参考协议定义。

有序集的实现依赖于8B/10B编码的特性:

•      控制码组(K码组)具有不同于数据码组的编码,确保接收端能够正确识别有序集边界。

•      运行差异机制使得有序集在传输过程中保持DC平衡,如空闲有序集的交替发送。

•      逗号序列(如/K28.5/的独特比特模式)使接收端能够快速实现码组对齐。

68B/10B编解码仿真代码

Ethernet 2500 PCS/PMA IP验证而优化的8B/10B编解码仿真代码和8023-2022.pdf,请在此处获取。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐