物理层分层:PCS、PMA、PMD 子层功能

说到物理层,很多人第一反应就是“PHY芯片”。但PHY内部其实分了好几个层次。我记得刚接触万兆以太网的时候,总觉得PHY就是个黑盒子,直到有一次调试链路死活建不起来,才逼着自己把这三个子层搞清楚。

按照OSI模型,物理层再往下拆,就是 PCS(物理编码子层)、PMA(物理介质接入子层)和 PMD(物理介质相关子层)。说白了,这三个家伙分工非常明确:PCS管编码和解码,PMA管串行化和时钟恢复,PMD管最后的电信号或光信号收发。

一、PCS 子层——数据的“翻译官”

PCS 位于 MAC 层和 PMA 层之间。它的核心任务是把 MAC 送来的数据流转成适合在串行链路上传输的格式。

你想想看,MAC 层给的数据是并行的,而且没有考虑传输中的直流平衡和时钟恢复问题。PCS 就要做几件事:

  • 编码/解码:常用的有 8B/10B、64B/66B、128B/130B 等。我用 8B/10B 举个例,每 8 位数据编码成 10 位码字,多出来的 2 位用于保证 DC 平衡和提供足够的跳变沿。
  • 对齐标记插入:在数据流里插入特殊的对齐字符,方便接收端找到码字边界。
  • 加扰/解扰:防止长串的连续 0 或 1,把数据打散。

我在项目里遇到过一个问题,PCS 的加扰多项式选错了,导致链路能建起来但误码率很高。后来发现是芯片的加扰种子没配对。嗯,这里要注意,PCS 的配置必须和链路对端完全一致。

核心要点:PCS 是数据格式的转换层,它的好坏直接影响链路的可靠性。常用的编码方式有 8B/10B 和 64B/66B,前者效率 80%,后者效率约 97%。

二、PMA 子层——模拟世界的“桥头堡”

PMA 是连接数字域和模拟域的关键。PCS 处理完的并行数字信号,到了 PMA 要做两件大事:串行化和时钟恢复。

2.1 串行化与解串行

PCS 给过来的是并行数据(比如 10 位宽),PMA 把它转成高速串行比特流,通过一根线发出去。接收端再把串行比特流转回并行。

这个过程叫 SerDes(Serializer/Deserializer)。我记得有一次做 10G 链路调试,PMA 的串行化速率没算对,导致锁相环锁定不稳。那会儿排查了好几天,最后发现是参考时钟的 ppm 偏差超了规格。

2.2 时钟数据恢复(CDR)

接收端没有独立的时钟线,必须从数据流里提取时钟。CDR 电路就是干这个的。它用 PLL 锁定输入数据的边沿,恢复出采样时钟。

说白了,CDR 就是个锁相环,但它有个关键参数——抖动容限。我自己测试过,如果 PMA 的 CDR 带宽设得太窄,锁定时间会变长;设得太宽,对抖动的抑制就差。

实战建议:PMA 自适应的第一步通常是 CDR 锁定。我在调试时习惯先把 CDR 的锁定指示信号拉出来看,再检查串行数据的眼图。如果 CDR 锁不住,后面 PMD 再好的信号也没用。

三、PMD 子层——信号的“最后一公里”

PMD 是物理层的最底层,直接面对传输介质。它的职责非常简单:把 PMA 送来的电信号转换成适合在特定介质上传输的形式,并从介质上接收信号送回 PMA。

传输介质 PMD 类型 典型标准 关键参数
双绞线(铜缆) 电口 PMD 10GBASE-T 线缆长度、串扰抑制
光纤 光口 PMD 10GBASE-SR/LR 波长、发射功率、接收灵敏度
背板(PCB走线) 背板 PMD 10GBASE-KR 信道损耗、反射、均衡能力

这里我要提一下 PMA 自适应,它跟 PMD 配合特别紧密。有一次我在调试 10G-KR 背板链路,PMD 的发送均衡器参数没调好,信号经过长走线后眼图完全闭合了。后来通过 PMA 自适应的协商过程,两边交换了均衡参数,链路才稳定下来。

注意:PMD 的信号质量直接影响 PMA 的 CDR 锁定。很多人只关注 PCS 的编码,忽略了 PMD 的物理条件。事实上,超过 60% 的链路问题出在 PMD 的信号完整性和 PMA 的自适应协商上。

四、三层之间的协作关系

这三个子层不是孤立的,它们之间的接口有明确规范。我用一张图表示它们的协作关系和数据流向:

PCS、PMA、PMD 子层协作关系 物理层子层协作关系 OSI 物理层内部结构 MAC 层(数据链路层) PCS 子层(编码/解码) 8B/10B · 64B/66B · 加扰 PMA 子层(串行化/CDR) SerDes · 时钟恢复 · 自适应 PMD 子层(信号收发) 电/光转换 · 均衡 · 介质接口 数据流向 发送:MAC → PCS → PMA → PMD → 介质 接收:介质 → PMD → PMA → PCS → MAC 关键接口 PCS↔PMA: XGMII PMA↔PMD: MDI 我踩过的坑 PCS编码与PMD速率 不匹配→链路不通

从这张图能看出来,数据从 MAC 下来,经过 PCS 编码,PMA 串行化,最后 PMD 发送出去。接收路径反过来。我个人习惯把这种结构叫做 “三明治模型”——PCS 是上层数字处理,PMD 是底层模拟接口,PMA 在中间做桥接和转换。

五、PMA 自适应中的三层协作

很多高速协议(比如 10G-KR、25G-KR)都有 PMA 自适应机制。这个过程中,三个子层要协同工作:

  1. PMD 首先建立物理连接:检测到信号存在,做基础的均衡。
  2. PMA 启动 CDR 锁定:从恢复的信号中提取时钟,锁定到正确的相位。
  3. PCS 接收对齐码:找到块边界,完成码字同步。
  4. 反馈到 PMA:根据误码情况调整 PMA 的均衡参数。

我曾经调试过一个案例,链路能建起来但一旦跑大流量就闪断。看波形发现是 PMA 自适应阶段只调了发送端均衡,接收端的 CTLE(连续时间线性均衡)没用上。后来我建议 PMA 自适应必须带上接收均衡的系数交换,问题就解决了。

经验之谈:PMA 自适应不只是 PMA 自己的事。PCS 的误码检测结果要反馈给 PMA 做参数调整,PMD 的物理状态则决定了自适应的起止点。三层之间信息必须打通。

六、常见误区与避坑

这么多年下来,我总结了几条关于物理层分层的常见误区:

  • 把 PCS 和 PMA 混为一谈:很多芯片把 PCS 和 PMA 集成在一起,但调试时必须区分。PCS 出问题多是编码配置不对,PMA 出问题多是时钟和均衡参数。
  • 忽略 PMD 的信号完整性:PMD 是物理层最容易被忽略的环节。连接器、PCB 走线、线缆质量都直接影响链路。我见过太多人在 PCS 和 PMA 层面浪费大量时间,结果问题出在连接器虚焊。
  • 以为自适应能解决一切:PMA 自适应有它的边界条件。如果信号质量差到一定程度,自适应也调不过来。最好的办法是在板级设计时就保证 PMD 的信号质量。
一个小技巧:调试链路时我习惯从下往上查——先看 PMD 有没有信号,再看 PMA 能不能锁定时钟,最后看 PCS 能不能对齐码字。这样一层层排查,比从上层往下查快得多。

好了,这一章的内容就到这儿。PCS、PMA、PMD 这三个子层的职能划分清楚了,后面讲链路建连流程就更容易理解了。虽然它们分工不同,但配合得好坏,直接决定一条链路能不能稳定跑起来。