基于千兆以太网的PC机与FPGA的高速数据传输_王胜杰
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
中图分类号:TP393文献标识码:A文章编号:1009-2552(2011)08-0156-03
基于千兆以太网的PC机与FPGA的高速数据传输
王胜杰1,王建2
(1.南京信息工程大学电子与信息工程学院,南京210044;2.南京船舶雷达研究所,南京210003)
摘要:使用WinPcap自定义通信帧格式,实现一种PC机与FPGA之间双向高速数据传输的方法,绕过TCP协议和IP协议,只涉及到链路层和物理层,降低了FPGA端的协议解析复杂度、减少拆包时间和时延,且突发速率达到1Gbit/s。
关键词:千兆以太网;WinPcap;FPGA;自定义帧格式
High-speed data transmission between PC and FPGA
based gigabit Ethernet
WANG Sheng-jie1,WANG Jian2
(1.College of Electronic&Information Engineering,Nanjing University of Information Science&Technology,Nanjing210044,China;2.Nanjing Marine Radar Institute,Nanjing210003,China)Abstract:This paper implementates a kind of two-way high-speed data transmission method by using uer-defined frame format,which based on WinPcap.It only involves link layer and physical layer,rounding away TCP and IP protocols and reducing the complexity of parsing,reducing the unpacking time and delay on FPGA.Moreover,the burst speed can reach1Gbit/s.
Key words:gigabit Ethernet;WinPcap;FPGA;user-defined frame format
0引言
近年来,FPGA(Field Programable GateArray,现场可编辑门阵列)在通信领域的应用越来越广泛,FPGA运行速度快,容易实现大规模系统,内部程序并行运行,但进行高精度复杂运算处理是FPGA的劣势,同时由于计算机具有强大的运算和处理能力,可以将高精度复杂运算由PC机完成后再交由FP-GA完成其他工作。千兆以太网作为一种高速以太网技术,仍采用了与10M以太网相同的帧格式、帧结构、网络协议、全/半双工工作方式、流控模式以及布线系统。利用千兆以太网,可以方便地构建PC 机与FPGA的高速数据传输系统。
1总体设计
系统总体设计如图1所示,数据通过PC机的网卡发送,利用千兆以太网作为传输媒介,传输至FPGA端时首先通过SFP光模块进行电光转换,然后到达FPGA的Rocket-IO PHY层,该层是高速的串行收发器,可对数据进行单工或双工的收发。接收完成的数据被送至MAC层进行地址解析与校验,只有当解析与校验结果正确且FIFO不满时,数据才能被写入FIFO。写入FIFO的数据可被后续的用户逻辑进行相关的数据处理
。
图1系统总体框图
在PC端,考虑到所传输数据具有较为固定的格式且传输速率很高,将不采用传统的套接字服务
收稿日期:2011-01-21
作者简介:王胜杰(1985-),男,在读研究生,研究方向为雷达信号处理。
—
651
—
(SOCKET),改为在Winpcap驱动基础上构造并发送或接收自定义的数据包格式。该数据包格式对传统的以太网数据包格式进行大量简化,绕过TCP和IP协议,只设计数据链路层与物理层,降低FPGA端协议解析的复杂度,减少拆包时间与时延。
1.1Winpcap简介
WinPcap是应用于Win32平台的数据包捕获与网络分析的一种体系结构,为Win32应用程序提供访问网络底层的能力,其主要思想来源于Unix系统中BSD包捕获构架。WinPcap主要由3个模块组成:(1)NPF包过滤器,数据包监听设备驱动程序,是架构的核心,它工作在内核级,主要功能是过滤数据包。它直接从数据链路层取得网络数据包,不加修改地传给运行在用户层的应用程序,也允许用户发送原始数据包。
(2)Packet.dll是低级的动态链接库,运行在用户级,把应用程序和数据包监听设备驱动隔离开来,使得程序可以不加修改地在不同的Windows系统上运行。通过Packet.dll提供的能用来直接访问BPF 驱动程序的包驱动API,利用“raw”模式发送和接收包。不同Windows系统上的Packet.dll并不相同,但由于它提供了一套相同的调用接口,这样使得高级系统无关库不依赖于特定的Windows平台。
(3)Wpcap.dll是高级系统无关库,也工作在用户级,它和应用程序编译在一起,并使用低级动态连接库Packet.dll提供的服务,向应用程序提供完善的监听接口。
由于WinPcap的主要功能在于独立于主机协议(如TCP/IP)来发送和接收原始数据包。即Win-Pcap不能阻塞、过滤或者控制其他应用程序数据包的发送,它仅仅只是监听共享网络上传送的数据包。利用WinPcap驱动程序发出的数据包将不含有IP 头和TCP头,只含有MAC地址和数据,简化了硬件上的数据帧格式解析。
1.2自定义数据帧格式
以太网可以工作在10Mb/s,100Mb/s,1Gb/s 等,同时它可以工作于多种传输媒体下,但是所有类型的以太网都有一个统一的帧结构。前导码(7字节)、帧起始定界符(1字节)、目的MAC地址(6字节)、源MAC地址(6字节)、类型/长度(2字节)、数据(46 1500字节)、帧校验序列(4字节)。
如PC机端使用普通的网口编程方法,会带有IP头和TCP头等,给FPGA端拆包、协议解析带来复杂度。为此采用WinPcap驱动编程,实现FPGA 与PC网口之间的自定义数据帧格式,使FPGA端接收到得数据帧格式为类似802.3协议的以太网数据包格式,但不会含有IP头和TCP头等协议开销,具体如表1所示。
表1自定义帧格式
目的地址源地址
数据(1024字节)
控制标志信息数据校验6字节6字节16字节1004字节4字节
其中,控制标志用于对FPGA的寄存器进行设置控制;校验同标准100Base-T帧的FCS域,内容为32bit的CRC检验值,检验范围包括目的地址、源地址、控制、信息数据4个字段。
对以太网进行CRC运算的数据是并行输入的,要根据PC上(Windows操作系统环境)数据的组织方式对余数进行调整,如果是Big Endian的组织方式则将余数按位取反得到CRC数据,如果是Little Endian的数据组织方式则先要将余数进行位置互换,然后再按位取反。本设计中是Big Endian的组织方式。
PC端收发网口数据时,前导码、界定符、帧校验3项由网卡自动处理。FPGA端处理网口数据,则要按以上帧格式处理。
2PC机端软件设计
在PC端,软件的编写基于Winpcap驱动程序。本设计中使用的是Winpcap3.1版本,在安装好驱动程序WinPcap_3_1.exe后,解压缩WpdPack_3_1.zip 文件至一自定义目录,现假设为D:\wpdpack_3_1下,然后将其中lib文件下的wpcap.lib文件复制到所建的工程目录下。
在VC2005工程属性下,打开C++选项,在附加包含目录中,添加刚才WpdPack_3_1.zip
解压目录路径,现为d:\wpdpack_3_1\WpdPack \Include;在链接器选项中,在输入的附加依赖项中添加wpcap.lib。然后,在需要调用winpcap函数的CPP文件的开头,添加#include"pcap.h"。
数据包发送与接收流程如图2所示
。
图2PC端数据发送与接收
3FPGA硬件设计与实现
FPGA硬件部分采用Xilinx公司的V5系列芯片,基于VHDL硬件描述语言实现。V5芯片内嵌Tri-mode Ethernet Media Access Controller硬核,该硬核与RocketIO联合可以1000Base-X(即1000Base-X PCS/PMA)。
1000BASE-X物理标准被定义为与一个光学
—
751
—