基于zynq的千兆网udp项目_荐 基于ZYNQ的千兆网项目(3)

本文介绍了如何在ZYNQ平台上实现UDP协议,用于与上位机进行千兆网通信的循环测试。通过设置BSP文件优化LWIP库,提高通信速度。代码示例展示了UDP接收中断、发送数据和初始化过程,对比了UDP与TCP的不同。实测表明,UDP协议在速度上优于TCP。
摘要由CSDN通过智能技术生成

项目简述

前面的文章讲解了TCP客户机与主机在ZYNQ上面的实现,其实说白了就是调用现成的API函数,这点与FPGA的设计其安全不同,因为进行FPGA设计必须要完全理解底层才可以进行相应的设计。本篇博客我们将讲解ZYNQ实现UDP协议。关于UDP的理论部分,我们在使用FPGA实现的时候已经进行了完整的讲解,详细请查看 基于FPGA的千兆以太网的实现 ,上面对UDP的特点、组包、CRC进行了详细的论证。 这里建议大家一定要学习, 虽然即使不明白UDP原理也可以进行相应的学习,但是那样一来我们和嵌入式工程师相比就完全没了优势。

工程描述:讲ZYNQ当作UDP来进行与上位机通信,实现千兆网的循环测试。

本次实验所用到的软硬件环境如下:

1、VIVADO 2019.1

2、米联客MZ7015FA开发板

3、NetAssist网络调试助手

UDP简述

UDP不像TCP一样又三次握手甚至四次握手,UDP协议是不可靠传输,通常为了提高其可靠性会在其之上设计额外的传输协议, 并加上类似传输握手的功能。

用户数据报协议(UDP):UDP(用户数据报协议)是一个简单的面向数据报的传输层协议。提供的是非面向连接的、不可靠的数据流传输。UDP不提供可靠性,也不提供报文到达确认、排序以及流量控制等功能。它只是把应用程序传给IP层的数据报发送出去,但是并不能保证它们能到达目的地。因此报文可能会丢失、重复以及乱序等。但由于UDP在传输数据报前不用在客户和服务器之间建立一个连接,且没有超时重发等机制,故而传输速度很快。

更加详细的论述请查看博主之前的博客。

PL端设计

童颜我们主要讲解的千兆网的ZYNQ实现,在PL段没有进行设计,所以我们PL端的设计没有任何代码只是例化了一个ZYNQ的IP,如下:

关于ZYNQ实现千兆网的三篇文章其实都是这个PL设计,一模一样。

PS端设计

这篇文章也用到了开源的系统框架,所以我们也需要设置BSP文件。

首先右击相应工程的bsp文件,选择Board Support Package Setting

然后点击相应的lwip

然后重新生成相应的bsp文件即可。

本例程使用 RAW API,即函数调用不依赖操作系统。传输效率也比 SOCKET API 高, (具体可参考 xapp1026)。

将 use_axieth_on_zynq 和 use_emaclite_on_zynq 设为 0。如下图所示。

修改 lwip_memory_options 设置,将 mem_size, memp_n_pbuf, mem_n_tcp_pcb, memp_n_tcp_seg 这 4 个参数

值设大,这样会提高 TCP 传输效率。如下图所示。

修改 pbuf_options 设置,将 pbuf_pool_size 设大,增加可用的 pbuf 数量,这样同样会提高 TCP 传输效率。如下

图所示。

修改 tcp_options 设置,将 tcp_snd_buf, tcp_wnd 参数设大,这样同样会提高 TCP 传输效率。如下图所示。

修改 temac_adapter_options 设置,将 n_rx_descriptors 和 n_tx_descriptors 参数设大。这样可以提高 zynq 内部 emac

dma 的数据迁移效率,同样能提高 TCP 传输效率。如下图所示。

需要手动修改 LWIP 库让网口芯片工作于 1000Mbps。

其余选项的参数默认即可,不用修改。点击 OK,重建 bsp。 一般情况下,修改完会自动更新,如果没有更新,手动更新一下,选中 bsp—>右键—> Re-generate BSP Sources。重新生成一下 BSP 包。上面进行这样设置的原因是为了增加lwip的缓存,进而提高千兆网的通信速度。

这里的代码设计与UDP做Server的设计非常相似,这里总结出几个不同点,如下:

1、UDP协议没法设置发送中断,TCP设置了发送中断

2、UDP Server自动匹配port,UDP需要我们进行手动设置

3、UDP相应的发送函数udp_send并不是指向数据指针,而是一个网络变量,TCP则完全是个数据指针,并写上发送数据的长度,UDP的长度是依靠动态分配内存区间的大小,这里没有TCP灵活。

4、UDP代码不用每隔固定时间就开始测试连接是否正常,但是TCP网络需要,官方给出的代码是0.25s。

代码如下:

#

include

#

include

"xscugic.h"

#

include

"xparamet

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值