FPGA实现 TCP/IP 协议栈,千兆网服务器版本,纯VHDL代码编写,提供21套工程源码和技术支持

该文章详细介绍了如何使用纯VHDL在FPGA上实现千兆网TCP/IP协议栈服务器版本,提供了16套工程源码,涵盖了多种FPGA型号和网络PHY,包括源码和网表版本。设计包括TCP接收和发送流程,以及与MAC层、PHY层的交互。文章还讨论了资源占用、数据吞吐率和延迟性能,并提供了上板调试和验证的步骤。
摘要由CSDN通过智能技术生成

目录


FPGA实现 TCP/IP 协议栈,千兆网服务器版本,纯VHDL代码编写,提供21套工程源码和技术支持

1、前言

没玩过TCP网络通信都不好意思说自己玩儿过FPGA,这是CSDN某大佬说过的一句话,鄙人深信不疑。。。目前网上fpga实现udp协议的源码满天飞,我这里也有不少,但用FPGA纯源码实现TCP的项目却很少,能上板调试跑通的项目更是少之又少,甚至可以说是凤毛菱角,但很不巧,本人这儿就有一个;一般而言,用FPGA实现TCP并不是一个经济的方案,但对于芯片原型验证、航天可靠通信、水下通信等一些数据传输可靠性极高的领域而言,FPGA实现TCP方案依然占有一席之地;本方案采用纯VHDL实现了千兆网TCP/IP协议栈;

工程概述

本设采用纯VHDL实现了千兆网TCP/IP协议栈,该协议栈为TCP服务器版本,没有用到任何一个IP核;并在Xilinx系列FPGA上做了部署并验证,由于使用千兆网,所以需要与FPGA开发板上的网络PHY交互,对硬件有一定要求;本设计能实现电脑端网卡与FPGA开发板之间的双向通信,为了方便测试,设计了TCP数据回环和网络测速两个功能;

TCP/IP数据回环功能如下:

电脑端网络调试助手发送测试数据或发起ping操作,然后电脑端操作系统的Socket实现发送数据的以太网帧组包,然后发送给电脑端网卡后通过网线连接到FPGA开发板的RJ45网口;然后差分网络数据进入FPGA开发板板载的PHY芯片实现以太网物理层功能,将差分数据转换为并行RGMII接口数据;再调用Xilinx的Tri Mode Ethernet MAC IP核实现以太网物理层的数据接口转换,即将RGMII接口数据转换为AXI4-Stream接口数据;然后MAC数据经过数据缓冲FIFO组实现数据位宽转换和跨时钟域转换;然后数据进入TCP/IP协议栈实现以太网帧解包,解析各种头部信息,并提取输出TCP报文的有效数据段;有效数据再经过回环后回灌到TCP/IP协议栈实现以太网帧组包,即加上各种头部信息和校验;然后数据进入Tri Mode Ethernet MAC IP核实现以太网物理层的数据接口转换,即将AXI4-Stream接口数据转换为RGMII接口数据;然后数据进入板载PHY芯片实现以太网物理层,输出差分信号,并通过网线发送到电脑端;电脑端操作系统的Socket实现接收数据以太网解包,然后数据给网络调试助手显示;网络调试助手同时显示发送和接收数据,以此观察TCP数据回环的正确性;

TCP/IP网络测速功能如下:

PGA自动循环产生从0开始的累加数作为TCP发送数据,发送数据然后进入TCP协议栈实现以太网帧组包,即加上各种头部信息和校验;然后数据进入Tri Mode Ethernet MAC IP核实现以太网物理层的数据接口转换,即将AXI4-Stream接口数据转换为RGMII接口数据;然后数据进入板载PHY芯片实现以太网物理层,输出差分信号,并通过网线发送到电脑端;然后打开电脑端的资源管理器,查看网卡,即可看到TCP通信速率;

针对目前市面上主流的FPGA和PHY芯片信号,本工程共移植了21套工程,具体如下:
在这里插入图片描述
这里说明一下提供的21套工程源码的作用和价值,如下:

工程源码1

开发板FPGA型号为Xilinx-Artix7-35T-xc7a35tfgg484-2,板载的网络PHY型号为RTL8211F,工作于RGMII的延时模式下,进行TCP/IP 协议栈千兆网服务器版本的应用部署,TCP/IP 协议栈提供的是纯VHDL代码实现的源码,并对源码进行了verilog的顶层例化,对不熟悉VHDL语法的朋友来说是巨大福音,因为在工程中可以直接用verilog当时例化TCP/IP 协议栈,该工程集成了TCP/IP数据回环功能+TCP/IP网络测速功能,适用于Xilinx 7系列FPGA移植,PHY适用于RTL8211系列;

工程源码2

开发板FPGA型号为Xilinx-Artix7-35T-xc7a35tfgg484-2,板载的网络PHY型号为RTL8211E,工作于RGMII的延时模式下,进行TCP/IP 协议栈千兆网服务器版本的应用部署,TCP/IP 协议栈提供的是纯VHDL代码实现的源码,并对源码进行了verilog的顶层例化,对不熟悉VHDL语法的朋友来说是巨大福音,因为在工程中可以直接用verilog当时例化TCP/IP 协议栈,该工程集成了TCP/IP数据回环功能+TCP/IP网络测速功能,适用于Xilinx 7系列FPGA移植,PHY适用于RTL8211系列;

工程源码3

开发板FPGA型号为Xilinx-Artix7-35T-xc7a35tfgg484-2,板载的网络PHY型号为YT8531C,工作于RGMII的延时模式下,进行TCP/IP 协议栈千兆网服务器版本的应用部署,TCP/IP 协议栈提供的是纯VHDL代码实现的源码,并对源码进行了verilog的顶层例化,对不熟悉VHDL语法的朋友来说是巨大福音,因为在工程中可以直接用verilog当时例化TCP/IP 协议栈,该工程集成了TCP/IP数据回环功能+TCP/IP网络测速功能,适用于Xilinx 7系列FPGA移植,PHY适用于YT8531C系列;

工程源码4

开发板FPGA型号为Xilinx-Artix7-35T-xc7a35tfgg484-2,板载的网络PHY型号为KSZ9031,工作于RGMII的延时模式下,进行TCP/IP 协议栈千兆网服务器版本的应用部署,TCP/IP 协议栈提供的是纯VHDL代码实现的源码,并对源码进行了verilog的顶层例化,对不熟悉VHDL语法的朋友来说是巨大福音,因为在工程中可以直接用verilog当时例化TCP/IP 协议栈,该工程集成了TCP/IP数据回环功能+TCP/IP网络测速功能,适用于Xilinx 7系列FPGA移植,PHY适用于KSZ9031系列;

工程源码5

开发板FPGA型号为Xilinx-Artix7-100T-xc7a100tfgg484-2,板载的网络PHY型号为B50610,工作于RGMII的延时模式下,进行TCP/IP 协议栈千兆网服务器版本的应用部署,TCP/IP 协议栈提供的是纯VHDL代码实现的源码,并对源码进行了verilog的顶层例化,对不熟悉VHDL语法的朋友来说是巨大福音,因为在工程中可以直接用verilog当时例化TCP/IP 协议栈,该工程集成了TCP/IP数据回环功能+TCP/IP网络测速功能,适用于Xilinx 7系列FPGA移植,PHY适用于B50610系列;

工程源码6

开发板FPGA型号为Xilinx-Artix7-100T-xc7a100tfgg484-2,板载的网络PHY型号为RTL8211F,工作于RGMII的延时模式下,进行TCP/IP 协议栈千兆网服务器版本的应用部署,TCP/IP 协议栈提供的是纯VHDL代码实现的源码,并对源码进行了verilog的顶层例化,对不熟悉VHDL语法的朋友来说是巨大福音,因为在工程中可以直接用verilog当时例化TCP/IP 协议栈,该工程集成了TCP/IP数据回环功能+TCP/IP网络测速功能,适用于Xilinx 7系列FPGA移植,PHY适用于RTL8211系列;

工程源码7

开发板FPGA型号为Xilinx-Artix7-100T-xc7a100tfgg484-2,板载的网络PHY型号为YT8531C,工作于RGMII的延时模式下,进行TCP/IP 协议栈千兆网服务器版本的应用部署,TCP/IP 协议栈提供的是纯VHDL代码实现的源码,并对源码进行了verilog的顶层例化,对不熟悉VHDL语法的朋友来说是巨大福音,因为在工程中可以直接用verilog当时例化TCP/IP 协议栈,该工程集成了TCP/IP数据回环功能+TCP/IP网络测速功能,适用于Xilinx 7系列FPGA移植,PHY适用于YT8531C系列;

工程源码8

开发板FPGA型号为Xilinx-Artix7-100T-xc7a100tfgg484-2,板载的网络PHY型号为KSZ9031,工作于RGMII的延时模式下,进行TCP/IP 协议栈千兆网服务器版本的应用部署,TCP/IP 协议栈提供的是纯VHDL代码实现的源码,并对源码进行了verilog的顶层例化,对不熟悉VHDL语法的朋友来说是巨大福音,因为在工程中可以直接用verilog当时例化TCP/IP 协议栈,该工程集成了TCP/IP数据回环功能+TCP/IP网络测速功能,适用于Xilinx 7系列FPGA移植,PHY适用于KSZ9031系列;

工程源码9

开发板FPGA型号为Xilinx-Kintex7-35T-xc7k325tffg676-2,板载的网络PHY型号为B50610,工作于RGMII的延时模式下,进行TCP/IP 协议栈千兆网服务器版本的应用部署,TCP/IP 协议栈提供的是纯VHDL代码实现的源码,并对源码进行了verilog的顶层例化,对不熟悉VHDL语法的朋友来说是巨大福音,因为在工程中可以直接用verilog当时例化TCP/IP 协议栈,该工程集成了TCP/IP数据回环功能+TCP/IP网络测速功能,适用于Xilinx 7系列FPGA移植,PHY适用于B50610系列;

工程源码10

开发板FPGA型号为Xilinx-Kintex7-35T-xc7k325tffg676-2,板载的网络PHY型号为88E1518,工作于RGMII的延时模式下,进行TCP/IP 协议栈千兆网服务器版本的应用部署,TCP/IP 协议栈提供的是纯VHDL代码实现的源码,并对源码进行了verilog的顶层例化,对不熟悉VHDL语法的朋友来说是巨大福音,因为在工程中可以直接用verilog当时例化TCP/IP 协议栈,该工程集成了TCP/IP数据回环功能+TCP/IP网络测速功能,适用于Xilinx 7系列FPGA移植,PHY适用于88E1518系列;

工程源码11

开发板FPGA型号为Xilinx-Kintex7-35T-xc7k325tffg900-2,板载的网络PHY型号为RTL8211F,工作于RGMII的延时模式下,进行TCP/IP 协议栈千兆网服务器版本的应用部署,TCP/IP 协议栈提供的是纯VHDL代码实现的源码,并对源码进行了verilog的顶层例化,对不熟悉VHDL语法的朋友来说是巨大福音,因为在工程中可以直接用verilog当时例化TCP/IP 协议栈,该工程集成了TCP/IP数据回环功能+TCP/IP网络测速功能,适用于Xilinx 7系列FPGA移植,PHY适用于RTL8211系列;

工程源码12

开发板FPGA型号为Xilinx-Kintex7-35T-xc7k325tffg900-2,板载的网络PHY型号为YT8531C,工作于RGMII的延时模式下,进行TCP/IP 协议栈千兆网服务器版本的应用部署,TCP/IP 协议栈提供的是纯VHDL代码实现的源码,并对源码进行了verilog的顶层例化,对不熟悉VHDL语法的朋友来说是巨大福音,因为在工程中可以直接用verilog当时例化TCP/IP 协议栈,该工程集成了TCP/IP数据回环功能+TCP/IP网络测速功能,适用于Xilinx 7系列FPGA移植,PHY适用于YT8531C系列;

工程源码13

开发板FPGA型号为Xilinx-Zynq7020-xc7z020clg400-2,板载的网络PHY型号为B50610,工作于RGMII的延时模式下,进行TCP/IP 协议栈千兆网服务器版本的应用部署,TCP/IP 协议栈提供的是纯VHDL代码实现的源码,并对源码进行了verilog的顶层例化,对不熟悉VHDL语法的朋友来说是巨大福音,因为在工程中可以直接用verilog当时例化TCP/IP 协议栈,该工程集成了TCP/IP数据回环功能+TCP/IP网络测速功能,适用于Xilinx Zynq7000系列FPGA移植,PHY适用于B50610系列;

工程源码14

开发板FPGA型号为Xilinx-Zynq7020-xc7z020clg400-2,板载的网络PHY型号为RTL8211F,工作于RGMII的延时模式下,进行TCP/IP 协议栈千兆网服务器版本的应用部署,TCP/IP 协议栈提供的是纯VHDL代码实现的源码,并对源码进行了verilog的顶层例化,对不熟悉VHDL语法的朋友来说是巨大福音,因为在工程中可以直接用verilog当时例化TCP/IP 协议栈,该工程集成了TCP/IP数据回环功能+TCP/IP网络测速功能,适用于Xilinx Zynq7000系列FPGA移植,PHY适用于RTL8211系列;

工程源码15

开发板FPGA型号为Xilinx-Zynq7020-xc7z020clg484-2,板载的网络PHY型号为KSZ9031,工作于RGMII的延时模式下,进行TCP/IP 协议栈千兆网服务器版本的应用部署,TCP/IP 协议栈提供的是纯VHDL代码实现的源码,并对源码进行了verilog的顶层例化,对不熟悉VHDL语法的朋友来说是巨大福音,因为在工程中可以直接用verilog当时例化TCP/IP 协议栈,该工程集成了TCP/IP数据回环功能+TCP/IP网络测速功能,适用于Xilinx Zynq7000系列FPGA移植,PHY适用于KSZ9031系列;

工程源码16

开发板FPGA型号为Xilinx-Zynq7100-xc7z100ffg900-2,板载的网络PHY型号为RTL8211E,工作于RGMII的延时模式下,进行TCP/IP 协议栈千兆网服务器版本的应用部署,TCP/IP 协议栈提供的是纯VHDL代码实现的源码,并对源码进行了verilog的顶层例化,对不熟悉VHDL语法的朋友来说是巨大福音,因为在工程中可以直接用verilog当时例化TCP/IP 协议栈,该工程集成了TCP/IP数据回环功能+TCP/IP网络测速功能,适用于Xilinx Zynq7000系列FPGA移植,PHY适用于RTL8211系列;

工程源码17

开发板FPGA型号为Xilinx-Zynq7100-xc7z100ffg900-2,板载的网络PHY型号为YT8531C,工作于RGMII的延时模式下,进行TCP/IP 协议栈千兆网服务器版本的应用部署,TCP/IP 协议栈提供的是纯VHDL代码实现的源码,并对源码进行了verilog的顶层例化,对不熟悉VHDL语法的朋友来说是巨大福音,因为在工程中可以直接用verilog当时例化TCP/IP 协议栈,该工程集成了TCP/IP数据回环功能+TCP/IP网络测速功能,适用于Xilinx Zynq7000系列FPGA移植,PHY适用于YT8531C系列;

工程源码18

开发板FPGA型号为Xilinx-Zynq7100-xc7z100ffg900-2,板载的网络PHY型号为KSZ9031,工作于RGMII的延时模式下,进行TCP/IP 协议栈千兆网服务器版本的应用部署,TCP/IP 协议栈提供的是纯VHDL代码实现的源码,并对源码进行了verilog的顶层例化,对不熟悉VHDL语法的朋友来说是巨大福音,因为在工程中可以直接用verilog当时例化TCP/IP 协议栈,该工程集成了TCP/IP数据回环功能+TCP/IP网络测速功能,适用于Xilinx Zynq7000系列FPGA移植,PHY适用于KSZ9031系列;

工程源码19

开发板FPGA型号为Xilinx-Kintex-UltraScale-xcku060-ffva1156-2-i,板载的网络PHY型号为RTL8211F,工作于RGMII的延时模式下,进行TCP/IP 协议栈千兆网服务器版本的应用部署,TCP/IP 协议栈提供的是纯VHDL代码实现的源码,并对源码进行了verilog的顶层例化,对不熟悉VHDL语法的朋友来说是巨大福音,因为在工程中可以直接用verilog当时例化TCP/IP 协议栈,该工程集成了TCP/IP数据回环功能+TCP/IP网络测速功能,适用于Xilinx UltraScale系列FPGA移植,PHY适用于RTL8211系列;

工程源码20

开发板FPGA型号为Xilinx-Kintex-UltraScale±xcku3p-ffva676-2-i,板载的网络PHY型号为RTL8211F,工作于RGMII的延时模式下,进行TCP/IP 协议栈千兆网服务器版本的应用部署,TCP/IP 协议栈提供的是纯VHDL代码实现的源码,并对源码进行了verilog的顶层例化,对不熟悉VHDL语法的朋友来说是巨大福音,因为在工程中可以直接用verilog当时例化TCP/IP 协议栈,该工程集成了TCP/IP数据回环功能+TCP/IP网络测速功能,适用于Xilinx UltraScale+系列FPGA移植,PHY适用于RTL8211系列;

工程源码21

开发板FPGA型号为Xilinx-Zynq-UltraScale+MPSoCs-xczu4ev-sfvc784-2-i,板载的网络PHY型号为RTL8211F,工作于RGMII的延时模式下,进行TCP/IP 协议栈千兆网服务器版本的应用部署,TCP/IP 协议栈提供的是纯VHDL代码实现的源码,并对源码进行了verilog的顶层例化,对不熟悉VHDL语法的朋友来说是巨大福音,因为在工程中可以直接用verilog当时例化TCP/IP 协议栈,该工程集成了TCP/IP数据回环功能+TCP/IP网络测速功能,适用于Xilinx Zynq-UltraScale+MPSoCs系列FPGA移植,PHY适用于RTL8211系列;

本博客详细描述了Xilinx系列FPGA实现 TCP/IP 协议栈服务器版本的设计方案,工程代码可综合编译上板调试,可直接项目移植,适用于在校学生、研究生项目开发,也适用于在职工程师做学习提升,可应用于医疗、军工等行业的高速接口或图像处理领域;
提供完整的、跑通的工程源码和技术支持;
工程源码和技术支持的获取方式放在了文章末尾,请耐心看到最后;

免责声明

本工程及其源码即有自己写的一部分,也有网络公开渠道获取的一部分(包括CSDN、Xilinx官网、Altera官网以及其他开源免费获取渠道等等),若大佬们觉得有所冒犯,请私信批评教育;部分模块源码转载自上述网络,版权归原作者所有,如有侵权请联系我们删除;基于此,本工程及其源码仅限于读者或粉丝个人学习和研究,禁止用于商业用途,若由于读者或粉丝自身原因用于商业用途所导致的法律问题,与本博客及博主无关,请谨慎使用。。。

2、相关方案推荐

我已有的所有工程源码总目录----方便你快速找到自己喜欢的项目

其实一直有朋友反馈,说我的博客文章太多了,乱花渐欲迷人,自己看得一头雾水,不方便快速定位找到自己想要的项目,所以本博文置顶,列出我目前已有的所有项目,并给出总目录,每个项目的文章链接,当然,本博文实时更新。。。以下是博客地址:
点击直接前往

我这里已有的以太网方案

目前我这里有大量UDP协议的工程源码,包括UDP数据回环,视频传输,AD采集传输等,也有TCP协议的工程,对网络通信有需求的兄弟可以去看看:
直接点击前往

1G 千兆网 TCP–>客户端方案(专用芯片做PHY版本)

以下博客实现了1G 千兆网 TCP客户端方案,PHY采用专用芯片方案,博客链接如下:
直接点击前往

1G 千兆网 TCP–>服务器+客户端方案(FPGA做PHY版本)

以下博客实现了1G 千兆网 TCP服务器+客户端方案,PHY采用FPGA高速接口方案,博客链接如下:
直接点击前往
以下博客实现了1G 千兆网 TCP服务器+客户端方案,PHY采用FPGA高速接口方案,博客链接如下:
直接点击前往

10G 万兆网 TCP–>服务器+客户端 方案

我这里也有10G 万兆网 TCP 方案,该方案有服务器和客户端两套代码,在Xilinx KU和KUP等平台测试通过并很稳定,对10G 万兆网 TCP 方案感兴趣的朋友可以去看看:
直接点击前往

3、详细设计方案

设计框图

本设计使用的工程详细设计方案框图如下:
在这里插入图片描述

测试用PC端电脑

测试用PC端电脑要求如下:
主板有千兆网口,可以是台式电脑或者笔记本电脑;
网口有网卡驱动;
安装网络调试助手软件,软件已提供在资料包中;

网络PHY

本例程提供11套vivado工程源码,分别用到了RTL8211、KSZ9031、B50610等市面上主流的PHY型号,通过这些型号PHY的使用,你将能学会其他型号PHY的使用,因为很多都是兼容的,比如RTL8211兼容YT8531,B50610兼容88E1518等;此外,还提供了PHY的参考原理图,一并放在了资料包中;如下:
在这里插入图片描述
本设计对网络PHY原则上没有要求,但必须是RGMII接口,且工作于延时模式,工程不需要MDIO配置,可在硬件设计中使用电阻上下拉配置为延时模式;

Tri Mode Ethernet MAC 使用教程

本设计的核心是调用Xilinx的Tri Mode Ethernet MAC IP核实现以太网物理层的数据接口转换;所以重点讲讲Tri Mode Ethernet MAC这个IP,IP调用如下:
在这里插入图片描述
Tri Mode Ethernet MAC并不能直接使用,而是需要配合对应的PHY芯片的RGMII时序图做针对性修改,需要修改IP内部源码,这部分操作比较复杂,我专门写了《Tri Mode Ethernet MAC移植使用教程》文档,并放在了资料包中;

此外,Tri Mode Ethernet MAC还需要AXI4-Lite接口的配置才能工作,工程中如下:
在这里插入图片描述

AXI4-Stream Data FIFO 组

调用AXI4-Stream Data FIFO 组实现MAC数据与TCP/IP协议栈之间的数据桥接,其在工程中的代码架构如下:
在这里插入图片描述
以接收端为例:
第一级FIFO为异步时钟FIFO,实现MAC数据从Tri Mode Ethernet MAC到TCP/IP协议栈的跨时钟域处理;
第一级FIFO为同步时钟FIFO,实现MAC数据到TCP/IP协议栈的数据缓冲处理;
以发送端为例:
第一级FIFO为异步时钟FIFO,实现MAC数据从TCP/IP协议栈到Tri Mode Ethernet MAC的跨时钟域处理;
第一级FIFO为同步时钟FIFO,实现MAC数据到Tri Mode Ethernet MAC的数据缓冲处理;

TCP/IP协议栈简介

本TCP/IP协议栈为纯VHDL实现的千兆网速率服务器版本,可实现TCP协议网络通信,完全看得到并可修改的纯源码;TCP/IP协议栈基本设计框架如下:
在这里插入图片描述
其中的UDP我们没有用到,只用到了TCP;TCP/IP 协议栈源码架构如下:
在这里插入图片描述

TCP/IP协议栈性能简介

此TCP/IP协议栈是TCP服务器,不是客户端;即FPGA是TCP服务器,远程节点(比如 PC 电脑)是客户端;

常规性能

1:纯VHDL实现,没有用到任何一个IP核;
2:可移植性,由于代码中用到了Xilinx的RAM原语,所以理论上只能在Xilinx系列FPGA用,但由于国产目前XX,所以也可在可替代的复旦微、国威等系列FPGA上用,!!注意!!注意!!注意,复旦微、国威不建议过多传播
3:功能齐全,包含了服务器和客户端,客户端目前还在开发中,暂不提供;TCP/IP协议栈本身包含了动态ARP、NDP、PING、IGMP (for multicast UDP)等功能模块;
4:代码符合标准的IEEE 802.3协议,支持IPv4和IPv6;
5:对外接PHY的数据格式要求:RGMII;
6:时序收敛很到位,考虑到TCP协议的复杂性和时序的高要求,所以没有采用时序收敛不强的verilog,而是VHDL,虽然阅读性可能会低一些,但用户只需要知道用户接口即可,并不需要去看内部的复杂代码;
7:动态ARP功能;
8:带ping功能;
9:支持多播;

支持多节点

支持节点数是TCP里面最重要的性能指标之一,这里需要重点讲述:
TCP节点数最大支持255个,通过parameter TCP_NUM参数设置,但前提是你的FPGA资源能满足;TCP_NUM参数可以在代码中自由修改,含义和用法,在代码里有详细的注释,为了防止不同编译器下中文注释出现乱码,注释均由英文书写,英语较差的兄弟可以直接某度翻译,位置如下:
在这里插入图片描述
本例程只用到了1个节点;
此外,使用TCP/IP 协议栈网表的工程不支持多节点,没有此参数配置;

FPGA资源占用少

FPGA资源消耗是TCP里面最重要的性能指标之一,这里需要重点讲述:
FPGA资源消耗很低;以下举例:
以Xilinx系列Artix7-35T平台为例,TCP/IP协议栈的资源消耗如下:
在这里插入图片描述

数据吞吐率高

数据吞吐率是TCP里面最重要的性能指标之一,这里需要重点讲述:
下面给出4项测试结果,你可以自己对比评估以下:
测试1:
通过千兆以太网在TCP服务器和TCP客户端之间双向连接,FPGA参考时钟120 MHz条件下,测量的持续吞吐率为双向并发452 Mbits/s;
测试2:
Xilinx Spartan-6 -2速度等级,FPGA参考时钟120 MHz,512字节的UDP数据包通过局域网点对点发送下测得:
0丢包,吞吐率为878.5 Mbits/s;当用户时钟为125 MHz或以上时,UDP最大帧吞吐率为915 Mbits/s;
测试3:
TCP服务器传输吞吐量在1百兆局域网下PC端测量平均吞吐量为93 Mbps,如下;
在这里插入图片描述
测试4:
TCP服务器将8Gbits发送到TCP Java客户端,同时Wireshark收集速度信息。从基于FPGA的TCP服务器到PC的点对点LAN连接平均吞吐率为390.2 Mbits/s;如下:
在这里插入图片描述

低延时性能

延时性能是TCP里面最重要的性能指标之一,这里需要重点讲述:
延时与TCP数据包长直接相关,如果你对延时性能性能要求很高,则可以减少包长来有效降低延时,假设你的载包为X bytes,那么你的收发延时关系如下:
发送延时=0.5 + 2X÷125 µs;
接收延时=0.5 + X÷125 µs;
最大帧长度为1460字节,FPGA 时钟125 MHz下的测试结果如下:
发送延时=23.9µs;
接收延时=12.2µs;

TCP/IP协议栈接口描述

由于TCP/IP协议栈主体部分由VHDL代码编写,导致可读性较差,毕竟很多朋友都是直接学的verilog语言,对VHDL并不熟悉,所以我们用verilog模块对VHDL模块做了例化形成verilog的顶层模块接口供用户例化,所以TCP/IP协议栈顶层接口如下:

module ikun_1gtcp_vip #(
	parameter TCP_NUM         = 1   ,	// tcp 端口数量,这里仅用到了1个
	parameter CLK_FREQUENCY   = 125 ,	// 参考时钟频率,比如输入时钟为125M,则CLK_FREQUENCY=125
	parameter TX_IDLE_TIMEOUT = 50  ,	// 以太网帧发送间隔
	parameter IPVX_ADDR_LOOP  = 1   ,	// 目的IP地址回环使能; 1-->不需要指定目的IP地址; 0-->需要指定目的IP地址;
	parameter SIMULATION      = 1'b0    // 仿真模式; 1-->开启仿真模式; 0-->关闭仿真模式; 默认关闭
)(
	// 时钟和复位
	input                   clk                ,	// 参考时钟
	input                   sync_reset         ,	// 同步复位
	input                   async_reset        ,	// 异步复位	
	// 配置端口
	input  [ 47:0]          fpga_MAC_addr      ,	// FPGA网卡MAC地址	
	input  [ 31:0]          fpga_IPV4_addr     ,	// FPGA网卡IPV4地址		
	input  [127:0]          fpga_IPV6_addr     ,	// FPGA网卡IPV6地址	
	input  [ 31:0]          fpga_multicast_addr,	// FPGA网卡组播地址	
	input  [ 31:0]          fpga_subnet_addr   ,	// FPGA网卡子网掩码	
	input  [ 31:0]          fpga_gaitway_addr  ,	// FPGA网卡网关地址	
	input  [16*TCP_NUM-1:0] fpga_tcp_port      ,	// FPGA网卡端口号		
	input  [ 31:0]          PC_IPV4_addr       ,	// 远端网卡IPV4地址	
	input  [ 15:0]          PC_tcp_port    	   ,	// 远端网卡端口号	
	output [ 15:0]          PC_tcp_port_out    ,	// 远端网卡端口号          	
	// MAC层接口信号
	output [  7:0]          mac_tx_tdata       ,	// 输出--MAC层发送数据
	input                   mac_tx_tready      ,	// 输入--MAC层发送数据准备好	
	output                  mac_tx_tvalid      ,	// 输出--MAC层发送数据有效	
	output                  mac_tx_tuser       ,	// 输出--MAC层发送数据开始	
	output                  mac_tx_tlast       ,	// 输出--MAC层发送数据结尾
	input  [  7:0]          mac_rx_tdata       ,	// 输入--MAC层接收数据
	input                   mac_rx_tvalid      ,	// 输入--MAC层接收数据有效	
	input                   mac_rx_tuser       ,	// 输入--MAC层接收数据开始	
	input                   mac_rx_tlast       ,	// 输入--MAC层接收数据结尾
	// UDP协议栈用户接口信号                   
	output [  7:0]          udp_rx_tdata       ,	// 输出--UDP协议栈用户接收数据
	output                  udp_rx_tvalid      ,	// 输出--UDP协议栈用户接收数据有效
	output                  udp_rx_tuser       ,	// 输出--UDP协议栈用户接收数据开始	
	output                  udp_rx_tlast       ,	// 输出--UDP协议栈用户接收数据结束	
	input  [  7:0]          udp_tx_tdata       ,	// 输入--UDP协议栈用户发送数据
	input                   udp_tx_tvalid      ,	// 输入--UDP协议栈用户发送数据有效
	output                  udp_tx_tready      ,	// 输入--UDP协议栈用户发送数据准备好	
	input                   udp_tx_tuser       ,	// 输入--UDP协议栈用户发送数据开始	
	input                   udp_tx_tlast       ,	// 输入--UDP协议栈用户发送数据结束	
	output                  udp_tx_ack         ,	// 输入--UDP协议栈用户发送数据应答	
	output                  udp_tx_nak         ,	// 输入--UDP协议栈用户发送数据无应答	
	// TCP协议栈用户接口信号	               
	output [8*TCP_NUM-1:0]  tcp_rx_tdata       ,	// 输出--TCP协议栈用户接收数据
	output [TCP_NUM-1:0]    tcp_rx_tvalid      ,	// 输出--TCP协议栈用户接收数据有效
	output [TCP_NUM-1:0]    tcp_rx_tready      ,	// 输出--TCP协议栈用户接收数据准备好
	input  [TCP_NUM-1:0]    tcp_rx_tkeep       ,	// 输入--TCP协议栈用户接收数据选通
											   
	input  [8*TCP_NUM-1:0]  tcp_tx_tdata       ,	// 输入--TCP协议栈用户发送数据
	input  [TCP_NUM-1:0]    tcp_tx_tvalid      ,	// 输入--TCP协议栈用户发送数据有效
	output [TCP_NUM-1:0]    tcp_tx_tkeep       	// 输出--TCP协议栈用户发送数据选通			
);

TCP/IP协议栈接口是用户逻辑与TCP/IP协议栈对接的,所以这部分非常重要,用户想要把TCP/IP协议栈用起来,理论上只需要掌握其用户接口的使用即可;
其中的parameter参数有详细注释;
配置端口用户对FPGA开发板做网卡级别的配置,包括IP、MAC地址等;
MAC层接口与Tri Mode Ethernet MAC IP核对接;
UDP协议栈用户接口暂时用不到;
TCP协议栈用户接口是用户逻辑直接对接的接口;
具体可参考工程源码中对该模块的调用;

TCP用户数据测试模块

TCP用户数据测试模块集成了接收数据回环和数据测速功能,通过define宏定义选择,如下:
在这里插入图片描述
接收数据回环功能

将接收数据回环发送出去,即形成发送=接收的自回环功能;该功能的作用是配合网络调试助手进行数据收发测试、数据丢包测试、数据正确性测试等;

数据数据测速

FPGA自动循环向TCP/IP 协议栈发送累加的数据,数据内容从0开始累加,即形成连续发送数据功能;该功能的作用是配合PC端测试网络极限速率,打开电脑端的资源管理器,查看网卡,即可看到通信速率;值得注意的是,该方法并不能真实反映网速,用更为专业的网速测试软件为佳;

IP地址修改

每套工程均可修改FPGA开发板的IP地址、MAC地址、端口号等信息,同时也可以修改远程节点的IP地址、端口号等信息,当IPVX_ADDR_LOOP设置为1时,不需要指定远程节点的IP地址,这也是默认的工作方式,代码里有注释,如下:
在这里插入图片描述

工程源码架构

提供21套工程源码,以工程源码1为例,综合后的工程源码架构如下:
在这里插入图片描述

4、vivado工程源码01详解–>Artix7-35T,RTL8211F做PHY

开发板FPGA型号:Xilinx–Artix7–35T–xc7a35tfgg484-2;
FPGA开发环境:Vivado2019.1;
以太网物理层方案:RTL8211F芯片,延时模式,RGMII接口;
FPGA端MAC方案:Xilinx官方Tri Mode Ethernet MAC IP核,固定千兆模式;
以太网传输层协议:TCP/IP协议栈,千兆网速率,FPGA做TCP服务器端
实现功能:FPGA实现 TCP/IP 协议栈;
工程作用:此工程目的是让读者掌握FPGA实现 TCP/IP 协议栈的设计能力,以便能够移植和设计自己的项目;
工程代码架构请参考第3章节的《工程源码架构》小节内容;
工程的资源消耗和功耗如下:
在这里插入图片描述

5、vivado工程源码02详解–>Artix7-35T,RTL8211E做PHY

开发板FPGA型号:Xilinx–Artix7–35T–xc7a35tfgg484-2;
FPGA开发环境:Vivado2019.1;
以太网物理层方案:RTL8211E芯片,延时模式,RGMII接口;
FPGA端MAC方案:Xilinx官方Tri Mode Ethernet MAC IP核,固定千兆模式;
以太网传输层协议:TCP/IP协议栈,千兆网速率,FPGA做TCP服务器端
实现功能:FPGA实现 TCP/IP 协议栈;
工程作用:此工程目的是让读者掌握FPGA实现 TCP/IP 协议栈的设计能力,以便能够移植和设计自己的项目;
工程代码架构请参考第3章节的《工程源码架构》小节内容;
工程的资源消耗和功耗如下:
在这里插入图片描述

6、vivado工程源码03详解–>Artix7-35T,YT8531C做PHY

开发板FPGA型号:Xilinx–Artix7–35T–xc7a35tfgg484-2;
FPGA开发环境:Vivado2019.1;
以太网物理层方案:YT8531C芯片,延时模式,RGMII接口;
FPGA端MAC方案:Xilinx官方Tri Mode Ethernet MAC IP核,固定千兆模式;
以太网传输层协议:TCP/IP协议栈,千兆网速率,FPGA做TCP服务器端
实现功能:FPGA实现 TCP/IP 协议栈;
工程作用:此工程目的是让读者掌握FPGA实现 TCP/IP 协议栈的设计能力,以便能够移植和设计自己的项目;
工程代码架构请参考第3章节的《工程源码架构》小节内容;
工程的资源消耗和功耗如下:
在这里插入图片描述

7、vivado工程源码04详解–>Artix7-35T,KSZ9031做PHY

开发板FPGA型号:Xilinx–Artix7–35T–xc7a35tfgg484-2;
FPGA开发环境:Vivado2019.1;
以太网物理层方案:KSZ9031芯片,延时模式,RGMII接口;
FPGA端MAC方案:Xilinx官方Tri Mode Ethernet MAC IP核,固定千兆模式;
以太网传输层协议:TCP/IP协议栈,千兆网速率,FPGA做TCP服务器端
实现功能:FPGA实现 TCP/IP 协议栈;
工程作用:此工程目的是让读者掌握FPGA实现 TCP/IP 协议栈的设计能力,以便能够移植和设计自己的项目;
工程代码架构请参考第3章节的《工程源码架构》小节内容;
工程的资源消耗和功耗如下:
在这里插入图片描述

8、vivado工程源码05详解–>Artix7-100T,B50610做PHY

开发板FPGA型号:Xilinx–Artix7–100T–xc7a100tfgg484-2;
FPGA开发环境:Vivado2019.1;
以太网物理层方案:B50610芯片,延时模式,RGMII接口;
FPGA端MAC方案:Xilinx官方Tri Mode Ethernet MAC IP核,固定千兆模式;
以太网传输层协议:TCP/IP协议栈,千兆网速率,FPGA做TCP服务器端
实现功能:FPGA实现 TCP/IP 协议栈;
工程作用:此工程目的是让读者掌握FPGA实现 TCP/IP 协议栈的设计能力,以便能够移植和设计自己的项目;
工程代码架构请参考第3章节的《工程源码架构》小节内容;
工程的资源消耗和功耗如下:
在这里插入图片描述

9、vivado工程源码06详解–>Artix7-100T,RTL8211F做PHY

开发板FPGA型号:Xilinx–Artix7–100T–xc7a100tfgg484-2;
FPGA开发环境:Vivado2019.1;
以太网物理层方案:RTL8211F芯片,延时模式,RGMII接口;
FPGA端MAC方案:Xilinx官方Tri Mode Ethernet MAC IP核,固定千兆模式;
以太网传输层协议:TCP/IP协议栈,千兆网速率,FPGA做TCP服务器端
实现功能:FPGA实现 TCP/IP 协议栈;
工程作用:此工程目的是让读者掌握FPGA实现 TCP/IP 协议栈的设计能力,以便能够移植和设计自己的项目;
工程代码架构请参考第3章节的《工程源码架构》小节内容;
工程的资源消耗和功耗如下:
在这里插入图片描述

10、vivado工程源码07详解–>Artix7-100T,YT8531C做PHY

开发板FPGA型号:Xilinx–Artix7–100T–xc7a100tfgg484-2;
FPGA开发环境:Vivado2019.1;
以太网物理层方案:YT8531C芯片,延时模式,RGMII接口;
FPGA端MAC方案:Xilinx官方Tri Mode Ethernet MAC IP核,固定千兆模式;
以太网传输层协议:TCP/IP协议栈,千兆网速率,FPGA做TCP服务器端
实现功能:FPGA实现 TCP/IP 协议栈;
工程作用:此工程目的是让读者掌握FPGA实现 TCP/IP 协议栈的设计能力,以便能够移植和设计自己的项目;
工程代码架构请参考第3章节的《工程源码架构》小节内容;
工程的资源消耗和功耗如下:
在这里插入图片描述

11、vivado工程源码08详解–>Artix7-100T,KSZ9031做PHY

开发板FPGA型号:Xilinx–Artix7–100T–xc7a100tfgg484-2;
FPGA开发环境:Vivado2019.1;
以太网物理层方案:KSZ9031芯片,延时模式,RGMII接口;
FPGA端MAC方案:Xilinx官方Tri Mode Ethernet MAC IP核,固定千兆模式;
以太网传输层协议:TCP/IP协议栈,千兆网速率,FPGA做TCP服务器端
实现功能:FPGA实现 TCP/IP 协议栈;
工程作用:此工程目的是让读者掌握FPGA实现 TCP/IP 协议栈的设计能力,以便能够移植和设计自己的项目;
工程代码架构请参考第3章节的《工程源码架构》小节内容;
工程的资源消耗和功耗如下:
在这里插入图片描述

12、vivado工程源码09详解–>Kintex7-325T,B50610做PHY

开发板FPGA型号:Xilinx–Kintex7–325T-xc7k325tffg676-2;
FPGA开发环境:Vivado2019.1;
以太网物理层方案:B50610芯片,延时模式,RGMII接口;
FPGA端MAC方案:Xilinx官方Tri Mode Ethernet MAC IP核,固定千兆模式;
以太网传输层协议:TCP/IP协议栈,千兆网速率,FPGA做TCP服务器端
实现功能:FPGA实现 TCP/IP 协议栈;
工程作用:此工程目的是让读者掌握FPGA实现 TCP/IP 协议栈的设计能力,以便能够移植和设计自己的项目;
工程代码架构请参考第3章节的《工程源码架构》小节内容;
工程的资源消耗和功耗如下:
在这里插入图片描述

13、vivado工程源码10详解–>Kintex7-325T,88E1518做PHY

开发板FPGA型号:Xilinx–Kintex7–325T-xc7k325tffg676-2;
FPGA开发环境:Vivado2019.1;
以太网物理层方案:88E1518芯片,延时模式,RGMII接口;
FPGA端MAC方案:Xilinx官方Tri Mode Ethernet MAC IP核,固定千兆模式;
以太网传输层协议:TCP/IP协议栈,千兆网速率,FPGA做TCP服务器端
实现功能:FPGA实现 TCP/IP 协议栈;
工程作用:此工程目的是让读者掌握FPGA实现 TCP/IP 协议栈的设计能力,以便能够移植和设计自己的项目;
工程代码架构请参考第3章节的《工程源码架构》小节内容;
工程的资源消耗和功耗如下:
在这里插入图片描述

14、vivado工程源码11详解–>Kintex7-325T,RTL8211F做PHY

开发板FPGA型号:Xilinx–Kintex7–325T-xc7k325tffg900-2;
FPGA开发环境:Vivado2019.1;
以太网物理层方案:RTL8211F芯片,延时模式,RGMII接口;
FPGA端MAC方案:Xilinx官方Tri Mode Ethernet MAC IP核,固定千兆模式;
以太网传输层协议:TCP/IP协议栈,千兆网速率,FPGA做TCP服务器端
实现功能:FPGA实现 TCP/IP 协议栈;
工程作用:此工程目的是让读者掌握FPGA实现 TCP/IP 协议栈的设计能力,以便能够移植和设计自己的项目;
工程代码架构请参考第3章节的《工程源码架构》小节内容;
工程的资源消耗和功耗如下:
在这里插入图片描述

15、vivado工程源码12详解–>Kintex7-325T,YT8531C做PHY

开发板FPGA型号:Xilinx–Kintex7–325T-xc7k325tffg900-2;
FPGA开发环境:Vivado2019.1;
以太网物理层方案:YT8531C芯片,延时模式,RGMII接口;
FPGA端MAC方案:Xilinx官方Tri Mode Ethernet MAC IP核,固定千兆模式;
以太网传输层协议:TCP/IP协议栈,千兆网速率,FPGA做TCP服务器端
实现功能:FPGA实现 TCP/IP 协议栈;
工程作用:此工程目的是让读者掌握FPGA实现 TCP/IP 协议栈的设计能力,以便能够移植和设计自己的项目;
工程代码架构请参考第3章节的《工程源码架构》小节内容;
工程的资源消耗和功耗如下:
在这里插入图片描述

16、vivado工程源码13详解–>Zynq7020,B50610做PHY

开发板FPGA型号:Xilinx–>Zynq7020—xc7z020clg400-2;
FPGA开发环境:Vivado2019.1;
以太网物理层方案:B50610芯片,延时模式,RGMII接口;
FPGA端MAC方案:Xilinx官方Tri Mode Ethernet MAC IP核,固定千兆模式;
以太网传输层协议:TCP/IP协议栈,千兆网速率,FPGA做TCP服务器端
实现功能:FPGA实现 TCP/IP 协议栈;
工程作用:此工程目的是让读者掌握FPGA实现 TCP/IP 协议栈的设计能力,以便能够移植和设计自己的项目;
工程代码架构请参考第3章节的《工程源码架构》小节内容;
工程的资源消耗和功耗如下:
在这里插入图片描述

17、vivado工程源码14详解–>Zynq7020,RTL8211F做PHY

开发板FPGA型号:Xilinx–>Zynq7020—xc7z020clg400-2;
FPGA开发环境:Vivado2019.1;
以太网物理层方案:RTL8211F芯片,延时模式,RGMII接口;
FPGA端MAC方案:Xilinx官方Tri Mode Ethernet MAC IP核,固定千兆模式;
以太网传输层协议:TCP/IP协议栈,千兆网速率,FPGA做TCP服务器端
实现功能:FPGA实现 TCP/IP 协议栈;
工程作用:此工程目的是让读者掌握FPGA实现 TCP/IP 协议栈的设计能力,以便能够移植和设计自己的项目;
工程代码架构请参考第3章节的《工程源码架构》小节内容;
工程的资源消耗和功耗如下:
在这里插入图片描述

18、vivado工程源码15详解–>Zynq7020,KSZ9031做PHY

开发板FPGA型号:Xilinx–>Zynq7020—xc7z020clg484-2;
FPGA开发环境:Vivado2019.1;
以太网物理层方案:KSZ9031芯片,延时模式,RGMII接口;
FPGA端MAC方案:Xilinx官方Tri Mode Ethernet MAC IP核,固定千兆模式;
以太网传输层协议:TCP/IP协议栈,千兆网速率,FPGA做TCP服务器端
实现功能:FPGA实现 TCP/IP 协议栈;
工程作用:此工程目的是让读者掌握FPGA实现 TCP/IP 协议栈的设计能力,以便能够移植和设计自己的项目;
工程代码架构请参考第3章节的《工程源码架构》小节内容;
工程的资源消耗和功耗如下:
在这里插入图片描述

19、vivado工程源码16详解–>Zynq7100,RTL8211E做PHY

开发板FPGA型号:Xilinx–>Zynq7100—xc7z100ffg900-2;
FPGA开发环境:Vivado2019.1;
以太网物理层方案:RTL8211E芯片,延时模式,RGMII接口;
FPGA端MAC方案:Xilinx官方Tri Mode Ethernet MAC IP核,固定千兆模式;
以太网传输层协议:TCP/IP协议栈,千兆网速率,FPGA做TCP服务器端
实现功能:FPGA实现 TCP/IP 协议栈;
工程作用:此工程目的是让读者掌握FPGA实现 TCP/IP 协议栈的设计能力,以便能够移植和设计自己的项目;
工程代码架构请参考第3章节的《工程源码架构》小节内容;
工程的资源消耗和功耗如下:
在这里插入图片描述

20、vivado工程源码17详解–>Zynq7100,YT8531C做PHY

开发板FPGA型号:Xilinx–>Zynq7100—xc7z100ffg900-2;
FPGA开发环境:Vivado2019.1;
以太网物理层方案:YT8531C芯片,延时模式,RGMII接口;
FPGA端MAC方案:Xilinx官方Tri Mode Ethernet MAC IP核,固定千兆模式;
以太网传输层协议:TCP/IP协议栈,千兆网速率,FPGA做TCP服务器端
实现功能:FPGA实现 TCP/IP 协议栈;
工程作用:此工程目的是让读者掌握FPGA实现 TCP/IP 协议栈的设计能力,以便能够移植和设计自己的项目;
工程代码架构请参考第3章节的《工程源码架构》小节内容;
工程的资源消耗和功耗如下:
在这里插入图片描述

21、vivado工程源码18详解–>Zynq7100,KSZ9031做PHY

开发板FPGA型号:Xilinx–>Zynq7100—xc7z100ffg900-2;
FPGA开发环境:Vivado2019.1;
以太网物理层方案:KSZ9031芯片,延时模式,RGMII接口;
FPGA端MAC方案:Xilinx官方Tri Mode Ethernet MAC IP核,固定千兆模式;
以太网传输层协议:TCP/IP协议栈,千兆网速率,FPGA做TCP服务器端
实现功能:FPGA实现 TCP/IP 协议栈;
工程作用:此工程目的是让读者掌握FPGA实现 TCP/IP 协议栈的设计能力,以便能够移植和设计自己的项目;
工程代码架构请参考第3章节的《工程源码架构》小节内容;
工程的资源消耗和功耗如下:
在这里插入图片描述

22、vivado工程源码19详解–>KU060,RTL8211F做PHY

开发板FPGA型号:Xilinx–>Kintex UltraScale–xcku060-ffva1156-2-i;
FPGA开发环境:Vivado2019.1;
以太网物理层方案:RTL8211F芯片,延时模式,RGMII接口;
FPGA端MAC方案:Xilinx官方Tri Mode Ethernet MAC IP核,固定千兆模式;
以太网传输层协议:TCP/IP协议栈,千兆网速率,FPGA做TCP服务器端
实现功能:FPGA实现 TCP/IP 协议栈;
工程作用:此工程目的是让读者掌握FPGA实现 TCP/IP 协议栈的设计能力,以便能够移植和设计自己的项目;
工程代码架构请参考第3章节的《工程源码架构》小节内容;
工程的资源消耗和功耗如下:
在这里插入图片描述

23、vivado工程源码20详解–>KU3P,RTL8211F做PHY

开发板FPGA型号:Xilinx–>Kintex UltraScale±-xcku3p-ffva676-2-i;
FPGA开发环境:Vivado2019.1;
以太网物理层方案:RTL8211F芯片,延时模式,RGMII接口;
FPGA端MAC方案:Xilinx官方Tri Mode Ethernet MAC IP核,固定千兆模式;
以太网传输层协议:TCP/IP协议栈,千兆网速率,FPGA做TCP服务器端
实现功能:FPGA实现 TCP/IP 协议栈;
工程作用:此工程目的是让读者掌握FPGA实现 TCP/IP 协议栈的设计能力,以便能够移植和设计自己的项目;
工程代码架构请参考第3章节的《工程源码架构》小节内容;
工程的资源消耗和功耗如下:
在这里插入图片描述

24、vivado工程源码21详解–>ZU4EV,RTL8211F做PHY

开发板FPGA型号:Xilinx- Zynq UltraScale+MPSoCs–xczu4ev-sfvc784-2-i;
FPGA开发环境:Vivado2019.1;
以太网物理层方案:RTL8211F芯片,延时模式,RGMII接口;
FPGA端MAC方案:Xilinx官方Tri Mode Ethernet MAC IP核,固定千兆模式;
以太网传输层协议:TCP/IP协议栈,千兆网速率,FPGA做TCP服务器端
实现功能:FPGA实现 TCP/IP 协议栈;
工程作用:此工程目的是让读者掌握FPGA实现 TCP/IP 协议栈的设计能力,以便能够移植和设计自己的项目;
工程代码架构请参考第3章节的《工程源码架构》小节内容;
工程的资源消耗和功耗如下:
在这里插入图片描述

25、工程移植说明

vivado版本不一致处理

1:如果你的vivado版本与本工程vivado版本一致,则直接打开工程;
2:如果你的vivado版本低于本工程vivado版本,则需要打开工程后,点击文件–>另存为;但此方法并不保险,最保险的方法是将你的vivado版本升级到本工程vivado的版本或者更高版本;
在这里插入图片描述
3:如果你的vivado版本高于本工程vivado版本,解决如下:
在这里插入图片描述
打开工程后会发现IP都被锁住了,如下:
在这里插入图片描述
此时需要升级IP,操作如下:
在这里插入图片描述
在这里插入图片描述

FPGA型号不一致处理

如果你的FPGA型号与我的不一致,则需要更改FPGA型号,操作如下:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
更改FPGA型号后还需要升级IP,升级IP的方法前面已经讲述了;

其他注意事项

1:由于每个板子的DDR不一定完全一样,所以MIG IP需要根据你自己的原理图进行配置,甚至可以直接删掉我这里原工程的MIG并重新添加IP,重新配置;
2:根据你自己的原理图修改引脚约束,在xdc文件中修改即可;
3:纯FPGA移植到Zynq需要在工程中添加zynq软核;

26、上板调试验证并演示

准备工作

试验需要准备以下设备:
FPGA开发板,可以自行购买,也可以找本博主购买同款开发板;
测试电脑;
千兆网线;
网络调试助手;
以工程源码5的开发板为例进行上板调试;
连接如下:
在这里插入图片描述
首先设置电脑端IP如下:
在这里插入图片描述
注意!!!
注意!!!
由于代码里设置了远端IP地址自回环,所以只需要将电脑端IP地址设为与FPGA网卡IP地址同网段且不重合即可,比如这里不仅可以设置微192.168.0.10,还可以设为192.168.0.100、192.168.0.101、192.168.0.102等,但不可设置为192.168.0.56,因为这是FPGA网卡的IP地址;

然后下载bit,如下:
在这里插入图片描述

ping测试

打开cdm,输入 ping 192.168.0.56,如下:
在这里插入图片描述
ping测试视频演示如下,请点击观看:

千兆网TCP协议栈ping操作

TCP数据回环测试

打开网络调试助手并配置,如下:
在这里插入图片描述
单次发送数据测试结果如下:
在这里插入图片描述
循环发送数据测试结果如下,1秒时间间隔循环:可以看到,数据收发量超过15万字节,没有丢包,足以证明其稳定性;
在这里插入图片描述
TCP数据回环测试视频演示如下,请点击观看:

千兆网TCP协议栈服务器数据收发测试

网络速度测试

以工程源码1为例,下载测速的bit,打开网络调试助手,选择暂停接收显示,如下:
在这里插入图片描述
然后将测速bit里面的VIO打开,并将tx_en设置为1,如下:
在这里插入图片描述
然后打开电脑资源管理器,点击性能,找到以太网网卡选项,即可看到测速,测速如下:
在这里插入图片描述
注意!!!
注意!!!
注意!!!
在电脑上观察到的是开发板以太网网口的发送速率,这个测速只代表可能的最高的速度,不代表电脑真实的不丢包速度,UDP 的点到点不丢包速度和电脑的网卡、CPU 速度、内存速度、操作系统都有关系。

TCP网络速度测试视频演示如下,请点击观看:

1G-TCP测速

真实用户使用反馈

如果用户有需求,我一般会先针对用户的板子原理图做一个测试bit,主要测试数据回环和测速,用户拿到bit后自行测试,觉得测试效果满意后再决定是否使用,举例某航某院的用户对数据回环和数据丢包的使用反馈如下:
在这里插入图片描述
在这里插入图片描述
举例某航某院的用户对网络测速的使用反馈如下:
在这里插入图片描述

27、工程代码的获取

代码太大,无法邮箱发送,以某度网盘链接方式发送,
资料获取方式:私,或者文章末尾的V名片。
网盘资料如下:
在这里插入图片描述
此外,有很多朋友给本博主提了很多意见和建议,希望能丰富服务内容和选项,因为不同朋友的需求不一样,所以本博主还提供以下服务:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

9527华安

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值