3、千兆以太网物理层概述:1000BASE-X与1000BASE-T的区别、GMII与RGMII接口时序、PCS/PMA子层功能

各位同学,咱们今天聊聊物理层。说实话,很多做FPGA的同学一听到“物理层”三个字就想跳过,觉得那是硬件工程师的事。但我要告诉你,如果你不懂物理层,MAC层你根本调不通。我自己就吃过这个亏——第一次调千兆网,板子死活不通,折腾了两天,最后发现是GMII接口的时序约束没做对。

好,咱们不绕弯子,直接进入正题。

3.1 1000BASE-X 与 1000BASE-T:两种物理层,两种玩法

千兆以太网有两种主流物理层标准:1000BASE-X1000BASE-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芯片之间的接口。最常用的两个接口是GMIIRGMII

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上真正跑起来。嗯,敬请期待。