论文部分内容阅读
在安装尺寸受限且计算密集的应用场合,FPGA平台具有不可替代的优势。一个实现了网络协议栈的IP核可以有效地卸载CPU繁重的网络负担,其需求日益急迫。由于TCP协议或可靠UDP协议的计算复杂性过高,目前尚无相应的FPGA解决方案。业界现有的UDP协议栈IP核,因其固有属性不能保证通信质量,无法满足需要可靠数据传输的众多应用场合,诸如物联网Io T节点,工业控制的分布式数据采集应用,存储阵列的i SCSI通道,以及本实验室提出的可堆叠存储介质阵列方案等。鉴于这些应用场景都是主/从(Host/Slave)式的网络结构,且节点属性都相对稳定,即节点所拥有的客户端/服务器角色在生命周期内固定不变,因此可以采用相对简化的网络传输协议,进而分别简化实现为IP核部署在集成电路芯片中,作为CPU的功能部件驱动使用,本项目致力于实现此目标。本质上,TCP协议或可靠UDP协议必须满足以太网的对等P2P(Peer to Peer)结构的特点,而在主从Host/Slave结构中,服务器的从节点角色的属性始终不会改变,因此可以根据节点属性去除协议栈的那些不必要的部分,大大简化后使其易于实现在FPGA中。本论文认真仔细地分析了TCP协议和可靠UDP协议,从协议栈中分离出相关于可靠传输的部分流程,并将其划分为主节点操作流程、从节点操作流程以及主/从节点兼容性的三部分内容。其中主节点和从节点的操作流程,除了前者发送命令而后者发送状态之外,其余包括数据传输和校验部分的流程极为相近。在此基础上,去除相关主/从节点兼容性的部分内容后,分别提出了主节点IP核以及从节点IP核的解决方案,分别部署在客户端(主机端)和阵列服务器(设备端),形成了简化的可靠UDP协议栈——R~2UDP的基本架构。本文设计的R~2UDP协议栈可以实现网络数据包在传输过程中的握手连接、漏发重发、出错重发、重复丢弃、流量控制等保证数据可靠性传输的功能,在对传统的可靠UDP协议的控制机制的运作流程进行相应的改进基础上,进一步增强了数据处理的可靠性。R~2UDP协议栈以TCP/IP网络参考模型为基础,在深入分析相关协议的基础上,在FPGA当中采用自上而下的层次化和模块化的设计方案,对网络的各层进行了模块化的设计,物理层和链路层通过以太网控制器与GMII接口和物理层芯片相连,从而实现物理链路上网络数据的接收和发送功能。FPGA中的各层协议模块彼此独立完成本层协议的数据报文的封装和拆封解析工作,由相应的校验机制来完成传输数据正确性的检验,由接收端的数据包序号检测模块完成数据完整性的检验,由状态机控制模块进行数据处理流程的控制,由数据通道来实现数据在不同层次间的传输。在此基础上,本文对Linux系统下运行的UDP/IP协议作了必要的简单修改,给出了相应的网络内核功能模块设计,可以使传统CPU作为客户端访问存储阵列时,无缝对接R~2UDP的设备端。在FPGA上设计实现R~2UDP协议栈,采用Xilinx公司的ISE开发工具和硬件测试平台,经过对R~2UDP硬件协议模块进行分层仿真测试和板级调试验证,本文所设计的R~2UDP协议栈可以很好地在FPGA设备中进行网络数据的传输,同时有效避免了所传输数据的报文丢失及数据出错,达到了设计目的。