TCP/IP协议栈设计—UDP/IP协议栈设计与实现(接收部分)

TCP/IP协议栈设计—UDP/IP协议栈设计与实现(接收部分)

前言:要实现基于FPGA的TCP硬件协议栈,需要充分了解以太网通信协议,因此先展开对UDPIP的实现。经过一年来不断的探索,最近从新设计并优化了UDPIP协议栈,内容较多,因此分为接收、发送两个部分2篇文章,来介绍UDPIP的调试与实现过程。

文中主要目录:

一、对MAC层数据进行解析;二,对ARP数据层进行解析;三、IP协议的解析;四、UDP协议的解析;五、UDP数据的发送组帧;六、IP数据的发送组帧

 

20191031 周四

一、对MAC层数据进行解析

子模块为:mac_rx_parsing.v 测试文件为:tb_mac_rx_parsing.v

代码顶层接口:

TCP/IP协议栈设计—UDP/IP协议栈设计与实现(接收部分)

解析ARP帧时,结果如下2图,仿真正确。

TCP/IP协议栈设计—UDP/IP协议栈设计与实现(接收部分)

TCP/IP协议栈设计—UDP/IP协议栈设计与实现(接收部分)

接收IP帧时的解析如下:

TCP/IP协议栈设计—UDP/IP协议栈设计与实现(接收部分)

二,对ARP数据层进行解析

子模块为:arp_rx_parsing.v 测试文件为:tb_arp_rx_parsing.v

代码顶层接口:

TCP/IP协议栈设计—UDP/IP协议栈设计与实现(接收部分)

针对ARP协议的分析代码如下:

TCP/IP协议栈设计—UDP/IP协议栈设计与实现(接收部分)

ARP仿真结果如下:图中可见,各个参数均提取正确。

TCP/IP协议栈设计—UDP/IP协议栈设计与实现(接收部分)

 

三、IP协议的解析

子模块为:ip_rx_parsing.v 测试文件为:tb_ip_rx_parsing.v

代码顶层接口:

TCP/IP协议栈设计—UDP/IP协议栈设计与实现(接收部分)

 

仿真结果如下::当接收到ICMP数据时,成功解析

TCP/IP协议栈设计—UDP/IP协议栈设计与实现(接收部分)

继续接收UDP数据时,成功解析:

TCP/IP协议栈设计—UDP/IP协议栈设计与实现(接收部分)

当收到TCP数据时,成功解析:

TCP/IP协议栈设计—UDP/IP协议栈设计与实现(接收部分)

 

四、UDP协议的解析

继续往下层解析,先对UDP协议解析。

子模块为:udp_rx_parsing.v 测试文件为:tb_udp_rx_parsing.v代码顶层接口:

TCP/IP协议栈设计—UDP/IP协议栈设计与实现(接收部分)

仿真结果如下:

UDP接收解析的开始部分,以及第一个UDP数据存入RAM,均正确。

TCP/IP协议栈设计—UDP/IP协议栈设计与实现(接收部分)

接收尾部如下,见图中注释:

TCP/IP协议栈设计—UDP/IP协议栈设计与实现(接收部分)

五、UDP数据的发送

本计划是,继续完成ICMP和TCP数据的解析。但做到现在,考虑到测试完整性。就是,针对某个功能,要做实际的完成测试,才能真正地确保设计的正确性。而且老绿道TCP解析的复杂性。因此,先有必要先把ARP和UDP的发送功能做了。在此,先做UDP数据的发送部分设计。

子模块为:udp_tx_framing.v 测试文件为:tb_udp_tx_framing.v

模块代码顶层接口:

TCP/IP协议栈设计—UDP/IP协议栈设计与实现(接收部分)

UDP组帧的核心代码部分如下:

TCP/IP协议栈设计—UDP/IP协议栈设计与实现(接收部分)

在接收部分的校验和数据段预处理代码如下:

TCP/IP协议栈设计—UDP/IP协议栈设计与实现(接收部分)

校验和计算,UDP首部给出仿真如下:执行正确。

TCP/IP协议栈设计—UDP/IP协议栈设计与实现(接收部分)

对此UDP帧,全帧的校验和计算值为 8ED3。

小结:设计中,针对整个接收的UDP帧计算了校验和,考虑过用户自定义发送时的情形,留出了接口,但在程序中暂未实现。目前,首要考虑的是,实现UDP接收与回传。

在本次分层设计中,UDP_TX解析层给出了计算好的UDP首部,但发送控制和UDP数据提取,交由上层(即IP)来控制。在此UDP层中,不做UDP数据的传输。正是出于分层简化的考虑,进行了如此的设计。

当上一层,检测到 udp_tx_ready = 1 的时候,就可以直接加上UDP首部+接收的UDP数据,再打包就可以发送了。

UDP接收端的校验和计算:

TCP/IP协议栈设计—UDP/IP协议栈设计与实现(接收部分)

奇数字节时,会多计算一次:

TCP/IP协议栈设计—UDP/IP协议栈设计与实现(接收部分)

数据个数偶与奇前后校验和的值:

TCP/IP协议栈设计—UDP/IP协议栈设计与实现(接收部分)

经过WireShark和仿真计算的结果做对比,计算值一致。

六、IP数据的发送

将准备好的UDP首部,继续往上层封装,完善IP首部,并给出IP首部,交给MAC层启动发送。

子模块为:ip_tx_framing.v 测试文件为:tb_ip_tx_framing.v

IP层子模块接口:

TCP/IP协议栈设计—UDP/IP协议栈设计与实现(接收部分)

 

IP首部仿真如下,校验和计算正确,首部给出正确。

TCP/IP协议栈设计—UDP/IP协议栈设计与实现(接收部分)

 

在IP层进行整个数据的发送组帧,此部分(接收解析),实现对接收数据的解析、分类、提取,完成校验和计算,并准备好回环发送的数据帧头信息。

欢迎交流、分享,笔者扣扣:1021100382