第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链路,从发送端到接收端,大致经过以下环节:

  1. 并行数据输入:来自上层逻辑的并行数据(比如32位或64位)。
  2. PCS编码:进行8B/10B或64B/66B编码,加入控制字符。
  3. Serializer串化:把并行数据转成串行比特流。
  4. Driver驱动:把串行信号送到传输线(PCB走线、电缆或光纤)。
  5. Channel通道:信号经过传输介质,会有衰减、反射、串扰等问题。
  6. Receiver接收:接收端放大器把微弱信号恢复。
  7. CDR时钟恢复:从数据流中提取时钟,并采样数据。
  8. Deserializer解串:把串行数据转回并行。
  9. 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链路串起来。这张图我画了好几次才满意,希望能帮你建立整体认知。

典型SerDes链路架构图 发送端PCS 8B/10B编码 发送端PMA Serializer + Driver Channel PCB走线/电缆 接收端PMA Receiver + CDR + Deserializer 接收端PCS 解码 + 对齐 串行数据 串行数据 并行数据输入 并行数据输出 PLL(锁相环) CDR(时钟恢复) 提供时钟 恢复时钟 图例 PCS层(数字逻辑) PMA层(模拟电路) 通道(物理介质) 时钟相关模块

这张图里,我特意把PCS和PMA分成了上下两层。你看,发送端和接收端是对称的,中间是通道。PLL和CDR虽然都在PMA层,但一个管发送时钟,一个管接收时钟,分工很明确。

1.5 小结:记住这几条就够了

好了,这一章的内容就这些。我帮你总结几个关键点:

  • PCS管协议,PMA管物理——记住这个分工,后面学起来就顺了。
  • SerDes链路的核心模块:PLL、Serializer、Driver、Channel、Receiver、CDR、Deserializer,缺一不可。
  • 调试时先看PMA,再看PCS——我个人的习惯是,先确保物理层信号没问题,再查协议层。否则容易白费功夫。

下一章咱们会深入讲PCS层的编码细节,特别是8B/10B编码的原理和实现。到时候我会拿一个实际项目的编码表出来,咱们一起分析。

公众号:蓝海资料掘金营,微信deep3321