天天看点

基于RGMII的FPGA千兆以太网设计

一.总体概括

千兆以太网的理论网速为1000Mbit/s,实际网速接近该值,但几乎不可能达到,但相对于百兆网,网速快了很多。目前千兆以太网常用物理层接口有GMII和RGMII,两种接口有同有异,应用情况也有所差别。GMII占用的引脚较多,RGMII可以很大程序地减少引脚的使用。因此本设计采用RGMII接口进行设计,物理层芯片采用RTL8211E,根据以太网数据帧的要求并遵循相关时序要求,编写FPGA的Verilog代码,实现了千兆以太网UDP的通讯。

二.RGMII接口介绍

2.1 RGMII接口简介

RGMII采用11根信号线即可实现以太网通讯,大大减少了信号的数量,节约了硬件电路板的面积,RGMII 接口如图1所示。

基于RGMII的FPGA千兆以太网设计

图1 RGMM接口 图中RGMII接口各个信号线功能如表1所示。 表1 RGMII接口信号线功能表

基于RGMII的FPGA千兆以太网设计

TX_EN、TX_ER、RX_EN、RX为高电平时有效,即为高电平时表示使能或者有错误,因此,有效数据(数据线有数据且数据无误)接收期间,RX_CTRL为高电平;当数据发送期间,需要将置为TX_CTRL为高电平,表示数据发送使能且数据无误。RGMII数据接收(发送与接收一致)时序如图2所示。

基于RGMII的FPGA千兆以太网设计

图2 RGMII数据接收时序 2.2典型芯片 RTL8211E 是由Realtek(瑞昱半导体)公司推出的10Mbit/100Mbit/1000Mbit以太网物理层芯片,有RGMII和GMII两种接口,分别对应芯片RTL8211E和RTL8211EG。RGMII接口的RTL8211E具有48个引脚,相对与64脚的GMII接口的RTL8211EG,节约控制芯片引脚,但是时钟上升沿和下降沿都有数据操作,时序控制比较复杂一些,详细信息见其数据手册。RTL8211E芯片引脚图如图3所示, RTL8211EG芯片引脚图如图4所示。根据参考手册的参考电路即可进行硬件电路的设计,这里不做过多描述。

基于RGMII的FPGA千兆以太网设计

图3 RTL8211E引脚图

基于RGMII的FPGA千兆以太网设计

图4 RTL8211EG引脚图

三.以太网数据帧

在使用FPGA进行千兆以太网实现时,需要对物理层的数据流进行处理,因此需要对以太网数据帧、IP数据包格式、UDP数据包等数据包进行学习。

3.1 802.3以太网数据帧

以太网数据帧如图5所示,每个字段含义如表2所示。

基于RGMII的FPGA千兆以太网设计

图5 以太网数据帧 表2 以太网帧字段含义

基于RGMII的FPGA千兆以太网设计

3.2 IP数据包格式

IP数据以数据的形式包含在以太网数据帧中,其格式如图所示,各字段含义如表所示。

基于RGMII的FPGA千兆以太网设计

图6 IP数据包格式 表3 IP数据包字段含义

基于RGMII的FPGA千兆以太网设计

3.3.UDP数据包格式

UDP数据包以数据的形式包含在IP数据包中,其格式如图7所示,各字段含义如表4所示。

基于RGMII的FPGA千兆以太网设计

图7 UDP数据包格式 表4 UDP数据包字段含义

基于RGMII的FPGA千兆以太网设计

3.4 以太网协议架构

在以太网各种协议中,以太网数据帧、IP、UDP等协议之间的关系如图8所示。以太网数据帧位于最底层,第二层是IP协议、ARP协议、RARP协议等协议,第三层的TCP、UDP、IGMP等协议基于IP协议进行实现,多数网络应用程序可基于TCP或者UDP协议进实现。从上面的几种数据包介绍中,也可以推导出类似图中的关系。

基于RGMII的FPGA千兆以太网设计

图8 以太网协议架构

3.5 UDP广播包

使用抓包工具捕获了一个UDP广播的数据包,如图9所示。

基于RGMII的FPGA千兆以太网设计

图9 UDP广播包抓包 图中的捕获的数据位以太网数据帧(不包括前导码和起始码)。从图中可以看到,数据帧中的字段对应的数据及其含义,可将图中的数据与以太网帧格式、IP、UDP数据包格式进行对应,对它们的数据格式进行学习。

四.FPGA程序流程

4.1 数据接收流程

数据接收时,按照RGMII数据接收时序,进行物理层数据的接收,然后按照以太网数据帧、IP数据包、UDP数据包的格式,对数据进行解析,即可实现对UDP数据的接收。数据接收流程如图10所示。

基于RGMII的FPGA千兆以太网设计

图10 数据接收流程图 在以太网数据解析时,可以根据自己的应用要求进行进行数据的解析,减少不必要的资源浪费。 4.2 数据发送流程 数据发送时如图11所示。

基于RGMII的FPGA千兆以太网设计

图11数据接收流程 在数据发送时首先需要确定发送目标,其中包括目标IP地址、目标MAC地址(当采用广播进行通讯时,MAC全部为0XFF),目标端口号等目标信息,然后将要发送的数据进行UDP打包、IP打包、以太网帧打包,然后按照RGMII的时序要求将数据发送出去。 需要特别注意: 1. 当采用单播UDP时,需要进行ARP协议的发送或者应答。 2. RGMII发送时,要保证,在TXCLK上升或者下降沿时,TXD数据线上的数据已经稳定。