FPGA无网络芯片实现千兆TCP/IP协议栈,基于1G/2.5G Ethernet PCS/PMA or SGMII方案,提供18套工程源码和技术支持

目录

  • 1、前言
    • 工程概述
    • 免责声明
  • 2、相关方案推荐
    • 我这里已有的以太网方案
    • 网络芯片版本-->千兆网 TCP-->服务器 方案
    • 网络芯片版本-->千兆网 TCP-->客户端 方案
    • 10G 万兆网 TCP-->服务器+客户端 方案
    • 1G/2.5G Ethernet PCS/PMA or SGMII 方案
    • AXI 1G/2.5G Ethernet Subsystem 方案
  • 3、详细设计方案
    • 设计原理框图
    • 测试用PC端电脑
    • SFP光口转RJ45电口
    • 1G/2.5G Ethernet PCS/PMA or SGMII 简介
    • 1G/2.5G Ethernet PCS/PMA or SGMII 配置
    • 多个1G/2.5G Ethernet PCS/PMA or SGMII 主从级联使用
    • Tri Mode Ethernet MAC
    • AXI4-Stream Data FIFO 组
    • TCP/IP协议栈服务器-->简介
    • TCP/IP协议栈服务器-->源码架构
    • TCP/IP协议栈服务器-->性能简介
      • 常规性能
      • 支持多节点
      • FPGA资源占用少
      • 数据吞吐率高
      • 低延时性能
    • TCP/IP协议栈服务器-->接口描述
    • TCP/IP协议栈客户端-->简介
    • TCP/IP协议栈客户端-->源码架构
    • TCP/IP协议栈客户端-->性能简介
      • 常规性能
      • 支持多节点
      • FPGA资源占用少
      • 数据吞吐率高
      • 低延时性能
    • TCP/IP协议栈客户端-->接口描述
    • TCP用户数据测试模块
    • IP地址修改
    • 工程源码架构
  • 4、vivado工程1详解:Artix7版本,单路TCP服务器版本
  • 5、vivado工程2详解:Artix7版本,单路TCP客户端版本
  • 6、vivado工程3详解:Artix7版本,双路TCP客户端+客户端版本
  • 7、vivado工程4详解:Kintex7版本,单路TCP服务器版本
  • 8、vivado工程5详解:Kintex7版本,单路TCP客户端版本
  • 9、vivado工程6详解:Kintex7版本,双路TCP客户端+客户端版本
  • 10、vivado工程7详解:Zynq7100版本,单路TCP服务器版本
  • 11、vivado工程8详解:Zynq7100版本,单路TCP客户端版本
  • 12、vivado工程9详解:Zynq7100版本,双路TCP客户端+客户端版本
  • 13、vivado工程10详解:Virtx7版本,单路TCP服务器版本
  • 14、vivado工程11详解:Virtx7版本,单路TCP客户端版本
  • 15、vivado工程12详解:Virtx7版本,双路TCP客户端+客户端版本
  • 16、vivado工程13详解:KU060版本,单路TCP服务器版本
  • 17、vivado工程14详解:KU060版本,单路TCP客户端版本
  • 18、vivado工程15详解:KU060版本,双路TCP客户端+客户端版本
  • 19、vivado工程16详解:KU5P版本,单路TCP服务器版本
  • 20、vivado工程17详解:KU5P版本,单路TCP客户端版本
  • 21、vivado工程18详解:KU5P版本,双路TCP客户端+客户端版本
  • 22、工程移植说明
    • vivado版本不一致处理
    • FPGA型号不一致处理
    • 其他注意事项
  • 23、上板调试验证并演示
    • 准备工作
    • ping测试
    • 数据回环测试
    • 网络速度测试
  • 24、福利:工程代码的获取

FPGA无网络芯片实现TCP/IP协议栈,基于1G/2.5G Ethernet PCS/PMA or SGMII方案,提供18套工程源码和技术支持

1、前言

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

工程概述

本设采用纯VHDL实现了千兆网TCP/IP协议栈,包括TCP服务器和客户端两个版本,没有用到任何一个IP核;并在Xilinx系列FPGA上做了部署并验证,并且无需诸如RTL8211、B50610等网络芯片,而是使用Xilinx官方的1G/2.5G Ethernet PCS/PMA or SGMII+Tri Mode Ethernet MAC方案取代了网络芯片,属于FPGA开发领域的高端项目;整个工程处理流程如下:

TCP/IP协议栈接收流程

PC端网络调试助手发送以太网数据包,或者发起ping操作,数据通过网线发送到FPGA开发板;一个SFP转RJ45电口插在FPGA开发板板载的SFP光口上,接收网线数据;调用Xilinx官方的1G/2.5G Ethernet PCS/PMA or SGMII IP核实现以太网物理层,1G/2.5G Ethernet PCS/PMA or SGMII输出GMII接口的PHY数据,该IP可替代传统的PHY芯片,比如RTL8211、B50610等,可简化硬件电路,节省板材物料;调用Xilinx官方的Tri Mode Ethernet MAC IP核实现以太网MAC层,Tri Mode Ethernet MAC输出AXI4-Stream接口的MAC数据;再调用2个AXI4-Stream Data FIFO做MAC数据跨时钟域处理和数据缓冲处理后依然以AXI4-Stream数据流输出给TCP/IP 协议栈;TCP/IP 协议栈对数据的MAC数据做以太网数据帧解析、IP报文解析等操作,去掉以太网帧头、协议层报文帧头等信息,提取出有效数据段信息和IP、MAC等地址信息,并以AXI4-Stream数据流形式输出有效数据,至此,TCP/IP协议栈接收流程完毕;

TCP/IP协议栈发送流程

用户数据测试模块为数据发起者,可以是测速模式下的单向的给PC端发送数据,也可以是数据回环模式下的将接收数据回环发送出去,两种模式通过define宏定义选择;用户输出发送时序为AXI4-Stream数据流;用户发送数据首先进入TCP/IP协议栈,并做协议层报文封装、以太网帧格式封装等操作,然后以AXI4-Stream数据流输出;再调用2个AXI4-Stream Data FIFO做TCP数据跨时钟域处理和数据缓冲处理后依然以AXI4-Stream数据流输出给MAC层;然后调用Xilinx官方的Tri Mode Ethernet MAC IP核实现MAC数据转换,将AXI4-Stream的MAC数据转换为GMII时序输出;调用Xilinx官方的1G/2.5G Ethernet PCS/PMA or SGMII IP核实现以太网物理层,1G/2.5G Ethernet PCS/PMA or SGMII输出GMII接口的PHY数据,该IP可替代传统的PHY芯片,比如RTL8211、B50610等,可简化硬件电路,节省板材物料;以太网数据通过板载的SFP光口输出,经过一个SFP转RJ45电口后由网线发送给PC电脑端;至此,TCP/IP协议栈发送流程完毕;

针对目前市面上主流的FPGA,共移植了18套工程源码,详情如下:
在这里插入图片描述
现对上述18套工程源码解释如下:

工程源码1

开发板FPGA型号为Xilinx–>Artix7–>xc7a35tfgg484-2;使用1个1G/2.5G Ethernet PCS/PMA or SGMII IP核实现PHY物理层功能,1G/2.5G Ethernet PCS/PMA or SGMII使用GTP高速接口资源;使用1个Tri Mode Ethernet MAC IP核实现MAC功能,挂载1个千兆网TCP/IP协议栈服务器,输入输出接口为1路SFP光口,功能是1G TCP服务器网络通信;工程应用是FPGA的1G TCP/IP网卡;

工程源码2

开发板FPGA型号为Xilinx–>Artix7–>xc7a35tfgg484-2;使用1个1G/2.5G Ethernet PCS/PMA or SGMII IP核实现PHY物理层功能,1G/2.5G Ethernet PCS/PMA or SGMII使用GTP高速接口资源;使用1个Tri Mode Ethernet MAC IP核实现MAC功能,挂载1个千兆网TCP/IP协议栈客户端,输入输出接口为1路SFP光口,功能是1G TCP服务器网络通信;工程应用是FPGA的1G TCP/IP网卡;

工程源码3

开发板FPGA型号为Xilinx–>Artix7–>xc7a35tfgg484-2;使用2个1G/2.5G Ethernet PCS/PMA or SGMII IP核构成1主+1从的主从级联架构,实现PHY物理层功能,1G/2.5G Ethernet PCS/PMA or SGMII使用GTP高速接口资源;使用2个Tri Mode Ethernet MAC IP核实现MAC功能,挂载1个千兆网TCP/IP协议栈服务器(即SFP光口1运行TCP/IP协议栈服务器)+1个千兆网TCP/IP协议栈客户端(即SFP光口2运行TCP/IP协议栈客户端),输入输出接口为2路SFP光口,功能是1G TCP网络通信;工程应用是FPGA的1G TCP多光口网卡或交换机;

工程源码4

开发板FPGA型号为Xilinx–>Kintex7–>xc7k325tffg900-2;使用1个1G/2.5G Ethernet PCS/PMA or SGMII IP核实现PHY物理层功能,1G/2.5G Ethernet PCS/PMA or SGMII使用GTX高速接口资源;使用1个Tri Mode Ethernet MAC IP核实现MAC功能,挂载1个千兆网TCP/IP协议栈服务器,输入输出接口为1路SFP光口,功能是1G TCP服务器网络通信;工程应用是FPGA的1G TCP/IP网卡;

工程源码5

开发板FPGA型号为Xilinx–>Kintex7–>xc7k325tffg900-2;使用1个1G/2.5G Ethernet PCS/PMA or SGMII IP核实现PHY物理层功能,1G/2.5G Ethernet PCS/PMA or SGMII使用GTX高速接口资源;使用1个Tri Mode Ethernet MAC IP核实现MAC功能,挂载1个千兆网TCP/IP协议栈客户端,输入输出接口为1路SFP光口,功能是1G TCP服务器网络通信;工程应用是FPGA的1G TCP/IP网卡;

工程源码6

开发板FPGA型号为Xilinx–>Kintex7–>xc7k325tffg900-2;使用2个1G/2.5G Ethernet PCS/PMA or SGMII IP核构成1主+1从的主从级联架构,实现PHY物理层功能,1G/2.5G Ethernet PCS/PMA or SGMII使用GTX高速接口资源;使用2个Tri Mode Ethernet MAC IP核实现MAC功能,挂载1个千兆网TCP/IP协议栈服务器(即SFP光口1运行TCP/IP协议栈服务器)+1个千兆网TCP/IP协议栈客户端(即SFP光口2运行TCP/IP协议栈客户端),输入输出接口为2路SFP光口,功能是1G TCP网络通信;工程应用是FPGA的1G TCP多光口网卡或交换机;

工程源码7

开发板FPGA型号为Xilinx–Zynq7100–xc7z100ffg900-2;使用1个1G/2.5G Ethernet PCS/PMA or SGMII IP核实现PHY物理层功能,1G/2.5G Ethernet PCS/PMA or SGMII使用GTX高速接口资源;使用1个Tri Mode Ethernet MAC IP核实现MAC功能,挂载1个千兆网TCP/IP协议栈服务器,输入输出接口为1路SFP光口,功能是1G TCP服务器网络通信;工程应用是FPGA的1G TCP/IP网卡;

工程源码8

开发板FPGA型号为Xilinx–Zynq7100–xc7z100ffg900-2;使用1个1G/2.5G Ethernet PCS/PMA or SGMII IP核实现PHY物理层功能,1G/2.5G Ethernet PCS/PMA or SGMII使用GTX高速接口资源;使用1个Tri Mode Ethernet MAC IP核实现MAC功能,挂载1个千兆网TCP/IP协议栈客户端,输入输出接口为1路SFP光口,功能是1G TCP服务器网络通信;工程应用是FPGA的1G TCP/IP网卡;

工程源码9

开发板FPGA型号为Xilinx–Zynq7100–xc7z100ffg900-2;使用2个1G/2.5G Ethernet PCS/PMA or SGMII IP核构成1主+1从的主从级联架构,实现PHY物理层功能,1G/2.5G Ethernet PCS/PMA or SGMII使用GTX高速接口资源;使用2个Tri Mode Ethernet MAC IP核实现MAC功能,挂载1个千兆网TCP/IP协议栈服务器(即SFP光口1运行TCP/IP协议栈服务器)+1个千兆网TCP/IP协议栈客户端(即SFP光口2运行TCP/IP协议栈客户端),输入输出接口为2路SFP光口,功能是1G TCP网络通信;工程应用是FPGA的1G TCP多光口网卡或交换机;

工程源码10

开发板FPGA型号为Xilinx–Virtx7–xc7vx690tffg1761-3;使用1个1G/2.5G Ethernet PCS/PMA or SGMII IP核实现PHY物理层功能,1G/2.5G Ethernet PCS/PMA or SGMII使用GTH高速接口资源;使用1个Tri Mode Ethernet MAC IP核实现MAC功能,挂载1个千兆网TCP/IP协议栈服务器,输入输出接口为1路SFP光口,功能是1G TCP服务器网络通信;工程应用是FPGA的1G TCP/IP网卡;

工程源码11

开发板FPGA型号为Xilinx–Virtx7–xc7vx690tffg1761-3;使用1个1G/2.5G Ethernet PCS/PMA or SGMII IP核实现PHY物理层功能,1G/2.5G Ethernet PCS/PMA or SGMII使用GTH高速接口资源;使用1个Tri Mode Ethernet MAC IP核实现MAC功能,挂载1个千兆网TCP/IP协议栈客户端,输入输出接口为1路SFP光口,功能是1G TCP服务器网络通信;工程应用是FPGA的1G TCP/IP网卡;

工程源码12

开发板FPGA型号为Xilinx–Virtx7–xc7vx690tffg1761-3;使用2个1G/2.5G Ethernet PCS/PMA or SGMII IP核构成1主+1从的主从级联架构,实现PHY物理层功能,1G/2.5G Ethernet PCS/PMA or SGMII使用GTH高速接口资源;使用2个Tri Mode Ethernet MAC IP核实现MAC功能,挂载1个千兆网TCP/IP协议栈服务器(即SFP光口1运行TCP/IP协议栈服务器)+1个千兆网TCP/IP协议栈客户端(即SFP光口2运行TCP/IP协议栈客户端),输入输出接口为2路SFP光口,功能是1G TCP网络通信;工程应用是FPGA的1G TCP多光口网卡或交换机;

工程源码13

开发板FPGA型号为Xilinx-- Kintex UltraScale–xcku060-ffva1156-2-i;使用1个1G/2.5G Ethernet PCS/PMA or SGMII IP核实现PHY物理层功能,1G/2.5G Ethernet PCS/PMA or SGMII使用GTH高速接口资源;使用1个Tri Mode Ethernet MAC IP核实现MAC功能,挂载1个千兆网TCP/IP协议栈服务器,输入输出接口为1路SFP光口,功能是1G TCP服务器网络通信;工程应用是FPGA的1G TCP/IP网卡;

工程源码14

开发板FPGA型号为Xilinx-- Kintex UltraScale–xcku060-ffva1156-2-i;使用1个1G/2.5G Ethernet PCS/PMA or SGMII IP核实现PHY物理层功能,1G/2.5G Ethernet PCS/PMA or SGMII使用GTH高速接口资源;使用1个Tri Mode Ethernet MAC IP核实现MAC功能,挂载1个千兆网TCP/IP协议栈客户端,输入输出接口为1路SFP光口,功能是1G TCP服务器网络通信;工程应用是FPGA的1G TCP/IP网卡;

工程源码15

开发板FPGA型号为Xilinx-- Kintex UltraScale–xcku060-ffva1156-2-i;使用2个1G/2.5G Ethernet PCS/PMA or SGMII IP核构成1主+1从的主从级联架构,实现PHY物理层功能,1G/2.5G Ethernet PCS/PMA or SGMII使用GTH高速接口资源;使用2个Tri Mode Ethernet MAC IP核实现MAC功能,挂载1个千兆网TCP/IP协议栈服务器(即SFP光口1运行TCP/IP协议栈服务器)+1个千兆网TCP/IP协议栈客户端(即SFP光口2运行TCP/IP协议栈客户端),输入输出接口为2路SFP光口,功能是1G TCP网络通信;工程应用是FPGA的1G TCP多光口网卡或交换机;

工程源码16

开发板FPGA型号为Xilinx-- Kintex UltraScale±-xcku5p-ffvb676-1-i;使用1个1G/2.5G Ethernet PCS/PMA or SGMII IP核实现PHY物理层功能,1G/2.5G Ethernet PCS/PMA or SGMII使用GTY高速接口资源;使用1个Tri Mode Ethernet MAC IP核实现MAC功能,挂载1个千兆网TCP/IP协议栈服务器,输入输出接口为1路SFP光口,功能是1G TCP服务器网络通信;工程应用是FPGA的1G TCP/IP网卡;

工程源码17

开发板FPGA型号为Xilinx-- Kintex UltraScale±-xcku5p-ffvb676-1-i;使用1个1G/2.5G Ethernet PCS/PMA or SGMII IP核实现PHY物理层功能,1G/2.5G Ethernet PCS/PMA or SGMII使用GTY高速接口资源;使用1个Tri Mode Ethernet MAC IP核实现MAC功能,挂载1个千兆网TCP/IP协议栈客户端,输入输出接口为1路SFP光口,功能是1G TCP服务器网络通信;工程应用是FPGA的1G TCP/IP网卡;

工程源码18

开发板FPGA型号为Xilinx-- Kintex UltraScale±-xcku5p-ffvb676-1-i;使用2个1G/2.5G Ethernet PCS/PMA or SGMII IP核构成1主+1从的主从级联架构,实现PHY物理层功能,1G/2.5G Ethernet PCS/PMA or SGMII使用GTY高速接口资源;使用2个Tri Mode Ethernet MAC IP核实现MAC功能,挂载1个千兆网TCP/IP协议栈服务器(即SFP光口1运行TCP/IP协议栈服务器)+1个千兆网TCP/IP协议栈客户端(即SFP光口2运行TCP/IP协议栈客户端),输入输出接口为2路SFP光口,功能是1G TCP网络通信;工程应用是FPGA的1G TCP多光口网卡或交换机;

本文详细描述了FPGA基于1G/2.5G Ethernet PCS/PMA or SGMII实现TCP/IP协议栈的设计方案,经过反复大量测试稳定可靠,可在项目中直接移植使用,工程代码可综合编译上板调试,可直接项目移植,适用于在校学生、研究生项目开发,也适用于在职工程师做项目开发,可应用于医疗、军工等行业的数字通信领域;
提供完整的、跑通的工程源码和技术支持;
工程源码和技术支持的获取方式放在了文章末尾,请耐心看到最后;

免责声明

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

2、相关方案推荐

我这里已有的以太网方案

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

网络芯片版本–>千兆网 TCP–>服务器 方案

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

网络芯片版本–>千兆网 TCP–>客户端 方案

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

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

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

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电口,某宝二三十块钱很便宜,大概长这样:
在这里插入图片描述

1G/2.5G Ethernet PCS/PMA or SGMII 简介

1G/2.5G Ethernet PCS/PMA or SGMII实现了类似于网络PHY芯片的功能,其功能框图如下:
在这里插入图片描述
接收端:
数据首先经过GT资源解串,将串行数据解为并行数据;然后经过弹性Buffer做数据缓冲处理,主要是为了去频偏,使板与板之间的数据稳定,然后进行8b/10b解码,恢复正常数据;然后经过PCS接收同步器,对数据进行跨时钟处理,同步到GMII时序下;最后将数据放入GMII总线下输出;

发送端:
发送端则简单得多,输入时序为GMII;然后进入PCS发送引擎;然后对数据进行8b/10b编码;最后放入GT串化后输出;

1G/2.5G Ethernet PCS/PMA or SGMII 配置

1G/2.5G Ethernet PCS/PMA or SGMII配置为1G,其与MAC的接口为GMII,配置如下:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
1G/2.5G Ethernet PCS/PMA or SGMII可运行于1G和2.5G线速率,对GT时钟有严格研究,按照官方数据手册,运行1G线速率时,GT差分时钟必须为125M,运行2.5G线速率时,GT差分时钟必须为312.5M,如下:
在这里插入图片描述

多个1G/2.5G Ethernet PCS/PMA or SGMII 主从级联使用

多个1G/2.5G Ethernet PCS/PMA or SGMII 的主从搭配使用的应用场景是FPGA开发板充当多光口的网卡使用,即一个FPGA挂载多个光口,每一个光口相当于一个独立的网卡,有独立的IP地址和MAC地址,类似于交换机;主从搭配使用框架如下:
在这里插入图片描述
1G/2.5G Ethernet PCS/PMA or SGMII可单独使用,当单独使用时,一个1G/2.5G Ethernet PCS/PMA or SGMII单独占用一个GT高速接口资源,单独占用一对差分时钟资源;此时的IP配置如下:
在这里插入图片描述
1G/2.5G Ethernet PCS/PMA or SGMII也可多个级联主从搭配使用,主从搭配使用时,一个1G/2.5G Ethernet PCS/PMA or SGMII当做主IP,占用一个GT高速接口资源,单独占用一对差分时钟资源;其他1G/2.5G Ethernet PCS/PMA or SGMII当做从IP,占用一个GT高速接口资源,但不占用差分时钟资源,而是使用主IP提供的参考时钟;此时的从IP配置如下:
在这里插入图片描述

Tri Mode Ethernet MAC

Tri Mode Ethernet MAC主要是为了适配1G/2.5G Ethernet PCS/PMA or SGMII,因为后者的输入接口是GMII,而Tri Mode Ethernet MAC的输入接口是AXIS,输出接口是GMII,Tri Mode Ethernet MAC配置如下:
在这里插入图片描述
在这里插入图片描述

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 协议栈源码,即完全看得到并可修改的纯源码;另一种是TCP/IP 协议栈网表,可以正常调用、例化并使用,但看不到TCP/IP 协议栈源码也不能修改;TCP/IP协议栈基本设计框架如下:
在这里插入图片描述
其中的UDP我们没有用到,只用到了TCP;

TCP/IP协议栈服务器–>源码架构

TCP/IP 协议栈源码架构如下:
在这里插入图片描述

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

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

常规性能

1:纯VHDL实现,没有用到任何一个IP核;
2:移植性天花板,该协议栈可在Xilinx、Altera、Lattice、国产FPGA等各大FPGA型号之间任意移植,因为是没有任何IP和源语的纯VHDL代码实现;但例如Tri Mode Ethernet MAC这样的PHY侧IP核目前用的Xilinx的;
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=125parameter 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/IP协议栈客户端–>简介

本TCP/IP协议栈为纯VHDL实现的千兆网速率客户端版本,可实现TCP协议网络通信,针对不同需求,提供两个版本的模块,一种是TCP/IP 协议栈源码,即完全看得到并可修改的纯源码;另一种是TCP/IP 协议栈网表,可以正常调用、例化并使用,但看不到TCP/IP 协议栈源码也不能修改;TCP/IP协议栈基本设计框架如下:
在这里插入图片描述
其中的UDP我们没有用到,只用到了TCP;

TCP/IP协议栈客户端–>源码架构

TCP/IP 协议栈源码架构如下:
在这里插入图片描述

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

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

常规性能

1:纯VHDL实现,没有用到任何一个IP核;
2:移植性天花板,该协议栈可在Xilinx、Altera、Lattice、国产FPGA等各大FPGA型号之间任意移植,因为是没有任何IP和源语的纯VHDL代码实现;但例如Tri Mode Ethernet MAC这样的PHY侧IP核目前用的Xilinx的;
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协议栈顶层接口如下:

module ikun_1gtcp_vip #(parameter TCP_NUM         = 1       ,	// tcp 端口数量,这里仅用到了1个parameter FPGA_TCP_PORT_B = 16'd1024,	// 	FPGA网卡--tcp客户端--端口号parameter CLK_FREQUENCY   = 125     ,	// 参考时钟频率,比如输入时钟为125M,则CLK_FREQUENCY=125parameter 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             ,	// 异步复位	output [4*TCP_NUM-1:0]  tcp_status_out          ,   // TCP连接状态; idle (0), connecting (1), connected (2), unreacheable IP (3), destination port busy (4)// 配置端口 input                   client_dhcp_en          ,	// 0-->disable client_dhcp ; 1-->enable client_dhcp                                   input  [ 47:0]          fpga_MAC_addr           ,	// FPGA网卡MAC地址	input  [ 31:0]          fpga_static_IPV4_addr   ,	// FPGA网卡静态IPV4地址		input  [127:0]          fpga_IPV6_addr          ,	// FPGA网卡IPV6地址	input  [ 31:0]          fpga_subnet_addr        ,	// FPGA网卡子网掩码	input  [ 31:0]          fpga_static_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协议栈用户接口是用户逻辑直接对接的接口;
具体可参考工程源码中对该模块的调用;

需要注意的是,由于EDF网表不支持对parameter参数的封装,所以EDF网表版本的TCP/IP协议栈接口没有parameter参数,只有wire用户接口,FPGA网卡端的TCP端口号被固定为1024,且不可更改;

TCP用户数据测试模块

TCP用户数据测试模块集成了接收数据回环和数据测速功能,通过define宏定义选择,如下:
在这里插入图片描述
在这里插入图片描述
接收数据回环功能:
将接收数据回环发送出去,即形成发送=接收的自回环功能;该功能的作用是配合网络调试助手进行数据收发测试、数据丢包测试、数据正确性测试等;

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

IP地址修改

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

工程源码架构

18套工程的源码具有相似性,这里仅以工程3为例截图如下,其他工程与之类似:
在这里插入图片描述
注意!!!!
注意!!!!
上图为1主+1从的2路TCP协议栈架构,也就是用到了2路1G/2.5G Ethernet PCS/PMA or SGMII和2路Tri Mode Ethernet MAC,TCP协议栈用到了1路服务器+1路客户端,单独的服务器或客户端工程则只用到了1路1G/2.5G Ethernet PCS/PMA or SGMII和1路Tri Mode Ethernet MAC;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

开发板FPGA型号:Xilinx-- Kintex UltraScale±-xcku5p-ffvb676-1-i;
开发环境:Vivado2019.1;
输入输出:以太网帧,TCP/IP协议栈–>客户端/客户端网络数据;
接口:2路SFP,1G线速率;
PHY方案:Xilinx官方1G/2.5G Ethernet PCS/PMA or SGMII方案;
PHY使用高速接口资源:2路GTY;
MAC方案:Xilinx 官方Tri Mode Ethernet MAC方案;
协议层方案:1路千兆TCP/IP协议栈服务器+1路千兆TCP/IP协议栈客户端;
工程源码架构请参考前面第3章节中的《工程源码架构》小节;
工程作用:此工程目的是让读者掌握FPGA基于1G/2.5G Ethernet PCS/PMA or SGMII的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测速

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/36250.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AI大模型安全挑战和安全要求解读

引言 随着人工智能技术的飞速发展,大模型技术以其卓越的性能和广泛的应用前景,正在重塑人工智能领域的新格局。然而,任何技术都有两面性,大模型在带来前所未有便利的同时,也引发了深刻的安全和伦理挑战。 大模型&…

vscode安装lean4

本教程演示在Windows系统下如何安装Lean 4正式版。Linux和MacOS版本请参考Lean Manual。 如果你身在中国,在运行安装程序前需要做如下准备: 在系统目录C:\Windows\System32\drivers\etc文件夹下找到hosts文件。对于其它系统用户也都是找到各自系统的host…

字节码编程ASM之两数之和

写在前面 源码 。 看下如何使用ASM来写如下的类: package com.dahuyou.demo.asm;public class AsmSumOfTwo {public AsmSumOfTwo() {}public static void main(String[] var0) {int var1 (new AsmSumOfTwo()).sum(1, 2);System.out.println(var1);}public int su…

Batch学习及应用案例

一、介绍 Batch是一种Windows操作系统中使用的批处理脚本语言,用于自动化执行一系列命令和操作。通过编写批处理脚本,可以实现自动化完成重复性或繁琐的任务,提高工作效率。 Batch脚本可以使用内置的命令和命令行工具,以及调用其…

使用飞书多维表格实现推送邮件

一、为什么用飞书? 在当今竞争激烈的商业环境中,选择一款高效、智能的办公工具至关重要。了解飞书的朋友应该都知道,飞书的集成能力是很强大的,能够与各种主流的办公软件无缝衔接,实现数据交互,提升工作效…

竞赛选题 python区块链实现 - proof of work工作量证明共识算法

文章目录 0 前言1 区块链基础1.1 比特币内部结构1.2 实现的区块链数据结构1.3 注意点1.4 区块链的核心-工作量证明算法1.4.1 拜占庭将军问题1.4.2 解决办法1.4.3 代码实现 2 快速实现一个区块链2.1 什么是区块链2.2 一个完整的快包含什么2.3 什么是挖矿2.4 工作量证明算法&…

vue3中通过vditor插件实现自定义上传图片、录入echarts、脑图、markdown语法的编辑器

1、下载Vditor插件 npm i vditor 我的vditor版本是3.10.2,大家可以自行选择下载最新版本 官网:Vditor 一款浏览器端的 Markdown 编辑器,支持所见即所得(富文本)、即时渲染(类似 Typora)和分屏 …

消息队列选型之 Kafka vs RabbitMQ

在面对众多的消息队列时,我们往往会陷入选择的困境:“消息队列那么多,该怎么选啊?Kafka 和 RabbitMQ 比较好用,用哪个更好呢?”想必大家也曾有过类似的疑问。对此本文将在接下来的内容中以 Kafka 和 Rabbit…

阿里AI-Spring Cloud Alibaba AI:快速搭建自己的通义千问

本文基于官方文档。 Spring AI 官方文档:Spring AI :: Spring AI Reference 中文文档:Spring AI 简介 - spring 中文网 (springdoc.cn) Spring AI 是 Spring 官方社区项目,旨在简化 Java AI 应用程序开发,让 Java 开发者像使用…

流光卡片,生成炫酷文字,开源API

https://fireflycard.shushiai.com/ 这是我的一个网站,流光卡片,主要功能是帮你制作酷炫的文字卡片,用精美的卡片让你的文字生动起来。 展示效果如下: 你可以用它制作卡片,来记录自己的表达。支持设定卡片背景、LOGO…

梗图生成器突然爆红;ElevenLabs发布IOS APP 高质量语音朗读手机各种文本内容;开源工作流架构ControlFlow

✨ 1: 梗图生成器 fabianstelzer 在Glif做的一个超强meme生成器 Glif 是一个工作流,能生成文字图片和视频,用工作流的形式可以完成很多的花样来。 最近爆红的梗图生成器,WOJAK MEME GENERATOR ,也是用工作流的形式来生成这些有…

宝塔面板之 wwwroot修改不了权限

宝塔使用Apache环境,搭建网站出现 You don’t have permission to access this resource.Server unable to read h出错时的解决办法 今天由于某些原因导致我宝塔 在Apache和Nginx运行环境下不断切换,结果我网站全部不能正常打不开了 结果我发现原本宝塔…

boss直聘招聘数据可视化分析

boss直聘招聘数据可视化分析 一、数据预处理二、数据可视化三、完整代码一、数据预处理 在 上一篇博客中,笔者已经详细介绍了使用selenium爬取南昌市web前端工程师的招聘岗位数据,数据格式如下: 这里主要对薪水列进行处理,为方便处理,将日薪和周薪的数据删除,将带有13薪…

自媒体内容创作者必备:ChatGPT助你提升文章质量

随着自媒体的迅猛发展,越来越多的人加入到内容创作的行列。然而,要在这个竞争激烈的领域脱颖而出,不仅需要创意和独特的观点,更需要高质量的文章内容。在这方面,ChatGPT作为一个智能写作助手,能够帮助自媒体…

靠!AI绘画月入过万!是否现实?

前言 AI人工智能已经出现在了越来越多领域中,比如最近一段时间,AI绘画就受到了许多人的关注,一来,其背后隐藏的版权问题、替代性问题引发了人们的广泛讨论,再者,AI绘画在短期时间内成为了流量密码&#xf…

暑假追高必备:ChildLife全新钙镁锌小绿钙

2024年暑假将至,家长们对于孩子的健康关注再次提升,其中补钙成为许多家长关注的重点。暑假期间,孩子有更多时间进行户外活动,加上高温流汗多,身体的钙更容易流失,因此需要额外地补充。为此,美国…

工业AIoT竞赛流程

不要点到重置!!!要刷新虚拟机就点重启 xshell连接虚拟机:ssh rootPublic IP 环境构建 vim /etc/hosts 按 i 进入插入模式,加内网ip和主机名,按esc,按 : ,按wq 三个虚拟机都这样配 …

创新实训博客(十三)——admin前端工作效果

管理/教师端前端工作汇总education-admin: 首先是登录注册页面的展示 管理员 首页 管理员登录后的首页如下图所示 管理员拥有所有的权限 课程管理 1、可以查看、修改、增添、删除课程列表内容 2、可以对课程资源进行操作 3、可以对课程的类别信息进行管理&…

什么类型的网站需要配置OV证书

目录 什么网站更适合OV证书: 申请OV需要注意: 申请单位组织验证型OV SSL证书的详细步骤 OV SSL证书全称Organization Validation SSL(组织验证性SSL证书),是一种需要验证网站真实身份的数字证书。通过证书颁发机构审查网站企业身份和域名所…

3D模型优化10个最佳实践

对于许多在建模、渲染和动画方面经验丰富的 3D 建模者来说,3D 优化可能是一个令人畏惧的过程 - 特别是当你正在优化实时应用程序的 3D 模型时! 在 Google 上快速搜索“如何优化 3D 文件”将会出现一些建议,例如减少多边形数和消除多余的顶点。…