基于WinPcap的PC机与FPGA双向高速数据传输

相关专题: 无线 芯片

摘 要 本文使用WinPcap自定通信帧格式,实现一种PC机和FPGA之间双向高速数据传输方法,绕过了TCP协议和IP协议,只涉及到链路层和物理层,降低了FPGA端的协议解析复杂度、减少拆包时间和时延,并且突发速率达到100Mbit/s。通信接口协议采用类似802.3协议的帧格式。

关键词 802.3 RMII(简化的独立媒体接口) FPGA 高速传输

1 前言

近年来,FPGA(Field Programable GateArray,现场可编程门阵列)在通信领域的应用越来越广泛,FPGA运行速度快,容易实现大规模系统,内部程序并行运行,但进行高精度复杂运算处理是FPGA的劣势,同时由于计算机具有强大的运算和处理能力,可以将高精度复杂运算由PC机完成后再交由FPGA完成其他工作。例如可在PC机上完成对移动情况下无线信道的建模,提取误码参数,通过PC机网口发送到FPGA硬件平台上,进行误码加载,从而实现实时无线信道模拟。

2 WinPcap简介

WinPcap由一系列的驱动程序组成,在Windows环境下工作在链路层,使应用程序能捕获和发送数据包。它提供了以下的各项功能:

· 捕获原始数据包,包括在共享网络上各主机发送/接收的以及相互之间交换的数据包;

· 在数据包发往应用程序之前,按照自定义的规则将某些特殊的数据包过滤掉;

· 在网络上发送原始的数据包;

· 收集网络通信过程中的统计信息。

由于WinPcap的主要功能在于独立于主机协议(如TCP/IP)来发送和接收原始数据包。即,WinPcap不能阻塞、过滤或控制其他应用程序数据包的发收,它仅仅只是监听共享网络上传送的数据包。

本设计中三个功能用到WinPcap所提供的3个函数:

(1)打开网卡,并设置设置网卡为混杂(promiscuous)模式,采用函数:

pcap_open_live(dev, // name of the device

  65536, // portion of the packet to capture.

  1, // promiscuous mode

  1000, // read timeout

  Errbuf // error buffer

  )) == NULL)

(2)发送数据包,采用函数:

pcap_sendpacket(g_dev, packet_send, sizeof(packet_send))

(3)从一个网络接口读取一个数据包。数据包被正确读取返回1,采用函数:

pcap_next_ex(pcap_t* p,struct pcap_pkthdr* pkt_header,const u_char* pkt_data )

利用WinPcap驱动程序编程发出的数据包将不会含有IP头和TCP头,只含有MAC地址和数据,简化了硬件上的数据帧格式解析。

本设计中PC机网口所发出数据包如图1所示。

其中前6个字节0a0a0a0a0a0a为目的地址,060606060606为源地址,003c为长度,后面为数据。

3 通信数据帧的格式

若PC机端使用普通的网口编程方法,会带有IP头和TCP头等,给FPGA端拆包、协议解析带来复杂度。为此采用WinPcap驱动编程,实现FPGA与PC网口之间的自定义数据帧格式,使FPGA端接收到的数据帧格式为类似802.3协议的以太网数据包格式,不含有IP头和TCP头等协议开销。

FPGA和PC机之间的数据传输格式采用类似802.3协议的以太网数据包格式,如图2所示。

其中:前导码7个字节均为(10101010)B,界定符为(10101011)B。帧校验同标准100Base-T帧的FCS域,内容为32bit的CRC校验值,校验范围包括目的地址、源地址、类型/长度、控制/信息数据4个字段。校验多项式为:

G(x)

=x32+x26+x23+x22+x16+x12+x11+x10+x8+x7+x5+x4+x2+1

对以太网进行CRC运算的数据是并行输入的,要根据PC上(Windows 操作系统环境)数据的组织方式对余数进行调整,如果是Big Endian的组织方式则将余数按位取反得到CRC数据,如果是Little Endian的数据组织方式则先要将余数进行位置互换,然后再按位取反。在本设计中是Big Endian的组织方式。

PC端收发网口数据时,前导码、界定符、帧校验3项由网卡自动处理,程序员不需自己考虑。若是FPGA端处理网口数据,则要按以上完整帧格式处理。另外,根据802.3协议,为确保能够检测到冲突,从PC端网卡发出的数据包(不包含前导码、界定符、帧校验3项)长度需大于60个字节,不足则需填充0。

4 方案实现及功能描述

本设计方案只涉及链路层和物理层两层,其中PC端的链路层主要由WinPcap驱动程序完成,物理层由网卡完成,FPGA端的物理层则由外围芯片RTL8208B完成,FPGA内部完成链路层的功能。

总体框图如图3所示。

4.1 RMII 和RTL8208B简介

RMII,即简化的独立媒体接口(Reduced Media Independent Interface)。基于MII的PHY中每个端口通过16个引脚连结到所带来的花费很大,这在现代高密度芯片制造技术中显得尤其突出。RMII对MII的引脚进行简化,减少了芯片的尺寸。RMII 支持10Mbit/s和100Mbit/s的数据速率及全双工操作,收发按同一时钟工作,从而减少了时钟引脚。RMII规定数据及控制通路工作于50MHz的频率上,使得发送和接收数据通路从半比特元组减少到两比特宽度。这样形成的RMII接收信号如图4所示。

(1)参考时钟(REF_CLK)

接收、发送和控制的同步参考时钟是由外部时钟源提供的50MHz信号。

(2)载波侦听/接收数据有效(CRS_DV )

CRS_DV是MII中的RXDV 和CRS(Carrier_Sense)两个信号合并而成,当介质不空闲时CRS_DV以和REF_CLK相异步的方式给出。当CRS比RX_DV早结束时(即载波消失而队列中还有数据要传输时),就会出现CRS_ DV在半位元组的边界以25MHz(在100MHz模式下)或2.5MHz(在10MHz模式下)的频率在0、1之间来回切换。因此,MAC能够从CRS_ DV中精确的恢复出RX_DV和CRS。

(3)接收数据(RDX<1:0>)

接收数据信号,以和REF_ CLK同步的方式恢复出来的两位数据。

RTL8208B是高度集成的8端口的以太网收发器,提供8各独立的信道,每个信道都可以设置为RMII/SMII/SS-SMII模式。设置为RMII模式的信号如图5所示。

4.2 FPGA端设计及功能描述

本设计采用Xilinx公司的Spartan3系列XC3S1500芯片,基于VHDL硬件描述语言实现。XC3S1500是150万门的FPGA芯片,内部带有208kbit的分布式RAM与576kbit的Block RAM。32个专用乘法器,4个DCM,其资源完全可以满足需要。

其中FPGA中的接收模块如图6所示。

转换字节模块:是一个包含4个状态的状态机,4个状态分别为:idle、precode、boundcode、recv。

功能如下:首先去掉7个字节的前导码和一个字节的界定符;然后进入recv态,将4次接收到的2比特数据组合成一个字节输出,同时输出一个高电平使能信号给拆包模块。这里输出的数据包含目的地址,源地址,数据长度,帧号,控制信息。

拆包模块: 这是一个包含8个状态的状态机,8个状态分别为idle,dst_addr,src_addr,len,frame_num,message,crc,frame_end。

图7为FPGA接收时序图。

功能如下:首先完成源地址和目的地址的解析,并开始CRC校验,若地址正确则输出数据写使能信号,将后续的数据长度保存到长度寄存器,帧号保存到帧号寄存器,控制信息保存到双口RAM。双口RAM为8bit·2k,起到缓存数据的作用,实现上Xilinx提供了RAM的IP Core,使用的是FPGA内的Block RAM资源。若CRC校验正确则输出加载使能信号给数据加载模块。

发送过程是接收的逆过程,按以上自定义的数据帧格式封装数据,只是注意要将最后一字节的数据校验完后把余数按位取反得到CRC数据,这里不再赘述。

5 结束语

本设计用于一种信道模拟器系统中,实现了PC机和FPGA之间的双向高速数据传输,突发速率达到100Mbit/s。网口作为PC机、嵌入式系统等的一个高速接口,与其他外设的数据传输设计尤为重要,特别是在仅要求高速数据传输而不进行组网等要求的时候,比如实时视频数据采集处理、精密工业测量等,采用本设计方法可以减少分组包头开销、降低协议分析复杂度、减少时延。

由于本网页不支持图片与公式效果,如有需要请参阅杂志。

作者:卢明勇 黄联芬 来源:中国新通信(原《中国数据通信》3月)


微信扫描分享本文到朋友圈
扫码关注5G通信官方公众号,免费领取以下5G精品资料
  • 1、回复“YD5GAI”免费领取《中国移动:5G网络AI应用典型场景技术解决方案白皮书
  • 2、回复“5G6G”免费领取《5G_6G毫米波测试技术白皮书-2022_03-21
  • 3、回复“YD6G”免费领取《中国移动:6G至简无线接入网白皮书
  • 4、回复“LTBPS”免费领取《《中国联通5G终端白皮书》
  • 5、回复“ZGDX”免费领取《中国电信5GNTN技术白皮书
  • 6、回复“TXSB”免费领取《通信设备安装工程施工工艺图解
  • 7、回复“YDSL”免费领取《中国移动算力并网白皮书
  • 8、回复“5GX3”免费领取《R1623501-g605G的系统架构1
  • 本周热点本月热点

     

      最热通信招聘

      最新招聘信息

    最新技术文章

    最新论坛贴子