FPGA与88E1111的千兆以太网接口设计

2017-03-31 01:23朱明辉司斌张从霞张鹏
单片机与嵌入式系统应用 2017年3期
关键词:发送数据以太网上位

朱明辉,司斌,张从霞,张鹏

(中国空空导弹研究院,洛阳 471009)

FPGA与88E1111的千兆以太网接口设计

朱明辉,司斌,张从霞,张鹏

(中国空空导弹研究院,洛阳 471009)

为实现设备间数据的以太网传输,对TCP/IP协议进行深入了研究,设计了基于FPGA和PHY物理层芯片88E1111的千兆以太网数据传输系统。系统采用硬件描述语言实现以太网传输协议,并利用Xilinx提供的MAC以太网控制器 IP核完成帧校验和封装,物理层实现采用88E1111芯片。结合系统设计需求对TCP/IP以太网数据协议进行裁剪,仅保留UDP协议、IP协议和ARP地址解析协议。经测试,千兆以太网能够稳定、高效地实现数据传输。

FPGA;千兆以太网;UDP;IP;ARP

引 言

随着导弹测试设备向智能化、模块化的方向发展,模块之间的数据通信已成为一个重要课题。目前测试设备内各模块之间数据传输主要采用并行总线和串行总线两种方式[1],高数据传输常采用PCI、PXI和CPCI等并行总线,并行总线设计复杂并且不适合远距离传输。串行总线RS485、RS232、CAN等虽然设计简单、传输距离较远,但数据速率一般不是很高。随着以太网技术的发展,数据传输速率可以达到10 Mb/s、100 Mb/s、1 Gb/s、10 Gb/s,并且端到端的数据传输可达100 m,利用路由器或现有Internet网络实现更远距离传输,通过网口能够方便地与计算机PC进行通信,所以研究嵌入式以太网数据传输的实现具有重要意义。

目前嵌入式以太网的实现方案众多,根据以太网传输协议实现方式的不同大致可分为三种类型:第一种采用软件代码实现的以太网传输协议,如在ARM、DSP等微处理器上利用软件代码实现网络协议[2-3],这种方式可以很方便地移植开源代码的以太网协议栈,但受限于微处理的采用串行指令的运行方式导致数据处理能力、网络传输速率不高;第二种采用内部集成以太网协议的ASIC实现[4],只需要处理器对专用芯片进行简单控制,便可实现数据的以太网发送和接收,不再需要用户编写TCP/IP协议,降低了处理器的资源消耗,用户设计难度,但设计不够灵活且会增加电路设计的复杂度;第三种是在FPGA上采用硬件描述语言实现以太网协议[5-6],这种方式依靠FPGA丰富的逻辑资源和强大的数据处理能力,克服了微处理器处理能力差的缺点,并且使用硬件描述语言可以很方便地实现协议的升级和维护,弥补了ASIC设计不够灵活的缺点。

本文采用FPGA和物理层芯片88E1111芯片实现嵌入式千兆以太网数据传输系统设计,根据需求对TCP/IP协议进行裁剪,降低了资源消耗及设计难度,经测试传输系统够稳定、高效地实现数据传输。

1 千兆以太网传输系统总体设计

千兆以太网数据传输系统采用目前主流的TCP/IP协议,完整的TCP/IP协议是一个庞大的协议簇,完全实现不仅会消耗大量的FPGA资源,同时会增加设计及维护难度。作为嵌入式的使用应根据系统需求对其进行裁剪。考虑到系统高速数据传输、高实时性的要求,所以传输层仅保留具有较传输效率的非面向连接的UDP协议[9]。同时为了与上位机之间能够实现点对点数据传输,在UDP帧发送前需要知道对方物理地址MAC,所以保留数据链路层的ARP地址解析协议。裁剪后的协议栈如图1所示,传输层采用UDP协议,网络层采用IP协议,数据链路层采用ARP协议和MAC协议。

图1 裁剪后的TCP/IP协议栈结构

千兆以太网数据传输系统的总体结构如图2所示,千兆以太网数据传输系统主要包括:数据采集模块、数据缓存FIFO、协议处理模块、MAC控制器IP核和物理层PHY模块。

图2 千兆以太网数据传输系统的总体结构

数据采集模块根据FPGA指令完成数据的采集,并将采集的数据发送至FPGA的FIFO缓存模块。FIFO主要实现采集数据的缓存,供帧处理模块发送数据使用。帧处理模块采用硬件描述语言Verilog HDL编写,在发送数据时按照图3所示的帧格式,对发送数据逐层加上帧头以完成帧封装,并将其发送至MAC控制器。帧接收是帧发送的逆过程,首先对MAC控制器接收帧类型判断,然后按照不同的协议完成帧的解析并提取帧携带的有用信息。

图3 UDP和ARP帧封装格式

MAC控制器采用Xilinx官方提供的IP核,设定速率为1000 Mbps,物理层接口为GMII模式[10]。在帧发送时,MAC控制器为发送帧添加前导码、起始码、补码和FCS校验码,然后将MAC帧通过GMII总线口发送至物理层芯片PHY。在帧接收时,MAC控制模块通过GMII总线接口接收物理层PHY芯片发来的数据,对接收到的帧完成CRC校验,将前导码、起始码、补码和FCS校验码去除后送给上层的帧接收模块。

物理层的实现采用Marvell公司的88E1111 PHY芯片,88E1111支持10M/100M/1000 Mbps三种速率,与MAC层接口有RGMII、SGMII、GMII等类型[11]。在千兆以太网数据传输系统设计时,通过CONFIG[3:0]引脚配置88E1111芯片接口类型为GMII模式。在帧发送时,88E1111通过GMII接口从MAC控制器接收帧数据,进行编码后通过网络变压器发送至RJ45网口。在帧接收时,PHY芯片首先完成对接收数据的解码,然后将接收到的数据通过GMII口发送至MAC控制器。

2 FPGA逻辑设计

在FPGA逻辑设计中,以太网协议的实现是系统的核心部分,本部分重点介绍UDP帧的发送接收、ARP请求的接收和应答帧发送的逻辑设计。帧处理模块的结构如图4所示。

图4 FPGA帧处理模块

帧处理模块主要包括UDP帧发送模块、ARP应答模块和帧接收模块。当帧接收模块收到MAC控制器发来的数据后,接收模块根据不同的帧类型提取有用信息并做出相应处理。若收到的为ARP请求帧,则使能ARP应答帧发送模块,将本地MAC地址告诉上位机。若收到包含数据发送命令的UDP帧,则将FIFO中的采集数据按照图3帧格式逐层进行帧封装并完成发送。

2.1 UDP帧发送模块设计

UDP帧发送模块主要完成对发送数据的UDP和IP封装并发送至MAC控制器。UDP帧发送模块如图5所示,Tx_data_in[7:0]为来自FIFO的数据输入口, Tx_data_length[15:0]为发送数据长度输入口, Destination_MAC和Destination_IP为目的地址输入口,Tx_ack为MAC控制器空闲标志位。Tx_data_out[7:0]为封装完成的帧的输出口。为了降低端口数量和设计复杂度、提高可维护度,对于每帧中都相同的数据如源MAC、源IP地址、协议、版本等通过参数parameter进行设定。

图5 UDP帧发送模块

图6 UDP帧发送状态流程图

UDP帧发送模块的发送数据的状态流程如图6所示,当发送模块的Tx_en输入使能后,进入Send_MAC_header1状态首先发送MAC帧头的第一个字节,然后检查来自MAC控制器的Tx_ack信号,若Tx_ack为0,说明MAC控制器忙,则返回idle。若Tx_ack为1,则依次完成MAC帧首部、IP帧首部、UDP首部发送。当完成所有帧首部发送后,从FIFO读入要发送的数据,每读入一个数据,cnt加1,当cnt等于发送数据长度(Tx_data_length-1)时,说明发送数据已封装完成,则返回到idle。

2.2 ARP应答发送模块设计

在收到ARP请求帧后,ARP应答模块完成应答帧封装与发送。ARP发送模块如图7所示,可通过Destination_MAC和Destination_IP口从ARP目录寄存器中获取目的MAC和IP地址,每帧中都相同的数据通过参数parameter赋予ARP应答模块。ARP应答帧的发送流程较为简单,当Tx_en使能后,进入ARP应答帧发状态,当第一个数据发送完,读取MAC控制器回送的Tx_ack信号,若为1说明MAC控制器空闲,则按照ARP帧格式完成ARP应答帧发送,若为0,说明MAC控制器忙,则返回初始状态。

图7 ARP帧发送模块

2.3 帧接收模块

帧接收模块实现对上位机发来的ARP请求帧和IP数据帧进行接收,并对不同类型帧做不同的处理。帧接收模块接口如图8所示, Rx_data_in为来自MAC控制器的数据输入,Rx_data_valid为输入数据有效标志位。接收模块帧中的源MAC地址和源IP地址通过MAC和IP口送给ARP目录模块, ARP_Reply_en为ARP应答帧使能输出端,Rx_data_out为UDP帧数据输出端。

帧接收模块的状态流程如图9所示,当检测到Rx_data_valid 置高后,便开始数据接收。首先接收MAC帧头并检测协议类型,若为0x0806,说明为ARP帧,则进入Rx_arp帧接收状态接收ARP帧剩余部分,在ARP帧接收完成后进入Frame_state状态并通过Rx_good_frame判断接收到的帧是否有效,若检测到Rx_good_frame为1,表示接收到的ARP帧正确,则进入Up_data状态,使能ARP_Reply_en输出ARP帧中源MAC和IP地址,否则丢弃该帧并返回到idle状态。若协议类型为0x0800,则按照IP帧格式进行帧接收,依次进入Rx_IP_header和Rx_UDP_header状态完成IP和UDP帧头接收,帧头接收完成后进入数据接收状态,将接收的数据存入模块内的数据缓存区,在帧接收完后若检测到Rx_good_frame为1,则输出data_length个缓存数据,否则丢弃该帧数据并返回idle状态。

图8 帧接收模块

图9 帧接收模块状态流程

3 系统测试

千兆以太网实现平台选用ML605开发板,平台包括XC6VLX240T型FPGA和PHY层芯片88E1111。为实现对系统测试,上位机装有UDP帧收发软件和Wireshark抓包软件,实现数据帧的收发和抓包分析。设置以太网传输系统的IP地址为192.168.0.20,MAC地址为60:A4:4C:7B:E9:E8。设置上位机IP地址为192.168.0.10,MAC地址为DC:0E:A1:CD:60:65。

首先上位机向嵌入式以太网系统发送ARP请求来获取系统的MAC地址,嵌入式以太网系统收到ARP地址请求后,发送ARP应答帧将本地MAC地址回送给上位机。上位机收到ARP应答帧后便发送包含数据发送命令的UDP帧,为测试嵌入式以太网数据发送性能,嵌入式以太网系统收到命令帧后开始重复向上位机发送固定帧长的数据帧。

Wireshark软件抓包结果如图10和图11所示。图10中,第1帧为上位机发送的ARP请求帧,包含的信息有上位机IP和MAC地址和要请求获取嵌入式以太网设备的IP地址,第2帧为嵌入式以太网返回的ARP应答帧,将嵌入式以太网系统的MAC地址60:A4:4C:7B:E9:E8告知上位机。图11中,第1帧为上位机发送给的包含数据发送命令的UDP帧,后续为嵌入式系统收到命令帧后,向上位机重复发送UDP数据帧,经测试,以太网系统能够正常工作,传输数据稳定高效。

Design of Gigabit Ethernet Interface Based on FPGA and 88E1111

Zhu Minghui,Si Bin,Zhang Congxia,Zhang Peng

(China Airborne Missile Academy,Luoyang 471009,China)

In order to realize the data transmission between devices,the TCP/IP protocol has been studied,and a Gigabit Ethernet data transmission system based on FPGA and PHY physical layer chip 88E1111 is designed.The system uses the hardware description language to implement the Ethernet transmission protocol and uses the MAC Ethernet controller IP core to complete the frame verification and encapsulation.The physical layer is realized by using 88E1111 chip.According to the system design requirements,the TCP/IP Ethernet data protocol is cut out to only retain the UDP protocol,IP protocol and ARP address resolution protocol.The experiment results show that the Gigabit Ethernet system can achieve the data transmission stably and efficiently.

FPGA;Gigabit Ethernet;UDP;IP;ARP

图10 ARP请求及应答帧抓包结果

图11 UDP数据传输帧抓包结果

TP393

A

猜你喜欢
发送数据以太网上位
基于1500以太网养猪场的智能饲喂控制系统的设计与实现
一种车载自组织网络的媒体接入控制协议
基于马尔科夫链的LoRaWAN网络节点性能分析
带标记方式的CRDSA++协议性能分析*
特斯拉 风云之老阿姨上位
谈实时以太网EtherCAT技术在变电站自动化中的应用
“三扶”齐上位 决战必打赢
基于ZigBee和VC上位机的教室智能监测管理系统
使用IPSec安全传输数据
一种90W高功率以太网供电系统的设计