目录
- 1、前言
- 2、相关方案推荐
-
- 我已有的所有工程源码总目录----方便你快速找到自己喜欢的项目
- 我这里已有的以太网方案
- [本TCP/IP 协议栈在Xilinx系列FPGA上的应用](#本TCP/IP 协议栈在Xilinx系列FPGA上的应用)
- 3、详细设计方案
- 4、PDS工程源码1详解-->紫光PGL22G,YT8531C做PHY
- 5、PDS工程源码2详解-->紫光PG2L50H,YT8531C做PHY
- 6、PDS工程源码3详解-->紫光PG2L100H,YT8531C做PHY
- 7、PDS工程源码4详解-->紫光PG2L200H,YT8531C做PHY
- 8、PDS工程源码5详解-->紫光PG2T70H,RTTL8211做PHY
- 9、上板调试验证并演示
- 10、工程代码的获取
紫光同创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名片。
网盘资料如下:

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