当前位置:   article > 正文

udp接受_UDP/IP硬件协议栈设计(十):测试

udp接受_UDP/IP硬件协议栈设计(十):测试

6ef956ab8b47b938d8da86efeae365d5.png

前面仿真基本没啥大问题,直接上板测试,终于到了最激动人心的时刻了。

b47a6527ad0d4a5b2bb15704c3c4dd1e.png

接口定义

前面九篇文章依次将各模块的设计和仿真阐述完毕,终于得到了一个可用的弟弟UDP/IP协议栈,现在先说明该协议栈的接口信号的定义,如下图所示:

c71ee16823216d4a8cf6449ce4423083.png
UDP/IP协议栈接口定义

大致分为四类接口:

  1. 系统信号:包括时钟(clk)复位(rst_n),其中时钟采用千兆以太网的125MHz时钟,复位采用低电平有效复位信号;
  2. GMII接口:包括接收端(Rx)发送端(Tx)的数据信号和相应的有效信号,其中数据信号位宽为8 bit;
  3. 用户接口:包括接收端(Rx)发送端(Tx),采用AXIS接口,数据位宽为8 bit;
  4. 管理接口:包括校验使能(checksum_enable)本地MAC/IP地址其有效信号,其中校验使能位宽为5 bit,分别对FCS、ICMP/UDP/IP的checksum进行使能,本地MAC/IP地址及其有效信号用于配置FPGA本机的MAC/IP地址,便于与外机通信;

此外,本协议栈可对UDP的接受和发送缓冲区大小进行配置,故采用parameter进行两个参数的配置,UDP_RBUF/UDP_TBUF分别表示接收/发送缓冲区,默认为12,即2^12 = 4096字节的缓冲区。

另,针对用户接口的帧格式定义如下(采用大端模式):

7db5c01573356fb55a3fca0621cb76c2.png
用户接口帧格式定义

测试结构

为实际上板本协议栈是否正常工作,故简单搭建了一个测试平台,基本结构如下所示:

4073b9f8dcb1343a50e600b537f4edf1.png
测试结构

在搭建的平台中:

  • FPGA平台采用Xilinx的VC709评估版,FPGA开发平台采用Xilinx的Vivado 2018.3
  • 内部的以太网接口的PHY部分采用Xilinx的1G PCS/PMA IP,即FPGA对外的物理接口直接采用高速串行收发器,至于具体配置本文不再详细说明,可参见笔者其他文章进行配置;
  • PCS/PMA IP与本协议栈模块之间采用GMII接口相连,其中不使用error信号;
  • 对用户侧的接口采用回环形式,由于接口数据帧格式定义,接收端的源IP/端口等信号可直接作为发送端的目的IP/端口等;
  • FPGA本地MAC地址设为48'haabb_ccdd_eeff(aa:bb:cc:dd:ee:ff),本地IP地址设为32'hc0a8_000a(192.168.0.10),校验全部使能(即接收校验正确后才进行处理,错误者直接丢弃);
  • PC端的IP地址设为192.168.0.25(与FPGA在同一网段下),上位机软件使用网络调试助手进行测试;

上板测试

对于测试中的新建工程、综合、布局布线、下载bit、连线等操作,本文不再说明,下面针对本协议栈实现的功能分别进行测试

  • ARP

由于本协议栈针对ARP完成了请求的处理,而在使用IP协议进行通信时,主机必然将发送ARP请求进行获取MAC地址的操作,故测试该项时可进行ICMP或UDP通信间接测试ARP是否正确,例如进行ping操作,主机先发送ARP请求,wireshark抓包结果如下:

095d5653df94a25054bb28990375c5db.png
ARP请求wireshark抓包结果

上述说明主机发送ARP请求帧到FPGA端时,可正常进行响应处理,即回复IP地址为192.168.0.10对应的MAC地址为aa:bb:cc:dd:ee:ff。

  • ICMP

由于本协议栈针对ICMP协议只完成了回显请求(Echo)的处理,故测试该项直接打开CMD进行ping“192.168.0.10”的操作,结果如下:

59273a0f9ae659a576d843a6065cdce1.png
PING 192.168.0.10

采用wireshark抓包,结果如下所示:

0245d483bced127bac10aaee522b87f4.png
wireshark抓包情况

当然,可以再测试一些其他长度的ICMP报文,例如1000字节的测试情况如下:

5cec06ed7925127611b60c7de914bda1.png
ping长度为1000字节的情况

2390ab8c2bd91e853c48617dce4af02b.png
ping长度为1000字节的wireshark抓包情况

上述测试说明,ICMP的回显请求(Echo)的处理基本没啥问题。

  • UDP

由于搭建的测试平台采用的测试方式为UDP回环测试,即发送给FPGA的UDP数据帧与接收到的来自FPGA的UDP数据帧将一致,故采用网络调试助手进行简单的发包测试,即192.168.0.25:80发给192.168.0.10:81,发送一帧的测试结果如下:

e08e51ecaa4c9f2333ccd61b5d9c6098.png
发送一帧UDP数据

发送一帧UDP数据的wireshark抓包结果如下:

7494626e2b93531e33fd5e21fde01d8c.png
发送一帧UDP数据的wireshark抓包结果

结果可知接收来自FPGA端的UDP帧,IP首部和UDP首部的Checksum均正确,故UDP处理基本无误。

由于时间原因不再作进一步吞吐量等其他的测试。

其他说明

经过简单测试,UDP/IP协议栈基本功能具备,性能凑活,算是基本达成最先的设计目标了。

在接收和发送缓冲区均在4 KB的情况下,使用vivado 2018.3进行综合布局布线等,得到的资源利用报表如下图所示:

962c1084baea4ceed2573cd0c5786401.png
资源利用情况

此外,本协议栈所有模块均直接使用Verilog编写,包括使用到的RAM和FIFO等,所以在Xilinx的FPGA平台上便于移植,基本上把模块实例化进行就可以直接使用了。

最后总结就是,基本完成UDP/IP协议栈基本功能完成校验计算接口定义简单,但消耗资源较多完整协议功能未完成


几天就撸完了代码,但是更新文章陆续花了一个多月时间,可算是更完了,经过这一波操作也算是对协议有了进一步的了解,算是收获颇多。

当然,对于协议栈逻辑的进一步优化和其他协议的完善得日后再说,反正又不是不能用,UDP/IP协议栈系列文章到此结束!

如有不足之处还望批评指正~

本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号