4. QSGMII 接口信号:差分对定义、通道复用方式、时钟分配
好,咱们进入第四章。前几章我们把 SGMII 的底子打扎实了,现在该聊聊 QSGMII 这个「四合一」的玩法了。我当年第一次接触 QSGMII 时,心里就纳闷:一条串行链路怎么同时塞进四个千兆口的数据?结果一翻手册才明白——全是靠时分复用和一颗高速 SerDes 撑起来的。这一章我就把 QSGMII 的物理信号、复用机制、时钟分配彻底讲透。
4.1 差分对定义:少了一半的线,多了三倍的数据
SGMII 每个端口需要一对发送差分、一对接收差分,共 4 根信号线。而 QSGMII 呢?整个芯片对外就 一对发送差分 + 一对接收差分,一共才 2 对线,却要承载 4 个千兆端口的全部数据。说白了,就是用更少的物理引脚跑更多的业务。下表一目了然:
| 参数 | SGMII(每端口) | QSGMII(整芯片) |
|---|---|---|
| 发送差分对 | 1 对(TXP/TXN) | 1 对(TXP/TXN) |
| 接收差分对 | 1 对(RXP/RXN) | 1 对(RXP/RXN) |
| 线总数(差分) | 4 根 | 4 根 |
| 支持的 MAC 数量 | 1 | 4 |
| 线速率 | 1.25 Gbps | 5.0 Gbps |
个人习惯:画 PCB 时,QSGMII 的差分对阻抗控制在 100Ω ±10%,与 SGMII 一致。但要注意,5Gbps 的信号对走线等长和回流地的要求比 1.25Gbps 严苛得多。我曾在某个项目里因为没处理好过孔 stub,导致眼图塌陷,后来加了一层背钻才搞定。
4.2 通道复用方式:时间分片,挨个儿发
QSGMII 是靠 时分复用 把四个 MAC 的数据挤进一条串行链路的。简单讲,它把 5Gbps 的串行流分成一个个「帧周期」,每个帧周期内给四个通道各分配一个时间片。你想想看,四个小孩共用一条滑梯,每人滑一次,轮着来——就是这个道理。
帧结构长什么样?每个帧周期包含 8 个数据位(经过 8B/10B 编码后实际上是 10 个码元),其中:
- 前 2 个位(位 0~1):通道 0 的数据
- 接着 2 个位(位 2~3):通道 1 的数据
- 再 2 个位(位 4~5):通道 2 的数据
- 最后 2 个位(位 6~7):通道 3 的数据
每个通道的 2 个位里,除了数据还有控制信号。控制信号包括:
- TX_EN:发送使能
- TX_ER:发送错误
- RX_DV:接收数据有效
- RX_ER:接收错误
这些控制信号与 GMII/RGMII 接口一一对应,打包在同一个时间片里发送。接收端恢复数据后,根据时间片编号把数据分发到对应的 MAC。
避坑:我曾经在调试一块交换芯片时,发现 QSGMII 链路能建连,但四个端口中的第二个口始终不通。查了半天,原来是 PCB 上把通道 1 和通道 2 的差分对顺序接反了。记住:QSGMII 的通道顺序由芯片内部的映射决定,硬件上必须严格对应,否则数据就会串扰到别的 MAC 上。
4.3 时钟分配:125MHz 是起点,5GHz 才是干活儿的频率
QSGMII 的参考时钟通常是一个对外的 125MHz 差分时钟(LVDS 或 LVPECL 电平,具体看片选)。这个 125MHz 进入 PHY 或 MAC 的 SerDes PLL,内部倍频 40 倍,得到 5GHz 的采样时钟。为什么是 40 倍?因为 125MHz × 40 = 5000 MHz,正好是 5GHz 线速率。
当然,时钟恢复还是老办法——接收端从串行数据流里提取时钟。但我要提醒一点:QSGMII 支持两种参考时钟模式:
- 独立参考时钟:每个设备(MAC 和 PHY)各自提供 125MHz,频率必须同步(±100ppm 以内)。
- 共同时钟:由 PHY 提供 125MHz 给 MAC,或者反过来。这种模式更常见,能省一颗晶振。
我个人的实战经验:共同时钟模式下,务必注意时钟树上的抖动叠加。有一次我们用了低成本晶振,结果 QSGMII 链路的误码率飙到 10⁻⁴,换了低抖动晶振后才降到 10⁻¹² 以下。时钟质量直接决定眼图裕量,别省这点钱。
下面是 QSGMII 接口的整体框图,把差分对、通道复用和时钟分配的关系一次画清楚:
从这张图可以看得很清楚:四个 MAC 的数据先汇聚到时分复用器,按帧周期分时送给 SerDes,最终通过一对差分 Tx 线发出;接收方向相反。时钟分配方面,125MHz 参考时钟同时送给 SerDes 和 MAC 侧(若采用共同时钟模式),确保两端频率一致。
补充一句:有些芯片为了简化设计,会把 QSGMII 的参考时钟直接接到 SerDes 的专用 PLL 引脚,而 MAC 侧的时钟则从 SerDes 恢复的时钟提取。这样做的好处是减少时钟树上的分叉,但代价是 MAC 侧必须支持时钟从串行链路恢复。