GMII 接口概述
做千兆以太网设计的朋友,对 GMII 肯定不陌生。我入行那会儿,第一次接触这个接口时还有点懵——8 根数据线、两根时钟线,外加一堆控制信号,怎么看怎么像 MII 的升级版。其实说白了,它就是 MII 的千兆版。
GMII 到底是个啥?
GMII,全称 Gigabit Media Independent Interface,中文叫千兆媒体独立接口。它是 IEEE 802.3 标准里定义的一种接口,连接 MAC(媒体访问控制器)和 PHY(物理层芯片)之间的数字通路。我个人的理解:它是 MAC 和 PHY 之间的一条高速数字公路。
GMII 的数据宽度是 8 位,时钟频率 125 MHz,峰值速率刚好 1000 Mbps,也就是 1 Gbps。注意它只是 MAC 和 PHY 之间的接口,不直接管光纤或者网线那头的事。
| 参数 | GMII | MII |
|---|---|---|
| 数据宽度 | 8 位 | 4 位 |
| 时钟频率 | 125 MHz | 25 MHz(100M)/ 2.5 MHz(10M) |
| 速率 | 1000 Mbps | 100 / 10 Mbps |
| 接口信号线数 | 约 24 根 | 约 18 根 |
它在千兆以太网里扮演什么角色?
千兆以太网的链路从应用层到物理介质,会经过好几层。GMII 处在 MAC 层和 PHY 层之间。你想想看,MAC 负责成帧、地址过滤、CRC 校验,PHY 负责编码、调制、信号收发。GMII 就是这两者之间的桥梁。
我举个例子:当电脑要发送一个 IP 包时,CPU 先把数据交给 MAC,MAC 封装成以太网帧,然后通过 GMII 把 8 位并行数据送到 PHY,PHY 再转换成串行信号送上网线。接收方向反过来走。
所以 GMII 的核心职责就是:在 MAC 和 PHY 之间高速、可靠地传输以太网帧数据和控制信息。
GMII 的信号定义
了解信号才能谈时序。GMII 的主要信号包括:
- TXD[7:0]:发送数据总线,8 位并行。
- TX_EN:发送使能,指示 TXD 上的数据有效。
- TX_ER:发送错误,用于发送出错时的标记。
- GTX_CLK:千兆发送时钟,125 MHz,由 MAC 提供(注意!很多资料写错了)。
- TX_CLK:10/100M 模式下的发送时钟,由 PHY 提供。
- RXD[7:0]:接收数据总线。
- RX_DV:接收数据有效。
- RX_ER:接收错误。
- RX_CLK:接收时钟,125 MHz,由 PHY 提供。
- CRS、COL:载波检测、冲突检测,半双工时用。
GMII 的时序到底怎么跑?
千兆模式下,GTX_CLK 125 MHz,周期 8 ns。MAC 在 GTX_CLK 的上升沿发送 TXD、TX_EN、TX_ER,PHY 在同一个沿采样。接收方向类似,PHY 在 RX_CLK 上升沿发送 RXD、RX_DV、RX_ER,MAC 采样。
这里面有个重要概念:时钟到输出延时 (Tco) 和 建立时间 (Tsu)。MAC 发数据时,数据必须在时钟沿之前 Tsu 就稳定,并且保持 Tco 时间。时序约束的目的就是保证这些时间余量足够。
知识结构一览
我把 GMII 接口的核心概念画成了一张结构图。你看一眼就能明白它的数据流向和角色定位。
为什么时序约束对 GMII 这么重要?
GMII 工作频率 125 MHz,周期只有 8 ns。FPGA 内部走线、IO 延时、PCB 延时加在一起,留给 Tsu 和 Th 的余量往往不到 1 ns。你想想看,稍微不注意,数据就在时钟沿附近跳变,导致采样错误。
我曾经调试一个项目,GMII 接口在实验室 25 度环境下跑得好好的,一搬到机房(40 度)就开始丢包。排查到最后发现,是 GTX_CLK 的抖动随温度变大,导致时序余量被吃完。后来加了相位偏移约束,才算搞定。
所以课程接下来的章节,我们会从 GMII 的源同步时序模型讲起,逐步深入到约束写法、静态时序分析、常见 bug 调试技巧。这些都是我这些年踩坑总结出来的实战经验,希望能帮你少走弯路。