车载以太网之要火系列 - 第7篇:从4B3B到3B2T,跟我一起,PAM3 编码烧脑无止境

写在开篇:

莫听穿林打叶声,何妨吟啸且徐行。
竹杖芒鞋轻胜马,谁怕?一蓑烟雨任平生。

——苏轼《定风波》

来首苏老夫子的词,镇镇场子。

谁怕?一蓑烟雨任平生。

迟到的学习,我觉得——也没那么糟。


一、一个绕不过去的坑

昨天写了“关于PAM3,我决定不钻了”。写的时候挺潇洒,但今天,脑子里一直有个声音,搞得我一个头两个大

PAM3到底是怎么把3个比特变成2个三进制符号的?啥是三进制?66.67MHz怎么算出来的?log₂(3)这个1.58从哪蹦出来的?

如果这些答不上来,之前说的“效率提升”就只是背答案。

所以这次,不绕了,从根上挖


二、先搞清楚几个基本概念

在讲PAM3之前,得先搞明白几个最基础的东西。

什么是“时钟频率”?

时钟频率就是芯片内部有一个“节拍器”,每秒钟敲多少下。每敲一下,芯片就执行一个动作——比如“读一个数据”或“写一个数据”。25MHz的意思就是:这个节拍器每秒钟敲2500万下,芯片每下干一件事。

电脑的CPU是3GHz,意思是一秒钟振荡30亿次。G是10亿(Giga),M是100万(Mega),所以3GHz=30亿次/秒,25MHz=2500万次/秒。

什么是“并行”和“串行”?

  • 并行:一次传多个比特。就像8车道的高速公路,一次并排跑8辆车。MII接口一次传4位,就是4条车道。

  • 串行:一次只传1个比特。就像单车道,车一辆一辆过。双绞线上最终传输的就是串行——一次只传1个符号(-1、0或+1)。

什么是“数据率”和“符号率”?

  • 数据率:每秒钟传了多少个比特(bit/s)

  • 符号率:每秒钟传了多少个符号(符号/秒),也叫波特率

如果每个符号只带1个比特,那数据率=符号率。如果每个符号带多个比特,那数据率=符号率×每个符号的比特数。

PAM3就是后者——每个符号带约1.58个比特,所以符号率66.67MHz时,数据率≈66.67×1.58≈105Mbit/s(略高于100M,因为还有开销)。


三、数据是怎么从MAC送到PHY的?

在讲PAM3之前,得先知道数据是从哪来的。

MAC和PHY之间有一条“数据高速公路”,叫MII接口(Media Independent Interface)。

MII是干啥的?

一句话:把MAC要发送的数据,传给PHY。

MII接口一次传4位数据,时钟频率25MHz。为什么是25MHz?

100Mbit/s ÷ 4位 = 25MHz

每秒钟PHY给MAC提供2500万个时钟周期,每个周期传4位,正好100Mbit/s。

一个比拟:

MII就像一条4车道的公路。每秒钟有2500万辆车(时钟周期)通过,每辆车装4个比特(4位并行)。一秒钟正好运100M个比特。


四、第一步:4B3B——重新打包

MII送来的数据是4位一组的,但PAM3编码器需要3位一组的数据。

怎么办?重新打包

把4位一组的bit流,重新划分成3位一组。比如原始数据是:
0000 0101 1010 1111 ...

4B3B之后变成:
000 001 011 010 111 1...(最后那个"1"是跟下一批数据拼的)

这不是加密,不是压缩,仅仅是重新分组。 就像你把一副牌从“4张一叠”重新码成“3张一叠”。

因为从4位变成3位,同样数据量下,组的数量变多了,所以时钟频率要从25MHz提高到33.33MHz

33.33MHz × 3位 = 100Mbit/s

数据率没变,只是内部处理的节奏变了。

一个比拟:

原来你的工厂每25MHz来一批4个零件(4位)。你的机器一次只能处理3个零件(3位)。你就先把4个零件拆开,重新装成3个一盒,再送进机器。机器处理的速度(33.33MHz)比来货的速度(25MHz)快,因为每盒装的零件数少了。


五、第二步:3B2T——把二进制变成三进制

这是最核心、最烧脑的一步。

3个二进制位,有多少种组合? 2³ = 8种(000, 001, 010, 011, 100, 101, 110, 111)

2个三进制符号,每个符号可以取-1、0、+1三种值,一共有多少种组合? 3² = 9种

9种组合,覆盖8种二进制组合,绰绰有余。还多出来1种(比如0,0)可以当“控制信号”。

那这张映射表是标准定义好的,还是咋来的?

是IEEE 802.3bw标准定义好的。

工程师们在设计这个标准时,需要把8种3位二进制组合,映射到9种2个三进制符号的组合上。他们选了一种映射方式,写进了标准里。不是唯一的映射方式,但一旦定了,所有厂家都得遵守,否则设备之间没法通信。

就像全世界的红绿灯都约定“红灯停、绿灯行”——你可以约定“红灯行、绿灯停”,但没人跟你配合。

下面是IEEE 802.3bw标准定义的映射表:

3位二进制映射成2个三进制符号
000(-1, -1)
001(-1, 0)
010(-1, +1)
011(0, -1)
100(0, +1)
101(+1, -1)
110(+1, 0)
111(+1, +1)

举个例子:

  • 3位二进制 010 → 映射成 (-1, +1)

  • 3位二进制 101 → 映射成 (+1, -1)

这个步骤的意义:3位二进制有8种状态,2个三进制符号有9种状态,用9种状态去表示8种二进制组合,实现了“二进制到三进制的编码转换”。

一个比拟:

你想用“手势”表示数字。原来只有“石头(0)、剪刀(1)、布(2)”三种手势(三进制)。但你要表示的数字是0-7(8种)。于是你连续做两个手势:第一个手势决定范围,第二个手势决定具体数字。两个手势的组合有9种,足够表示0-7。


六、第三步:PAM3——把三进制符号变成电压

到了最后一步,事情就简单了。

我们有了三进制符号 -10+1,现在要把它们变成双绞线上实实在在的电压差

根据IEEE 100BASE-T1标准,差分电压范围在 -1V 到 +1V 之间:

三进制符号差分电压(A线电压 - B线电压)举例
-1约 -1VA线 = -0.5V,B线 = +0.5V,压差 = -1V
0约 0VA线 = 0V,B线 = 0V,压差 = 0V
+1约 +1VA线 = +0.5V,B线 = -0.5V,压差 = +1V

关键点:普通差分信号只有“正压差”和“负压差”两档(代表0和1)。PAM3在差分信号的基础上增加了一个“零电平”档位,从两种状态变成三种状态。

那PAM3是怎么实现全双工的(同时发和收)?

因为100BASE-T1只用一对线,不像传统以太网用两对线(一对发、一对收)。那么问题来了:一根线上,我发的同时也在收,我怎么区分“我发的信号”和“对方发的信号”?

答案是:做减法

发送端把自己要发送的电压加到线上,同时接收端把线缆上的总电压减去“自己刚刚发出去的电压”,剩下的就是对方发来的电压。这个机制叫回音消除,也是PAM3能在一对线上实现全双工的关键。


七、log₂(3)这个1.58到底从哪来的?

你可能一直想知道:为什么PAM3每个符号带的是1.58个比特,而不是1.5、不是1.6?

这是数学算出来的。

公式:每个符号携带的比特数 = log₂(可能的状态数)

PAM3有3种状态(-1、0、+1),所以:

log₂(3) = log₁₀(3) ÷ log₁₀(2) ≈ 0.4771 ÷ 0.3010 ≈ 1.585

用大白话说:

你要用3种状态去表示二进制信息。3种状态不够直接表示2个比特(因为2个比特需要4种状态),但又比1个比特(2种状态)多。

所以每个符号携带的比特数,就在1和2之间。具体是多少?就是“以2为底3的对数”——2的多少次方等于3?2的1.585次方约等于3。

一个比拟:

你有3种颜色的灯(红、黄、绿)。你想用它们来传输信息。如果只用“红”和“绿”两种,每个灯只能传1个比特。现在多了“黄”,每个灯能传多少比特?不是1.5,不是1.6,而是log₂(3)≈1.585。这就是数学告诉你的“信息量”。

那为什么不用PAM4(4种状态)?

PAM4每个符号带2个比特(log₂(4)=2),效率更高。但4种电压意味着接收端要区分4个电平,更难设计,对信号质量要求更高。百兆车载选PAM3,是在“效率”和“可靠性”之间做了一个权衡。


八、一张流程图:整个转换过程

text

MII接口(4位并行,25MHz)
   │
   │ 数据:0101 1010 1111 ...
   ▼
【4B3B】重新打包
   │
   │ 把4位一组改成3位一组
   │ 时钟从25MHz升到33.33MHz
   ▼
3位一组数据:010 101 111 ...
   │
   ▼
【3B2T】查表映射
   │
   │ 3位二进制 → 2个三进制符号
   │ 查IEEE 802.3bw标准定义的映射表
   ▼
三进制符号流:(-1,+1) (+1,-1) (+1,+1) ...
   │
   ▼
【PAM3】调制成电压
   │
   │ -1 → -1V,0 → 0V,+1 → +1V
   │ 符号率66.67MHz
   ▼
双绞线上传输

九、那频率是怎么算的?25MHz、33.33MHz、66.67MHz

你可能一直在想:这些数字到底怎么来的?

我一步一步算给你看。

1. 25MHz(MII接口时钟)

MII接口一次传4位数据,目标数据率100Mbit/s:

100Mbit/s ÷ 4位 = 25MHz

2. 33.33MHz(4B3B之后时钟)

4B3B把数据从4位一组变成3位一组,数据率不变:

100Mbit/s ÷ 3位 ≈ 33.33MHz

3. 66.67MHz(线上符号率,波特率)

每3个比特被编码成2个三进制符号,所以每秒需要传输的符号数:

(100Mbit/s ÷ 3bit) × 2符号 = 66.67M符号/秒

核心逻辑:数据率固定100Mbit/s,位宽越窄,时钟就必须越快。

位置数据宽度时钟频率怎么算的
MII接口4位并行25MHz100Mbit/s ÷ 4位
4B3B之后3位并行33.33MHz100Mbit/s ÷ 3位
PAM3线上1个符号66.67MHz(100Mbit/s ÷ 3bit) × 2符号

十、一个完整的例子

假设MII接口送来一组数据:010 101(实际是4B3B之后的数据,3位一组)

第一步已经做完(4B3B),现在进入3B2T:

第一组 010

  • 查表 → (-1, +1)

第二组 101

  • 查表 → (+1, -1)

所以三进制符号流是:-1, +1, +1, -1

进入PAM3调制

  • -1 → 线上差分电压 ≈ -1V

  • +1 → 线上差分电压 ≈ +1V

  • +1 → 线上差分电压 ≈ +1V

  • -1 → 线上差分电压 ≈ -1V

线上电压的变化频率(波特率)是 66.67MHz,但因为每个PAM3符号携带了log₂(3)≈1.58比特的信息,所以实际有效数据率是 100Mbit/s


十一、扯点闲蛋

写到这里,忍不住聊个小八卦。

PAM3这东西,其实不是为车载以太网“原创”的。

早在2001年,IEEE在制定千兆以太网标准时,PAM3是被淘汰的方案。当时工程师们选了PAM5(5种电平),觉得“电平越多越高级”。PAM3被打入冷宫,一躺就是十几年。

2013年左右,宝马和博通的工程师在设计车载以太网时,翻出了这个“老古董”。一试,效果刚刚好——比传统编码抗干扰强,比PAM4简单便宜。

2015年,第一台用PAM3车载以太网的宝马7系下线。现在,连英特尔的Thunderbolt 5(80Gbps)都在用PAM3。

一个被嫌弃了十几年的“过时技术”,在汽车上找到了第二春。

你说,这叫不叫“技术轮回”?


十二、踩的坑

最大的坑:以前我以为PAM3是“三种电压代表0、1、2”,直接把三进制当数据。这次才知道,它通过3B2T编码,把二进制数据映射成三进制符号,再转成电压。中间的映射表是标准定义好的。

第二个坑:以前我以为log₂(3)是个随便约等于的数。这次才知道,它是数学算出来的,不是近似,是精确的信息论结果

想通的那一瞬间:是当我意识到——通信的本质不是“传比特”,而是“传符号,每个符号带多个比特”。PAM3就是把这个“每个符号带的比特数”从1提升到了1.58。


十三、为什么±1V这么小,不怕干扰吗?

你可能会问:±1V这么小的电压,不是随便一点干扰就把它淹没了?

好问题。我一开始也这么想。

实际上,100BASE-T1用的就是±1V的差分信号。这么小的电压,确实容易受干扰。但工程师们用了三招来保护它:

第一招:差分信号(技术屏蔽)

还记得我们在第四篇讲的“差分信号”吗?两根线同时传,一根+0.5V、一根-0.5V,接收端只看压差(1V)。干扰来了,两根线同时被抬高或压低,压差不变,干扰就被“抵消”了。

第二招:回音消除(全双工)

100BASE-T1只用一对线,同时发和收。发送端把自己发的电压加到线上,接收端从总电压里减去自己发的,剩下的就是对方发的。这个机制叫回音消除——自己的信号不会“吵到自己”。

第三招:共模扼流圈(CMC)和ESD保护

在PHY芯片和连接器之间,还有一个叫共模扼流圈的元件,专门滤除共模干扰(就是两根线上同时出现的“脏东西”)。ESD保护器件则能承受±8kV的静电冲击,车规级PHY芯片的工作温度范围是-40°C到+125°C

所以:不是电压小就容易受干扰,而是工程师们用差分信号、回音消除、共模滤波、ESD保护这套组合拳,硬是把小电压信号保护得稳稳当当。

这就是工程——用一堆技术堆出来的“安全感”。


十四、下步目标

PAM3算是啃完了。下步准备搞搞OSI七层模型——以太网到底在哪一层?数据是怎么一层一层包起来的?

下期预告:学了这么烧脑的,是不是该让大脑休息休息呢?容我再想想,再想想 ......


十五、写在最后

这次最大的收获,是终于把PAM3从“玄学”变成了“数学”

以前看到log₂(3)就头大,现在知道它是怎么来的了。以前听到66.67MHz就蒙圈,现在知道它是怎么算的了。

不怕慢,就怕站。不怕不懂,就怕不敢碰。

互动钩子:PAM3这东西,你之前是不是也觉得玄乎?现在清楚了吗?还有哪个概念让你头大?留言告诉我,我下一篇就写它。

坚持不懈,努力到感动自己,嘿嘿。

写好啦,晚安,886。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

想成为优秀工程师的爸爸

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值