FPGA无PHY芯片实现TCP/IP协议栈方案,基于AXI 1G/2.5G Ethernet Subsystem ...

莱莱  金牌会员 | 2024-12-31 18:20:52 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 995|帖子 995|积分 2985

FPGA无PHY芯片实现TCP/IP协议栈方案,基于AXI 1G/2.5G Ethernet Subsystem架构,提供18套工程源码和技能支持
1、媒介

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

本设采用纯VHDL实现了千兆网TCP/IP协议栈,没有效到任何一个IP核;并在Xilinx系列FPGA上做了部署并验证,而且无需诸如RTL8211、B50610等网络芯片,而是使用Xilinx官方的AXI 1G/2.5G Ethernet Subsystem方案取代了网络芯片,属于FPGA开发领域的高端项目;本设计能实现电脑端网卡与FPGA开发板之间的双向通讯,为了方便测试,设计了TCP数据回环和网络测速两个功能;具体如下:
TCP/IP数据回环功能如下:
电脑端网络调试助手发送测试数据或发起ping操作,然后电脑端操作系统的Socket实现发送数据的以太网帧组包,然后发送给电脑端网卡后通过网线毗连到FPGA开发板;通过SFP转RJ45电口插在FPGA开发板板载的SFP光口上吸收网线数据;调用Xilinx官方的AXI 1G/2.5G Ethernet Subsystem IP核实现以太网以太网物理层功能和数据接口转换,并输出AXI4-Stream接口的MAC数据;再调用2个AXI4-Stream Data FIFO实现MAC数据位宽转换和跨时钟域转换;然后数据进入TCP/IP协议栈实现以太网帧解包,剖析各种头部信息,并提取输出TCP报文的有效数据段;有效数据再经过回环后回灌到TCP/IP协议栈实现以太网帧组包,即加上各种头部信息和校验;然后数据进入AXI 1G/2.5G Ethernet Subsystem IP核实现以太网物理层和数据接口转换,通过板载SFP光口输出差分光信号,再通过SFP转RJ45电口接上网线发送到电脑端;电脑端操作系统的Socket实现吸收数据以太网解包,然后数据给网络调试助手显示;网络调试助手同时显示发送和吸收数据,以此观察TCP数据回环的准确性;
TCP/IP网络测速功能如下:
PGA自动循环产生从0开始的累加数作为TCP发送数据,发送数据然后进入TCP协议栈实现以太网帧组包,即加上各种头部信息和校验;然后数据进入AXI 1G/2.5G Ethernet Subsystem IP核实现以太网物理层和数据接口转换,通过板载SFP光口输出差分光信号,再通过SFP转RJ45电口接上网线发送到电脑端;然后打开电脑端的资源管理器,查看网卡,即可看到TCP通讯速率;
针对目前市面上主流的FPGA,共移植了18套工程源码,详情如下:

现对上述18套工程源码解释如下:
工程源码1
开发板FPGA型号为Xilinx–>Artix7–>xc7a35tfgg484-2;使用1个AXI 1G/2.5G Ethernet Subsystem IP核实现TCP/IP 协议栈千兆网服务器版本的应用部署,该IP使用1路GTP高速接口资源;TCP/IP 协议栈提供的是纯VHDL代码实现的源码,并对源码举行了verilog的顶层例化,对不认识VHDL语法的朋侪来说是巨大福音,由于在工程中可以直接用verilog当时例化TCP/IP 协议栈,该工程集成了TCP/IP数据回环功能+TCP/IP网络测速功能;工程例化了1个千兆网TCP/IP协议栈服务器,需要挂在1路SFP光口,适用于Xilinx 7系列FPGA移植,可做FPGA的1G TCP/IP网卡应用;
工程源码2
开发板FPGA型号为Xilinx–>Artix7–>xc7a35tfgg484-2;使用1个AXI 1G/2.5G Ethernet Subsystem IP核实现TCP/IP 协议栈千兆网客户端版本的应用部署,该IP使用1路GTP高速接口资源;TCP/IP 协议栈提供的是纯VHDL代码实现的源码,并对源码举行了verilog的顶层例化,对不认识VHDL语法的朋侪来说是巨大福音,由于在工程中可以直接用verilog当时例化TCP/IP 协议栈,该工程集成了TCP/IP数据回环功能+TCP/IP网络测速功能;工程例化了1个千兆网TCP/IP协议栈服务器,需要挂在1路SFP光口,适用于Xilinx 7系列FPGA移植,可做FPGA的1G TCP/IP网卡应用;
工程源码3
开发板FPGA型号为Xilinx–>Artix7–>xc7a35tfgg484-2;使用2个AXI 1G/2.5G Ethernet Subsystem IP核实现TCP/IP 协议栈千兆网服务器+客户端版本的应用部署,该IP使用2路GTP高速接口资源;TCP/IP 协议栈提供的是纯VHDL代码实现的源码,并对源码举行了verilog的顶层例化,对不认识VHDL语法的朋侪来说是巨大福音,由于在工程中可以直接用verilog当时例化TCP/IP 协议栈,该工程集成了TCP/IP数据回环功能+TCP/IP网络测速功能;工程例化了1个千兆网TCP/IP协议栈服务器+1个千兆网TCP/IP协议栈客户端,需要挂在2路SFP光口,适用于Xilinx 7系列FPGA移植,可做FPGA的1G TCP/IP网卡应用;
工程源码4
开发板FPGA型号为Xilinx–>Kintex7–>xc7k325tffg900-2;使用1个AXI 1G/2.5G Ethernet Subsystem IP核实现TCP/IP 协议栈千兆网服务器版本的应用部署,该IP使用1路GTX高速接口资源;TCP/IP 协议栈提供的是纯VHDL代码实现的源码,并对源码举行了verilog的顶层例化,对不认识VHDL语法的朋侪来说是巨大福音,由于在工程中可以直接用verilog当时例化TCP/IP 协议栈,该工程集成了TCP/IP数据回环功能+TCP/IP网络测速功能;工程例化了1个千兆网TCP/IP协议栈服务器,需要挂在1路SFP光口,适用于Xilinx 7系列FPGA移植,可做FPGA的1G TCP/IP网卡应用;
工程源码5
开发板FPGA型号为Xilinx–>Kintex7–>xc7k325tffg900-2;使用1个AXI 1G/2.5G Ethernet Subsystem IP核实现TCP/IP 协议栈千兆网客户端版本的应用部署,该IP使用1路GTX高速接口资源;TCP/IP 协议栈提供的是纯VHDL代码实现的源码,并对源码举行了verilog的顶层例化,对不认识VHDL语法的朋侪来说是巨大福音,由于在工程中可以直接用verilog当时例化TCP/IP 协议栈,该工程集成了TCP/IP数据回环功能+TCP/IP网络测速功能;工程例化了1个千兆网TCP/IP协议栈服务器,需要挂在1路SFP光口,适用于Xilinx 7系列FPGA移植,可做FPGA的1G TCP/IP网卡应用;
工程源码6
开发板FPGA型号为Xilinx–>Kintex7–>xc7k325tffg900-2;使用2个AXI 1G/2.5G Ethernet Subsystem IP核实现TCP/IP 协议栈千兆网服务器+客户端版本的应用部署,该IP使用2路GTX高速接口资源;TCP/IP 协议栈提供的是纯VHDL代码实现的源码,并对源码举行了verilog的顶层例化,对不认识VHDL语法的朋侪来说是巨大福音,由于在工程中可以直接用verilog当时例化TCP/IP 协议栈,该工程集成了TCP/IP数据回环功能+TCP/IP网络测速功能;工程例化了1个千兆网TCP/IP协议栈服务器+1个千兆网TCP/IP协议栈客户端,需要挂在2路SFP光口,适用于Xilinx 7系列FPGA移植,可做FPGA的1G TCP/IP网卡应用;
工程源码7
开发板FPGA型号为Xilinx–Zynq7100–xc7z100ffg900-2;使用1个AXI 1G/2.5G Ethernet Subsystem IP核实现TCP/IP 协议栈千兆网服务器版本的应用部署,该IP使用1路GTX高速接口资源;TCP/IP 协议栈提供的是纯VHDL代码实现的源码,并对源码举行了verilog的顶层例化,对不认识VHDL语法的朋侪来说是巨大福音,由于在工程中可以直接用verilog当时例化TCP/IP 协议栈,该工程集成了TCP/IP数据回环功能+TCP/IP网络测速功能;工程例化了1个千兆网TCP/IP协议栈服务器,需要挂在1路SFP光口,适用于Xilinx Zynq7000系列FPGA移植,可做FPGA的1G TCP/IP网卡应用;
工程源码8
开发板FPGA型号为Xilinx–Zynq7100–xc7z100ffg900-2;使用1个AXI 1G/2.5G Ethernet Subsystem IP核实现TCP/IP 协议栈千兆网客户端版本的应用部署,该IP使用1路GTX高速接口资源;TCP/IP 协议栈提供的是纯VHDL代码实现的源码,并对源码举行了verilog的顶层例化,对不认识VHDL语法的朋侪来说是巨大福音,由于在工程中可以直接用verilog当时例化TCP/IP 协议栈,该工程集成了TCP/IP数据回环功能+TCP/IP网络测速功能;工程例化了1个千兆网TCP/IP协议栈服务器,需要挂在1路SFP光口,适用于Xilinx Zynq7000系列FPGA移植,可做FPGA的1G TCP/IP网卡应用;
工程源码9
开发板FPGA型号为Xilinx–Zynq7100–xc7z100ffg900-2;使用2个AXI 1G/2.5G Ethernet Subsystem IP核实现TCP/IP 协议栈千兆网服务器+客户端版本的应用部署,该IP使用2路GTX高速接口资源;TCP/IP 协议栈提供的是纯VHDL代码实现的源码,并对源码举行了verilog的顶层例化,对不认识VHDL语法的朋侪来说是巨大福音,由于在工程中可以直接用verilog当时例化TCP/IP 协议栈,该工程集成了TCP/IP数据回环功能+TCP/IP网络测速功能;工程例化了1个千兆网TCP/IP协议栈服务器+1个千兆网TCP/IP协议栈客户端,需要挂在2路SFP光口,适用于Xilinx Zynq7000系列FPGA移植,可做FPGA的1G TCP/IP网卡应用;
工程源码10
开发板FPGA型号为Xilinx–Virtx7–xc7vx690tffg1761-3;使用1个AXI 1G/2.5G Ethernet Subsystem IP核实现TCP/IP 协议栈千兆网服务器版本的应用部署,该IP使用1路GTH高速接口资源;TCP/IP 协议栈提供的是纯VHDL代码实现的源码,并对源码举行了verilog的顶层例化,对不认识VHDL语法的朋侪来说是巨大福音,由于在工程中可以直接用verilog当时例化TCP/IP 协议栈,该工程集成了TCP/IP数据回环功能+TCP/IP网络测速功能;工程例化了1个千兆网TCP/IP协议栈服务器,需要挂在1路SFP光口,适用于Xilinx 7系列FPGA移植,可做FPGA的1G TCP/IP网卡应用;
工程源码11
开发板FPGA型号为Xilinx–Virtx7–xc7vx690tffg1761-3;使用1个AXI 1G/2.5G Ethernet Subsystem IP核实现TCP/IP 协议栈千兆网客户端版本的应用部署,该IP使用1路GTH高速接口资源;TCP/IP 协议栈提供的是纯VHDL代码实现的源码,并对源码举行了verilog的顶层例化,对不认识VHDL语法的朋侪来说是巨大福音,由于在工程中可以直接用verilog当时例化TCP/IP 协议栈,该工程集成了TCP/IP数据回环功能+TCP/IP网络测速功能;工程例化了1个千兆网TCP/IP协议栈服务器,需要挂在1路SFP光口,适用于Xilinx 7系列FPGA移植,可做FPGA的1G TCP/IP网卡应用;
工程源码12
开发板FPGA型号为Xilinx–Virtx7–xc7vx690tffg1761-3;使用2个AXI 1G/2.5G Ethernet Subsystem IP核实现TCP/IP 协议栈千兆网服务器+客户端版本的应用部署,该IP使用2路GTH高速接口资源;TCP/IP 协议栈提供的是纯VHDL代码实现的源码,并对源码举行了verilog的顶层例化,对不认识VHDL语法的朋侪来说是巨大福音,由于在工程中可以直接用verilog当时例化TCP/IP 协议栈,该工程集成了TCP/IP数据回环功能+TCP/IP网络测速功能;工程例化了1个千兆网TCP/IP协议栈服务器+1个千兆网TCP/IP协议栈客户端,需要挂在2路SFP光口,适用于Xilinx 7系列FPGA移植,可做FPGA的1G TCP/IP网卡应用;
工程源码13
开发板FPGA型号为Xilinx-- Kintex UltraScale–xcku060-ffva1156-2-i;使用1个AXI 1G/2.5G Ethernet Subsystem IP核实现TCP/IP 协议栈千兆网服务器版本的应用部署,该IP使用1路UltraScale GTH高速接口资源;TCP/IP 协议栈提供的是纯VHDL代码实现的源码,并对源码举行了verilog的顶层例化,对不认识VHDL语法的朋侪来说是巨大福音,由于在工程中可以直接用verilog当时例化TCP/IP 协议栈,该工程集成了TCP/IP数据回环功能+TCP/IP网络测速功能;工程例化了1个千兆网TCP/IP协议栈服务器,需要挂在1路SFP光口,适用于Xilinx UltraScale系列FPGA移植,可做FPGA的1G TCP/IP网卡应用;
工程源码14
开发板FPGA型号为Xilinx-- Kintex UltraScale–xcku060-ffva1156-2-i;使用1个AXI 1G/2.5G Ethernet Subsystem IP核实现TCP/IP 协议栈千兆网客户端版本的应用部署,该IP使用1路UltraScale GTH高速接口资源;TCP/IP 协议栈提供的是纯VHDL代码实现的源码,并对源码举行了verilog的顶层例化,对不认识VHDL语法的朋侪来说是巨大福音,由于在工程中可以直接用verilog当时例化TCP/IP 协议栈,该工程集成了TCP/IP数据回环功能+TCP/IP网络测速功能;工程例化了1个千兆网TCP/IP协议栈服务器,需要挂在1路SFP光口,适用于Xilinx UltraScale系列FPGA移植,可做FPGA的1G TCP/IP网卡应用;
工程源码15
开发板FPGA型号为Xilinx-- Kintex UltraScale–xcku060-ffva1156-2-i;使用2个AXI 1G/2.5G Ethernet Subsystem IP核实现TCP/IP 协议栈千兆网服务器+客户端版本的应用部署,该IP使用2路UltraScale GTH高速接口资源;TCP/IP 协议栈提供的是纯VHDL代码实现的源码,并对源码举行了verilog的顶层例化,对不认识VHDL语法的朋侪来说是巨大福音,由于在工程中可以直接用verilog当时例化TCP/IP 协议栈,该工程集成了TCP/IP数据回环功能+TCP/IP网络测速功能;工程例化了1个千兆网TCP/IP协议栈服务器+1个千兆网TCP/IP协议栈客户端,需要挂在2路SFP光口,适用于Xilinx UltraScale系列FPGA移植,可做FPGA的1G TCP/IP网卡应用;
工程源码16
开发板FPGA型号为Xilinx-- Kintex UltraScale±-xcku5p-ffvb676-1-i;使用1个AXI 1G/2.5G Ethernet Subsystem IP核实现TCP/IP 协议栈千兆网服务器版本的应用部署,该IP使用1路GTY高速接口资源;TCP/IP 协议栈提供的是纯VHDL代码实现的源码,并对源码举行了verilog的顶层例化,对不认识VHDL语法的朋侪来说是巨大福音,由于在工程中可以直接用verilog当时例化TCP/IP 协议栈,该工程集成了TCP/IP数据回环功能+TCP/IP网络测速功能;工程例化了1个千兆网TCP/IP协议栈服务器,需要挂在1路SFP光口,适用于Xilinx UltraScale+系列FPGA移植,可做FPGA的1G TCP/IP网卡应用;
工程源码17
开发板FPGA型号为Xilinx-- Kintex UltraScale±-xcku5p-ffvb676-1-i;使用1个AXI 1G/2.5G Ethernet Subsystem IP核实现TCP/IP 协议栈千兆网客户端版本的应用部署,该IP使用1路GTY高速接口资源;TCP/IP 协议栈提供的是纯VHDL代码实现的源码,并对源码举行了verilog的顶层例化,对不认识VHDL语法的朋侪来说是巨大福音,由于在工程中可以直接用verilog当时例化TCP/IP 协议栈,该工程集成了TCP/IP数据回环功能+TCP/IP网络测速功能;工程例化了1个千兆网TCP/IP协议栈服务器,需要挂在1路SFP光口,适用于Xilinx UltraScale+系列FPGA移植,可做FPGA的1G TCP/IP网卡应用;
工程源码18
开发板FPGA型号为Xilinx-- Kintex UltraScale±-xcku5p-ffvb676-1-i;使用2个AXI 1G/2.5G Ethernet Subsystem IP核实现TCP/IP 协议栈千兆网服务器+客户端版本的应用部署,该IP使用2路GTY高速接口资源;TCP/IP 协议栈提供的是纯VHDL代码实现的源码,并对源码举行了verilog的顶层例化,对不认识VHDL语法的朋侪来说是巨大福音,由于在工程中可以直接用verilog当时例化TCP/IP 协议栈,该工程集成了TCP/IP数据回环功能+TCP/IP网络测速功能;工程例化了1个千兆网TCP/IP协议栈服务器+1个千兆网TCP/IP协议栈客户端,需要挂在2路SFP光口,适用于Xilinx UltraScale+系列FPGA移植,可做FPGA的1G TCP/IP网卡应用;
本文具体描述了FPGA基于AXI 1G/2.5G Ethernet Subsystem实现TCP/IP协议栈的设计方案,经过反复大量测试稳定可靠,可在项目中直接移植使用,工程代码可综合编译上板调试,可直接项目移植,适用于在校学生、研究生项目开发,也适用于在职工程师做项目开发,可应用于医疗、军工等行业的数字通讯领域;
提供完整的、跑通的工程源码和技能支持;
工程源码和技能支持的获取方式放在了文章末尾,请耐心看到末了;

免责声明

本工程及其源码即有自己写的一部门,也有网络公开渠道获取的一部门(包括CSDN、Xilinx官网、Altera官网等等),若大佬们觉得有所冒犯,请私信批评教育;基于此,本工程及其源码仅限于读者或粉丝个人学习和研究,禁止用于商业用途,若由于读者或粉丝自身原因用于商业用途所导致的法律问题,与本博客及博主无关,请谨慎使用。。。
2、相关方案推荐

我这里已有的以太网方案

目前我这里有大量UDP协议的工程源码,包括UDP数据回环,视频传输,AD收罗传输等,也有TCP协议的工程,对网络通讯有需求的兄弟可以去看看:
直接点击前往
基于1G/2.5G Ethernet PCS/PMA or SGMII的千兆网TCP方案

基于1G/2.5G Ethernet PCS/PMA or SGMII的千兆网TCP方案一样无需网络芯片,之前写了一篇博客专门介绍,感爱好的朋侪可以去看看:
直接点击前往
网络芯片版本–>千兆网 TCP–>服务器 方案

TCP分为服务器和客户端,两者代码是不一样的,看具体需求,TCP服务器版本依然是16套工程源码,采用我网络芯片实现PHY,之前写了一篇博客专门介绍,感爱好的朋侪可以去看看:
直接点击前往
网络芯片版本–>千兆网 TCP–>客户端 方案

TCP分为服务器和客户端,两者代码是不一样的,看具体需求,TCP客户端版本依然是16套工程源码,采用我网络芯片实现PHY,之前写了一篇博客专门介绍,感爱好的朋侪可以去看看:
直接点击前往
10G 万兆网 TCP–>服务器方案

FPGA实现10G万兆网TCP/IP 协议栈,服务器版本,纯VHDL代码编写,提供6套工程源码和技能支持,博客链接如下:
直接点击前往
10G 万兆网 TCP–>客户端方案

FPGA实现10G万兆网TCP/IP 协议栈,客户端版本,纯VHDL代码编写,提供6套工程源码和技能支持,博客链接如下:
直接点击前往
1G/2.5G Ethernet PCS/PMA or SGMII 方案

1G/2.5G Ethernet PCS/PMA or SGMII 方案解决的问题是替代网络芯片,之前写了一篇博客专门介绍,感爱好的朋侪可以去看看:
直接点击前往
AXI 1G/2.5G Ethernet Subsystem 方案

AXI 1G/2.5G Ethernet Subsystem 方案解决的问题也是替代网络芯片,之前写了一篇博客专门介绍,感爱好的朋侪可以去看看:
直接点击前往
3、具体设计方案

设计原理框图

设计原理框图如下:

测试用PC端电脑

测试用PC端电脑要求如下:
有千兆网口及其驱动;
安装网络调试助手软件,软件已提供在资料包中;
普通的台式电脑或条记本电脑均可;
SFP光口转RJ45电口

需要预备满足千兆传输要求的SFP光口转RJ45电口,某宝二三十块钱很便宜,大概长如许:

AXI 1G/2.5G Ethernet Subsystem 简介

AXI 1G/2.5G Ethernet Subsystem的权势巨子官方手册为《pg138-axi-ethernet》,请自行下载阅读,该IP是Xilinx官方将1G/2.5G Ethernet PCS/PMA or SGMII和Tri Mode Ethernet MAC封装在一起组成的全新IP,目标是简化FPGA实现以太网物理层的设计难度,直接调用这一个IP即可使用,该IP睁开后如下:

吸收端:
数据首先经过1G/2.5G Ethernet PCS/PMA or SGMII解串,将串行数据解为并行数据;然后经过弹性Buffer做数据缓冲处理,主要是为了去频偏,使板与板之间的数据稳定,然后举行8b/10b解码,恢复正常数据;然后经过PCS吸收同步器,对数据举行跨时钟处理,同步到GMII时序下然后输出给Tri Mode Ethernet MAC举行数据符合转换,末了以AXI4-Stream输出;
发送端:
发送端则简单得多,用户侧UDP MAC数据首先给到Tri Mode Ethernet MAC举行数据符合转换,以GMII数据输出给1G/2.5G Ethernet PCS/PMA or SGMII,后者举行以太网物理层处理,以差分信号输出;
AXI 1G/2.5G Ethernet Subsystem 设置

AXI 1G/2.5G Ethernet Subsystem设置为1G,如下:

AXI 1G/2.5G Ethernet Subsystem可运行于1G和2.5G线速率,对GT时钟有严酷研究,按照官方数据手册,运行1G线速率时,GT差分时钟必须为125M,运行2.5G线速率时,GT差分时钟必须为312.5M,如下:

多个 AXI 1G/2.5G Ethernet Subsystem 主从级联使用

多个AXI 1G/2.5G Ethernet Subsystem 的主从搭配使用的应用场景是FPGA开发板充当多光口的网卡使用,即一个FPGA挂载多个光口,每一个光口相当于一个独立的网卡,有独立的IP地址和MAC地址,类似于交换机;主从搭配使用框架如下:

AXI 1G/2.5G Ethernet Subsystem可单独使用,当单独使用时,一个AXI 1G/2.5G Ethernet Subsystem单独占用一个GT高速接口资源,单独占用一对差分时钟资源;此时的IP设置如下:

AXI 1G/2.5G Ethernet Subsystem也可多个级联主从搭配使用,主从搭配使用时,一个AXI 1G/2.5G Ethernet Subsystem当做主IP,占用一个GT高速接口资源,单独占用一对差分时钟资源;其他AXI 1G/2.5G Ethernet Subsystem当做从IP,占用一个GT高速接口资源,但不占用差分时钟资源,而是使用主IP提供的参考时钟;此时的从IP设置如下:

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的数据缓冲处理;
留意!!!!
留意!!!!
当工程设置为网络测速模式时,请将AXI4-Stream Data FIFO组的深度设置大一些,如下:

TCP/IP协议栈服务器–>简介

本TCP/IP协议栈为纯VHDL实现的千兆网速率服务器版本,可实现千兆TCP协议网络通讯,TCP/IP协议栈基本设计框架如下:

其中的UDP我们没有效到,只用到了TCP;
TCP/IP协议栈服务器–>源码架构

TCP/IP 协议栈源码架构如下:

TCP/IP协议栈服务器–>性能简介

通例性能

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协议栈顶层接口如下:
  1. module ikun_1gtcp_vip #(
  2.         parameter TCP_NUM         = 1   ,        // tcp 端口数量,这里仅用到了1个
  3.         parameter CLK_FREQUENCY   = 125 ,        // 参考时钟频率,比如输入时钟为125M,则CLK_FREQUENCY=125
  4.         parameter TX_IDLE_TIMEOUT = 50  ,        // 以太网帧发送间隔
  5.         parameter IPVX_ADDR_LOOP  = 1   ,        // 目的IP地址回环使能; 1-->不需要指定目的IP地址; 0-->需要指定目的IP地址;
  6.         parameter SIMULATION      = 1'b0    // 仿真模式; 1-->开启仿真模式; 0-->关闭仿真模式; 默认关闭
  7. )(
  8.         // 时钟和复位
  9.         input                   clk                ,        // 参考时钟
  10.         input                   sync_reset         ,        // 同步复位
  11.         input                   async_reset        ,        // 异步复位       
  12.         // 配置端口
  13.         input  [ 47:0]          fpga_MAC_addr      ,        // FPGA网卡MAC地址       
  14.         input  [ 31:0]          fpga_IPV4_addr     ,        // FPGA网卡IPV4地址               
  15.         input  [127:0]          fpga_IPV6_addr     ,        // FPGA网卡IPV6地址       
  16.         input  [ 31:0]          fpga_multicast_addr,        // FPGA网卡组播地址       
  17.         input  [ 31:0]          fpga_subnet_addr   ,        // FPGA网卡子网掩码       
  18.         input  [ 31:0]          fpga_gaitway_addr  ,        // FPGA网卡网关地址       
  19.         input  [16*TCP_NUM-1:0] fpga_tcp_port      ,        // FPGA网卡端口号               
  20.         input  [ 31:0]          PC_IPV4_addr       ,        // 远端网卡IPV4地址       
  21.         input  [ 15:0]          PC_tcp_port               ,        // 远端网卡端口号       
  22.         output [ 15:0]          PC_tcp_port_out    ,        // 远端网卡端口号                 
  23.         // MAC层接口信号
  24.         output [  7:0]          mac_tx_tdata       ,        // 输出--MAC层发送数据
  25.         input                   mac_tx_tready      ,        // 输入--MAC层发送数据准备好       
  26.         output                  mac_tx_tvalid      ,        // 输出--MAC层发送数据有效       
  27.         output                  mac_tx_tuser       ,        // 输出--MAC层发送数据开始       
  28.         output                  mac_tx_tlast       ,        // 输出--MAC层发送数据结尾
  29.         input  [  7:0]          mac_rx_tdata       ,        // 输入--MAC层接收数据
  30.         input                   mac_rx_tvalid      ,        // 输入--MAC层接收数据有效       
  31.         input                   mac_rx_tuser       ,        // 输入--MAC层接收数据开始       
  32.         input                   mac_rx_tlast       ,        // 输入--MAC层接收数据结尾
  33.         // UDP协议栈用户接口信号                  
  34.         output [  7:0]          udp_rx_tdata       ,        // 输出--UDP协议栈用户接收数据
  35.         output                  udp_rx_tvalid      ,        // 输出--UDP协议栈用户接收数据有效
  36.         output                  udp_rx_tuser       ,        // 输出--UDP协议栈用户接收数据开始       
  37.         output                  udp_rx_tlast       ,        // 输出--UDP协议栈用户接收数据结束       
  38.         input  [  7:0]          udp_tx_tdata       ,        // 输入--UDP协议栈用户发送数据
  39.         input                   udp_tx_tvalid      ,        // 输入--UDP协议栈用户发送数据有效
  40.         output                  udp_tx_tready      ,        // 输入--UDP协议栈用户发送数据准备好       
  41.         input                   udp_tx_tuser       ,        // 输入--UDP协议栈用户发送数据开始       
  42.         input                   udp_tx_tlast       ,        // 输入--UDP协议栈用户发送数据结束       
  43.         output                  udp_tx_ack         ,        // 输入--UDP协议栈用户发送数据应答       
  44.         output                  udp_tx_nak         ,        // 输入--UDP协议栈用户发送数据无应答       
  45.         // TCP协议栈用户接口信号                      
  46.         output [8*TCP_NUM-1:0]  tcp_rx_tdata       ,        // 输出--TCP协议栈用户接收数据
  47.         output [TCP_NUM-1:0]    tcp_rx_tvalid      ,        // 输出--TCP协议栈用户接收数据有效
  48.         output [TCP_NUM-1:0]    tcp_rx_tready      ,        // 输出--TCP协议栈用户接收数据准备好
  49.         input  [TCP_NUM-1:0]    tcp_rx_tkeep       ,        // 输入--TCP协议栈用户接收数据选通
  50.                                                                                           
  51.         input  [8*TCP_NUM-1:0]  tcp_tx_tdata       ,        // 输入--TCP协议栈用户发送数据
  52.         input  [TCP_NUM-1:0]    tcp_tx_tvalid      ,        // 输入--TCP协议栈用户发送数据有效
  53.         output [TCP_NUM-1:0]    tcp_tx_tkeep               // 输出--TCP协议栈用户发送数据选通                       
  54. );
复制代码
TCP/IP协议栈接口是用户逻辑与TCP/IP协议栈对接的,所以这部门非常重要,用户想要把TCP/IP协议栈用起来,理论上只需要掌握其用户接口的使用即可;
其中的parameter参数有具体解释;
设置端口用户对FPGA开发板做网卡级别的设置,包括IP、MAC地址等;
MAC层接口与Tri Mode Ethernet MAC IP核对接;
UDP协议栈用户接口临时用不到;
TCP协议栈用户接口是用户逻辑直接对接的接口;
具体可参考工程源码中对该模块的调用;
TCP/IP协议栈客户端–>简介

本TCP/IP协议栈为纯VHDL实现的千兆网速率客户端版本,可实现千兆TCP协议网络通讯,TCP/IP协议栈基本设计框架如下:

其中的UDP我们没有效到,只用到了TCP;
TCP/IP协议栈客户端–>源码架构

TCP/IP 协议栈源码架构如下:

TCP/IP协议栈客户端–>性能简介

通例性能

1:纯VHDL实现,没有效到任何一个IP核;
2:可移植性,由于代码中用到了Xilinx的RAM原语,所以理论上只能在Xilinx系列FPGA用,但由于国产目前XX,所以也可在可替代的复旦微、国威等系列FPGA上用,!!留意!!留意!!留意,复旦微、国威不建议过多流传
3:功能齐全,包罗了客户端;TCP/IP协议栈本身包罗了动态ARP、NDP、PING、IGMP (for multicast UDP)、DHCP等功能模块,但DHCP目前存在小BUG,不建议使用,具体就是DHCP实现了IP地址动态分配,也能ping通,但在传输TCP数据时有错误,有时乃至无法毗连TCP客户端;
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协议栈顶层接口如下:
  1. module ikun_1gtcp_vip #(
  2.         parameter TCP_NUM         = 1       ,        // tcp 端口数量,这里仅用到了1个
  3.         parameter FPGA_TCP_PORT_B = 16'd1024,        //         FPGA网卡--tcp客户端--端口号
  4.         parameter CLK_FREQUENCY   = 125     ,        // 参考时钟频率,比如输入时钟为125M,则CLK_FREQUENCY=125
  5.         parameter TX_IDLE_TIMEOUT = 50      ,        // 以太网帧发送间隔
  6.         parameter IPVX_ADDR_LOOP  = 1       ,        // 目的IP地址回环使能; 1-->不需要指定目的IP地址; 0-->需要指定目的IP地址;
  7.         parameter SIMULATION      = 1'b0            // 仿真模式; 1-->开启仿真模式; 0-->关闭仿真模式; 默认关闭
  8. )(
  9.         // 时钟和复位
  10.         input                   clk                     ,        // 参考时钟
  11.         input                   sync_reset              ,        // 同步复位
  12.         input                   async_reset             ,        // 异步复位       
  13.         output [4*TCP_NUM-1:0]  tcp_status_out          ,   // TCP连接状态; idle (0), connecting (1), connected (2), unreacheable IP (3), destination port busy (4)
  14.         // 配置端口
  15.         input                   client_dhcp_en          ,        // 0-->disable client_dhcp ; 1-->enable client_dhcp                                   
  16.         input  [ 47:0]          fpga_MAC_addr           ,        // FPGA网卡MAC地址       
  17.         input  [ 31:0]          fpga_static_IPV4_addr   ,        // FPGA网卡静态IPV4地址               
  18.         input  [127:0]          fpga_IPV6_addr          ,        // FPGA网卡IPV6地址       
  19.         input  [ 31:0]          fpga_subnet_addr        ,        // FPGA网卡子网掩码       
  20.         input  [ 31:0]          fpga_static_gaitway_addr,        // FPGA网卡静态网关地址       
  21.         input  [16*TCP_NUM-1:0] fpga_tcp_port           ,        // FPGA网卡端口号               
  22.         input  [ 31:0]          PC_IPV4_addr            ,        // 远端网卡IPV4地址       
  23.         input  [ 15:0]          PC_tcp_port                    ,        // 远端网卡端口号       
  24.         output [ 15:0]          PC_tcp_port_out         ,        // 远端网卡端口号                 
  25.         // MAC层接口信号                                
  26.         output [  7:0]          mac_tx_tdata            ,        // 输出--MAC层发送数据
  27.         input                   mac_tx_tready           ,        // 输入--MAC层发送数据准备好       
  28.         output                  mac_tx_tvalid           ,        // 输出--MAC层发送数据有效       
  29.         output                  mac_tx_tuser            ,        // 输出--MAC层发送数据开始       
  30.         output                  mac_tx_tlast            ,        // 输出--MAC层发送数据结尾
  31.         input  [  7:0]          mac_rx_tdata            ,        // 输入--MAC层接收数据
  32.         input                   mac_rx_tvalid           ,        // 输入--MAC层接收数据有效       
  33.         input                   mac_rx_tuser            ,        // 输入--MAC层接收数据开始       
  34.         input                   mac_rx_tlast            ,        // 输入--MAC层接收数据结尾
  35.         // UDP协议栈用户接口信号                        
  36.         output [  7:0]          udp_rx_tdata            ,        // 输出--UDP协议栈用户接收数据
  37.         output                  udp_rx_tvalid           ,        // 输出--UDP协议栈用户接收数据有效
  38.         output                  udp_rx_tuser            ,        // 输出--UDP协议栈用户接收数据开始       
  39.         output                  udp_rx_tlast            ,        // 输出--UDP协议栈用户接收数据结束       
  40.         input  [  7:0]          udp_tx_tdata            ,        // 输入--UDP协议栈用户发送数据
  41.         input                   udp_tx_tvalid           ,        // 输入--UDP协议栈用户发送数据有效
  42.         output                  udp_tx_tready           ,        // 输入--UDP协议栈用户发送数据准备好       
  43.         input                   udp_tx_tuser            ,        // 输入--UDP协议栈用户发送数据开始       
  44.         input                   udp_tx_tlast            ,        // 输入--UDP协议栈用户发送数据结束       
  45.         output                  udp_tx_ack              ,        // 输入--UDP协议栈用户发送数据应答       
  46.         output                  udp_tx_nak              ,        // 输入--UDP协议栈用户发送数据无应答       
  47.         // TCP协议栈用户接口信号                            
  48.         output [8*TCP_NUM-1:0]  tcp_rx_tdata            ,        // 输出--TCP协议栈用户接收数据
  49.         output [TCP_NUM-1:0]    tcp_rx_tvalid           ,        // 输出--TCP协议栈用户接收数据有效
  50.         output [TCP_NUM-1:0]    tcp_rx_tready           ,        // 输出--TCP协议栈用户接收数据准备好
  51.         input  [TCP_NUM-1:0]    tcp_rx_tkeep            ,        // 输入--TCP协议栈用户接收数据选通
  52.                                                                                                 
  53.         input  [8*TCP_NUM-1:0]  tcp_tx_tdata            ,        // 输入--TCP协议栈用户发送数据
  54.         input  [TCP_NUM-1:0]    tcp_tx_tvalid           ,        // 输入--TCP协议栈用户发送数据有效
  55.         output [TCP_NUM-1:0]    tcp_tx_tkeep                    // 输出--TCP协议栈用户发送数据选通                       
  56. );
复制代码
TCP/IP协议栈接口是用户逻辑与TCP/IP协议栈对接的,所以这部门非常重要,用户想要把TCP/IP协议栈用起来,理论上只需要掌握其用户接口的使用即可;
其中的parameter参数有具体解释;
设置端口用户对FPGA开发板做网卡级别的设置,包括IP、MAC地址等;
MAC层接口与Tri Mode Ethernet MAC IP核对接;
UDP协议栈用户接口临时用不到;
TCP协议栈用户接口是用户逻辑直接对接的接口;
具体可参考工程源码中对该模块的调用;
需要留意的是,由于EDF网表不支持对parameter参数的封装,所以EDF网表版本的TCP/IP协议栈接口没有parameter参数,只有wire用户接口,FPGA网卡端的TCP端标语被固定为1024,且不可更改;
TCP用户数据测试模块

TCP用户数据测试模块集成了吸收数据回环和数据测速功能,通过define宏定义选择,如下:

TCP/IP数据回环功能如下:
将吸收数据回环发送出去,即形成发送=吸收的自回环功能;该功能的作用是配合网络调试助手举行数据收发测试、数据丢包测试、数据准确性测试等;
TCP/IP数据测速能如下:
FPGA自动循环向TCP/IP 协议栈发送累加的数据,数据内容从0开始累加,即形成一连发送数据功能;该功能的作用是配合PC端测试网络极限速率,打开电脑端的资源管理器,查看网卡,即可看到通讯速率;值得留意的是,该方法并不能真实反映网速,用更为专业的网速测试软件为佳;
IP地址修改

每套工程均可修改FPGA开发板的IP地址、MAC地址、端标语等信息,同时也可以修改远程节点的IP地址、端标语等信息,当IPVX_ADDR_LOOP设置为1时,不需要指定远程节点的IP地址,这也是默认的工作方式,以工程源码1为例,代码里有解释,如下:

工程源码架构

18套工程的源码具有相似性,这里仅以工程3为例截图如下,其他工程与之类似:

留意!!!!
留意!!!!
上图为1主+1从的2路TCP协议栈架构,也就是用到了2路AXI 1G/2.5G Ethernet Subsystem,TCP协议栈用到了1路服务器+1路客户端,单独的服务器或客户端工程则只用到了1路AXI 1G/2.5G Ethernet Subsystem;
4、vivado工程1详解:Artix7版本,单路TCP服务器版本

开发板FPGA型号:Xilinx–>Artix7–>xc7a35tfgg484-2;
开发环境:Vivado2019.1;
输入输出:以太网帧,TCP/IP协议栈–>服务器网络数据;
接口:1路SFP,1G线速率;
PHY+MAC方案:Xilinx官方AXI 1G/2.5G Ethernet Subsystem方案;
PHY使用高速接口资源:1路GTP;
协议层方案:千兆TCP/IP协议栈–>服务器;
工程源码架构请参考前面第3章节中的《工程源码架构》末节;
工程作用:此工程目标是让读者掌握FPGA基于AXI 1G/2.5G Ethernet Subsystem的TCP/IP协议栈设计能力,以便能够移植和设计自己的项目;
工程的资源消耗和功耗如下:

5、vivado工程2详解:Artix7版本,单路TCP客户端版本

开发板FPGA型号:Xilinx–>Artix7–>xc7a35tfgg484-2;
开发环境:Vivado2019.1;
输入输出:以太网帧,TCP/IP协议栈–>客户端网络数据;
接口:1路SFP,1G线速率;
PHY+MAC方案:Xilinx官方AXI 1G/2.5G Ethernet Subsystem方案;
PHY使用高速接口资源:1路GTP;
协议层方案:千兆TCP/IP协议栈–>客户端;
工程源码架构请参考前面第3章节中的《工程源码架构》末节;
工程作用:此工程目标是让读者掌握FPGA基于AXI 1G/2.5G Ethernet Subsystem的TCP/IP协议栈设计能力,以便能够移植和设计自己的项目;
工程的资源消耗和功耗如下:

6、vivado工程3详解:Artix7版本,双路TCP服务器+客户端版本

开发板FPGA型号:Xilinx–>Artix7–>xc7a35tfgg484-2;
开发环境:Vivado2019.1;
输入输出:以太网帧,TCP/IP协议栈–>服务器+客户端网络数据;
接口:2路SFP,1G线速率;
PHY+MAC方案:Xilinx官方AXI 1G/2.5G Ethernet Subsystem方案;
PHY使用高速接口资源:2路GTP;
协议层方案:1路千兆TCP/IP协议栈服务器+1路千兆TCP/IP协议栈客户端;
工程源码架构请参考前面第3章节中的《工程源码架构》末节;
工程作用:此工程目标是让读者掌握FPGA基于AXI 1G/2.5G Ethernet Subsystem的TCP/IP协议栈设计能力,以便能够移植和设计自己的项目;
工程的资源消耗和功耗如下:

7、vivado工程4详解:Kintex7版本,单路TCP服务器版本

开发板FPGA型号:Xilinx–>Kintex7–>xc7k325tffg900-2;
开发环境:Vivado2019.1;
输入输出:以太网帧,TCP/IP协议栈–>服务器网络数据;
接口:1路SFP,1G线速率;
PHY+MAC方案:Xilinx官方AXI 1G/2.5G Ethernet Subsystem方案;
PHY使用高速接口资源:1路GTX;
协议层方案:千兆TCP/IP协议栈–>服务器;
工程源码架构请参考前面第3章节中的《工程源码架构》末节;
工程作用:此工程目标是让读者掌握FPGA基于AXI 1G/2.5G Ethernet Subsystem的TCP/IP协议栈设计能力,以便能够移植和设计自己的项目;
工程的资源消耗和功耗如下:

8、vivado工程5详解:Kintex7版本,单路TCP客户端版本

开发板FPGA型号:Xilinx–>Kintex7–>xc7k325tffg900-2;
开发环境:Vivado2019.1;
输入输出:以太网帧,TCP/IP协议栈–>客户端网络数据;
接口:1路SFP,1G线速率;
PHY+MAC方案:Xilinx官方AXI 1G/2.5G Ethernet Subsystem方案;
PHY使用高速接口资源:1路GTX;
协议层方案:千兆TCP/IP协议栈–>客户端;
工程源码架构请参考前面第3章节中的《工程源码架构》末节;
工程作用:此工程目标是让读者掌握FPGA基于AXI 1G/2.5G Ethernet Subsystem的TCP/IP协议栈设计能力,以便能够移植和设计自己的项目;
工程的资源消耗和功耗如下:

9、vivado工程6详解:Kintex7版本,双路TCP服务器+客户端版本

开发板FPGA型号:Xilinx–>Kintex7–>xc7k325tffg900-2;
开发环境:Vivado2019.1;
输入输出:以太网帧,TCP/IP协议栈–>服务器+客户端网络数据;
接口:2路SFP,1G线速率;
PHY+MAC方案:Xilinx官方AXI 1G/2.5G Ethernet Subsystem方案;
PHY使用高速接口资源:2路GTX;
协议层方案:1路千兆TCP/IP协议栈服务器+1路千兆TCP/IP协议栈客户端;
工程源码架构请参考前面第3章节中的《工程源码架构》末节;
工程作用:此工程目标是让读者掌握FPGA基于AXI 1G/2.5G Ethernet Subsystem的TCP/IP协议栈设计能力,以便能够移植和设计自己的项目;
工程的资源消耗和功耗如下:

10、vivado工程7详解:Zynq7100版本,单路TCP服务器版本

开发板FPGA型号:Xilinx–Zynq7100–xc7z100ffg900-2;
开发环境:Vivado2019.1;
输入输出:以太网帧,TCP/IP协议栈–>服务器网络数据;
接口:1路SFP,1G线速率;
PHY+MAC方案:Xilinx官方AXI 1G/2.5G Ethernet Subsystem方案;
PHY使用高速接口资源:1路GTX;
协议层方案:千兆TCP/IP协议栈–>服务器;
工程源码架构请参考前面第3章节中的《工程源码架构》末节;
工程作用:此工程目标是让读者掌握FPGA基于AXI 1G/2.5G Ethernet Subsystem的TCP/IP协议栈设计能力,以便能够移植和设计自己的项目;
工程的资源消耗和功耗如下:

11、vivado工程8详解:Zynq7100版本,单路TCP客户端版本

开发板FPGA型号:Xilinx–Zynq7100–xc7z100ffg900-2;
开发环境:Vivado2019.1;
输入输出:以太网帧,TCP/IP协议栈–>客户端网络数据;
接口:1路SFP,1G线速率;
PHY+MAC方案:Xilinx官方AXI 1G/2.5G Ethernet Subsystem方案;
PHY使用高速接口资源:1路GTX;
协议层方案:千兆TCP/IP协议栈–>客户端;
工程源码架构请参考前面第3章节中的《工程源码架构》末节;
工程作用:此工程目标是让读者掌握FPGA基于AXI 1G/2.5G Ethernet Subsystem的TCP/IP协议栈设计能力,以便能够移植和设计自己的项目;
工程的资源消耗和功耗如下:

12、vivado工程9详解:Zynq7100版本,双路TCP服务器+客户端版本

开发板FPGA型号:Xilinx–Zynq7100–xc7z100ffg900-2;
开发环境:Vivado2019.1;
输入输出:以太网帧,TCP/IP协议栈–>服务器+客户端网络数据;
接口:2路SFP,1G线速率;
PHY+MAC方案:Xilinx官方AXI 1G/2.5G Ethernet Subsystem方案;
PHY使用高速接口资源:2路GTX;
协议层方案:1路千兆TCP/IP协议栈服务器+1路千兆TCP/IP协议栈客户端;
工程源码架构请参考前面第3章节中的《工程源码架构》末节;
工程作用:此工程目标是让读者掌握FPGA基于AXI 1G/2.5G Ethernet Subsystem的TCP/IP协议栈设计能力,以便能够移植和设计自己的项目;
工程的资源消耗和功耗如下:

13、vivado工程10详解:Virtx7版本,单路TCP服务器版本

开发板FPGA型号:Xilinx–Virtx7–xc7vx690tffg1761-3;
开发环境:Vivado2019.1;
输入输出:以太网帧,TCP/IP协议栈–>服务器网络数据;
接口:1路SFP,1G线速率;
PHY+MAC方案:Xilinx官方AXI 1G/2.5G Ethernet Subsystem方案;
PHY使用高速接口资源:1路GTH;
协议层方案:千兆TCP/IP协议栈–>服务器;
工程源码架构请参考前面第3章节中的《工程源码架构》末节;
工程作用:此工程目标是让读者掌握FPGA基于AXI 1G/2.5G Ethernet Subsystem的TCP/IP协议栈设计能力,以便能够移植和设计自己的项目;
工程的资源消耗和功耗如下:

14、vivado工程11详解:Virtx7版本,单路TCP客户端版本

开发板FPGA型号:Xilinx–Virtx7–xc7vx690tffg1761-3;
开发环境:Vivado2019.1;
输入输出:以太网帧,TCP/IP协议栈–>客户端网络数据;
接口:1路SFP,1G线速率;
PHY+MAC方案:Xilinx官方AXI 1G/2.5G Ethernet Subsystem方案;
PHY使用高速接口资源:1路GTH;
协议层方案:千兆TCP/IP协议栈–>客户端;
工程源码架构请参考前面第3章节中的《工程源码架构》末节;
工程作用:此工程目标是让读者掌握FPGA基于AXI 1G/2.5G Ethernet Subsystem的TCP/IP协议栈设计能力,以便能够移植和设计自己的项目;
工程的资源消耗和功耗如下:

15、vivado工程12详解:Virtx7版本,双路TCP服务器+客户端版本

开发板FPGA型号:Xilinx–Virtx7–xc7vx690tffg1761-3;
开发环境:Vivado2019.1;
输入输出:以太网帧,TCP/IP协议栈–>服务器+客户端网络数据;
接口:2路SFP,1G线速率;
PHY+MAC方案:Xilinx官方AXI 1G/2.5G Ethernet Subsystem方案;
PHY使用高速接口资源:2路GTH;
协议层方案:1路千兆TCP/IP协议栈服务器+1路千兆TCP/IP协议栈客户端;
工程源码架构请参考前面第3章节中的《工程源码架构》末节;
工程作用:此工程目标是让读者掌握FPGA基于AXI 1G/2.5G Ethernet Subsystem的TCP/IP协议栈设计能力,以便能够移植和设计自己的项目;
工程的资源消耗和功耗如下:

16、vivado工程13详解:KU060版本,单路TCP服务器版本

开发板FPGA型号:Xilinx-- Kintex UltraScale–xcku060-ffva1156-2-i;
开发环境:Vivado2019.1;
输入输出:以太网帧,TCP/IP协议栈–>服务器网络数据;
接口:1路SFP,1G线速率;
PHY+MAC方案:Xilinx官方AXI 1G/2.5G Ethernet Subsystem方案;
PHY使用高速接口资源:1路UltraScale GTH;
协议层方案:千兆TCP/IP协议栈–>服务器;
工程源码架构请参考前面第3章节中的《工程源码架构》末节;
工程作用:此工程目标是让读者掌握FPGA基于AXI 1G/2.5G Ethernet Subsystem的TCP/IP协议栈设计能力,以便能够移植和设计自己的项目;
工程的资源消耗和功耗如下:

17、vivado工程14详解:KU060版本,单路TCP客户端版本

开发板FPGA型号:Xilinx-- Kintex UltraScale–xcku060-ffva1156-2-i;
开发环境:Vivado2019.1;
输入输出:以太网帧,TCP/IP协议栈–>客户端网络数据;
接口:1路SFP,1G线速率;
PHY+MAC方案:Xilinx官方AXI 1G/2.5G Ethernet Subsystem方案;
PHY使用高速接口资源:1路UltraScale GTH;
协议层方案:千兆TCP/IP协议栈–>客户端;
工程源码架构请参考前面第3章节中的《工程源码架构》末节;
工程作用:此工程目标是让读者掌握FPGA基于AXI 1G/2.5G Ethernet Subsystem的TCP/IP协议栈设计能力,以便能够移植和设计自己的项目;
工程的资源消耗和功耗如下:

18、vivado工程15详解:KU060版本,双路TCP服务器+客户端版本

开发板FPGA型号:Xilinx-- Kintex UltraScale–xcku060-ffva1156-2-i;
开发环境:Vivado2019.1;
输入输出:以太网帧,TCP/IP协议栈–>服务器+客户端网络数据;
接口:2路SFP,1G线速率;
PHY+MAC方案:Xilinx官方AXI 1G/2.5G Ethernet Subsystem方案;
PHY使用高速接口资源:2路UltraScale GTH;
协议层方案:1路千兆TCP/IP协议栈服务器+1路千兆TCP/IP协议栈客户端;
工程源码架构请参考前面第3章节中的《工程源码架构》末节;
工程作用:此工程目标是让读者掌握FPGA基于AXI 1G/2.5G Ethernet Subsystem的TCP/IP协议栈设计能力,以便能够移植和设计自己的项目;
工程的资源消耗和功耗如下:

19、vivado工程16详解:KU5P版本,单路TCP服务器版本

开发板FPGA型号:Xilinx-- Kintex UltraScale±-xcku5p-ffvb676-1-i;
开发环境:Vivado2019.1;
输入输出:以太网帧,TCP/IP协议栈–>服务器网络数据;
接口:1路SFP,1G线速率;
PHY+MAC方案:Xilinx官方AXI 1G/2.5G Ethernet Subsystem方案;
PHY使用高速接口资源:1路GTY;
协议层方案:千兆TCP/IP协议栈–>服务器;
工程源码架构请参考前面第3章节中的《工程源码架构》末节;
工程作用:此工程目标是让读者掌握FPGA基于AXI 1G/2.5G Ethernet Subsystem的TCP/IP协议栈设计能力,以便能够移植和设计自己的项目;
工程的资源消耗和功耗如下:

20、vivado工程17详解:KU5P版本,单路TCP客户端版本

开发板FPGA型号:Xilinx-- Kintex UltraScale±-xcku5p-ffvb676-1-i;
开发环境:Vivado2019.1;
输入输出:以太网帧,TCP/IP协议栈–>客户端网络数据;
接口:1路SFP,1G线速率;
PHY+MAC方案:Xilinx官方AXI 1G/2.5G Ethernet Subsystem方案;
PHY使用高速接口资源:1路GTY;
协议层方案:千兆TCP/IP协议栈–>客户端;
工程源码架构请参考前面第3章节中的《工程源码架构》末节;
工程作用:此工程目标是让读者掌握FPGA基于AXI 1G/2.5G Ethernet Subsystem的TCP/IP协议栈设计能力,以便能够移植和设计自己的项目;
工程的资源消耗和功耗如下:

21、vivado工程18详解:KU5P版本,双路TCP服务器+客户端版本

开发板FPGA型号:Xilinx-- Kintex UltraScale±-xcku5p-ffvb676-1-i;
开发环境:Vivado2019.1;
输入输出:以太网帧,TCP/IP协议栈–>服务器+客户端网络数据;
接口:2路SFP,1G线速率;
PHY+MAC方案:Xilinx官方AXI 1G/2.5G Ethernet Subsystem方案;
PHY使用高速接口资源:2路GTY;
协议层方案:1路千兆TCP/IP协议栈服务器+1路千兆TCP/IP协议栈客户端;
工程源码架构请参考前面第3章节中的《工程源码架构》末节;
工程作用:此工程目标是让读者掌握FPGA基于AXI 1G/2.5G Ethernet Subsystem的TCP/IP协议栈设计能力,以便能够移植和设计自己的项目;
工程的资源消耗和功耗如下:

22、工程移植说明

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软核;
23、上板调试验证并演示

预备工作

试验需要预备以下装备:
FPGA开发板,可以自行购买,也可以找本博主购买同款开发板;
测试电脑;
SFP转RJ45电口,千兆网线;
网络调试助手;
以工程源码1的开发板为例举行上板调试;
毗连如下:

首先设置电脑端IP如下:

然后下载bit,如下:

ping测试

打开cdm,输入 ping 192.168.0.56,如下:

ping测试视频演示如下,请点击观看:

     千兆网TCP协议栈ping操作
  
数据回环测试

以工程源码1为例,打开网络调试助手并设置,如下:

单次发送数据测试结果如下:

循环发送数据测试结果如下,1秒时间隔断循环:可以看到,数据收发量超过15万字节,没有丢包,足以证实其稳定性;

TCP数据回环测试视频演示如下,请点击观看:

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

以工程源码1为例,下载测速的bit,打开网络调试助手,选择暂停吸收显示,如下:

然后将测速bit内里的VIO打开,并将tx_en设置为1,如下:

然后打开电脑资源管理器,点击性能,找到以太网网卡选项,即可看到测速,测速如下:

留意!!!
留意!!!
留意!!!
在电脑上观察到的是开发板以太网网口的发送速率,这个测速只代表可能的最高的速率,不代表电脑真实的不丢包速率,UDP 的点到点不丢包速率和电脑的网卡、CPU 速率、内存速率、操作系统都有关系。
TCP网络速率测试视频演示如下,请点击观看:

     1G-TCP测速
  
真实用户使用反馈

假如用户有需求,我一样平常会先针对用户的板子原理图做一个测试bit,主要测试数据回环和测速,用户拿到bit后自行测试,觉得测试结果满意后再决定是否使用,举例某航某院的用户对数据回环和数据丢包的使用反馈如下:


举例某航某院的用户对网络测速的使用反馈如下:

24、福利:工程代码的获取

福利:工程代码的获取
代码太大,无法邮箱发送,以某度网盘链接方式发送,
资料获取方式:私,大概文章末尾的V名片。
网盘资料如下:

此外,有很多朋侪给本博主提了很多意见和建议,盼望能丰富服务内容和选项,由于不同朋侪的需求不一样,所以本博主还提供以下服务:


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

莱莱

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表