SGMII 接口概述

大家好,我是做高速串行接口的工程师。今天咱们聊聊 SGMII —— 这玩意儿在板级调试里出现频率很高,尤其是时钟恢复出问题的时候,简直让人头疼。不过我习惯先把概念理清楚,再谈调试。

什么是 SGMII

SGMII 的全称是 Serial Gigabit Media Independent Interface,翻译过来就是串行千兆媒体独立接口。说白了,它就是把 GMII 或者 RGMII 的并行数据,转成一对差分线来传输的串行接口。

为什么要这么做?因为并行总线在高速下很难走远。GMII 需要 25 根信号线,RGMII 虽然减到 12 根,但时钟频率还是很高,走线长度受限。SGMII 只用两对差分线(一对收、一对发),速率锁定在 1.25 Gbps,就可以实现 10/100/1000 Mbps 的自适应传输。

关键参数:

  • 数据速率:1.25 Gbps(每个差分对)
  • 编码方式:8B/10B 编码
  • 时钟方式:内嵌时钟(从数据中恢复时钟)
  • 参考时钟:通常为 125 MHz(配套 SerDes 使用)

我曾经在某款交换机项目里,因为 SGMII 的参考时钟抖动太大,导致 Link 老是闪断。嗯,当时排查了很久才发现是时钟源的问题。后面我会专门讲时钟恢复的坑,这里先记住:SGMII 的时钟是嵌在数据流里的,接收端必须用 CDR(时钟数据恢复)把时钟提出来。

应用场景

SGMII 一般出现在以下场合:

  • PHY 与 MAC 连接:以太网交换芯片(MAC)和外部 PHY 之间,用 SGMII 省引脚、省 PCB 面积。
  • FPGA 与 PHY 对接:FPGA 内部集成 SerDes,通过 SGMII 直接连 PHY 芯片,我经常在原型验证板上这样干。
  • 板间或芯片间短距离互联:例如两个交换机芯片通过 SGMII 级联,距离通常不超过 10 英寸。
  • 背板传输:利用 SGMII 经过背板到子卡,配合 AC 耦合电容实现热插拔。

我的小建议: 如果板子上 MAC 和 PHY 距离很近(< 1 英寸),其实用 RGMII 可能更简单,因为不用管 CDR 和 AC 耦合电容。但一旦走线超过 2 英寸,或者层数受限,我基本首选 SGMII。

与 GMII / RGMII 的区别

很多新人分不清这三兄弟。我习惯用一张表来对比:

特性 GMII RGMII SGMII
信号线数量 25 根 12 根 4 根(2 对差分)
时钟频率 125 MHz 125 MHz(DDR) 1.25 Gbps(无独立时钟)
编码方式 NRZ 并行 DDR 采样 8B/10B 串行
时钟恢复 不需要 不需要 必须使用 CDR
传输距离 很短(< 0.5 英寸) 较短(< 1 英寸) < 10 英寸(优化后可达 20 英寸)
典型应用 老式 FPGA、MAC 板内近距离连接 PHY 与 MAC、背板互联

你想想看,GMII 的信号线那么多,布线的时候简直是噩梦。RGMII 虽然省了一半线,但时钟和数据之间的时延需要严格匹配。SGMII 就把这些麻烦都推到 SerDes 和 CDR 里去了——对板级工程师来说,反而更省心。

避坑提醒: 我曾经因为 SGMII 的 AC 耦合电容放错位置(放在靠近 PHY 侧而不是 MAC 侧),导致链路上出现直流不平衡,CDR 锁定不稳。这个问题在 8B/10B 编码下表现不明显,但遇到长连 0 或长连 1 的数据包时就会丢包。后来统一按照“电容靠近接收端”的规则改版,问题解决。

SGMII 系统结构

下面这张图是我画的一个典型 SGMII 连接结构,包含 MAC、SerDes、AC 耦合电容和 PHY:

SGMII 典型连接结构 MAC / FPGA (内置 SerDes) PHY 芯片 (SGMII 接口) TX 差分对 RX 差分对 0.1µF 0.1µF 125 MHz 晶振 参考时钟 注意: AC 耦合电容靠近接收端放置 差分对阻抗需控制 100Ω 差分 走线长度尽量等长(±5 mil)

我这几年调试 SGMII 链路,总结下来最常出问题的就是三个点:参考时钟质量、AC 耦合电容位置、差分对布线等长。尤其是时钟恢复,如果参考时钟抖动超标,CDR 会不断重新锁定,导致链路反复 up/down。后面章节我会详细展开每一步的测量和调整方法。

本章小结:

  • SGMII 是串行化的 GMII,用更少引脚实现千兆传输。
  • 应用场景集中在 PHY-MAC、FPGA-PHY、板间互联。
  • 与 GMII/RGMII 相比,SGMII 需要 CDR 和 AC 耦合,但布线更简单、传输距离更远。