写在开篇:
莫听穿林打叶声,何妨吟啸且徐行。
竹杖芒鞋轻胜马,谁怕?一蓑烟雨任平生。——苏轼《定风波》
来首苏老夫子的词,镇镇场子。
谁怕?一蓑烟雨任平生。
迟到的学习,我觉得——也没那么糟。
一、一个绕不过去的坑
昨天写了“关于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——把三进制符号变成电压
到了最后一步,事情就简单了。
我们有了三进制符号 -1、0、+1,现在要把它们变成双绞线上实实在在的电压差。
根据IEEE 100BASE-T1标准,差分电压范围在 -1V 到 +1V 之间:
| 三进制符号 | 差分电压(A线电压 - B线电压) | 举例 |
|---|---|---|
| -1 | 约 -1V | A线 = -0.5V,B线 = +0.5V,压差 = -1V |
| 0 | 约 0V | A线 = 0V,B线 = 0V,压差 = 0V |
| +1 | 约 +1V | A线 = +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位并行 | 25MHz | 100Mbit/s ÷ 4位 |
| 4B3B之后 | 3位并行 | 33.33MHz | 100Mbit/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。

6845

被折叠的 条评论
为什么被折叠?



