3、千兆以太网物理层概述:1000BASE-X与1000BASE-T的区别、GMII与RGMII接口时序、PCS/PMA子层功能
各位同学,咱们今天聊聊物理层。说实话,很多做FPGA的同学一听到“物理层”三个字就想跳过,觉得那是硬件工程师的事。但我要告诉你,如果你不懂物理层,MAC层你根本调不通。我自己就吃过这个亏——第一次调千兆网,板子死活不通,折腾了两天,最后发现是GMII接口的时序约束没做对。
好,咱们不绕弯子,直接进入正题。
3.1 1000BASE-X 与 1000BASE-T:两种物理层,两种玩法
千兆以太网有两种主流物理层标准:1000BASE-X 和 1000BASE-T。它们都跑1Gbps,但底层实现完全不同。
核心区别一句话总结:
- 1000BASE-X:光纤或短距离铜缆(如SFP光模块),8B/10B编码,全双工,不支持自动协商速率(只协商双工模式)。
- 1000BASE-T:五类/超五类双绞线,4对线同时传输,PAM-5编码,支持自动协商速率和双工模式。
我在项目中遇到过最典型的场景:客户要求用RJ45接口,但FPGA开发板只有SFP光口。这时候你就得搞清楚——1000BASE-X可以直接接SFP模块,而1000BASE-T需要外接PHY芯片(比如Marvell 88E1111、Broadcom BCM5461)。
咱们用表格对比一下,更直观:
| 特性 | 1000BASE-X | 1000BASE-T |
|---|---|---|
| 传输介质 | 光纤、短距离铜缆 | Cat5e/Cat6双绞线 |
| 编码方式 | 8B/10B | PAM-5(5电平脉冲幅度调制) |
| 线对数 | 1对(光纤)或2对(铜缆) | 4对(同时收发) |
| 双工模式 | 全双工 | 全双工/半双工 |
| 自动协商 | 仅协商双工模式 | 速率+双工模式 |
| 典型应用 | 交换机上联、数据中心 | 桌面接入、家用路由器 |
| FPGA直接对接 | 可以(需SERDES硬核) | 不可以(需外置PHY) |
嗯,这里有个坑我要提醒你:1000BASE-X的自动协商和1000BASE-T完全不一样。1000BASE-X的自动协商只交换双工模式信息,不交换速率。而1000BASE-T的自动协商要交换速率、双工、流控等一大堆信息。我曾经在调试时,把1000BASE-X的PHY配置成了1000BASE-T的自动协商模式,结果链路死活起不来——说白了,就是协议不兼容。
3.2 GMII与RGMII接口时序:FPGA和PHY之间的“握手”
好,现在咱们聊聊FPGA和PHY芯片之间的接口。最常用的两个接口是GMII和RGMII。
3.2.1 GMII接口
GMII(Gigabit Media Independent Interface)是IEEE 802.3标准定义的接口。它用8位数据总线,时钟频率125MHz,每个时钟周期传输1字节。
GMII的信号线包括:
- TXD[7:0]:发送数据总线
- TX_EN:发送使能
- TX_ER:发送错误指示
- GTX_CLK:发送时钟(125MHz,由MAC提供)
- RXD[7:0]:接收数据总线
- RX_DV:接收数据有效
- RX_ER:接收错误指示
- RX_CLK:接收时钟(由PHY提供)
个人经验:GMII接口的时序约束是很多新手翻车的地方。GTX_CLK是MAC输出的125MHz时钟,但PHY内部有PLL,接收时钟RX_CLK和GTX_CLK是不同源的。你想想看,跨时钟域处理不做好的话,数据采样就会出错。我建议你在FPGA内部用FIFO做异步处理,别偷懒。
3.2.2 RGMII接口
RGMII(Reduced GMII)是GMII的简化版。它把数据总线从8位减到4位,时钟频率还是125MHz,但用双沿采样(DDR)技术——时钟上升沿和下降沿各传输4位数据,合起来还是1字节。
RGMII的信号线更少:
- TXD[3:0]:发送数据(上升沿送低4位,下降沿送高4位)
- TX_CTL:发送控制(上升沿送TX_EN,下降沿送TX_ER)
- RXD[3:0]:接收数据
- RX_CTL:接收控制
- CLK:时钟(125MHz,由MAC或PHY提供)
RGMII的时序比GMII更严格。为什么?因为DDR模式下,数据在时钟的两个边沿都变化,建立时间和保持时间窗口只有GMII的一半。我刚开始用RGMII时,板子跑100M没问题,一上1000M就丢包。查了半天,发现是PCB走线等长没做好,时钟和数据线差了200ps——嗯,千兆网对时序就是这么敏感。
避坑指南:我曾经在RGMII接口上犯过一个低级错误——忘记加内部延迟(IDELAY)。RGMII标准要求PHY输出的时钟相对于数据有90度相移(即延迟2ns),但有些PHY芯片默认不提供这个相移。如果你用的PHY没有内部延迟功能,必须在FPGA内部用IDELAY原语手动加延迟,否则数据采样会出错。
3.3 PCS/PMA子层功能:物理层的“翻译官”
PCS(Physical Coding Sublayer)和PMA(Physical Medium Attachment)是物理层的两个子层。它们位于MAC层和物理介质之间,负责数据的编码、解码、串并转换等工作。
3.3.1 PCS子层
PCS子层的主要工作包括:
- 编码/解码:1000BASE-X用8B/10B编码,1000BASE-T用PAM-5编码
- 码组对齐:接收端找到码组的边界
- 链路同步:检测链路是否建立
- 自动协商:交换能力信息
你想想看,MAC层送过来的数据是8位宽的,但物理介质上传输的是串行比特流。PCS子层就是做这个“翻译”工作的。以1000BASE-X为例,PCS把8位数据编码成10位码组,加入逗号字符(comma)用于对齐,然后送给PMA子层。
3.3.2 PMA子层
PMA子层更靠近物理介质,它的工作包括:
- 串并转换:把10位并行数据转成串行比特流(发送方向),或反过来(接收方向)
- 时钟恢复:从接收到的串行数据中提取时钟
- 线路驱动:驱动物理介质(光纤激光器、铜缆驱动器)
在FPGA中,PMA子层通常由SERDES硬核实现。Xilinx的GTP/GTX、Intel的LVDS SERDES,都是干这个活的。我记得第一次用Xilinx的GTP时,被它的配置选项搞晕了——什么TX/RX极性翻转、预加重、均衡、环回模式……说实话,这些参数不调好,链路根本不通。
一个实用的调试技巧:当你怀疑PCS/PMA有问题时,可以用环回模式来测试。把PHY或SERDES配置成内部环回,让发送数据直接回到接收端。如果环回测试通过,说明PCS/PMA工作正常;如果不通过,问题就在物理层内部。我每次调千兆网,第一步就是做环回测试,这能帮你快速定位问题。
3.4 小结
好,咱们把今天的内容串一下:
- 1000BASE-X vs 1000BASE-T:一个用光纤/短距铜缆,8B/10B编码;一个用双绞线,PAM-5编码。FPGA可以直接接1000BASE-X(需要SERDES),但接1000BASE-T必须外置PHY。
- GMII vs RGMII:GMII是8位并行接口,125MHz单沿采样;RGMII是4位DDR接口,引脚少但时序更严格。用RGMII时别忘了加内部延迟。
- PCS/PMA子层:PCS负责编码/解码、码组对齐;PMA负责串并转换、时钟恢复。调试时先用环回模式确认物理层是否正常。
下一章咱们会深入MAC层的核心——帧结构、CRC校验、流控机制。到时候我会带着你一步步写Verilog代码,把MAC层在FPGA上真正跑起来。嗯,敬请期待。