在各种不同的场合中,人们需要将大批数据从一个设备无差错地传输到另一个设备上。对于设备间距离较近的场合,可以选择PCIE(典型距离是15~30 cm)或者USB(最长传输距离5 m)等接口。而对于距离较远的场合,可以选择RS232、RS485、以太网等传输介质,并在此基础上,通过上层协议来保证数据的可靠性。上层协议通常用检错重传机制来实现数据的可靠传输,如TFTP、TCP/IP、SCTP以及可靠UDP等。这些协议都必须依靠较为复杂的CPU运算和内存拷贝来实现数据可靠传输的功能。比如在Linux下,TCP/IP协议每发送一个数据包,CPU需要执行约14 000条指令[1]。因此CPU的工作频率、内存的读写速度、硬件I/O带宽都会影响TCP/IP的速度。一些嵌入式系统上TCP性能测试如表1所示。
CPU处理能力越强,TCP传输速度越高。与此同时,在最大传输单元为9 000 B时(即相对MTU1 500包长度增加6倍,包处理频度下降6倍),则传输速度大幅提高。这也从侧面说明了CPU处理能力对TCP传输速度的影响。
在点对点传输和局域网传输中,往往不需要完善的路由机制和流量控制,但同样需要一种可靠的数据传输手段。传统的TCP协议依赖CPU运算的特性,使得传输速度受到限制,并且受CPU负荷变化影响而速率不稳定[2]。从提高传输效率和减轻对CPU的依赖两方面考虑,提出一种基于硬件实现的高速可靠数据传输方法,将CPU从频繁的协议运算中解放出来。该方法可以在千兆以太网PHY所提供的物理层通信链路的基础上,通过编写FPGA逻辑,在硬件上实现可靠数据传输的协议,然后使用如PCIE这样的接口将数据提供给计算机系统。系统结构如图1所示。
1 选择重发机制提供可靠数据传输保证
数据传输过程中的可靠性有多种方式,如纠错码、信息反馈和检错重发机制。选择重发是检错重发的实现方法之一,相对于等待重发和退回重发,它具有高效率的特点,因而被广泛采用。比如在TCP/IP网络中,就是用检错重发机制的原理。但TCP协议中包括较为复杂的流量控制机制和拥塞控制机制,它们被设计来应对异构的、大范围的复杂网络环境。而在点对点传输的应用中,或者在任务明确、拓扑简单的局域网中,不需要复杂的路由机制和流量控制,因而可以简化被广泛使用的检错重传机制,使得可靠性协议可以通过硬件实现。 如图2所示,将数据可靠传输的过程概括如下:
(1)待发送的数据在发送端打包,加上必要的识别信息和校验信息,存入发送端的缓存;
(2)待以太网信道可用之后将数据包通过千兆以太网发送给接收方;
(3)接收方收到数据包之后对内容进行校验,确认数据无误之后将识别信息通过ACK数据包反馈给发送方;
(4)发送方的缓存接收识别信息后确认数据已安全抵达接收方,清空缓存等待发送下一个数据包;
(5)发送方在设定的时间内没有接收到带有相应识别信息的ACK反馈,则进行重新发送,重发超过一定次数则报错。
校验信息选择使用和以太网兼容的CRC32,编码冗余度较低(为0.26%)。可以预见,在一般的误码率情况下(1×10-10),该方法可以实现高速的可靠传输[4]。
2 可靠数据传输的硬件实现
用硬件的方式实现所述的可靠传输,将会极大地降低对发送方和接收方在协议运算上对CPU资源的依赖,这点与TCP协议大为不同。 如图3所示,相较于TCP协议,硬件协议在接收数据时数据流大大简化。
TCP协议的数据流:
(1)网卡接收以太网数据通过PCIE以DMA的方式写入上位机内存,并触发中断;
(2)网络包内存拷贝进入OS协议层;
(3)对网络包的协议运算,检查包头信息和CRC校验等;
(4)确定无误后发送ACK包;
(5)将有效数据提供给上层用户。
硬件协议的数据流:
(1)设备卡FPGA检验数据正确性自发产生ACK回应包,将有效数据通过PCIE以DMA的方式写入上位机内存,可选择触发中断或轮询;
(2)驱动层直接将数据提供给用户。
发送过程与接收过程相反,情况类似,不再赘述。可见,利用FPGA实现的硬件协议省去了上位机软件协议运算和内存拷贝,直接将有效数据提供给上层用户,提高了数据传输的效率和速度,极大地减轻了CPU运算负荷,省去了对CPU的频繁中断,从而获得不依赖于CPU性能的稳定高速的可靠数据传输。这点是软件协议优化难以实现的。
2.1 硬件平台设计
PCIE接口设备卡,搭载Xilinx Spartan 6 FPGA和Broadcom千兆以太网PHY芯片。FPGA是设备的核心。在FPGA上部署PCIE接口模块和Ethernet接口模块,并设计内部逻辑实现数据的可靠传输。
2.2 FPGA逻辑模块的设计
FPGA的逻辑设计需要保证数据流的顺畅,各个模块的互联。采用硬件算法,实现对数据的分组打包和节点间的应答握手机制,保证每个数据包正确无误地抵达目标设备。FPGA内部的逻辑结构如图4所示,其中对于数据的可靠传输是在Tx和Rx模块中的状态机控制下实现的,Ethernet模块为Xilinx的TriMode Ethernet MAC Core,提供了对各种速率(10/100/1 000 M)的以太网PHY的支持。位于逻辑核心区域的InterConnect模块为多个端口之间提供了可动态配置的互联,因而为可能的网络拓扑提供支持。PCIE模块为上位机提供了访问FPGA 的数据和命令通道。
FPGA各个模块的说明:
(1)PCIE,使用Xilinx的s6_pcie:2.4 Logic Core[5]。开辟两个用户地址空间,一个用于访问内部状态控制寄存器,另一个用于访问FPGA数据。
(2)InterConnect,在内部寄存器的控制下,将各个Ethernet端口和上位机数据端口按照一定的规则互联起来,可以做到指定端口之间的转发和特定端口的收发操作。并且在verilog编码中采用参数化的风格,方便多端口的扩展。这样,在上位机控制软件的配合下,可以实现多个端口之间的灵活转发,因而可以方便地组建数据传输网络。InterConnect数据位宽可灵活配置,对于千兆网应用可配置为16位宽。该模块包括FPGA内部其他模块,时钟频率为75 MHz。
(3)Tx模块,其他端口的转发数据或者上位机的发送数据经由InterConnect传送到Tx模块中,在Tx模块的逻辑调度下以数据包为单位暂存在某一个Buffer中。每个Buffer都有独立的状态机控制。数据包在Buffer中准备好之后会在Tx模块的逻辑调度下发送至Ethernet模块,相应的Buffer状态机处于等待ACK的状态。在计数器超时后触发重传,重传一定次数依然没有正确ACK回应则报错。每个Tx模块中可以参数化地配置多个Buffer,通过多个Buffer的协作可以极大地提高信道利用效率。
(4)Rx模块,内部逻辑维护一个类似FIFO的存储结构。每当接收一个数据帧时,通过累加写指针将数据暂存入RAM中,并在状态机控制下记录当前帧的目的/源地址、帧类型,序号等信息。如果是ACK帧则把相应的帧识别信息传递给Tx模块;如果是需要接收的帧则在帧接收完后指示存储器数据有效,数据有效信号将促使待转发模块或者CPU接收FIFO读取该帧。Rx和Tx的以太网端口数据位宽为8位,接口时钟频率为125 MHz。
(5)Ethernet模块,使用Xilinx的tri_mode_eth_mac:4.6 Logic Core[6]。该模块提供CRC32编码和校验功能,提供对不同速率以太网的支持,并且对内部逻辑提供统一的数据接口。3 系统性能测试为了尽可能完善地测试系统性能,从逻辑仿真和实测两方面进行测试。
3.1 逻辑仿真测试
逻辑仿真是利用Xilinx ISim仿真器对FPGA逻辑的行为进行仿真预测。
仿真测试的优点是测试准备简单,测试方法灵活;缺点是只能仿真FPGA逻辑部分,无法仿真其他硬件。
考虑到本数据传输系统的核心在FGPA上,并通过与实测数据比对,逻辑仿真可以在很大程度上真实反映系统性能。测试的是两个节点之间的点对点传输。
(1)固定帧长1 024 B测试结果:带宽利用效率为96.4%,数据传输速度为120.5 MB/s。
(2)随机帧长测试结果:数据传输速度为99.4 MB/s,带宽利用效率为79.5%。
仿真波形如图5所示,rgmii_txen_A信号表明在这种情况下信道利用出现间隙。这是由于帧长度突然变长,需要等待内部数据写入Buffer。这种特殊情况可以通过增加Tx_buffer的数量来解决。
(3)人为添加误码测试结果:数据传输速度为106.7 MB/s,带宽利用效率为85.3%。
测试帧长度为1 024 B,设定FPGA在发送端口随机添加误码,测试添加误码率为0.000 76%。一般情况下误码率很低(平均一个误码造成一个数据包重传)。单次误码造成的等待和重传开销是一定的,因而传输速度的变化值与误码率的关系可以近似看成正比关系(?驻x:传输速率比变化;?驻e:误码率):?驻x=k?驻e。
测试时,人为添加误码率?驻e=0.000 76%,?驻x=-13.8 MB/s,求得k=-1.82×106 MB/s。由此估计,在一般情况下(即误码率为1×10-10),传输速度变化?驻x=-1.82 106 MB/s×10-10,为-18.2 KB/s,传输带宽仍接近120.5 MB/s。
3.2实际传输测试
测试两个节点间点对点传输,需要两个数据节点。节点A产生测试数据,节点B接收、校验测试数据,并通过PCIE以DMA方式发送到PC端。通过PC端软件检查并统计100 s传输数据,接收11 742 592帧,共计12.024 GB数据。测试结果:数据传输速度为120.2 MB/s;带宽利用效率为96.2%,与仿真结果(96.4%)基本持平。
3.3 结论
根据测试结果,该硬件协议可以有效地进行可靠数据传输。在实际测试情况和可以预计的误码率情况下,顺序传输大块数据的传输速度可达到千兆以太网极限带宽125 MB/s的96%,即120 MB/s。这个数据与TCP协议在MTU 9 000超长帧设定下的PowerPC405系统上的表现基本持平(平均考虑收和发),而远高于MTU 1 500设定下的表现。TCP协议在低处理频度下可换来更高的速度,这说明软件协议的传输速度受CPU运算影响大,易产生波动。稳定的高数据率则是硬件协议的优点所在。
数据的可靠传输是一个具有普遍意义的话题。本文所阐述的在现有成熟以太网技术基础上,利用FPGA硬件实现数据的高速、可靠的传输。相较于复杂的TCP软件协议,使用硬件协议能够有效降低CPU负荷,并因此得到稳定的高速数据传输速率。本文所述的硬件平台支持多个以太网端口的扩展。节点内端口之间的可配置转发功能在板载MCU的控制下可实现灵活路由。这样多个节点可以组成数据传输网络,因而为诸如高速数据采集网络、局域网传输等网络应用提供了可行方案。
评论
查看更多