物理层分层: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 的配置必须和链路对端完全一致。
二、PMA 子层——模拟世界的“桥头堡”
PMA 是连接数字域和模拟域的关键。PCS 处理完的并行数字信号,到了 PMA 要做两件大事:串行化和时钟恢复。
2.1 串行化与解串行
PCS 给过来的是并行数据(比如 10 位宽),PMA 把它转成高速串行比特流,通过一根线发出去。接收端再把串行比特流转回并行。
这个过程叫 SerDes(Serializer/Deserializer)。我记得有一次做 10G 链路调试,PMA 的串行化速率没算对,导致锁相环锁定不稳。那会儿排查了好几天,最后发现是参考时钟的 ppm 偏差超了规格。
2.2 时钟数据恢复(CDR)
接收端没有独立的时钟线,必须从数据流里提取时钟。CDR 电路就是干这个的。它用 PLL 锁定输入数据的边沿,恢复出采样时钟。
说白了,CDR 就是个锁相环,但它有个关键参数——抖动容限。我自己测试过,如果 PMA 的 CDR 带宽设得太窄,锁定时间会变长;设得太宽,对抖动的抑制就差。
三、PMD 子层——信号的“最后一公里”
PMD 是物理层的最底层,直接面对传输介质。它的职责非常简单:把 PMA 送来的电信号转换成适合在特定介质上传输的形式,并从介质上接收信号送回 PMA。
| 传输介质 | PMD 类型 | 典型标准 | 关键参数 |
|---|---|---|---|
| 双绞线(铜缆) | 电口 PMD | 10GBASE-T | 线缆长度、串扰抑制 |
| 光纤 | 光口 PMD | 10GBASE-SR/LR | 波长、发射功率、接收灵敏度 |
| 背板(PCB走线) | 背板 PMD | 10GBASE-KR | 信道损耗、反射、均衡能力 |
这里我要提一下 PMA 自适应,它跟 PMD 配合特别紧密。有一次我在调试 10G-KR 背板链路,PMD 的发送均衡器参数没调好,信号经过长走线后眼图完全闭合了。后来通过 PMA 自适应的协商过程,两边交换了均衡参数,链路才稳定下来。
四、三层之间的协作关系
这三个子层不是孤立的,它们之间的接口有明确规范。我用一张图表示它们的协作关系和数据流向:
从这张图能看出来,数据从 MAC 下来,经过 PCS 编码,PMA 串行化,最后 PMD 发送出去。接收路径反过来。我个人习惯把这种结构叫做 “三明治模型”——PCS 是上层数字处理,PMD 是底层模拟接口,PMA 在中间做桥接和转换。
五、PMA 自适应中的三层协作
很多高速协议(比如 10G-KR、25G-KR)都有 PMA 自适应机制。这个过程中,三个子层要协同工作:
- PMD 首先建立物理连接:检测到信号存在,做基础的均衡。
- PMA 启动 CDR 锁定:从恢复的信号中提取时钟,锁定到正确的相位。
- PCS 接收对齐码:找到块边界,完成码字同步。
- 反馈到 PMA:根据误码情况调整 PMA 的均衡参数。
我曾经调试过一个案例,链路能建起来但一旦跑大流量就闪断。看波形发现是 PMA 自适应阶段只调了发送端均衡,接收端的 CTLE(连续时间线性均衡)没用上。后来我建议 PMA 自适应必须带上接收均衡的系数交换,问题就解决了。
六、常见误区与避坑
这么多年下来,我总结了几条关于物理层分层的常见误区:
- 把 PCS 和 PMA 混为一谈:很多芯片把 PCS 和 PMA 集成在一起,但调试时必须区分。PCS 出问题多是编码配置不对,PMA 出问题多是时钟和均衡参数。
- 忽略 PMD 的信号完整性:PMD 是物理层最容易被忽略的环节。连接器、PCB 走线、线缆质量都直接影响链路。我见过太多人在 PCS 和 PMA 层面浪费大量时间,结果问题出在连接器虚焊。
- 以为自适应能解决一切:PMA 自适应有它的边界条件。如果信号质量差到一定程度,自适应也调不过来。最好的办法是在板级设计时就保证 PMD 的信号质量。
好了,这一章的内容就到这儿。PCS、PMA、PMD 这三个子层的职能划分清楚了,后面讲链路建连流程就更容易理解了。虽然它们分工不同,但配合得好坏,直接决定一条链路能不能稳定跑起来。