FPGA中网络通信协议栈的裁剪及其全硬件实现

2013-09-10 01:17蒋沪生柴志雷钟传杰
计算机工程与设计 2013年9期
关键词:网络通信以太网数据包

蒋沪生,柴志雷,钟传杰

(江南大学 物联网学院 轻工过程先进控制教育部重点实验室,江苏 无锡214122)

0 引 言

随着FPGA器件被广泛的使用,FPGA系统中的网络数据通信成为当前研究的热点之一。以太网技术因其数据吞吐量大,传输距离远,布线灵活,与PC端连接方便等优势得到越来越多的使用。随着物联网技术的发展,以太网技术在嵌入式系统中的应用必将越来越多。

目前,FPGA中实现嵌入式以太网的方案多为SOPC实现方案[1-3],这种方式被称为软件方式实现方案,它需要在FPGA内部植入硬核处理器或软核处理器,一方面增加了系统资源消耗,另一方面软件方式执行一条指令需要多个时钟周期,运行时间难以估计。而硬件方式实现的以太网方案采用硬件描述语言设计专用硬件电路,占用资源少,执行效率高,得到很多学者关注。文献 [4]介绍了一种使用开源IP核开发的以太网实现方案,由于IP核设计时一般经过一定的加密处理,其实现的UDP/IP核所消耗的硬件资源达本文系统的20倍,文献 [5]介绍了一种硬件上实现TCP/IP协议栈的方案,但是没有对网络通信协议栈尽可能的裁剪,也没有对裁剪后的协议栈在移植应用上做出相应处理。

本文以FPGA上的数据传输为应用背景,对传统网络通信协议协议栈进行了最大限度的裁剪,并采用Verilog HDL以全硬件方式实现了该精简协议栈,并对其进行可移植性处理。协议栈包括UDP、IP、以及MAC层驱动。在应用系统中,该协议栈作为网络通信模块和应用模块整合在一片FPGA中且具有很好的可移植性。

1 网络协议栈裁剪

完整的TCP/IP协议栈是一个规模庞大的协议簇,在FPGA中实现需占用大量资源,因此必须对网络协议栈进行裁剪[6]。国内外学者对TCP/IP协议栈的剪裁较为成功的案例有LwIP、uIP、Linux IP等,这些协议栈涉及的协议较多,内容较全,移植时需要考虑的问题相对复杂[7-9],如存储器管理、上层协议与底层驱动的接口等。

本文依据具体应用,分析了FPGA中网络通信需求:以数据传输接收为目的,并保证简单的测试功能,对FPGA中网络通信协议栈进行如下裁剪:①应用层:针对系统中无HTTP、FTP等应用,应用层协议全部裁剪。②传输层:保留UDP协议。传输层中主要协议有TCP协议和UDP协议,TCP为两台主机提供面向连接的、可靠的、无重复的双向数据流传输服务,实现连接和关闭连接的过程对系统资源的耗费非常大。而UDP数据传输高效、设计实现简单,在本文系统中其可靠性满足实际需求,而在一些可靠性要求更高的场合中,可以在应用层编写重发机制提高可靠性。③网络层:保留IP层和部分ICMP,其中ICMP只保留Ping功能应答部分。④MAC层由以太网控制器芯片DM9000A提供。

1.1 精简协议栈设计

在FPGA中实现网络协议栈就是依照网络协议和以太网MAC帧格式[10],对数据封装后发送,当接收到网络帧时对网络帧正确解包,并做出相应处理。FPGA的主程序流程如图1所示。

图1 主程序流程

1.1.1 网络数据帧封装

网络数据帧的封装是从上层往下逐层加入协议首部的过程。网络数据帧解析与封装过程相反,即从下往上逐层分析网络协议。通过详细的网络数据帧封装及解析过程,本文实现了UDP/IP协议、ICMP应答协议、ARP应答协议。

UDP/IP协议实现:

应用层:提供用户数据,即待封装数据。

传输层:给用户数据添加UDP包首部。具体操作为填写源端口号,目的端口号,信息长度,信息校验和。

网络层:对上层数据添加IP首部。具体操作为填写IP首部中必须的一部分数据,包括版本,首部长度,数据报标识符,生存时间,协议,首部校验和,源地址,目的地址等,其余填入零。

MAC层:对IP数据报添加MAC帧首部。具体操作为填写源MAC地址,目的MAC地址,协议类型:0x0800。

UDP/IP协议封装中填入数据中有部分是由外部设置的如:UDP协议中源端口号、目的端口号、信息长度;IP协议中版本、首部长度、数据包标识符等;MAC层中源MAC地址。这些数据在程序中使用宏定义,填写时直接使用宏定义的值即可完成封装。

其余协议封装数据的生成由FPGA完成,以IP首部校验和计算为例:IP首部各信息由宏定义中获得,计算时,先将校验和先置0,其余信息按16bit重组并取反,然后进行流水线的累加处理,并使用延迟进位法,将累加和存于累加和寄存器中,累加和寄存器中的累加和数据同样俩俩累加。最后将累加和寄存器的值与累加结果相加并取反,即为校验码数据。IP首部的校验码计算只需要4个周期即可完成。校验码计算仿真结果如图2所示。其计算速度与文献 [5]中校验码计算相比提高了一倍以上。

图2 IP首部校验码计算仿真结果

Ping应答帧封装实现

网络层:具体操作为填写IP首部数据,包括版本,首部长度,数据报标识符,生存时间,协议,首部校验和,源IP地址,目的IP地址,ICMP协议中用到的类型,代码,IP校验和,标志,序列号及数据。

MAC层:MAC层:添加MAC帧首部。具体操作为填写源 MAC地址,目的 MAC地址,IP协议类型:0x0800。

ARP应答帧封装实现

数据链路层:具体操作为填写硬件类型,协议类型,硬件地址长度,协议地址长度,操作类型,源MAC地址,源IP地址,目的MAC地址,目的IP地址。

MAC层:添加MAC帧首部。具体操作为填写源MAC地址,目的MAC地址,ARP协议类型:0x0806。

1.1.2 网络数据帧解析

网络数据解包过程与封装过程相反,系统从以太网控制器的接收缓冲区读取到数据后,先对目的地址进行判断,确认目的地址正确后,获取此包的协议类型。如果是0x0806,则是ARP包,系统接收到PC端广播的ARP请求帧时,提取发送者IP地址、MAC地址送至ARP应答帧构建模块,ARP应答帧构建模块构建ARP应答帧然后送至发送模块。

如果是0x0800,则是IP包,获取的有效数据为IP数据报,解析并去除IP报首部,根据协议号判断是否是UDP包,是则读取其中的有效数据,存入SRAM中,供其它模块使用,对于其它数据包,都将从以太网控制器芯片的接受缓冲区中舍弃。

1.2 网络数据帧收发

以太网MAC层由以太网控制器芯片DM9000A提供,实现网络数据帧的收发包括DM9000A初始化和DM9000A收发两个部分。

1.2.1 DM9000A初始化

以太网控制器DM9000A的初始化需要按照DM9000A的接口时序要求,对其进行内部寄存器设置,本文初始化设计时,分层实现了接口逻辑,最下层的是端口读写模块,第二层是数据链路层寄存器读写模块,物理寄存器读写模块是通过调用前两层读写模块完成的,最上层是初始化模块,初始化模块主要内容包括:启动内部PHY电路,两次软复位,设置PHY工作模式,配置控制寄存器,设置MAC地址,使能RX/TX中断。以太网接口上的LED灯与DM9000A的LED引脚相连,可以指示初始化是否成功。

1.2.2 DM9000A收发

以太网控制器接收和发送数据都采用中断方式,图3为DM9000A发送及接收数据的流程图。具体收发过程祥见文献 [11]。

1.3 协议栈可移植性处理

为了方便硬件协议栈的移植使用,结合FPGA设计的特点,本设计采用模块化设计。首先协议栈设计本身含有多个模块,各模块之间的调度由协议栈顶层模块中的状态机控制。其次协议栈本身可以被当作UDP/IP协议栈模块调用。另外本设计大量使用宏定义,以减少IO接口数量。IO接口数量是衡量一个设计复杂程度及可移植性的重要标志,当设计IO接口过多引脚连线复杂时,很容易造成移植的过程出现错误。以文献 [12]中提到的顶层模块为例,不考虑网络通信模块与片外SRAM的接口,其使用的IO接口数量达到170个。采用本设计中使用宏定义替换部分IO接口的方法可以将其数目减少至34个,是原接口数目的1/5。在移植UDP/IP协议栈模块时,需要同时修改其宏文件,设定IP地址、UDP端口、UDP包长度等信息。

2 系统测试

2.1 系统硬件框架

图4为系统硬件框架,主要包括主芯片FPGA,存储器,以太网控制芯片,以太网接口,JTAG接口电路等组成。FPGA选用Altera公司生产的CycloneⅡ系列EP2C35F484C8型芯片;以太网控制芯片选用Davicom公司的DM9000A,它具备了MAC控制器,简化了设计流程;存储器为ISSI公司的61LV25616AL;两片SRAM交替工作,实现乒乓缓冲,提高了并行性。以太网接口选用HanSun公司的HR911105,它自带隔离变压器,简化了电路的设计。

图4 系统硬件框架结构

2.2 系统测试

本文协议栈逻辑全部使用Verilog编写,在Quartus11.1环境下编译,占用2178个LE (logic elegment)资源,在EP2C35F484C8型FPGA中占用了7%的逻辑资源、整个硬件协议栈逻辑最大运行频率为78MHz。

2.2.1 UDP发送测试

系统在50M主频下全速发送UDP数据包,同时使用SignalTapⅡ逻辑分析工具采样部分DM9000A的控制端口及数据端口。为了提高数据吞吐率,测试中采用系统与PC端直连,不存在以太网中数据包冲突的情况。

图5是由SignalTapⅡ采样得到的FPGA输出的UDP发送数据波形。此时DM9000A的数据总线上为发送数据,此时每隔4个周期发送一个16bit的数据,不考虑数据预处理耗费的时钟,此时的数据传输速率达到了理论最高数据传输速率100Mbps。另外,需要注意的是,DM9000A以16bit模式发送数据时,数据口低八位先发送。

图5 SignalTapⅡ采样结果

图6为静荷大小为1000Byte时,PC端实际抓取到的UDP数据包。抓取工具为WireShark网络侦听工具。由图所知,30秒内抓取到21.5万个UDP数据包,数据包长度为1042Byte。计算得知此时的数据传输率为7.5MB/s。

2.2.2 接收处理测试

图6 WireShark抓取到的UDP数据包

本文接收处理测试硬件环境与UDP发送测试一致,图7为PC端执行Ping命令时WireShark抓包工具抓取到的ARP应答及Ping应答数据包。图中,帧2为ARP应答帧,其中,目的MAC地址和目的IP地址是由ARP请求帧中提取得到,其它数据为宏定义的可变参数。这里DM9000A对于长度小于最小发送长度60的网络数据帧会自动填充数据至60。帧4,帧6,帧8及帧10为Ping应答包,由图可以看出,系统具备正确解析数据帧并按协议封装数据包的能力,硬件封装实现的Ping应答包响应速度均在1ms以内,可以满足实际需求。

图7 WireShark抓取到的ARP应答包

3 结束语

本文以数据传输系统为应用背景,对网络通信协议栈进行了尽可能的裁剪,并以FPGA和DM9000A为硬件平台,使用Verilog HDL语言,通过FPGA对网络数据进行封装、解析、转存,使用DM9000A对网络数据进行发送、接收,全硬件方式实现了FPGA中的网络通信协议栈。该设计既具有以太网传输具有的数据率高、传输距离长、成本低、通用性强的特点,又融合了FPGA硬件实现的逻辑资源消耗少,可移植性好等优势。测试结果表明,该硬件网络协议栈性能稳定,移植方便可靠。

[1]WANG Zhidong,MA Wantai.Implementation of embedded ethernet communcation based on FPGA [J].Mechatronics,2010,16(9):64-67 (in Chinese). [王志东,马万太.基于 FPGA 的嵌入式以太网通信 [J].机电一体化,2010,16 (9):64-67.]

[2]de Souza R N,IFSC Sao Jose Brazil,Muniz D N,et al.Ethernet communication platform for synthesized devices in xinlinx FPGA[C]//EUROCON International Conference on Computer as a Tool.Lisbon:IEEE Conference Publications,2011.

[3]YANG Hancheng,WANG Fang,ZHANG Jiajie,et al.Design of embedded tri-mode ethernet based on FPGA [J].Computer Engineering,2007,33 (15):139-141 (in Chinese).[杨瀚程,王芳,张佳杰,等.基于FPGA的嵌入式三态以太网设计 [J].计算机工程,2007,33 (15):139-141].

[4]Nikolaos Alachiotis,Simon A Berger,Alexandros Stamatakis.Efficient PC-FPGA communication over gigabit ethernet [C]//Computer and Information Technology.Bradford:IEEE Conference Publications,2011.

[5]MA Wenchao,ZHANG Tao.Ethernet high-speed transmission platform based on FPGA [J].Computer Engineering,2012,38 (1):242-244 (in Chinese).[马文超,张涛.一种基于FPGA的以太网高速传输平台 [J].计算机工程,2012,38 (1):242-244.]

[6]XU Haijun,LIU Jingang,WANG Yihua.Simplified realization of embedded TCP/IP protocol stack based on ARM core[J].Application Research of Computers,2009,23 (10):251-253 (in Chinese). [徐海军,刘金刚,王易华.基于ARM核的嵌入式TCP/IP协议栈简化实现 [J].计算机应用研究,2009,23 (10):251-253.]

[7]ZHAO Hu,LI Ying,YOU Qian.LwIP transplantation and its application in parallel system [J].Information Technology,2010,10 (1):170-172 (in Chinese). [赵虎,黎英,游谦.LwIP的移植及其在并行系统中的应用 [J].信息技术2010,10 (1):170-172.]

[8]CHEN Shuo,YU Chunhai,PAN Feng.Improvement and implementation of ulP on network time protocol [J].Computer Engineering and Applications,2011,47 (36):76-79 (in Chinese).[陈硕,于春海,潘丰.基于NTP的uIP协议栈改进与实现 [J].计算机工程与应用,2011,47 (36):76-79.]

[9]LI Shidong.Transplantation method of Linux IP stack [J].Information System and Network,2012,42 (6):5-7 (in Chinese).[李士东.开源Linux中IP协议栈的移植方法 [J].信息系统与网络,2012,42 (6):5-7.]

[10]Richard Stevens W.TCP/IP illustrated volume 1:The protocols[M].Beijing:China Machine Press,2012:107-109.

[11]DAVICOM Semiconductor. DM9000A16-bit 10/100M Ethernet controller with processor interface.48pin/LQFP.Product Brief Data sheet Circuit [EB/OL].http://www.davicom.com.tw/page1.aspx?no=143762.2008-5.

[12]TU Rui,OU Chun,LIU Bichen,et al.Design of embedded tri-mode ethernet based on FPGA [J].Semiconductor Optoelectronics,2010,31 (3):439-442 (in Chinese).[涂锐,欧春,刘必晨,等.基于FPGA的嵌入式三态以太网的设计[J].半导体光电,2010,31 (3):439-442.]

猜你喜欢
网络通信以太网数据包
二维隐蔽时间信道构建的研究*
民用飞机飞行模拟机数据包试飞任务优化结合方法研究
基于1500以太网养猪场的智能饲喂控制系统的设计与实现
基于网络通信的智能照明系统设计
C#串口高效可靠的接收方案设计
网络通信中信息隐藏技术的应用
基于网络通信的校园智能音箱设计
谈计算机网络通信常见问题及技术发展
谈实时以太网EtherCAT技术在变电站自动化中的应用
浅谈EPON与工业以太网在贵遵高速公路中的应用