3、SGMII 接口信号:TXD/RXD、TXC/RXC、时钟方案与电气特性

说到 SGMII,咱们得先搞清楚它到底在物理层上长什么样。SGMII 不像传统的并行 GMII/RGMII 那样一大把信号线——它把发送和接收各压缩成了一对差分对,再加上一个参考时钟,总共就那么几根线。我当年第一次拿到原理图时,看着这寥寥几根线还有点懵,心想“这玩意儿真能跑 1 Gbps?” 后来实际调试证明,它不但能跑,而且比并行接口干净得多。

这一章咱们重点看三块内容:数据&控制信号(TXD/TXC 和 RXD/RXC)、时钟方案(参考时钟怎么来、怎么配),以及电气特性(差分摆幅、共模电压、终端匹配)。每个部分我都会结合自己踩过的坑来讲,希望能帮你省点调测时间。

SGMII 接口信号结构图 MAC / PHY 芯片 (SGMII 侧) TXD[0:1] + TXC PHY / 交换机芯片 (SGMII 侧) RXD[0:1] + RXC TXD_P/N + TXC_P/N (差分对 · 1.25 Gbaud) RXD_P/N + RXC_P/N (差分对 · 恢复时钟) REF_CLK 通常 125 MHz / 156.25 MHz 差分摆幅 400~800 mVpp 共模电压 ≈ 0.6 V

3.1 数据与控制信号:TXD/RXD 和 TXC/RXC

SGMII 的物理层用了 8B/10B 编码,所以每个字符是 10-bit 的。但接口上并不是直接传 10-bit 并行数据,而是把它串行化成 1.25 Gbaud 的差分信号。你可能会问:“那控制信号呢?比如 TX_EN、TX_ER 去哪了?” 嗯,这些控制信息都被编码进 8B/10B 的码流里了,不需要额外的引脚。

实际接口上,TXD 和 RXD 是两个差分对(TXD_P/N、RXD_P/N)。每个差分对同时承载数据和控制码字,靠的是 TXC 和 RXC 这个单端信号来区分。怎么区分?看下表:

TXC / RXC 电平 含义 对应 GMII 信号
0 当前字节为数据(Data) TXD[3:0](数据)
1 当前字节为控制码字(Control) TX_EN=0, TX_ER=1 等

实际应用中的小窍门:调试的时候,我习惯用示波器同时抓 TXD_P、TXD_N 和 TXC 信号。如果 TXC 在数据包中间出现毛刺,往往意味着 MAC 和 PHY 之间的时序对不齐。我曾经在一个项目里碰到过 PHY 把控制码字当作数据发给 MAC,结果丢包率高达 30%。后来发现是对方芯片的 TXC 极性配置反了——嗯,从那以后我每次对接都会先检查两边的 TXC 极性设置。

3.2 时钟方案:参考时钟与 CDR

SGMII 的时钟很有意思,它不像 GMII 那样需要独立时钟线。发送端直接把时钟信息嵌入到数据流里(通过 8B/10B 编码保证 DC 平衡和足够的跳变),接收端用 CDR(时钟数据恢复)把它抽出来。这样只靠一对差分线就能完成数据和时钟的传送,简洁高效。

但有个前提:两边的参考时钟必须同频。常见的参考时钟频率有两种:

  • 125 MHz —— 用于 1000BASE-X/SGMII 标准速率,PLL 倍频 10 倍得到 1.25 GHz 串行时钟。
  • 156.25 MHz —— 某些 FPGA 或 PHY 为兼容多速率(如 10G 降速)而采用的频率。

我见过不少人在这上面栽跟头——MAC 用的 125 MHz,PHY 却配成了 156.25 MHz,结果链路死活起不来。示波器一看,数据眼图根本不睁开。所以建议大家在原理图阶段就明确标注参考时钟精度:通常要求 ±50 ppm,如果链路长度超过 1 米,最好用 ±25 ppm 的晶体。

我的推荐做法:在 PCB 上给 REF_CLK 留一个 0 欧电阻的备用路径,万一主时钟源抖动不合格,可以直接切到片上有源晶振。我亲身经历过一次因为 PLL 环路滤波器电容选错,导致参考时钟抖动超标,换了个独立晶振就好了。

3.3 电气特性:差分摆幅、共模与终端匹配

SGMII 的电气特性基本沿用 1000BASE-X 的 CML(电流模式逻辑)标准。重要参数如下:

参数 最小值 典型值 最大值 单位
差分输出摆幅 400 600~800 1200 mVpp
共模电压 0.45 0.60 0.75 V
输出阻抗(差分) 80 100 120 Ω
终端匹配电阻 — 100 — Ω

这里面最容易出问题的就是终端匹配。CML 要求接收端在差分对之间跨接 100 Ω 电阻,同时还要上拉到电源(通常是 1.2 V 或 1.8 V)。如果拉偏了,共模电压会漂,轻则眼图退化,重则链路完全不通。我记得做一款光模块 SGMII 转接板时,一个新手把终端电阻画成了 50 Ω 对地,结果信号衰减得一塌糊涂。排查了好几个小时才发现。

再说一下 PCB 走线。SGMII 是高速差分信号,100 Ω 差分阻抗控制是基本要求。我个人习惯把线宽控制在 4~6 mil(根据叠层),等长尽量做到 ±50 mil 以内。线的间距至少保持 3 倍线宽,减少串扰。对了,AC 耦合电容也要注意:一般用 0.1 μF 的封装 0402/0603,位置靠近发送端,避免长 stub 产生反射。

特别提醒:SGMII 不支持热插拔。虽然在电气上 CML 可以做热插拔保护,但很多 PHY 芯片的 TX/RX 引脚并没有 ESD 保护二极管。我曾经在实验室插拔 SGMII 线时打坏过一款交换芯片的端口。所以建议你务必在链路中加入 TVS 管或使用热插拔专用的 PHY(如一些工业级芯片)。

3.4 实用建议:调试检查清单

每次我调试新的 SGMII 链路,都会按下面的清单过一遍,少走很多弯路:

  1. 测量参考时钟:频率是否准确?抖动是否在 ±50 ppm 内?
  2. 检查 TXC/RXC 极性:两边配置一致吗?有些芯片默认高有效,有些低有效。
  3. 眼图测试:用差分探头看 TX 和 RX 眼图是否张开,电压摆幅是否在 400~800 mV 之间。
  4. 终端匹配:100 Ω 跨接电阻是否焊好?共模上拉是否正确?
  5. AC 耦合电容:容值是否正确?位置是否靠近发送端?
  6. 链路建立状态:PHY 的 link up 灯是否亮起?可以通过读取 PHY 的 BMSR 寄存器(地址 1)确认。

要是上面这些都对了,但仍然不通,嗯……那就得怀疑芯片本身的配置寄存器了。比如某些 PHY 的 SGMII 模式需要手动 enable,还有的 MAC 要求先跑 autonegotiation。这部分后面章节会细讲。


—— 本章完 ——