FPGA基于Tri Mode Ethernet MAC实现UDP通信 提供3套工程源码和技术支持
1、前言
目前网上的fpga实现udp基本生态如下:
1:verilog编写的udp收发器,但不带ping功能,这样的代码功能正常也能用,但不带ping功能基本就是废物,在实际项目中不会用这样的代码,试想,多机互联,出现了问题,你的网卡都不带ping功能,连基本的问题排查机制都不具备,这样的代码谁敢用?
2:带ping功能的udp收发器,代码优秀也好用,但基本不开源,不会提供源码给你,这样的代码也有不足,那就是出了问题不知道怎么排查,毕竟你没有源码,无可奈何;
3:使用了Xilinx的Tri Mode Ethernet MAC三速网IP实现,这样的代码也很优秀,但还是那个问题,没有源码,且三速网IP需要licence,三速网IP实现了rgmii到gmii再到axis的转换,本设计基于此方案;
本设计调用Xilinx的Tri Mode Ethernet MAC三速网IP,使用米联客的UDP协议栈实现UDP通信,该协议栈目前并不开源,只提供网表文件,但不影响使用,该协议栈带有用户接口,使得用户无需关心复杂的UDP协议而只需关心简单的用户接口时序即可操作UDP收发,非常简单;本设计通过一个fifo实现UDP数据的回环收发,并在电脑端使用网络调试助手进行UDP收发验证;
本设计可以配置为UDP的服务器或者客户端,默认配置为服务器,可在顶层代码中通过`define实现配置,本设计经过反复大量测试稳定可靠,可在项目中直接移植使用,工程代码可综合编译上板调试,可直接项目移植,适用于在校学生、研究生项目开发,也适用于在职工程师做项目开发,可应用于医疗、军工等行业的数字通信领域;
提供完整的、跑通的工程源码和技术支持;
工程源码和技术支持的获取方式放在了文章末尾,请耐心看到最后;
2、我这里已有的UDP方案
目前我这里有如下几种UDP方案和应用实例:
我的博客主页有个FPGA以太网通信专栏,专栏是免费的,里面有很多FPGA实现的UDP应用,对网络通信有需求的兄弟可以去看看:直接点击前往
3、米联客UDP协议栈
本设计调用Xilinx的Tri Mode Ethernet MAC三速网IP,使用米联客的UDP协议栈实现UDP通信,该协议栈目前并不开源,只提供网表文件,但不影响使用,该协议栈带有用户接口,使得用户无需关心复杂的UDP协议而只需关心简单的用户接口时序即可操作UDP收发,非常简单;
协议栈架构如下:
协议栈性能表现如下:
1:支持 UDP 接收校验和检验功能,暂不支持 UDP 发送校验和生成;
2:支持 IP 首部校验和的生成和校验,同时支持 ICMP 协议中的 PING 功能,可接收并响应同一个子网内部设备的 PING 请求;
3:可自动发起或响应同一个子网内设备的 ARP 请求,ARP 收发完全自适应。ARP 表可保存同一个子网内部256 个 IP 和 MAC 地址对;
4:支持 ARP 超时机制,可检测所需发送数据包的目的 IP 地址是否可达;
5:协议栈发送带宽利用率可达 93%,高发送带宽下,内部仲裁机制保证 PING 和 ARP 功能不受任何影响;
6:发送过程不会造成丢包;
7:提供64bit位宽AXI4-Stream形式的MAC接口,可与Xilinx官方的千兆以太网IP核Tri Mode Ethernet MAC,以及万兆以太网 IP 核 10 Gigabit Ethernet Subsystem、10 Gigabit Ethernet MAC 配合使用;
有了此协议栈,我们无需关心复杂的UDP协议的实现了,直接调用接口即可使用。。。
4、详细设计方案
详细设计方案如下:
UDP协议栈加上了FIFO以缓冲数据;
调用Tri Mode Ethernet MAC实现MAC层的数据转换;
共提供了3套工程实现UDP通信,只是使用的PHY不同,分别是RTL8211、
B50610、88E1518;
在电脑端使用网络调试助手测试数据收发、对包情况,还有连续ping、网络带宽延迟等测试;
5、Tri Mode Ethernet MAC的使用
IP使用逻辑实现的AXI Lite接口配置,具体参考代码;
IP配置很简单,配置完成即可使用;
6、vivado工程1详解
开发板:Xilinx Artix7-35T;
开发环境:Vivado2020.2;
网络PHY:RTL8211延时模式;
输入\输出:UDP网络通信;
测试项:数据收发、连续ping、网络测速;
工程代码架构如下:
本设计可以配置为UDP的服务器或者客户端,默认配置为服务器,可在顶层代码中通过`define实现配置,如下:
开发板IP和远端IP可自由修改,master_ch.v和slaver_ch.v文件修改位置如下:
7、vivado工程2详解
开发板:Xilinx Kintex7-35T;
开发环境:Vivado2020.2;
网络PHY:B50610延时模式;
输入\输出:UDP网络通信;
测试项:数据收发、连续ping、网络测速;
工程详情与vivado工程1一致;
8、vivado工程3详解
开发板:Xilinx Kintex7-35T;
开发环境:Vivado2020.2;
网络PHY:88E1518延时模式;
输入\输出:UDP网络通信;
测试项:数据收发、连续ping、网络测速;
工程详情与vivado工程1一致;
9、上板调试验证并演示
以工程2的Kintex7-35T开发板为例进行测试;
板子上电下载bit后,先测试ping功能,如下:
单次ping还不够,直接上连续ping,如下:
然后是用网络调试助手进行数据收发测试,如下:
既有手动收发测试,也有循环12小时的长时间收发测试,测试结果没有出现丢包的情况。。。
测速如下:
在电脑上观察开发板以太网网口的发送速率,这个测速只代表可能的最高的速度,不代表电脑真实的不丢包速度,UDP 的点到点不丢包速度和电脑的网卡、CPU 速度、内存速度、操作系统都有关系。。。
10、福利:工程代码的获取
福利:工程代码的获取
代码太大,无法邮箱发送,以百度网盘链接方式发送,
通过微信获取资料:
网盘资料如下:
UDP协议栈网表文件位置: