2. 物理介质相关层(PMA)协议:比特流里的硬功夫
各位同学,咱们今天聊聊PMA子层。说实话,在光通信芯片里,PMA是个特别“实在”的层。它不像PCS那样要处理各种编码逻辑,也不像PMD那样直接跟光信号打交道。PMA干的活,说白了就是——把比特流伺候好,让数据能稳稳当当地从芯片内部跑到光模块上去。
我个人习惯把PMA比作一个“数据搬运工”。它不关心数据内容是什么,只关心怎么搬得又快又稳。嗯,这个比喻可能不太准确,但意思到了就行。
2.1 PMA子层到底负责什么?
PMA的全称是Physical Medium Attachment,物理介质接入层。它夹在PCS和PMD之间,起到承上启下的作用。我当年刚接触这个架构时,总觉得PMA有点“多余”——PCS已经把数据都处理好了,直接扔给PMD不就行了?
后来踩了坑才明白,事情没那么简单。
PMA的核心职责可以归纳为三点:
- 比特流对齐与同步:从PCS过来的数据,可能是10位一组、64位一组,但PMD那边需要的是纯粹的串行比特流。PMA要负责把数据“捋顺”。
- 时钟数据恢复(CDR):这是PMA最硬核的活。接收端要从串行数据里把时钟信号“抠”出来,没有这一步,后面全是瞎扯。
- 串行化与解串行化:把并行数据转成串行发出去,再把收到的串行数据转回并行。这就是SerDes的核心功能。
重要提醒:PMA不负责数据内容的校验,也不管数据是否编码正确。它只关心“0”和“1”能不能正确传输。这一点很多初学者会搞混。
2.2 比特流处理——看似简单,实则暗藏玄机
比特流处理,听起来就是把数据一位一位地传过去。但实际做起来,坑多得很。
我记得有一次调试40G光模块,发现误码率总是降不下来。查了三天,最后发现是PMA层的比特对齐出了问题——发送端和接收端的位边界没对上,导致数据整体偏移了一位。你想想看,一位的偏移,整个数据流就全乱了。
PMA处理比特流时,通常会做以下几件事:
- 位对齐:通过特定的对齐标记(比如comma字符)来找到数据的边界。
- 速率匹配:发送端和接收端的时钟可能有微小差异,PMA要通过插入或删除空闲字符来匹配速率。
- 极性反转处理:有些情况下,差分信号的极性会接反,PMA要能自动检测并纠正。
实战技巧:在做芯片验证时,我建议你专门构造一个“位偏移”的测试用例。把数据故意偏移1-3位,看看PMA能不能正确恢复。很多芯片在这个场景下会暴露出问题。
2.3 串行化与解串行化——SerDes的核心
串行化(Serializer)和解串行化(Deserializer),合起来就是SerDes。这是PMA子层最核心的模块,也是光通信芯片里最考验模拟电路设计功底的地方。
串行化的过程,说白了就是把宽位宽的低速并行数据,转成窄位宽的高速串行数据。举个例子:
- 发送端:PCS送来64位并行数据,时钟频率是156.25MHz。PMA把它串行化成1位串行数据,时钟频率变成10GHz。
- 接收端:反过来,把10GHz的串行数据转回156.25MHz的64位并行数据。
这里面有个关键点——时钟域转换。并行域和串行域用的是完全不同的时钟,处理不好就会出亚稳态问题。我见过一个项目,就是因为SerDes的时钟域同步没做好,导致芯片在高温下频繁丢数据。
避坑指南:我曾经在某个100G项目中,发现串行化后的数据眼图质量很差。查到最后,问题出在并行数据的时序约束上——PCS送来的数据建立时间不够,导致串行化时采样到了错误的值。所以,做SerDes设计时,一定要留够时序裕量。
2.4 PMA与PMD的接口——最后的握手
PMA和PMD之间的接口,通常被称为电气接口。这个接口定义了信号的电平、阻抗、摆幅等参数。
常见的接口标准有:
| 标准 | 速率 | 信号类型 | 典型应用 |
|---|---|---|---|
| XFI | 10.3125 Gbps | CML | 10G光模块 |
| SFI | 4.25 ~ 11.3 Gbps | CML | 多速率光模块 |
| CEI-28G | 28 Gbps | CML | 100G/400G光模块 |
这里要注意的是,PMA和PMD之间的接口通常是交流耦合的。为什么?因为两边的直流工作点可能不一样,用交流耦合可以隔离直流偏置。但这也带来了一个问题——低频分量会被衰减。
我记得在调试25G光模块时,就遇到过因为交流耦合电容选得太大,导致信号的低频分量失真,眼图闭合。后来把电容从100nF换到10nF,问题就解决了。嗯,这种细节,手册上不会写,只能靠经验积累。
2.5 一些实用的设计建议
讲了这么多,最后给各位几点我个人觉得比较实用的建议:
- 做PMA设计时,一定要先想清楚时钟架构。PMA的时钟域很复杂,有并行时钟、串行时钟、恢复时钟,它们之间的关系要理清楚。
- 仿真时别只看理想情况。加一些抖动、加一些噪声,看看PMA的CDR能不能锁定。很多芯片在仿真时跑得挺好,一上板就出问题,就是因为没考虑非理想因素。
- 留好调试接口。PMA内部有很多状态机,比如CDR锁定状态、对齐状态、速率协商状态。把这些状态引出来,调试时会省很多事。
总结一下:PMA子层是光通信芯片里最“硬”的部分之一。它不花哨,但很关键。比特流处理、串行化与解串行化、与PMD的接口,这三个方面做好了,整个芯片的物理层就稳了一大半。
下一章咱们聊聊PMD子层,也就是真正跟光信号打交道的部分。到时候我会讲讲我在激光器驱动设计上踩过的坑,敬请期待。