TCP/IP协议栈设计—UDP/IP协议栈设计与实现(发送部分)
前言:要实现基于FPGA的TCP硬件协议栈,需要充分了解以太网通信协议,因此先展开对UDPIP的实现。经过一年来不断的探索,最近从新设计并优化了UDPIP协议栈,内容较多,因此分为接收、发送两个部分2篇文章,来介绍UDPIP的调试与实现过程。
文中主要目录:
设计部分:一、ARP数据的发送;二、UDP数据的发送;三、IP数据的发送;
测试部分:一、ARP回复测试;二、UDP测试问题:问题1、UDP校验和问题。问题2、CRC校验问题。问题3、RAM下降沿存数,上升沿读数,造成数据错位
应用拓展:WireShark开启校验和核对功能
发送部分的设计
20191103 周日
经过这两天的设计,发现,没法像最初想的那样,一层层往上封装,直到MAC层发送。因为每类数据功能不同,应用场景不同。如,若接收到UDP帧,那建立连接的肯定是UDP。所以针对具体特性,经过反复考虑,最佳的方式,便是分类型,单独给出发送数据接口,再在顶层进行数据输出仲裁。
在此版本中,将ARP和IP分开进行发送。后面,还要对IP下层的UDP,TCP,ICMP都进行单独发送才行。
经过这两天的奋战,终于得到了如下的仿真结果。
仿真文件为:tb1_tcpip_stack.v 顶层全局仿真。具体模块发送测试如下。
一、ARP数据的发送
模块代码文件:arp_tx_framing.v ,mac_tx_control.v
下图为ARP接收到发送的过程。
展开的ARP发送数据前端,和后端如下: