
小苏的FPGA之前分享过u/u系列FPGA的万兆网通信UltraScale/ FPGA实现万兆网的两种方式GT核、10G Ethernet Subsystem核在别的平台有些网友问是否支持巨型帧、7系列、速率等问题这里就专门写篇7系列的万兆网相关功能的测试。一、FPGA实现万兆以太网本文只介绍使用10G以太网核和10G PCS PMA核两种方式实现的万兆网通信基于SerDes实现10G以太网通信采用64B/66B编码方式串行线速率为10.3125Gbps。1.1 、10G PCS/PMA核关于该核的使用参考PG068此核的用户接口为XGMII。对于光纤或者RJ45水晶头的接口10GBASE-R类型内部功能结构如下万兆网通信采用64B/66B编码。64B/66B编码在发送前需要对数据加扰在接收数据时也要先对数据解扰。64B/66B编码在加扰后的64bit数据前加入2bit的同步位Sync组成66bit数据同步位表示该64bit数据是数据帧还是控制帧。1.1.1、以太网XGMII接口这里只讨论64bit数据位宽的XGMII接口xgmii_txd对应字节为控制字符时xgmii_txc对应的控制位为高电平在xgmii_txd对应字节为数据字符时xgmii_txc对应的控制位为低电平。相关时序XGMII接口中相关数据、控制的定义如下空闲状态为0x07、起始状态为0xFB、终止状态为0xFD。关于以太网帧如何对接XGMII接口可以通过以下过程理解以太网帧结构如下XGMII接口中一帧报文的封装发送添加控制符空闲IDLE0x07 START0xFB 前导码 SFD MAC ...... FCS TERMINATE0xFD。比如以下ILA截图控制对应的控制符为1后续在64B/66B编码中转换为2bit同步位Sync。在增加起始、结束、空闲控制符后按下图的转换规则比如起始S转换为64bit中MSB字节为0x78空闲状态为64bit中MSB字节为0x1E。最后将上述64bit的接口数据经加扰送到10G PCS/PMA核的XGMII接口。用户接收到XGMII接口数据按上述逆过程解析网络帧。1.1.2 、MDIO接口可选用本部分只有一些场景会用到不过多描述具体寄存器描述见PG068的Configuration Vector描述。MDIO接口是该核的寄存器配置接口类似于千兆网PHY的寄存器配置。其相关时序配置如下1.1.3、10G PCS/PMA核该核需要license核页面如下该核只适用于7系列FPGA。上述核配置页面不启用MDIO接口。关于该核的时钟、复位部分的使用可参考其example。1.1.4、万兆网开发借助例化上述GT核后可按照图1开发编码实现PCS相关功能对于发送帧功能用户端的帧数据封装起始、结束、空闲码后经加扰后结合同步字段经变速箱Gearbox并串转换等最终经电路传送出去对于接收是上述过程的逆操作。开发过程主要涉及帧数据按照上节内容封装与解封、同步字段的增添与解析、加解扰。其中帧数据的封装与解析按照以太网协议进行即可。具体网络协议用户根据具体需要封装、解析即可比如UDP、TCP、FTP等这里只讨论万兆网通信方式不介绍具体协议协议内容可参考FPGA实现千兆网UDP协议(含ARP、ICMP)。1.2、10G Ethernet Subsystem核实现万兆网该核的用户数据接口为AXIS这里不再介绍。此方式是实现万兆网通信最快捷的方法需要license。开发按照以太网协议对网络帧进行解析与封装即可只需关心如下结构其核配置界面如下根据开发板这里选择10GBASE-R类型64bit的AXIS数据接口。AXI-Lite配置接口时钟范围选择这里没有启用流控。这页主要是DRP及状态接口。这页没启用时间戳。这页选择时钟及复位是集成核内外。多通道的万兆网通信使用核方式与U/U系列不同。关于时钟及复位的使用可参考其example。二、万兆网功能测试本文只针对UDP协议栈测试UDP相关协议可参考FPGA实现千兆网UDP协议(含ARP、ICMP)。千兆、万兆、40G/50G、100G以太网的UDP协议栈的实现原理相同只是用户数据位宽、CRC检验的实现难易不同。2.1 、工程实现上述两种方式使用相应的核都可以实现万兆网通信本文采用UDP协议栈测试工程部分功能。这里不介绍UDP协议栈ARP缓存、ping、UDP比如向对端发包前先查询ARP列表查询无果则ARP寻址后再发包对于一些明确的场景也可以省略ARP寻址。比如10G万兆网核的工程两端的信息配置2.1 、ARP及Ping功能通过ping下位机测试arp及ping应答功能2.2 、巨型帧不同的网卡、路由器等支持的最大MTU不同但都支持46~1500字节。为了实现长数据包的传输产生了巨型帧。对于多级路由的网络包传输为了避免中间路由节点的设备丢弃采用巨帧分片处理巨帧拆分成多包利用IP层的头部分片及偏移字段第2个DW中区分数据的完整性和顺序。分片的首包保持帧结构的完整字段MTU最大1500字节其他分片包在网络帧结构中去除了UDP的头部字段。对于点到点直连的应用场景或者中间路由节点都支持MTU大值比如9000字节则利用巨帧时可采用标准的巨帧分片策略也可采用不分片的策略。FPGA向上位机发送长度为8500字节的UDP巨型帧的测试如下分片为5包1480字节和最后一包1100字节。协议栈仿真测试模块产生8500字节的测试数据协议栈进行巨帧分片环回后接收端能正确解析数据。10G以太网核上板测试测试模块产生8500字节的测试数据上位机wireshark观测上发的矩阵数据分片以及偏移量正常从第2个分片开始不再有UDP头部字段。10G PCS/PMA核的测试2.3、测速两个工程向上位机发包当接口空闲时一直上发测速结果近9.5 Gbps2.4、接收解析报文这部分在协议栈中实现在u/u系列中已经测试过UltraScale/ FPGA实现万兆网的两种方式GT核、10G Ethernet Subsystem核这里不再重复。2.5、代码有相关需要的可私信联系。往期精彩回顾FPGA开发PCIe系列2实现Block DMA的H2C、C2HFPGA的时钟动态调相和鉴相功能基于7系列FPGA实现万兆网通信FPGA实现千兆网UDP协议(含ARP、ICMP)FPGA 40G/50G Ethernet Subsystem核的使用基于FPGA实现NVMe硬盘的读写功能基于FPGA开发应用SATA硬盘FPGA实现SD卡内文件的读写功能(FAT32文件系统)FPGA光通信系列4 — 基于64b/66b编码的自定义协议FPGA光通信系列3 — 基于8b/10b编码的自定义协议应用FPGA光通信系列2——Aurora 64B/66B的使用FPGA实现Aurora光通信应用JESD204B的使用系列——3、DAC的应用(AD9164 9.6GSPS)JESD204B的使用系列——2、协议及ADC的应用(AD9689)JESD 204B的使用系列—1、时钟芯片的应用