3. PMA子层详解:发射端和接收端结构
PMA(Physical Medium Attachment)子层,说白了就是物理层里直接跟铜线或光纤打交道的那部分。它不做协议解析,也不管链路训练——它的任务只有一件事:把数字比特变成模拟信号发出去,再把收到的模拟信号还原成数字比特。
我刚开始接触SerDes的时候,总觉得PMA就是个简单的“数模转换器”。后来在项目里踩过坑才明白,PMA的设计好不好,直接决定了你的链路能不能跑满速率,尤其是在长走线或背板上。
3.1 PMA在物理层中的位置
先看一眼PMA在整个芯片中的位置关系:
PCS(物理编码子层) ↔ PMA(物理介质适配) ↔ PMD(物理介质相关)
你想想看,PCS负责8B/10B编码、加扰、对齐之类的数字逻辑;PMD负责真正驱动线缆或光纤;而PMA就是夹在中间的桥梁——它要把PCS下来的并行数据高速串化,再给PMD驱动出去;反过来把收到的微弱信号放大、均衡、时钟恢复,再解串回并行给PCS。
我以前在做10GBase-KR项目时,PMA的功耗经常比PCS还高。为什么?因为高速串行部分全是模拟电路,对工艺和电压特别敏感。
3.2 发射端结构详解
发射端(TX)的核心功能:并行转串行、预加重、输出驱动。我把它拆成四个模块来讲。
3.2.1 串行器(Serializer)
从PCS过来的并行数据,通常是10位、20位甚至40位宽。串行器用多级2:1 MUX树把这些位逐级合并,最终产生一路高速串行比特流。
举个例子,10位并行→5位→3位→1位,每级时钟频率翻倍。最后一级通常用CML(电流模逻辑)触发器做最后的复用。这里有个关键点:串行器的时钟树必须平衡,否则会出现位偏移。我遇到过一块芯片在低温下串行时序违规,查了一个月才发现是MUX树的时钟走线不等长。
3.2.2 预加重与去加重
信号经过传输线会衰减,尤其在高频。为了补偿,发射端通常会在跳变时加大驱动电流,这叫预加重。
常见的做法是:
- 预加重:在比特跳变时额外多打一个电流脉冲,增强高频分量
- 去加重:保持稳态比特的电流较小,减少低频能量(更常用,因为功耗低)
我建议你在初期设计时,先预留至少3档预加重强度可调。为什么?因为不同板卡走线的损耗曲线差很多,现场调优时你会发现固定档位根本不够用。
3.2.3 输出驱动器
驱动器负责提供足够的电流到传输线。主流结构有两种:
| 类型 | 特点 | 典型应用 |
|---|---|---|
| CML(电流模逻辑) | 差分对管+尾电流源,速率高,功耗中等 | 10Gbps以上 |
| 电压模式 | 推挽结构,功耗低,但输出摆幅受电源波动影响 | 短距、低功耗场景 |
我个人习惯在要求高线性度时选CML。虽然面积大一点,但共模抑制比好,不容易被电源噪声干扰。
3.2.4 阻抗校准
发射端输出阻抗必须匹配传输线特征阻抗(通常是100Ω差分)。芯片内部会有一个校准模块,通过片外精密电阻做比较,动态调整输出管的尺寸。
小技巧:在校准周期结束前,别让PMA进入正常传输状态。否则阻抗不匹配会导致反射,严重时会把眼图整个戳烂。
3.3 接收端结构详解
接收端比发射端复杂得多。你想想看,信号经过了长距离的损耗、反射、串扰,到接收端时已经面目全非。接收端的任务:把那个快散架的波形重新整回干净的比特流。
3.3.1 均衡器(Equalizer)
均衡器用来反补偿信道的频率选择性衰减。常见有三种:
- CTLE(连续时间线性均衡器):模拟高通滤波器,提升高频增益,压低低频。
- DFE(判决反馈均衡器):数字后处理,通过前几个比特的判决结果来抵消码间串扰(ISI)。
- FFE(前馈均衡器):在判决前做抽头滤波,常用于发射端预加重配合使用。
我在一个25Gbps项目里,CTLE+DFE联合调了快两个月。DFE的抽头系数收敛条件非常苛刻,温度一变就得重新训练。后来我加了一个自适应引擎,每隔几秒自动更新系数,才算解决了稳定性问题。
避坑:DFE的初始系数如果设置不当,很容易进入错误锁定(lock to wrong data)。程序启动时最好先让CTLE把眼图打开到一定高度,再开DFE。
3.3.2 时钟数据恢复(CDR)
CDR从数据流中提取出时钟相位,并用它来采样数据。主流结构是PLL型(锁相环)和DLL型(延迟锁相环)。
我可以明确告诉你:在10G以上,几乎全是PLL型。因为DLL的抖动性能在高频下很难做。
CDR还有一个关键参数:频率锁定范围。我记得有一次客户给的参考时钟精度只有±200ppm,结果CDR死活锁不住,最后查出来是环路滤波器带宽设太窄,压控振荡器被参考时钟拉出范围了。
3.3.3 解串器(Deserializer)
跟发射端的串行器相反,解串器把高速串行流逐级展开成并行数据。它通常由移位寄存器和采样保持电路组成。
这里有一个容易出问题的地方:解串器的启停顺序。如果CDR还没稳定就打开解串器,输出数据全是乱码,甚至可能把后级PCS的状态机搞崩。我建议做个状态机:CDR锁定 → 等待500个UI稳定 → 使能解串器。
3.3.4 信号检测与眼图监视
现代PMA都内置了眼图扫描功能(Eye Monitor)。你可以通过内部寄存器设置电压阈值和时间偏移,得到二维眼图轮廓。
这个功能对调试非常有用。我一般这样用:先跑CTLE自动调谐,然后看眼高眼宽够不够;不够就手动调一档预加重或DFE系数,再扫一遍,直到眼图张开到规范要求。
3.4 PMA发射端与接收端整体结构图
下面这张图概括了PMA子层TX和RX的核心模块和它们之间的信号流向:
3.5 关键设计考量
我根据不同项目的经历,总结了几条PMA设计的核心原则:
- 功耗与性能的平衡:预加重档位每提高一级,功耗增加约10%。不要为了余量盲目开最大档,够用就行。
- PVT(工艺-电压-温度)补偿:模拟电路的特性会随温度漂移。接收端的均衡器和CDR一定要有自适应或者至少多组配置表。
- 眼图余量:在量产测试时,我会要求眼图高度不低于150mV,宽度不低于0.4UI。低于这个值,板子回流焊后大概率会不合格。
- 电源去耦:PMA的TX/RX对电源纹波极为敏感。我曾经在PCB调试时,发现眼图抖动异常,最后发现是去耦电容放得太远,高频噪声滤不干净。
我的经验:每个PMA模块的独立电源域上,至少放4个不同容值的MLCC:10μF + 1μF + 0.1μF + 0.01μF,并尽量靠近模块管脚。这个组合几乎能覆盖所有需要去耦的频率段。
好,PMA的发射端和接收端结构我们就聊到这。记住一句话:PMA是模拟和数字的边界,也是整个链路质量的下限。你花再多时间在这上面都不为过。