FPGA实战(58):10G Ethernet XGMII PHY层 接口设计与仿真验证

引言

随着数据中心与高速互联场景对带宽需求的持续增长,10 Gigabit Ethernet(10GbE)已成为各类 FPGA 平台的标准高速接口方案。IEEE 802.3ae 定义的 10GBASE-R 物理层采用 64B/66B 编码,通过 XGMII(10 Gigabit Media Independent Interface)总线与 MAC 层交互——数据通路宽度为 64 bit,配合 8 bit 控制信号,工作频率 156.25 MHz。

在 Xilinx 7 系列 FPGA 上实现 10GbE,核心工作围绕10G Ethernet PCS/PMA IP展开:该 IP 封装了 PCS(Physical Coding Sublayer)与 PMA(Physical Medium Attachment)的全部逻辑,但时钟复位、QPLL 配置、跨时钟域同步等"胶合逻辑"仍需用户自行设计。本文以XC7Z035芯片为目标平台,给出一套完整的 10GBASE-R XGMII 接口实现方案,涵盖 IP 配置、模块划分、关键电路设计及仿真验证。


1 系统整体设计

1.1 目标平台与 IP 选型

参数取值
目标器件Xilinx XC7Z035(Zynq-7000,Artix/Kintex 7 系列兼容)
IP 核10G Ethernet PCS/PMA (10GBASE-R/KR) v6.0
协议模式10GBASE-R
XGMII 数据宽度64 bit
GT 参考时钟156.25 MHz(差分)
DRP 时钟100 MHz

注:XC7Z035 内部仅含 GTXE2 收发器,不支持 10GBASE-KR(需 GTH/GTY),故 IP 配置中仅使能 10GBASE-R 模式。

1.2 IP 核配置要点

在 Vivado 中打开 10G Ethernet PCS/PMA 的 Re-customize 界面,Configuration → BASE-R页签的关键配置如下:

图 1 — BASE-R 配置页:XGMII 宽度选 64bit,DRP Clock 设为 100 MHz

Shared Logic页签选择Include Shared Logic in example design

图 2 — Shared Logic 选择:将 QPLL / 时钟缓冲 / 复位逻辑放在 example design 中

这一选择的含义是:IP 核本身不包含 QPLL、参考时钟缓冲等共享资源,而是由 Example Design 提供独立模块供用户实例化。当设计中存在多个 10G 核时,多个核可共用同一组 Shared Logic;单核场景下直接使用即可。

1.3 仿真层次结构

本工程的仿真顶层结构如下图所示:

图 3 — Vivado 仿真层次树形结构

2 核心模块设计

2.1 复位生成模块rst_gen_module

系统中需要两类复位:一是上电/全局复位后的延时释放复位,二是链路建立完成后的数据通路复位同步。设计思路是用一个参数化计数器产生可配置周期的复位脉冲:计数器在异步复位下清零,达到P_RST_CYCLE个时钟后翻转复位输出寄存器。由于复位释放由时钟边沿驱动,复位撤销过程不存在跨时钟域亚稳态。

设计要点:

  • 异步复位、同步释放:i_rst作为异步条件清零计数器,而输出寄存器仅由时钟驱动翻转,避免复位撤销时的亚稳态传播。
  • 参数化周期:P_RST_CYCLE控制复位保持的时钟周期数。在本工程中:
    • XGMII 域复位:P_RST_CYCLE = 20(约 128 ns @ 156.25 MHz)
    • 系统时钟域复位:P_RST_CYCLE = 20(200 ns @ 100 MHz)

完整源码见第 7.1 节。

2.2 QPLL 公共模块ten_gig_eth_pcs_pma_0_gt_common

10GBASE-R 要求线速率10.3125 Gbps,GT 收发器的串行时钟由 QPLL(Quad PLL)提供。对于 GTXE2,QPLL 反馈分频比的计算关系为:

f QPLL = f ref × FBDIV REFCLK_DIV f_{\text{QPLL}} = f_{\text{ref}} \times \frac{\text{FBDIV}}{\text{REFCLK\_DIV}}fQPLL=fref×REFCLK_DIVFBDIV

f ref = 156.25  MHz f_{\text{ref}} = 156.25\ \text{MHz}fref=156.25 MHzFBDIV = 66 \text{FBDIV} = 66FBDIV=66REFCLK_DIV = 1 \text{REFCLK\_DIV} = 1REFCLK_DIV=1,得:

f QPLL = 156.25 × 66 = 10312.5  MHz = 10.3125  GHz f_{\text{QPLL}} = 156.25 \times 66 = 10312.5\ \text{MHz} = 10.3125\ \text{GHz}fQPLL=156.25×66=10312.5 MHz=10.3125 GHz

恰好对应 10GBASE-R 的线速率。模块的思路即按上述分频比例化GTXE2_COMMON原语:通过QPLL_FBDIV/QPLL_FBDIV_RATIO参数表选择分频系数(本工程FBDIV=66),其余属性取 IP 生成器的推荐值即可。

仿真加速参数WRAPPER_SIM_GTRESET_SPEEDUP在仿真时设为"TRUE"可大幅缩短 QPLL 锁定等待时间(硬件中无效,仅影响仿真时序模型)。

完整源码见第 7.3 节。

2.3 跨时钟域 FF 同步器

多时钟域环境下,复位信号和控制信号的跨域传递必须经过多级触发器同步以消除亚稳态。ff_synchronizer_rst2是一个参数化的同步器模板:输入先经C_NUM_SYNC_REGS级移位寄存器打拍,再驱动输出。其关键点在于两个综合属性:

属性作用
shreg_extract = "no"阻止综合工具将移位寄存器推断为 SRL(LUT 移位寄存器),确保使用 FF 实现
ASYNC_REG = "TRUE"告知布局布线工具这是异步路径上的寄存器,进行时序约束隔离和 MTBF 优化

在本工程中,该同步器被实例化为5 级C_NUM_SYNC_REGS = 5),用于以下三条跨域路径:

同步器实例源域目的域功能
areset_coreclk_sync异步复位 →coreclk复位同步到核心时钟域
qplllock_txusrclk2_syncqplllocktxusrclk2QPLL 锁定指示同步到 TX 用户时钟
gttxreset_txusrclk2_syncgttxreset