3. SGMII物理层架构:PHY芯片、MAC接口、SerDes模块

说到SGMII的物理层,我做了十几年硬件工程师,有个很深的体会——很多人觉得物理层就是“连根线完事”,结果项目调不通,连问题出在哪个模块都搞不清楚。说白了,SGMII物理层就是三个核心模块的配合:MAC接口负责发数据、PHY芯片负责把数据推出去、SerDes则搞定串行化传输。你想想看,这三个家伙要是没配合好,时钟恢复、链路建立这些都是空谈。

3.1 从全局看SGMII物理层

我个人习惯把SGMII物理层拆成三块看:

  • MAC接口:通常走GMII/RGMII或者内部总线,跟处理器的MAC层对接
  • PHY芯片:负责编码、链路协商、时钟恢复
  • SerDes模块:负责并串转换、高速差分信号收发

这三者之间的关系,我画过无数遍。下面这张图,算是我自己总结的“SGMII物理层三件套”:

SGMII物理层三模块架构 SGMII物理层核心架构 MAC接口层 GMII / RGMII 总线 MAC发送/接收逻辑 时钟与数据釆样 PHY芯片内部 PCS编码/解码层 链路协商状态机 时钟恢复(CDR) SerDes模块 并串转换 CDR与数据恢复 差分发送/接收 数据流:并行 → 编码 → 串行 → 差分线 → 再恢复串行

为什么分这三个模块?因为每个模块都有自己的时钟域和状态机,调的时候要分开测,合起来测,反复验证。嗯,这里要注意,很多新手一上来就板级联调,结果都不知道是MAC端没配好还是PHY端锁不住。

3.2 MAC接口:多宽的数据总线?

MAC接口是什么?就是你的处理器或者FPGA里MAC层跟PHY芯片之间的那座桥。SGMII信号到了PHY这头,必须先走MAC接口才能进到逻辑处理。

MAC接口类型 数据位宽 时钟频率(MHz) 信号线数 典型场景
GMII 8位 125 24根 传统板级设计
RGMII 4位 125 (DDR) 12根 减少PCB引脚数
并行总线 8/16位 可变 10-20根 内部FPGA/ASIC

我之前做过一个项目,MAC端用RGMII接PHY,结果板子layout走了十几厘米,信号质量很差,数据老是采错。后来我一查,RGMII对时钟和数据之间的skew要求很严格,必须加delay。这是我踩过的坑——RGMII虽然引脚少,但对PCB走线要求很高。

我的经验:RGMII接口的TX和RX时钟必须做相位控制,很多FPGA的IO delay模块可以帮你搞定。设计时记得预留100-200ps的调相空间。

3.3 PHY芯片:不只是一个收发器

很多人觉得PHY芯片就是“接收差分信号,输出并行数据”,其实它的内部远比你想的要复杂。我拆过好几款主流的千兆PHY,内部至少包含这些模块:

  • PCS(物理编码子层):负责8B/10B编码、链路码字对齐
  • PMA(物理介质接入子层):管理SerDes的模拟电路、时钟恢复
  • Auto-Negotiation(自动协商):跟对端PHY协调速率、双工模式
  • MDIO管理接口:供CPU读取状态、配置寄存器

我记得有一次调板子,PHY死活连不上,读寄存器一直显示“链路断开”。折腾了半天,发现是MDIO的时序没跑对——PHY在初始化期间不接受配置。这就是典型的“底层接口问题”。

核心要点:PHY的初始化顺序非常重要。上电后,先让PHY复位,等待内部PLL锁定(通常需要1-10ms),然后再配置链路协商参数。跳过这步直接读状态,会读到垃圾数据。

3.4 SerDes模块:串行化的心脏

SerDes是SGMII能跑在1.25Gbps的关键。说白了,就是把8位并行数据打包成串行差分信号发出去。为什么非要用SerDes?因为并行信号在高速下串扰严重,SerDes用差分线抗干扰能力强得多。

SerDes内部的两个子模块:

  1. 发送端:并行数据进来,经过Serializer(并串转换),加上时钟信息(一般通过数据编码隐含时钟),最后通过差分驱动器推出去
  2. 接收端:差分信号进来,先过CDR(时钟与数据恢复)把时钟抓出来,然后经过Deserializer还原成并行数据

⚠️ 避坑指南:我曾经遇到过SerDes接收端无法锁定的情况。检查后发现是发送端的数据持续发送“全0”或者“全1”码型导致的——CDR需要数据有足够多的跳变才能恢复时钟。一定要让PCS层保证数据有足够的频率成分,包括插入Idle码字。

你想想看,SerDes的CDR本质上就是一个锁相环,它要从数据边沿里“挤”出时钟来。如果数据长时间没有跳变,CDR就会漂出去。这就是为什么SGMII需要强制插入同步码字,每隔12个字节就有一个K码来保证跳变密度。

3.5 三者的交互时序

这三个模块不是独立工作的,它们必须按照严格的时序配合:

步骤 MAC接口 PHY芯片 SerDes模块
1. 上电复位 复位MAC逻辑 上电复位,内部PLL起振 VCO开始自由振荡
2. 配置 通过MDIO配置PHY 接收配置,启动Auto-Neg 等待锁相参考时钟
3. 链路协商 发送Config码字 交换能力信息 差分信号建立
4. 时钟恢复 接收同步码字 CDR锁定接收数据 PLL锁定,输出同步时钟
5. 数据通信 GMII数据收发正常 链路状态为Up 串行与并行双向转换

这5步是我调试SGMII链路的必查流程。每一步都有对应的寄存器状态可以读,比如PHY的“Link Status”位、CDR的“Lock”标志等。

说实话,刚开始做SGMII设计时,我总以为只要接好线就能通,后来发现链路建立的顺序要严格遵守。特别是CDR锁定前,不要急着发业务数据,先发同步Idle码字让它锁定,不然会丢包丢到你怀疑人生。

我的调试习惯:先测MAC接口的GMII数据完整性,再测PHY到MAC的链路协商状态,最后才看SerDes的CDR锁定指示灯。就像盖楼一样,一层一层来,每一层测通再往上走。