QSGMII协议基础
做PHY环回调试,绕不开QSGMII这个接口。很多人觉得它跟SGMII差不多,其实门道不少。我最近调试过的一个QSGMII链路,就因为没搞清楚两者的区别,浪费了整整两天时间。今天咱就把这个基础打扎实了。
QSGMII与SGMII的差异
说白了,SGMII是一条串行链路,一次只能传一个MAC的数据。QSGMII呢,它把四条SGMII数据流合并到一条高速串行链路上。我在项目中遇到过很多工程师,总以为QSGMII就是SGMII的补丁,其实完全不是。
| 对比项目 | SGMII | QSGMII |
|---|---|---|
| 接口类型 | 单通道串行 | 四通道复用串行 |
| 数据通道数 | 1个MAC数据 | 4个MAC数据(复用) |
| 线速率 | 1.25 Gbps | 5.0 Gbps |
| 总带宽 | 1 Gbps(有效) | 4 Gbps(有效) |
| 与MAC接口 | 1条SGMII链路 | 1个QSGMII端口 |
| 引脚数(差分对) | 2对(Tx+Rx) | 2对(Tx+Rx) |
这个表格一看就清楚了。都是两对差分线,但QSGMII能传4个MAC的数据。怎么做到的?其实就是靠更快的时钟和更复杂的帧结构。
信号速率与编码方式
SGMII的线速率是1.25 Gbps,QSGMII直接飙到5.0 Gbps。为什么会这样?因为要装下4路数据嘛。加上8B/10B编码的开销,实际有效数据速率是4 Gbps(4路各1G)。
8B/10B编码,嗯,这里要注意。它不是QSGMII的专利,SGMII也用。但QSGMII用了更严格的抖动要求和时钟恢复方案。我刚开始做QSGMII调试时,就因为在编码上疏忽了,导致链路一直不稳定。
| 参数项 | 数值 | 说明 |
|---|---|---|
| 位速率(线路速率) | 5.0 Gbps | 串行比特流速率 |
| 编码方式 | 8B/10B | 每字节转化为10位编码 |
| 编码效率 | 80% | 有效数据占比 |
| 有效数据速率 | 4.0 Gbps | 4路 × 1 Gbps |
| 传输通道 | 1路差分对 | 发送与接收各1对 |
| 时钟恢复 | 内嵌时钟 | 从数据流提取时钟 |
8B/10B编码最牛的地方,就是保持直流平衡。你想想看,如果信号全是0或全是1,接收端的CDR(时钟数据恢复)就抓瞎了。8B/10B保证了足够多的跳变沿,让CDR能锁定。
链路结构
QSGMII的链路结构,分成三个层级。我习惯从下往上捋:
- 物理层(PMA):负责串行化、去串行化,以及时钟恢复。我记得有一次调试,PMA锁不住时钟,查了半天发现是参考时钟精度不够。
- PCS层:负责8B/10B编码和解码,以及通道绑定。QSGMII在这里把4路数据分时复用。
- MAC层接口:4个独立的GMII/RGMII接口,或者更常见的定制化接口。
为什么会分这么多层?说白了就是为了隔离。PMA管物理信号,PCS管编码,上层只关心数据。这样一来,你换PHY芯片,上层代码基本不动。
下面这张图,展示了QSGMII和SGMII的链路结构对比。我花了不少心思画这张图,它帮你把两种接口的差异看个透彻。
从上图可以清楚看到,QSGMII在PCS层多了一个“复用/解复用”模块。这个模块的工作模式,说白了就是轮流采样4个MAC的数据,然后打包送给8B/10B编码器。接收端再反向操作,把4路数据还原。
- QCGMII的CDR必须适应5G速率下的抖动,一般要求总抖动在0.25UI以内
- PCS层的复用必须精确对齐每个MAC数据的边界,否则会出现通道错位
- 物理层差分线的阻抗控制要严格到100Ω ±5%,比SGMII要求高一倍
我个人有个习惯,在设计PHY环回调试时,先把链路结构图贴在调试台旁边。遇到问题,按着PMA→PCS→MAC的路径去查,效率高很多。