第1章:SerDes架构基础:PCS层与PMA层划分、典型SerDes链路组成
大家好,我是你们的老朋友。今天咱们来聊聊SerDes架构里最基础、也最核心的东西——PCS层和PMA层的划分,以及一条完整的SerDes链路到底长什么样。
说实话,我刚开始接触SerDes那会儿,也被这些分层搞得有点晕。PCS、PMA、PLL、CDR……一堆缩写堆在一起,感觉像在看天书。但后来做项目多了,慢慢就摸清了门道。说白了,SerDes就是把并行数据转成串行数据发出去,再在接收端把串行数据转回并行。这个过程中,谁负责编码、谁负责时钟、谁负责物理传输,就是PCS和PMA要干的事。
1.1 PCS层与PMA层:分工明确的“两兄弟”
在SerDes架构里,通常把功能分成两层:PCS(Physical Coding Sublayer,物理编码子层)和PMA(Physical Medium Attachment,物理介质连接层)。你可以这么理解:PCS负责“动脑子”,PMA负责“干体力活”。
核心区别一句话总结:PCS处理数字逻辑和协议相关的事,PMA处理模拟电路和高速信号的事。
PCS层:管编码、管对齐、管协议
PCS层主要做以下几件事:
- 8B/10B或64B/66B编码:把用户数据编码成适合高速传输的格式。为什么要编码?说白了就是为了保证DC平衡,避免长串的0或1导致接收端失锁。
- 通道绑定(Lane Bonding):如果你有多个SerDes通道,PCS负责把它们绑在一起,让数据能均匀分布到各条通道上。
- 对齐标记插入:发送端定期插入对齐标记(Alignment Marker),接收端靠这些标记来恢复数据边界。
- 时钟补偿:发送端和接收端的时钟不可能完全一样,PCS通过插入或删除空闲字符来补偿时钟偏差。
我记得有一次做PCIe Gen3的项目,PCS层的对齐标记设计出了问题,导致接收端老是找不到数据边界。查了三天,最后发现是标记插入的间隔没算对。嗯,这种坑踩过一次就记住了。
PMA层:管串化、管驱动、管时钟恢复
PMA层是真正跟物理信号打交道的地方:
- Serializer(串化器):把并行数据转成串行比特流。
- Driver(驱动器):把串行信号放大,驱动到传输线路上。
- Receiver(接收器):从线路上接收微弱信号,放大并整形。
- Deserializer(解串器):把串行比特流转回并行数据。
- PLL(锁相环):产生高速时钟,给串化器和解串器用。
- CDR(时钟数据恢复):从接收到的数据流里提取时钟,并恢复数据。
个人经验:PMA层的设计好坏,直接决定了SerDes能跑多快、多远。我见过不少项目,PCS层写得再漂亮,PMA层模拟电路没调好,照样上不了高速。所以,做SerDes一定要重视PMA的仿真和测试。
1.2 典型SerDes链路组成:从发送到接收的完整旅程
一条完整的SerDes链路,从发送端到接收端,大致经过以下环节:
- 并行数据输入:来自上层逻辑的并行数据(比如32位或64位)。
- PCS编码:进行8B/10B或64B/66B编码,加入控制字符。
- Serializer串化:把并行数据转成串行比特流。
- Driver驱动:把串行信号送到传输线(PCB走线、电缆或光纤)。
- Channel通道:信号经过传输介质,会有衰减、反射、串扰等问题。
- Receiver接收:接收端放大器把微弱信号恢复。
- CDR时钟恢复:从数据流中提取时钟,并采样数据。
- Deserializer解串:把串行数据转回并行。
- PCS解码:解码并恢复原始数据。
你想想看,这个过程中任何一个环节出问题,整个链路就废了。我当年调试一个10Gbps的SerDes链路,发现接收端误码率一直下不去。折腾了两周,最后发现是Driver的输出阻抗没匹配好,导致信号反射严重。换了个匹配电阻,误码率直接降了三个数量级。
1.3 核心模块详解:PLL、Serializer、Driver、Channel、Receiver、Deserializer、CDR
下面我把每个模块单独拎出来说说,都是干货。
PLL(锁相环)
PLL是SerDes的心脏。它负责产生稳定的高速时钟。没有它,Serializer和CDR都玩不转。
- 关键指标:抖动(Jitter)、锁定时间、频率范围。
- 常见架构:电荷泵PLL、全数字PLL(ADPLL)。
- 避坑指南:我曾经遇到过PLL的环路滤波器设计不当,导致输出时钟有低频抖动,直接影响了CDR的锁定。后来把环路带宽调窄了一些,问题才解决。
Serializer(串化器)
Serializer把并行数据转成串行。比如32位并行数据,在32倍时钟下逐位输出。
- 实现方式:通常用移位寄存器或树形结构。
- 注意点:串化器的输出时序必须精确,否则会产生数据歪斜(Skew)。
Driver(驱动器)
Driver负责把串行信号送到传输线上。它决定了信号的幅度、上升时间、输出阻抗。
- 常见类型:CML(电流模式逻辑)、LVDS(低压差分信号)。
- 关键参数:摆幅、共模电压、输出阻抗(通常50Ω或100Ω差分)。
警告:Driver的输出阻抗如果不匹配,会产生反射,严重时会导致眼图闭合。我建议在仿真阶段就仔细调好阻抗匹配,别等到板子打回来再改。
Channel(通道)
通道就是信号走的物理路径——PCB走线、连接器、电缆等。通道对信号的影响很大:
- 衰减:高频信号衰减更严重,所以长距离传输需要均衡。
- 反射:阻抗不连续点会产生反射。
- 串扰:相邻信号线之间的耦合。
Receiver(接收器)
Receiver把经过通道衰减后的微弱信号放大、整形。它通常包含:
- 均衡器(Equalizer):补偿通道的高频衰减。
- 限幅放大器:把信号幅度恢复到逻辑电平。
CDR(时钟数据恢复)
CDR是接收端最关键的模块。它从数据流中提取时钟,并用这个时钟来采样数据。
- 工作原理:通过鉴相器比较数据边沿和本地时钟的相位差,调整时钟相位。
- 常见架构:基于PLL的CDR、基于延迟锁定环(DLL)的CDR。
- 个人经验:CDR的环路带宽要跟通道特性匹配。带宽太宽,容易受高频抖动影响;带宽太窄,锁定时间太长。我一般先做仿真,找到最优带宽再流片。
Deserializer(解串器)
Deserializer把串行数据转回并行。它跟Serializer是对称的,但多了个数据对齐的问题。
- 对齐方式:通过PCS层插入的对齐标记来找到数据边界。
- 注意点:解串器的时钟必须跟数据同步,否则会采错位。
1.4 知识体系总览:一张图看懂SerDes架构
下面我用一张SVG图把整个SerDes链路串起来。这张图我画了好几次才满意,希望能帮你建立整体认知。
这张图里,我特意把PCS和PMA分成了上下两层。你看,发送端和接收端是对称的,中间是通道。PLL和CDR虽然都在PMA层,但一个管发送时钟,一个管接收时钟,分工很明确。
1.5 小结:记住这几条就够了
好了,这一章的内容就这些。我帮你总结几个关键点:
- PCS管协议,PMA管物理——记住这个分工,后面学起来就顺了。
- SerDes链路的核心模块:PLL、Serializer、Driver、Channel、Receiver、CDR、Deserializer,缺一不可。
- 调试时先看PMA,再看PCS——我个人的习惯是,先确保物理层信号没问题,再查协议层。否则容易白费功夫。
下一章咱们会深入讲PCS层的编码细节,特别是8B/10B编码的原理和实现。到时候我会拿一个实际项目的编码表出来,咱们一起分析。
公众号:蓝海资料掘金营,微信deep3321