基于 7 系列 FPGA 实现万兆以太网通信
本文聚焦于 7 系列 FPGA,探讨两种实现万兆以太网通信的方案:10G Ethernet Subsystem 核与 10G PCS/PMA 核。基于 SerDes 的 10G 以太网通信采用 64B/66B 编码方式,串行线速率为 10.3125Gbps。
一、FPGA 实现万兆以太网
1.1 10G PCS/PMA 核
该核的用户接口为 XGMII,具体使用可参考 PG068 文档。对于光纤或 RJ45 水晶头接口(10GBASE-R 类型),内部功能结构包含加扰与解扰模块。万兆网通信采用 64B/66B 编码,发送前需对数据加扰,接收时先解扰。编码规则是在加扰后的 64bit 数据前加入 2bit 同步位(Sync),表示该 64bit 数据是数据帧还是控制帧。
1.1.1 以太网 XGMII 接口
这里讨论 64bit 数据位宽的 XGMII 接口。xgmii_txd 对应字节为控制字符时,xgmii_txc 对应的控制位为高电平;反之则为低电平。
相关时序中,空闲状态为 0x07、起始状态为 0xFB、终止状态为 0xFD。以太网帧对接 XGMII 接口的封装过程如下:添加控制符,顺序为空闲 IDLE(0x07)+ START(0xFB)+ 前导码 + SFD + MAC + ...... + FCS + TERMINATE(0xFD)。
在增加起始、结束、空闲控制符后,需按转换规则处理。例如起始 S 转换为 64bit 中 MSB 字节为 0x78,空闲状态为 0x1E。最后将上述 64bit 接口数据经加扰,送到 10G PCS/PMA 核的 XGMII 接口。用户接收到数据后,按逆过程解析网络帧。
1.1.2 MDIO 接口
MDIO 接口是该核的寄存器配置接口,类似于千兆网 PHY 的寄存器配置。仅在特定场景下需要用到,具体寄存器描述见 PG068 的 Configuration Vector 部分。
1.1.3 核配置说明
该核需要 License,且只适用于 7 系列 FPGA。配置页面中通常不启用 MDIO 接口。关于时钟、复位部分的使用,建议参考官方 Example。
借助例化上述 GT 核后,可按流程开发编码实现 PCS 相关功能。发送帧时,用户端帧数据封装起始、结束、空闲码后,经加扰、结合同步字段、通过 Gearbox 及并串转换,最终传送出去;接收则是逆操作。开发过程主要涉及帧数据的封装与解封、同步字段的增添与解析、加解扰。具体网络协议(如 UDP、TCP)由用户根据需求实现。
1.2 10G Ethernet Subsystem 核
该核的用户数据接口为 AXIS,是实现万兆网通信最快捷的方法,同样需要 License。开发时只需按照以太网协议对网络帧进行解析与封装,重点关注以下结构:
- 选择 10GBASE-R 类型,64bit 的 AXIS 数据接口。
- AXI-Lite 配置接口时钟范围,此处未启用流控。
- DRP 及状态接口配置。
- 时间戳功能可选,本例未启用。
- 时钟及复位选择集成核内外。
多通道万兆网通信使用核方式与 UltraScale/+ 系列有所不同,时钟及复位的具体用法请参考 Example。
二、万兆网功能测试
测试基于 UDP 协议栈进行,原理与千兆、40G/50G、100G 以太网相同,差异在于用户数据位宽及 CRC 检验的实现难度。
2.1 ARP 及 Ping 功能
通过 Ping 下位机测试 ARP 及 Ping 应答功能。工程实现中,向对端发包前先查询 ARP 列表,无果则进行寻址,明确场景下也可省略此步骤。
2.2 巨型帧
不同网卡、路由器支持的最大 MTU 不同,通常为 46~1500 字节。为实现长数据包传输,产生巨型帧。多级路由网络包传输为避免中间节点丢弃,采用巨帧分片处理:拆分成多包,利用 IP 层头部分片及偏移字段区分完整性和顺序。首包保持帧结构完整,MTU 最大 1500 字节;其他分片包去除 UDP 头部字段。
在点到点直连或中间路由节点支持大 MTU(如 9000 字节)的场景,可采用标准分片策略或不分片策略。
测试验证:
- 协议栈仿真: 测试模块产生 8500 字节测试数据,协议栈分片,环回后接收端正确解析。
- 上板测试: 10G 以太网核上板测试,上位机 Wireshark 观测显示分片及偏移量正常。从第 2 个分片开始,不再有 UDP 头部字段。
- 同样验证了 8500 字节数据的发送与接收。


