《FPGA以太网MAC收发链路设计与实现》

4、硬件接口与PHY芯片:常见PHY(RTL8211、88E1111)接口(MII、GMII、RGMII、SGMII)信号定义与时序

FPGA与PHY芯片之间的接口设计,是以太网MAC收发链路中连接数字逻辑与模拟物理层的核心枢纽。接口选型直接决定了PCB布线复杂度、FPGA引脚占用率、时序收敛难度以及最高支持速率。本章围绕RTL8211(国产/瑞昱常用千兆PHY)与88E1111(Marvell经典千兆PHY)两款主流芯片,深入剖析MII、GMII、RGMII、SGMII四种接口的信号定义、时序参数与工程选型要点,帮助读者建立从引脚级到系统级的完整认知。

FPGA与PHY芯片接口信号流向与速率对照 FPGA MAC 控制器 (Xilinx / Altera / 国产) TX 数据通路 FIFO → 状态机 → 接口 RX 数据通路 接口 → 解析 → FIFO MDIO 管理接口 MDC / MDIO 时钟 / 复位 GTX_CLK / RESET_N 四种 MAC-PHY 接口 MII 4bit × 25MHz 10/100 Mbps GMII 8bit × 125MHz 1000 Mbps RGMII 4bit DDR × 125MHz 10/100/1000 Mbps SGMII 1bit SerDes × 1.25Gbps 10/100/1000 Mbps TXD[3:0] RXD[3:0] TXD[7:0] RXD[7:0] TXD[3:0] DDR RXD[3:0] DDR SGMII_TX_P/N SGMII_RX_P/N MDC MDIO PHY 芯片 RTL8211 / 88E1111 PCS / PMA 编码 / 解码 MDI 接口 差分对 1-4 时钟管理 25MHz 晶振 MDIO 从机 PHY 地址 0x00-0x1F RJ45 / 变压器 接口速率演进:MII(100M) → GMII(1000M) → RGMII(1000M, 引脚减半) → SGMII(SerDes)

上图展示了FPGA与PHY芯片之间的核心接口信号流向。从工程实践角度看,MII/GMII属于并行总线接口,RGMII是DDR方式的并行接口,而SGMII则完全转向串行SerDes架构。理解这些接口的本质差异,是进行FPGA选型、PCB布局和时序约束设计的前提。

4.1 四种接口的核心原理与信号定义

4.1.1 MII(Media Independent Interface)

MII是IEEE 802.3u定义的10/100Mbps标准接口,信号线总数约16根。其核心特征包括:

  • 数据总线:TXD[3:0](发送数据)、RXD[3:0](接收数据),4bit半字节宽度。
  • 时钟:TX_CLK(25MHz/2.5MHz,由PHY提供)、RX_CLK(25MHz/2.5MHz,由PHY提供)。
  • 控制信号:TX_EN(发送使能)、TX_ER(发送错误)、RX_DV(接收数据有效)、RX_ER(接收错误)、CRS(载波侦听)、COL(冲突检测)。
  • 管理接口:MDC(管理时钟,最高2.5MHz)、MDIO(管理数据,双向)。

MII的时序相对宽松,建立时间要求通常大于10ns,保持时间大于0ns。在FPGA实现中,MII接口的时序约束较为简单,适合低速控制平面或管理通道设计。

4.1.2 GMII(Gigabit MII)

GMII是千兆以太网的标准并行接口,将数据总线扩展至8bit,时钟频率提升至125MHz。关键信号包括:

  • 数据总线:TXD[7:0]、RXD[7:0],8bit字节宽度。
  • 时钟:GTX_CLK(125MHz,由MAC提供,用于发送)、RX_CLK(125MHz,由PHY恢复,用于接收)。
  • 控制信号:TX_EN、TX_ER、RX_DV、RX_ER、CRS、COL,功能与MII类似但时序要求更严格。

GMII的建立时间要求约为2ns,保持时间约1.5ns。在FPGA中实现GMII时,必须使用IODDR或OSERDES等原语来满足高速并行数据的时序要求。GMII最大的缺点是引脚占用过多(约24根信号线),在FPGA资源紧张时往往不经济。

4.1.3 RGMII(Reduced GMII)

RGMII是GMII的引脚精简版本,通过DDR(双沿采样)技术将数据线减半至4bit,时钟频率仍为125MHz,但数据在时钟上升沿和下降沿各传输4bit,等效带宽与GMII相同。RGMII信号定义如下:

信号名方向功能说明时序要求
TXCMAC→PHY发送时钟,125MHz DDR数据相对时钟中心对齐
TXD[3:0]MAC→PHY发送数据,上升沿发送TXD[3:0],下降沿发送TXD[7:4]建立/保持约1ns
TX_CTLMAC→PHY上升沿发送TX_EN,下降沿发送TX_EN XOR TX_ER与TXD同沿对齐
RXCPHY→MAC接收时钟,125MHz DDR数据相对时钟中心对齐
RXD[3:0]PHY→MAC接收数据,上升沿接收RXD[3:0],下降沿接收RXD[7:4]建立/保持约1ns
RX_CTLPHY→MAC上升沿接收RX_DV,下降沿接收RX_DV XOR RX_ER与RXD同沿对齐

RGMII的时序是四种接口中最具挑战性的。由于DDR传输,FPGA内部必须使用IDDR/ODDR原语,并且需要精确控制PCB走线等长(通常要求±50mil以内)。RTL8211和88E1111都支持RGMII,且提供了内部延时模式(delay mode)来调整时钟与数据的相位关系。

4.1.4 SGMII(Serial Gigabit MII)

SGMII采用1对SerDes差分线(TX_P/N、RX_P/N)替代并行总线,每对线速率1.25Gbps,内部嵌入时钟和数据。SGMII的特点包括:

  • 物理层:使用LVDS或CML电平,需要FPGA的GTP/GTX/SerDes硬核支持。
  • 编码:8b/10b编码,保证DC平衡和时钟恢复。
  • 自协商:SGMII支持速率自协商(10/100/1000Mbps),通过配置寄存器实现。
  • 管理:仍通过MDIO访问PHY寄存器,但SGMII本身有独立的链路状态机。

SGMII的最大优势是引脚极少(仅4根),且无需考虑并行数据的等长问题,但代价是必须使用FPGA的高速串行收发器,增加了功耗和设计复杂度。88E1111支持SGMII,而RTL8211系列中部分型号(如RTL8211E)也支持SGMII。

4.2 接口选型判断方法与操作流程

在实际项目中,选择哪种接口需要综合考虑以下因素:

  1. 速率需求:仅100Mbps选MII;1000Mbps选GMII/RGMII/SGMII。
  2. FPGA资源:并行接口占用普通IO,串行接口占用SerDes硬核。若FPGA无SerDes,则只能选并行接口。
  3. PCB布局:并行接口需要大量等长走线,SGMII只需差分对,布局更灵活。
  4. 功耗预算:SGMII的SerDes功耗通常比并行接口高50-100mW。
  5. PHY芯片支持:需查阅具体型号的数据手册,确认接口模式配置引脚(如RTL8211的PHYADR[2:0]和MODE[2:0])。
经验提醒:在FPGA选型阶段,建议优先考虑RGMII接口。它兼顾了引脚效率与通用性,且RTL8211和88E1111都提供了成熟的RGMII参考设计。只有在FPGA SerDes资源富余且需要简化PCB时,才考虑SGMII。

4.3 案例拆解:基于RTL8211的RGMII接口调试

背景与约束:某工业通信板卡采用Xilinx Artix-7 FPGA + RTL8211E,要求实现10/100/1000Mbps自适应以太网。PCB为4层板,FPGA与PHY间距约1.5英寸。

初始现象:千兆模式下链路无法建立,PHY状态寄存器显示链路down;百兆模式正常。

关键参数与日志:通过MDIO读取RTL8211E寄存器0x00(BMCR)和0x01(BMSR),发现PHY已配置为1000M全双工,但寄存器0x11(PHYSR)的link status位始终为0。使用示波器测量RXC时钟,发现频率为125MHz但占空比异常(约40%/60%)。

分析判断过程:RGMII的DDR传输对时钟占空比敏感,占空比偏差会导致数据采样窗口缩小。进一步检查PCB布线,发现TXC与TXD[3:0]的走线长度差约300mil,超出了RTL8211E内部延时补偿的范围(数据手册建议±50mil)。

实际操作步骤:

  1. 修改FPGA约束文件,为TXC添加额外的IODELAY(约2ns),补偿PCB走线长度差。
  2. 调整RTL8211E的寄存器0x14(RGMII TX delay)和0x15(RGMII RX delay),启用内部延时模式。
  3. 重新编译并下载,再次读取PHY状态寄存器,link status变为1。
  4. 使用iperf进行吞吐测试,千兆速率下达到940Mbps(线速的94%)。

结果对比:调整前千兆链路完全不通,调整后稳定运行。代价是增加了约2ns的IODELAY,但未影响百兆模式。

复盘经验:RGMII调试必须同时关注FPGA侧和PHY侧的延时配置。建议在PCB设计阶段就预留TXC的延时调节焊盘或测试点,便于后期调试。

4.4 常见误区与总结复盘

风险提示:以下误区在工程中高频出现,需特别注意。
  • 误区1:RGMII的TX_CLK由MAC提供,但RX_CLK由PHY恢复。很多初学者误以为两个时钟同源,导致跨时钟域处理错误。实际上,RGMII的发送和接收是异步时钟域,FPGA内部必须使用异步FIFO或握手信号隔离。
  • 误区2:GMII的GTX_CLK与RX_CLK频率相同但相位无关。GTX_CLK由FPGA产生,RX_CLK由PHY从接收数据中恢复,两者可能存在频偏(±100ppm),不能直接用于同一逻辑。
  • 误区3:SGMII不需要时钟约束。虽然SGMII是串行接口,但FPGA的SerDes参考时钟(通常为125MHz)必须满足严格的抖动要求,且需要与PHY的参考时钟同源或同步,否则会出现误码。
  • 误区4:忽略PHY的复位时序。RTL8211和88E1111都要求复位信号低电平保持至少10ms,且复位释放后需要等待PHY内部初始化完成(约5ms)才能进行MDIO访问。若复位时序不满足,PHY可能进入异常状态。

总结复盘:四种接口各有适用场景——MII适合低速控制面,GMII适合FPGA资源充裕且无需考虑引脚成本的设计,RGMII是当前最主流的千兆接口方案,SGMII则适合高速背板或需要减少PCB层数的场景。在实际项目中,建议遵循以下设计流程:

  1. 根据速率和FPGA资源确定接口类型。
  2. 查阅PHY数据手册,确认接口模式配置引脚和寄存器。
  3. 在PCB设计阶段严格控制等长和阻抗。
  4. 在FPGA中正确使用IODDR/IDDR/OSERDES/ISERDES原语。
  5. 通过MDIO回读PHY状态,验证链路建立和自协商结果。

掌握这些接口的时序本质和调试方法,能够显著缩短以太网MAC收发链路的开发周期,并为后续的协议栈实现打下坚实基础。