3. 100BASE-T1标准体系

各位好,欢迎来到第三章。这一章我们聊聊信号在物理线上到底是怎么“跑”起来的。说白了,就是数字比特怎么变成模拟信号,再通过一对差分线传出去。

100BASE-T1 用的不是咱们常见的 NRZ 或者 4B5B 编码。它有一套自己的组合拳:扰码器 → 3B2T 编码 → MLT-3 调制 → PAM3 信号。我当年第一次看到这个链路时,心里也犯嘀咕:为什么搞这么复杂?后来踩了几个坑才明白——每一级都有它存在的理由。

核心链路速览

发送端:原始数据 → 扰码器 → 3B2T 编码 → MLT-3 调制 → PAM3 差分信号 → 线缆

接收端:线缆信号 → 均衡器 → 时钟恢复 → PAM3 解码 → MLT-3 逆映射 → 3B2T 解码 → 解扰 → 原始数据

100BASE-T1 发送端信号处理链路 原始数据 扰码器 3B2T 编码 MLT-3 调制 PAM3 信号输出 各模块作用: • 扰码器:打散数据中的长连“0”或长连“1”,避免频谱能量集中 • 3B2T 编码:将 3 个二进制比特映射为 2 个三进制符号,降低符号率 • MLT-3 调制:将三进制符号转换为三电平电压波形,减少高频分量 • PAM3:最终在差分线上呈现为 +1V / 0V / -1V 三种电平状态

3.1 为什么是 PAM3?

PAM3,全称是 3-Level Pulse Amplitude Modulation。它用三个电平来传输信息:+1、0、-1。每个符号携带 log₂(3) ≈ 1.58 比特。

你可能会问:为什么不用更简单的 PAM2(也就是 NRZ)?或者用 PAM4 不是效率更高吗?

我解释一下。100BASE-T1 的目标是在单对差分线上实现 100 Mbps 全双工。如果用 NRZ,符号率就得跑到 100 MBaud。这个频率在非屏蔽双绞线上,EMI 和串扰会非常严重。PAM4 虽然符号率能降到 50 MBaud,但它的信噪比要求更高,接收端的设计成本会翻倍。

PAM3 是个折中方案。它的符号率是 66.67 MBaud,比 NRZ 低了三分之一。三个电平的判决距离也足够大,普通 ADC 和均衡器就能搞定。我记得第一次用示波器看 PAM3 眼图时,三个“眼睛”张开得挺漂亮,心里踏实了不少。

调制方式 电平数 每符号比特数 符号率 (Mbaud) 抗噪能力 实现复杂度
NRZ (PAM2) 2 1 100 中 低
PAM3 3 1.58 66.67 高 中
PAM4 4 2 50 低 高

个人经验:PAM3 的接收端需要三个判决阈值:+0.5V、0V、-0.5V。我在做样机调试时发现,阈值偏移 50mV 以上就会开始出现误码。所以建议在 PCB 布局时,把 ADC 的参考电压走线加粗、包地,远离开关电源。

3.2 3B2T 编码:把比特变成三进制符号

3B2T 编码,名字就说明了它的功能:每 3 个二进制比特(3 bits)映射成 2 个三进制符号(2 Trits)。

为什么要做这个映射?直接原因是为了匹配 PAM3 的传输格式。PAM3 每个符号有 3 种状态,两个符号就有 3² = 9 种组合。3 个二进制比特有 2³ = 8 种组合。8 种输入映射到 9 种输出中的 8 种,刚好够用。

编码表如下:

二进制输入 (3 bits) 三进制输出 (2 Trits) MLT-3 电平序列
000 +1, +1 +1V → +1V
001 +1, 0 +1V → 0V
010 +1, -1 +1V → -1V
011 0, +1 0V → +1V
100 0, 0 0V → 0V
101 0, -1 0V → -1V
110 -1, +1 -1V → +1V
111 -1, 0 -1V → 0V

注意看,编码表里没有出现 -1, -1 这个组合。为什么?因为 MLT-3 调制有一个约束:相邻符号之间不允许出现 -1 到 -1 的跳变。这个约束是为了控制信号的频谱形状,减少直流分量。我当初看标准文档时,对这个设计拍案叫绝——用 8/9 的编码效率,换来了更好的电磁兼容特性。

避坑指南:我曾经在 FPGA 里实现 3B2T 编码时,直接用了一个 8×2 的查找表。结果综合后资源占用比预期大。后来改成组合逻辑 + 多路选择器,面积缩小了 40%。对于量产芯片,建议用硬连线逻辑实现编码表,别偷懒用 ROM。

3.3 MLT-3 调制:三电平的“舞蹈”

MLT-3(Multi-Level Transmit,3 levels)是一种三电平的线路编码方式。它的核心规则是:

  • 电平状态在 +1、0、-1 之间循环跳变
  • 遇到输入符号 0 时,保持当前电平不变
  • 遇到输入符号 +1 时,电平向正方向跳变一级
  • 遇到输入符号 -1 时,电平向负方向跳变一级
  • 跳变方向是循环的:+1 → 0 → -1 → 0 → +1

举个例子。假设输入的三进制符号序列是:+1, 0, -1, +1, 0, 0, -1。MLT-3 的输出电平变化如下:

初始电平: 0V
符号 +1 → 电平跳变到 +1V
符号  0 → 电平保持 +1V
符号 -1 → 电平跳变到 0V
符号 +1 → 电平跳变到 -1V
符号  0 → 电平保持 -1V
符号  0 → 电平保持 -1V
符号 -1 → 电平跳变到 0V

你发现没有?MLT-3 的输出电平变化频率比输入符号率低。因为遇到“0”符号时,电平不变。这就意味着信号的基频分量被压低了。100BASE-T1 的信号能量主要集中在 30 MHz 以下,这对 EMC 测试非常友好。

关键指标:MLT-3 的最大电平跳变频率是符号率的一半。对于 66.67 MBaud 的符号率,最大跳变频率约为 33.33 MHz。这比 NRZ 的 100 MHz 基频低了整整三分之二。

3.4 扰码器:让数据“白噪声化”

扰码器是信号链的第一级。它的作用很简单:把原始数据中的长连“0”或长连“1”打散。

为什么需要打散?因为如果发送端连续发送相同的比特(比如全 0 或全 1),PAM3 信号就会长时间停留在同一个电平上。这会导致两个问题:

  1. 时钟恢复困难:接收端的 CDR(时钟数据恢复)电路需要靠信号跳变来锁定相位。长时间无跳变,CDR 就会失锁。
  2. 频谱能量集中:低频分量过大,会干扰同一线束中的其他信号。

100BASE-T1 使用的扰码器是一个自同步扰码器,生成多项式为:

G(x) = x¹¹ + x⁹ + 1

这个多项式是什么意思?简单说,它是一个 11 级的线性反馈移位寄存器(LFSR)。当前输出比特等于输入比特与寄存器第 9 位、第 11 位的异或结果。

我画个简化的结构图:

输入数据 ──→ ⊕ ──────────────────────────→ 输出数据
            ↑                              │
            │                              ↓
            └── [R1]→[R2]→...→[R9]→...→[R11]
                     ↑          ↑
                     └──── 反馈 ┘

实际工作时,发送端和接收端使用相同的多项式。接收端收到数据后,用同样的 LFSR 结构做逆运算,就能恢复出原始数据。

调试技巧:我建议在 FPGA 验证阶段,把扰码器的中间寄存器值通过调试接口引出来。如果发现接收端解扰后的数据全是乱码,先检查两端的 LFSR 初始值是否一致。100BASE-T1 标准规定初始值全为 1,但有些 PHY 芯片的实现可能有差异。

3.5 完整的发送链路示例

咱们走一个完整的例子,从原始数据到 PAM3 信号:

  1. 原始数据:101 110 001 010(每 3 比特一组)
  2. 扰码后:011 100 111 001(假设扰码器输出)
  3. 3B2T 编码:0,+1 | -1,0 | -1,0 | +1,0(查表得到三进制符号)
  4. MLT-3 调制:0V → +1V → 0V → -1V → 0V → -1V → 0V → +1V → 0V
  5. PAM3 信号:差分线上呈现对应的三电平波形

接收端做逆操作:PAM3 解码 → MLT-3 逆映射 → 3B2T 解码 → 解扰 → 原始数据。

注意:MLT-3 的逆映射不是简单的查表。因为 MLT-3 是有状态的——当前输出电平取决于上一个电平。接收端必须维护一个状态机,跟踪当前电平位置,才能正确还原三进制符号。我见过有工程师把 MLT-3 解码当成组合逻辑来做,结果误码率居高不下。

3.6 本章小结

100BASE-T1 的信号编码与调制,是一套精心设计的组合方案:

  • 扰码器:消除长连 0/1,保证时钟恢复和频谱平坦
  • 3B2T 编码:将二进制转为三进制,降低符号率
  • MLT-3 调制:进一步压低信号带宽,改善 EMC
  • PAM3:在单对差分线上实现 100 Mbps 传输

这套方案不是拍脑袋想出来的。它是在成本、性能、EMC 三者之间反复权衡的结果。我个人觉得,理解这四级处理链路的设计动机,比死记硬背编码表更重要。下次你拿到一块 100BASE-T1 PHY 芯片的数据手册,看到那些寄存器配置项时,就能明白每一级在做什么、为什么这么做。