紫光同创FPGA实现 TCP/IP 协议栈,千兆网服务器版本,提供5套工程源码和技术支持

目录

紫光同创FPGA实现 TCP/IP 协议栈,千兆网服务器版本,提供5套工程源码和技术支持

紫光-千兆TCP

1、前言

创作背景

国产FPGA现状:

"苟利国家生死以,岂因祸福避趋之!"大洋彼岸的我优秀地下档员,敏锐地洞察到祖国的短板在于先进制程半导体的制造领域,于是本着为中华民族伟大复兴的中国梦贡献绵薄之力的初心,懂先生站在高略高度和长远角度谋划,宁愿背当代一世之骂名也要为祖国千秋万世谋,2018年7月,懂先生正式打响毛衣战,随后又使出恰勃纸战术,旨在为祖国先进制程半导体领域做出自主可控的战略推动;2019年初我刚出道时,还是Xilinx遥遥领先的时代(现在貌似也是),那时的国产FPGA还处于黑铁段位;然而才短短7年,如今的国产FPGA属于百家争鸣、百花齐放、八仙过海、神仙打架、方兴未艾、得陇望蜀、友商都是XX的喜极而泣之局面,此情此景,不得不吟唱老人家的诗句:魏武挥鞭,东临碣石有遗篇,萧瑟秋风今又是,换了人间。。。

目前对于国产FPGA优势有以下几点:

1:性价比高,与同级别国外大厂芯片相比,价格相差几倍甚至十几倍;

2:自主可控,国产FPGA拥有完整自主知识产权的产业链,从芯片到相关EDA工具;

3:响应迅速,FAE技术支持比较到位,及时解决开发过程中遇到的问题,毕竟中文数据手册;

4:采购方便,产业链自主可控,采购便捷;

FPGA实现TCP协议栈现状:

FPGA实现UDP协议栈很常见,但实现TCP协议栈却不多,一是因为TCP协议栈更为复杂,而是因为用FPGA来做TCP经济性较差,但对于芯片原型验证、航天可靠通信、水下通信等一些数据传输可靠性极高的领域而言,FPGA实现TCP方案依然占有一席之地。与实现UDP协议栈一样,首先需要解决的以太网物理层问题,协议层则可通过纯逻辑代码实现,目前主流的有2种方案:

一是使用PHY芯片实现以太网物理层功能,比如常见的RTL8211、B50610等芯片,输出接口MII、GMII、RGMII、SGMII等接口与FPGA连接,这种方案的优点是设计简单,缺点是增加硬件成本和布线难度。

二是使用FPGA内部高速收发器实现以太网物理层功能,比如Xilinx的1G/2.5G Ethernet PCS/PMA or SGMII、AXI 1G/2.5G Ethernet Subsystem等IP核,这种方案的优点是精简件成本和极简的布线,缺点是逻辑设计难度较大,需要FPGA开发工程师对高速收发器和以太网的造诣同时较深。

本设计采用PHY芯片方案实现以太网物理层功能。

工程概述

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

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

电脑端网络调试助手发送测试数据或发起ping操作,然后电脑端操作系统的Socket实现发送数据的以太网帧组包,然后发送给电脑端网卡后通过网线连接到FPGA开发板的RJ45网口;然后差分网络数据进入FPGA开发板板载的PHY芯片实现以太网物理层功能,将差分数据转换为并行RGMII接口数据;RGMII网络数据再送入纯verilog实现的RGMII互转GMII模块,实现双沿采集的RGMII数据到单沿采集的GMII数据转换,需要使用紫光的GTP_ISERDES_E2源语;GMII数据再进入纯verilog实现的GMII互转AXI4-Stream模块将GMII接口数据转换为AXI4-Stream流;AXI4-Stream流再进入纯verilog实现的异步AXI4-Stream FIFO模块实现跨时钟域处理;然后AXI4-Stream MAC流数据进入纯VHDL实现的TCP/IP协议栈实现以太网帧解包,解析各种头部信息,并提取输出TCP报文的有效数据段;有效数据再经过回环后回灌到TCP/IP协议栈实现以太网帧组包,即加上各种头部信息和校验;然后数据送入纯verilog实现的GMII数据再进入GMII互转AXI4-Stream模块将AXI4-Stream MAC流数据转换为GMII接口数据;然后GMII数据再送入纯verilog实现的RGMII互转GMII模块,实现单沿采集的GMII数据到双沿采集的RGMII数据转换,需要使用紫光的GTP_OSERDES_E2源语;然后RGMII接口的MAC数据再进入板载PHY芯片实现以太网物理层,输出差分信号,并通过网线发送到电脑端;电脑端操作系统的Socket实现接收数据以太网解包,然后数据给网络调试助手显示;网络调试助手同时显示发送和接收数据,以此观察TCP数据回环的正确性;

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

PGA自动循环产生从0开始的累加数作为TCP发送数据,发送数据然后进入纯VHDL实现的TCP协议栈实现以太网帧组包,即加上各种头部信息和校验;然后数据送入纯verilog实现的GMII数据再进入GMII互转AXI4-Stream模块将AXI4-Stream MAC流数据转换为GMII接口数据;然后GMII数据再送入纯verilog实现的RGMII互转GMII模块,实现单沿采集的GMII数据到双沿采集的RGMII数据转换,需要使用紫光的GTP_OSERDES_E2源语;然后RGMII接口的MAC数据再进入板载PHY芯片实现以太网物理层,输出差分信号,并通过网线发送到电脑端;然后打开电脑端的资源管理器,查看网卡,即可看到TCP通信速率;

针对目前市面上主流的FPGA和PHY芯片信号,本工程共移植了5套工程,具体如下:

这里说明一下提供的5套工程源码的作用和价值,如下:

工程源码1

开发板FPGA型号为紫光同创-PGL22G-6MBG324,电脑端网络调试助手发送测试数据或发起ping操作,然后电脑端操作系统的Socket实现发送数据的以太网帧组包,然后发送给电脑端网卡后通过网线连接到FPGA开发板的RJ45网口;然后差分网络数据进入FPGA开发板板载的YT8531C型号的、工作与延时模式的PHY芯片实现以太网物理层功能,将差分数据转换为并行RGMII接口数据;RGMII网络数据再送入纯verilog实现的RGMII互转GMII模块,实现双沿采集的RGMII数据到单沿采集的GMII数据转换,需要使用紫光的GTP_ISERDES_E2源语;GMII数据再进入纯verilog实现的GMII互转AXI4-Stream模块将GMII接口数据转换为AXI4-Stream流;AXI4-Stream流再进入纯verilog实现的异步AXI4-Stream FIFO模块实现跨时钟域处理;然后AXI4-Stream MAC流数据进入纯VHDL实现的TCP/IP协议栈实现以太网帧解包,解析各种头部信息,并提取输出TCP报文的有效数据段;有效数据再经过回环后回灌到TCP/IP协议栈实现以太网帧组包,即加上各种头部信息和校验;然后数据送入纯verilog实现的GMII数据再进入GMII互转AXI4-Stream模块将AXI4-Stream MAC流数据转换为GMII接口数据;然后GMII数据再送入纯verilog实现的RGMII互转GMII模块,实现单沿采集的GMII数据到双沿采集的RGMII数据转换,需要使用紫光的GTP_OSERDES_E2源语;然后RGMII接口的MAC数据再进入板载PHY芯片实现以太网物理层,输出差分信号,并通过网线发送到电脑端;电脑端操作系统的Socket实现接收数据以太网解包,然后数据给网络调试助手显示;网络调试助手同时显示发送和接收数据,以此观察TCP数据回环的正确性;

该工程使用YT8531C型号的PHY芯片,工作与延时模式,输出RGMII接口,可同时兼容RTL8211、KSZ9031等PHY,集成了TCP/IP数据回环功能+TCP/IP网络测速功能,适用于紫光同创Logos系列FPGA移植;

工程源码2

开发板FPGA型号为紫光同创-PG2L50H-6FBG484,电脑端网络调试助手发送测试数据或发起ping操作,然后电脑端操作系统的Socket实现发送数据的以太网帧组包,然后发送给电脑端网卡后通过网线连接到FPGA开发板的RJ45网口;然后差分网络数据进入FPGA开发板板载的YT8531C型号的、工作与延时模式的PHY芯片实现以太网物理层功能,将差分数据转换为并行RGMII接口数据;RGMII网络数据再送入纯verilog实现的RGMII互转GMII模块,实现双沿采集的RGMII数据到单沿采集的GMII数据转换,需要使用紫光的GTP_ISERDES_E2源语;GMII数据再进入纯verilog实现的GMII互转AXI4-Stream模块将GMII接口数据转换为AXI4-Stream流;AXI4-Stream流再进入纯verilog实现的异步AXI4-Stream FIFO模块实现跨时钟域处理;然后AXI4-Stream MAC流数据进入纯VHDL实现的TCP/IP协议栈实现以太网帧解包,解析各种头部信息,并提取输出TCP报文的有效数据段;有效数据再经过回环后回灌到TCP/IP协议栈实现以太网帧组包,即加上各种头部信息和校验;然后数据送入纯verilog实现的GMII数据再进入GMII互转AXI4-Stream模块将AXI4-Stream MAC流数据转换为GMII接口数据;然后GMII数据再送入纯verilog实现的RGMII互转GMII模块,实现单沿采集的GMII数据到双沿采集的RGMII数据转换,需要使用紫光的GTP_OSERDES_E2源语;然后RGMII接口的MAC数据再进入板载PHY芯片实现以太网物理层,输出差分信号,并通过网线发送到电脑端;电脑端操作系统的Socket实现接收数据以太网解包,然后数据给网络调试助手显示;网络调试助手同时显示发送和接收数据,以此观察TCP数据回环的正确性;

该工程使用YT8531C型号的PHY芯片,工作与延时模式,输出RGMII接口,可同时兼容RTL8211、KSZ9031等PHY,集成了TCP/IP数据回环功能+TCP/IP网络测速功能,适用于紫光同创Logos2系列FPGA移植;

工程源码3

开发板FPGA型号为紫光同创-PG2L100H-6FBG484,电脑端网络调试助手发送测试数据或发起ping操作,然后电脑端操作系统的Socket实现发送数据的以太网帧组包,然后发送给电脑端网卡后通过网线连接到FPGA开发板的RJ45网口;然后差分网络数据进入FPGA开发板板载的YT8531C型号的、工作与延时模式的PHY芯片实现以太网物理层功能,将差分数据转换为并行RGMII接口数据;RGMII网络数据再送入纯verilog实现的RGMII互转GMII模块,实现双沿采集的RGMII数据到单沿采集的GMII数据转换,需要使用紫光的GTP_ISERDES_E2源语;GMII数据再进入纯verilog实现的GMII互转AXI4-Stream模块将GMII接口数据转换为AXI4-Stream流;AXI4-Stream流再进入纯verilog实现的异步AXI4-Stream FIFO模块实现跨时钟域处理;然后AXI4-Stream MAC流数据进入纯VHDL实现的TCP/IP协议栈实现以太网帧解包,解析各种头部信息,并提取输出TCP报文的有效数据段;有效数据再经过回环后回灌到TCP/IP协议栈实现以太网帧组包,即加上各种头部信息和校验;然后数据送入纯verilog实现的GMII数据再进入GMII互转AXI4-Stream模块将AXI4-Stream MAC流数据转换为GMII接口数据;然后GMII数据再送入纯verilog实现的RGMII互转GMII模块,实现单沿采集的GMII数据到双沿采集的RGMII数据转换,需要使用紫光的GTP_OSERDES_E2源语;然后RGMII接口的MAC数据再进入板载PHY芯片实现以太网物理层,输出差分信号,并通过网线发送到电脑端;电脑端操作系统的Socket实现接收数据以太网解包,然后数据给网络调试助手显示;网络调试助手同时显示发送和接收数据,以此观察TCP数据回环的正确性;

该工程使用YT8531C型号的PHY芯片,工作与延时模式,输出RGMII接口,可同时兼容RTL8211、KSZ9031等PHY,集成了TCP/IP数据回环功能+TCP/IP网络测速功能,适用于紫光同创Logos2系列FPGA移植;

工程源码4

开发板FPGA型号为紫光同创-PG2L200H-6FBG484,电脑端网络调试助手发送测试数据或发起ping操作,然后电脑端操作系统的Socket实现发送数据的以太网帧组包,然后发送给电脑端网卡后通过网线连接到FPGA开发板的RJ45网口;然后差分网络数据进入FPGA开发板板载的YT8531C型号的、工作与延时模式的PHY芯片实现以太网物理层功能,将差分数据转换为并行RGMII接口数据;RGMII网络数据再送入纯verilog实现的RGMII互转GMII模块,实现双沿采集的RGMII数据到单沿采集的GMII数据转换,需要使用紫光的GTP_ISERDES_E2源语;GMII数据再进入纯verilog实现的GMII互转AXI4-Stream模块将GMII接口数据转换为AXI4-Stream流;AXI4-Stream流再进入纯verilog实现的异步AXI4-Stream FIFO模块实现跨时钟域处理;然后AXI4-Stream MAC流数据进入纯VHDL实现的TCP/IP协议栈实现以太网帧解包,解析各种头部信息,并提取输出TCP报文的有效数据段;有效数据再经过回环后回灌到TCP/IP协议栈实现以太网帧组包,即加上各种头部信息和校验;然后数据送入纯verilog实现的GMII数据再进入GMII互转AXI4-Stream模块将AXI4-Stream MAC流数据转换为GMII接口数据;然后GMII数据再送入纯verilog实现的RGMII互转GMII模块,实现单沿采集的GMII数据到双沿采集的RGMII数据转换,需要使用紫光的GTP_OSERDES_E2源语;然后RGMII接口的MAC数据再进入板载PHY芯片实现以太网物理层,输出差分信号,并通过网线发送到电脑端;电脑端操作系统的Socket实现接收数据以太网解包,然后数据给网络调试助手显示;网络调试助手同时显示发送和接收数据,以此观察TCP数据回环的正确性;

该工程使用YT8531C型号的PHY芯片,工作与延时模式,输出RGMII接口,可同时兼容RTL8211、KSZ9031等PHY,集成了TCP/IP数据回环功能+TCP/IP网络测速功能,适用于紫光同创Logos2系列FPGA移植;

工程源码5

开发板FPGA型号为紫光同创-PG2T70H-6FBB484,电脑端网络调试助手发送测试数据或发起ping操作,然后电脑端操作系统的Socket实现发送数据的以太网帧组包,然后发送给电脑端网卡后通过网线连接到FPGA开发板的RJ45网口;然后差分网络数据进入FPGA开发板板载的RTL8211型号的、工作与延时模式的PHY芯片实现以太网物理层功能,将差分数据转换为并行RGMII接口数据;RGMII网络数据再送入纯verilog实现的RGMII互转GMII模块,实现双沿采集的RGMII数据到单沿采集的GMII数据转换,需要使用紫光的GTP_ISERDES_E2源语;GMII数据再进入纯verilog实现的GMII互转AXI4-Stream模块将GMII接口数据转换为AXI4-Stream流;AXI4-Stream流再进入纯verilog实现的异步AXI4-Stream FIFO模块实现跨时钟域处理;然后AXI4-Stream MAC流数据进入纯VHDL实现的TCP/IP协议栈实现以太网帧解包,解析各种头部信息,并提取输出TCP报文的有效数据段;有效数据再经过回环后回灌到TCP/IP协议栈实现以太网帧组包,即加上各种头部信息和校验;然后数据送入纯verilog实现的GMII数据再进入GMII互转AXI4-Stream模块将AXI4-Stream MAC流数据转换为GMII接口数据;然后GMII数据再送入纯verilog实现的RGMII互转GMII模块,实现单沿采集的GMII数据到双沿采集的RGMII数据转换,需要使用紫光的GTP_OSERDES_E2源语;然后RGMII接口的MAC数据再进入板载PHY芯片实现以太网物理层,输出差分信号,并通过网线发送到电脑端;电脑端操作系统的Socket实现接收数据以太网解包,然后数据给网络调试助手显示;网络调试助手同时显示发送和接收数据,以此观察TCP数据回环的正确性;

该工程使用RTL8211型号的PHY芯片,工作与延时模式,输出RGMII接口,可同时兼容YT8531C、KSZ9031等PHY,集成了TCP/IP数据回环功能+TCP/IP网络测速功能,适用于紫光同创Titan2系列FPGA移植;

本博客详细描述了紫光同创系列FPGA实现 TCP/IP 协议栈服务器版本的设计方案,工程代码可综合编译上板调试,可直接项目移植,适用于在校学生、研究生项目开发,也适用于在职工程师做学习提升,可应用于医疗、军工等行业的高速接口或图像处理领域;

提供完整的、跑通的工程源码和技术支持;

工程源码和技术支持的获取方式放在了文章末尾,请耐心看到最后;

免责声明

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

2、相关方案推荐

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

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

我这里已有的以太网方案

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

本TCP/IP 协议栈在Xilinx系列FPGA上的应用

本TCP/IP 协议栈在Xilinx系列FPGA上也有成熟稳定应用,如下:

1G 千兆网 TCP服务器版本,即FPGA充当TCP服务器,采用专用芯片做PHY,链接如下:
点击直接前往

1G 千兆网 TCP客户端版本,即FPGA充当TCP客户端,采用专用芯片做PHY,链接如下:
点击直接前往

1G 千兆网 TCP服务器版本,即FPGA充当TCP服务器,采用FPGA内部高速收发器做PHY,链接如下:

基于Xilinx AXI 1G/2.5G Ethernet Subsystem IP核方案,链接如下:
点击直接前往

基于Xilinx 1G/2.5G Ethernet PCS/PMA or SGMII IP核方案,链接如下:
点击直接前往

1G 千兆网 TCP服务器多端口版本,即FPGA充当TCP服务器,且能实现最多256个端口同时通信,采用专用芯片做PHY,链接如下:
点击直接前往

1G 千兆网 TCP客户端多端口版本,即FPGA充当TCP客户端,且能实现最多256个端口同时通信,采用专用芯片做PHY,链接如下:
点击直接前往

10G 万兆网 TCP服务器版本,即FPGA充当TCP服务器,链接如下:
点击直接前往

10G 万兆网 TCP客户端版本,即FPGA充当TCP客户端,链接如下:
点击直接前往

10G 万兆网 TCP服务器多端口版本,即FPGA充当TCP服务器,且能实现最多256个端口同时通信,链接如下:
点击直接前往

3、详细设计方案

设计框图

本设计使用的工程详细设计方案框图如下:

电脑端网络调试助手

电脑端网络调试助手很简单,几乎干这一行的都用过,为Windows版本.exe文件,无需安装直接使用,界面如下:

这个软件使用教程可自行百度,如果连这个都不会用,说明。。。

PHY芯片

本例程提供5套vivado工程源码,分别用到了RTL8211、KSZ9031、YT8531等市面上主流的PHY型号,通过这些型号PHY的使用,你将能学会其他型号PHY的使用,因为很多都是兼容的;此外,还可以提供了PHY的参考原理图。

RGMII互转GMII模块

RGMII互转GMII模块由纯verilog实现;功能是实现双沿采集的RGMII数据互转单沿采集的GMII数据,需要使用紫光的GTP_ISERDES_E2和GTP_OSERDES_E2源语;模块代码架构如下:

其中的相位偏移时钟用于工作于延时模式的PHY芯片;

GMII互转AXI4-Stream模块

GMII互转AXI4-Stream模块实现两者的接口转换,目的是匹配TCP协议栈的AXI4-Stream接口的MAC数据流,代码中如下:

MAC数据跨时钟域

MAC数据跨时钟域模块实现MAC数据在PHY测和TCP用户逻辑测的时钟域转换,使用纯verilog实现的AXI4-Stream FIFO实现,代码中如下:

TCP/IP协议栈简介

本TCP/IP协议栈为纯VHDL实现的千兆网速率服务器版本,可实现TCP协议网络通信,但本设计不提供源码,而是提供.adf的加密网表文件;TCP/IP协议栈基本设计框架如下:

TCP/IP协议栈性能

TCP/IP协议栈性能参数如下:

1:纯VHDL实现,没有用到任何一个IP核,但只提供加密网表文件,不提供源码;

2:可移植性,可在紫光同创全FPGA移植;

3:支持动态ARP;

4:支持ICMP,即可以通过ping操作验证连通性;

5:符合标准的IEEE 802.3协议,支持IPv4和IPv6,但目前IPv6还没调试;

6:对外接PHY的数据格式要求:RGMII;

7:时序收敛很到位,考虑到TCP协议的复杂性和时序的高要求,所以没有采用时序收敛不强的verilog,而是VHDL,虽然阅读性可能会低一些,但用户只需要知道用户接口即可,并不需要去看内部的复杂代码;

8:吞吐率高,FPGA参考时钟125 MHz条件下,测量的持续吞吐率为双向并发452 Mbits/s;

9:低延时,帧长度为1460字节、FPGA 时钟125 MHz下的测试发送延时=23.9µs;接收延时=12.2µs;

10:TCP/IP协议栈中虽包含了TCP和UDP,但在紫光同创系列FPGA中,只能使用TCP协议接口,UDP不可用;

TCP/IP协议栈接口描述

本TCP/IP协议栈为纯VHDL实现的千兆网速率服务器版本,可实现TCP协议网络通信,但本设计不提供源码,而是提供.adf的加密网表文件;TCP/IP协议栈顶层接口如下:

c 复制代码
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地址,这也是默认的工作方式,代码里有注释,如下:

工程源码架构

提供5套工程源码,以工程源码1为例,综合后的工程源码架构如下:

4、PDS工程源码1详解-->紫光PGL22G,YT8531C做PHY

开发板FPGA型号:光同创-PGL22G-6MBG324;

FPGA开发环境:Pango Design Suite 2024.2;

以太网物理层方案:YT8531C芯片,延时模式,RGMII接口;

FPGA端MAC方案:纯verilog实现的RGMII互转GMII方案;

以太网传输层协议:TCP/IP协议栈,千兆网速率,FPGA做TCP服务器端

实现功能:FPGA实现 TCP/IP 协议栈;

工程作用:让读者掌握紫光同创FPGA实现 TCP/IP 协议栈的设计能力,以便能够移植和设计自己的项目;

工程代码架构请参考第3章节的《工程源码架构》小节内容;

工程的资源消耗和功耗如下:

5、PDS工程源码2详解-->紫光PG2L50H,YT8531C做PHY

开发板FPGA型号:光同创-PG2L50H-6FBG484;

FPGA开发环境:Pango Design Suite 2024.2;

以太网物理层方案:YT8531C芯片,延时模式,RGMII接口;

FPGA端MAC方案:纯verilog实现的RGMII互转GMII方案;

以太网传输层协议:TCP/IP协议栈,千兆网速率,FPGA做TCP服务器端

实现功能:FPGA实现 TCP/IP 协议栈;

工程作用:让读者掌握紫光同创FPGA实现 TCP/IP 协议栈的设计能力,以便能够移植和设计自己的项目;

工程代码架构请参考第3章节的《工程源码架构》小节内容;

工程的资源消耗和功耗如下:

6、PDS工程源码3详解-->紫光PG2L100H,YT8531C做PHY

开发板FPGA型号:光同创-PG2L100H-6FBG484;

FPGA开发环境:Pango Design Suite 2024.2;

以太网物理层方案:YT8531C芯片,延时模式,RGMII接口;

FPGA端MAC方案:纯verilog实现的RGMII互转GMII方案;

以太网传输层协议:TCP/IP协议栈,千兆网速率,FPGA做TCP服务器端

实现功能:FPGA实现 TCP/IP 协议栈;

工程作用:让读者掌握紫光同创FPGA实现 TCP/IP 协议栈的设计能力,以便能够移植和设计自己的项目;

工程代码架构请参考第3章节的《工程源码架构》小节内容;

工程的资源消耗和功耗如下:

7、PDS工程源码4详解-->紫光PG2L200H,YT8531C做PHY

开发板FPGA型号:光同创-PG2L200H-6FBG484;

FPGA开发环境:Pango Design Suite 2024.2;

以太网物理层方案:YT8531C芯片,延时模式,RGMII接口;

FPGA端MAC方案:纯verilog实现的RGMII互转GMII方案;

以太网传输层协议:TCP/IP协议栈,千兆网速率,FPGA做TCP服务器端

实现功能:FPGA实现 TCP/IP 协议栈;

工程作用:让读者掌握紫光同创FPGA实现 TCP/IP 协议栈的设计能力,以便能够移植和设计自己的项目;

工程代码架构请参考第3章节的《工程源码架构》小节内容;

工程的资源消耗和功耗如下:

8、PDS工程源码5详解-->紫光PG2T70H,RTTL8211做PHY

开发板FPGA型号:光同创-PG2T70H-6FBB484;

FPGA开发环境:Pango Design Suite 2024.2;

以太网物理层方案:RTTL8211芯片,延时模式,RGMII接口;

FPGA端MAC方案:纯verilog实现的RGMII互转GMII方案;

以太网传输层协议:TCP/IP协议栈,千兆网速率,FPGA做TCP服务器端

实现功能:FPGA实现 TCP/IP 协议栈;

工程作用:让读者掌握紫光同创FPGA实现 TCP/IP 协议栈的设计能力,以便能够移植和设计自己的项目;

工程代码架构请参考第3章节的《工程源码架构》小节内容;

工程的资源消耗和功耗如下:

9、上板调试验证并演示

准备工作

试验需要准备以下设备:

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测速

综合上板调试视频演示

综合上板调试视频演示如下:

紫光-千兆TCP

真实用户使用反馈

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

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

10、工程代码的获取

代码太大,无法邮箱发送,以某度网盘链接方式发送,

资料获取方式:私,或者文章末尾的V名片。

网盘资料如下:

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

相关推荐
深圳市恒讯科技1 小时前
如果超出防护峰值,会发生什么——服务器会挂掉吗?
运维·服务器
liberty8881 小时前
dppt如何找到弹框
java·服务器·前端
yugi9878381 小时前
使用SCP命令在CentOS 7上向目标服务器传输文件
linux·服务器·centos
Terasic友晶科技1 小时前
【答疑解惑】如何临时解决带Nios II的FPGA设计在测试时遇到time_limited文件导致elf下载不了的问题
fpga开发·nios ii·quartus lite·opencore plus·time_limited
FPGA_小田老师1 小时前
AXI_DMA IP核实战:24路并行数据高速存储方案
fpga开发·axi_dma·adc采样并行数据存储·高速并行数据存储
此生只爱蛋1 小时前
【Linux】UDP报头和TCP报头
linux·tcp/ip·udp
达不溜的日记1 小时前
UDS诊断-31服务
服务器·stm32·单片机·网络协议·网络安全·信息与通信·信号处理
HalvmånEver1 小时前
linux:虚拟地址空间与物理地址空间(进程六)
linux·运维·服务器
Linux运维技术栈1 小时前
生产环境资源占用过高排查实战:从Heap Dump到全链路优化
java·服务器·网络·数据库·程序