史振国 李德和 尹虎
【摘要】 本文介绍了一种高效传输速率的千兆以太网通信系统设计方法。该方法采用ALTERA内部的MAC核加外部PHY芯片实现,通信协议采用UDP/IP协议方式,并实现了ARP请求和应答功能可以实现大规模系统级联,而且整个通信系统都是用verilog 纯硬件语言编写实现。经实验验证,该方法与传统软硬结合设计方法相比通信速率要高两倍以上。
【关键词】 千兆以太网 UDP/IP ARP MAC核 FPGA 高效传输速率
在高速数据采集领域,随着速度的增加,数据量越来越巨大,限于芯片GPIO的速度限制,传统的并行总线方式已经不能满足设备的需求。高速以太网以其速度快、网络成熟的特点,逐渐受到数据采集设备厂商的欢迎。但是基于Altera公司FPGA平台上,采用SOPC技术实现的千兆以太网方案,自身的操作系统耗时较多,实测速度只能达到200Mbit/s,无法满足高速采集设备的需求。因此本文设计采用纯硬件描述语言实现千兆以太网UDP及ARP通信,在精简通信过程的基础上,提高了以太网TCP/IP协议栈的运行效率,经验证该方案能够速度能到达到800Mbit/s以上,能够满足高速数据传输的需要。
一、系统基本架构
所设计的千兆网通信系统的基本架构如图1所示,采用自顶向下的设计方法将整个系统划分为如下几大功能模块:三速MAC核、MAC核的寄存器配置模块、发送和接收FIFO缓冲模块、协议解析模块、ARP请求和应答模块、UDP/IP数据打包和解析模块。
整个系统的所有功能模块都采用verilog 纯硬件语言编写实现,包括对MAC核的初始化配置和控制,以及协议判断。而传统方法对这部分都是采用嵌入式系统进行软件控制,工作效率低下。该系统还增加了ARP请求和应答功能,可以实现大规模系统集联,例如水听器监测系统需要进行大范围的数据采集,往往需要多个数据采集卡同时进行数据上传,即实现一台上位机对不同采集卡进行控制和数据区分。有了ARP请求和应答功能,多个采集卡只需要一个交换机与上位机相连,上位机通过下发ARP请求,下层的采集卡进行ARP协议解析和应答即可让上位机知道各个采集卡的MAC地址和IP地址,从而对各个采集卡进行不同的控制并区分各个采集卡上传的数据信息。
二、主要功能模块设计
2.1 MAC核的寄存器配置模块
本设计调用了ALTERA内部的三速MAC核[1],要想让其正常工作必须对MAC控制寄存器进行基本配置从而来控制MAC内部的功能模块工作起来。涉及的主要寄存器配置有:命令配置(command config)、MAC地址(mac_0/ mac_1)、最大帧长(frame_length)、外部PHY地址(mdio_addr0/mdio_addr1),以及内部FIFO的一些阈值(al_ empty、al_full、sec_empty、sec_full)。三速MAC核的使用手册有详细的配置说明,采用Avalon-MM总线方式,设计一个状态机,每个状态都是一个地址对应一个寄存器配置即可。
2.2协议解析模块、ARP请求解析模块、UDP/IP数据解析模块
FIFO_R是接收缓冲模块,接收MAC核发送的MAC帧数据,协议解析模块的功能就是对MAC帧数据进行解析从而判断上位机发来的是ARP请求还是IP协议数据包,如果是ARP请求就进行ARP协议解析提取上位机的MAC地址和IP地址,反之如果是IP协议就进行UDP/IP协议解析提取有用的数据信息给底层应用。
图2是三个功能模块的协议解析状态图,首先对数据转换模块的数据进行数据读取,通过对读地址rdaddr进计数提取帧类型frame_type,然后对frame_type进行判断,如果frame_type=16h0806说明是ARP协议类型,状态机进入st2状态进行ARP协议解析,按照图3所示的以太网MAC帧格式进行计数分解并将响应的参数用不同的寄存器进行存储,关键参数有操作码(operate_code)、发送端MAC地址、发送端IP地址、目的端IP地址,如果operate_code= 16h0001说明是ARP请求,然后判断目的端IP地址是否为FPGA的IP地址,如果是就发出ARP应答使能信号给ARP应答模块,当rdaddr计数器达到ARP帧长度时说明整个ARP帧解析完成进入状态st4结束解析复位rdaddr=0,状态机进入st0等待新的一轮数据;如果frame_type=16h0800说明是IP协议类型,状态机进入st3状态进行IP协议解析,按照图3所示的以太网MAC帧格式进行计数分解并将响应的参数用不同的寄存器进行存储,这里的参数主要是对数据解调发送的参数配置命令,包括脉冲宽度、脉冲周期、ADC偏移量等,当rdaddr计数器达到IP帧长度时说明整个IP帧解析完成进入状态st4结束解析复位rdaddr=0,状态机进入st0等待新的一轮数据。
2.3 ARP应答模块、UDP/IP数据打包模块
该模块主要完成ARP应答模块和发送数据的UDP/IP协议打包功能。简易状态机设计如图4所示。
首先判断协议解析模块发送过来的ARP请求信号arp_ reply_enable信号是否有效,有效说明上位机发起了ARP请求,状态机进入st1状态,按照图3所示的MAC帧格式进行ARP应答,将FPGA的MAC和IP地址封装起来发给MAC核发送缓冲模块,当wraddress=arp_length,说明整个ARP数据帧发送完毕进入st3状态复位,重新进入初状态st0,判断data_ok是否有效,data_ok=1说明数据解调板有数据发送,进入st2状态,将要发送的数据按照图3所示的MAC帧格式将数据封装成IP协议帧格式发送给MAC核发送缓冲模块,当wraddress= ip_length,说明一个完整的IP数据包发送完进入st3状态复位,重新进入初状态st0等待新一轮的数据。
三、测试结果
本设计在开发板上做了测试验证,选用的FPGA芯片是ALTERA的EP4CE40F23I7,PHY芯片是88E1111[2],接口采用GMII方式。图5是用网络封包分析软件wireshark捕获的上位机下发的ARP请求,从图中数据窗口看发送的ARP请求协议数据报可以看出,上位机的MAC地址为50:7B:9D:8C:81:71,IP地址为192.168.50.27,它以网络广播的方式寻找IP地址为192.168.50.1的FPGA对应的MAC地址是多少。
图6是FPGA接收到上位机的ARP请求之后反馈的ARP应答数据报,从数据窗口可以看到IP地址为192.168.50.1的FPGA将自己的MAC地址00:1c:23:17:4a:cb准确的反馈给上位机。
图7是用wireshark捕获的所设计的千兆网发送数据传输速率,从图中可以看出,每秒上传的IP数据包为82243,每包传输的有效UDP数据为1454字节,即传输速率约为900Mbits/s。
四、结论
本文基于FPGA内部的MAC核加外部PHY芯片的硬件架构实现一种高效传输速率的千兆以太网通信系统设计方法。经实验证明,用纯硬件语言verilog 实现UDP/IP和ARP协议和MAC核控制方法通信效率可以达到90%,比传统采用SOPC等嵌入式操作系统设计方法相比通信速率要高两倍以上。
参 考 文 献
[1] Triple Speed Ethernet MegaCore Function User Guide[M].ALTERA,V9.1,November 2009.
[2] MARVELL corp. 88E1111 datasheet[CP].2004.
[3]谢希仁,计算机网络(第5版)[M],北京:电子工业出版社,2010.