FPGA纯vhdl实现XGMII接口10G万兆网UDP协议 配合10G Ethernet PCS/PMA使用 提供工程源码和技术支持

news2024/12/23 14:39:48

目录

  • 1、前言
  • 2、我这里已有的UDP方案
  • 3、详细设计方案
    • 本 10G-UDP 协议栈功能和性能描述
    • 本 10G-UDP 协议栈设计框图
    • 用户发送AXIS接口描述
    • 用户接收AXIS接口描述
    • 控制接口描述
    • XGMII接口描述
  • 4、vivado工程详解
    • 10G-UDP协议栈
    • 10G Ethernet PCS/PMA IP核
  • 5、上板调试验证并演示
  • 6、福利:工程代码的获取

1、前言

目前网上的fpga实现udp基本生态如下:
1:verilog编写的udp收发器,但不带ping功能,这样的代码功能正常也能用,但不带ping功能基本就是废物,在实际项目中不会用这样的代码,试想,多机互联,出现了问题,你的网卡都不带ping功能,连基本的问题排查机制都不具备,这样的代码谁敢用?
2:带ping功能的udp收发器,代码优秀也好用,但基本不开源,不会提供源码给你,这样的代码也有不足,那就是出了问题不知道怎么排查,毕竟你没有源码,无可奈何;
3:使用了Xilinx的Tri Mode Ethernet MAC三速网IP实现,这样的代码也很优秀,但还是那个问题,没有源码,且三速网IP需要licence,三速网IP实现了rgmii到gmii再到axis的转换;
4:使用FPGA的GTX资源利用SFP光口实现UDP,通信,这种方案不需要外接网络变压器即可完成,本方案就是此种设计;

本设计使用纯VHDL代码实现的UDP协议栈实现UDP通信的MAC层设计,调用Xilinx官方的10G Ethernet Subsystem IP核实现了网络变压器的功能,从而实现无需外挂网络芯片即可实现UDP通信的方案,轻松实现时下热门的10G万兆网通信;进行10G UDP数据回环测试;本例程使用的10G UDP该协议栈带有用户接口,使得用户无需关心复杂的UDP协议而只需关心简单的用户接口时序即可操作UDP收发,非常简单;本设计通过数据的回环收发,在电脑端使用网络调试助手进行UDP收发验证;

本设计链接1路SFP光口,配置为UDP服务器,本设计经过反复大量测试稳定可靠,可在项目中直接移植使用,工程代码可综合编译上板调试,可直接项目移植,适用于在校学生、研究生项目开发,也适用于在职工程师做项目开发,可应用于医疗、军工等行业的数字通信领域;
提供完整的、跑通的工程源码和技术支持;
工程源码和技术支持的获取方式放在了文章末尾,请耐心看到最后;

2、我这里已有的UDP方案

目前我这里有如下几种UDP方案和应用实例:
我的博客主页有个FPGA以太网通信专栏,专栏是免费的,里面有很多FPGA实现的UDP应用,既有常规千兆网也有万兆网方案,对网络通信有需求的兄弟可以去看看:直接点击前往

3、详细设计方案

本 10G-UDP 协议栈功能和性能描述

1:为了更加收敛的时序和更加严谨的逻辑,代码采用纯VHDL语言编写;
2:由于使用了 xpm_fifo_sync 源语,目前只能在Xilinx平台使用;若需在Altera、国产FPGA等平台移植,将xpm_fifo_sync源语替换为所在平台的 fifo 源语或者 fifo ip 即可;
3:基于 UDP 协议的通信协议,全带宽高达 10 Gbps 的速度,且经过反复测试不丢失数据包;
4:UDP 数据包缓冲 fifo 深度可调,也就是说在满足 UDP 数据包最大边界的情况下可自由配置 UDP 数据包大小;
5:基于 IPv4,IP广播,不支持碎片整理;不支持 IPv6;
6:静态ARP,不带ping功能;
7:XGMII 接口,156.25 MHz 时钟 64bit 数据位宽;可与 Xilinx 的 10G Ethernet 连接使用;

本 10G-UDP 协议栈设计框图

10G-UDP协议栈由接收和发送两大功能模块组成,模块具体框图如下:
在这里插入图片描述
顶层文件拖入vivado的Block Design后以IP的形式更加直观的体现10G-UDP协议栈的接口关系,如下:
在这里插入图片描述

用户发送AXIS接口描述

时钟、复位和HOST-SETTINGS接口为固定接口,其余都是独立接口,其中接收和发送的用户接口为自定义具有握手机制的接口,与MAC层的数据接口为XGMII接口;
HOST-SETTINGS接口主要配置主从机的IP地址、MAC地址、子网掩码等,这些配置信息将传递到UDP的接收和发送通路逻辑中去;
用户发送接口功能描述如下:
在这里插入图片描述
根据上表可知,用户数据在TX_FRAME_VALID和TX_FRAME_RDY都为高时被采集,也就是前面说的握手机制,TX_FRAME_LAST表示一帧数据的结束,TX_FRAME_BE[7:0]表示8个字节数据的使能,TX_FRAME_DATA[63:0]是发送的数据,这个接口其实就是去掉了TUSER的AXIS接口,这里的数据是以帧的形式传输的,那么一帧数据到底包括多少个TX_FRAME_DATA[63:0]呢?帧数据大小的设置是通过参数设置的,如下:
在这里插入图片描述
这些参数的具体释义如下:
在这里插入图片描述
对于FPGA开发者而言,最关注的莫非于用户接口的时序,某种意义而言,看懂了用户时序,或者给出了用户时序图,我们就可以写出对接的时序,就能设计我们想要的功能,对于发送端的时序而言主要由两个,一个是数据发送前的UDP/IP的基本参数的输入,HOST-SETTINGS接口主要配置主从机的IP地址、MAC地址、子网掩码等,才发送时序下的载入如下:
在这里插入图片描述
可以看到,第1个时钟到第4个时钟之间虽然IP、MAC等参数虽已载入总线,但TX_FRAME_VALID和TX_FRAME_RDY并未握手成功,所以为无效数据,在第5个时钟被采集;
数据传输时的用户发送时序如下:
在这里插入图片描述

用户接收AXIS接口描述

时钟、复位和HOST-SETTINGS接口为固定接口,其余都是独立接口,其中接收和发送的用户接口为自定义具有握手机制的接口,与MAC层的数据接口为XGMII接口;
HOST-SETTINGS接口主要配置主从机的IP地址、MAC地址、子网掩码等,这些配置信息将传递到UDP的接收和发送通路逻辑中去;
用户接收接口和发送接口差不多,所以不再详细描述,参考前面的发送部分描述即可,这里只给出时序图;
用户接收接口功能描述如下:
在这里插入图片描述
在这里插入图片描述

控制接口描述

本 10G UDP 协议栈留有控制接口,可以通过控制接口控制不同的速率,此外,还可以配置如下:
在这里插入图片描述
HOST-SETTINGS接口主要配置主从机的IP地址、MAC地址、子网掩码等,这些配置信息将传递到UDP的接收和发送通路逻辑中去,如下:
在这里插入图片描述

XGMII接口描述

XGMII接口很简单,和10G Ethernet IP的XGMII接口对接,如下:
在这里插入图片描述

4、vivado工程详解

开发板FPGA型号:Xilinx–xc7k325tffg676-2;
开发环境:vivado2019.1;
输入/输出:SFP光口;
网卡速度:10G;
测试项:UDP数据回环;

工程整体架构、模块架构、硬件连接如下:
在这里插入图片描述
10G-UDP协议栈工程以10G-UDP协议栈为核心,调用Xilinx官方的10G Ethernet PCS/PMA IP核,在无需网络变压器芯片的情况下,利用Xilinx的GTX资源实现了物理层的PCS和PMA功能,最后通过SFP光口收发UDP数据,SFP接头的光纤线缆连接10G网卡,网卡通过PCIe插在电脑主机的主板上,电脑端打开网络调试助手实现和FPGA的网络数据UDP包的收发,FPGA端的10G-UDP协议栈将收发回环起来,这样就形成了UDP数据的回环收发;
对应的,vivado工程的Block Design如下:
在这里插入图片描述

10G-UDP协议栈

将 10G-UDP 协议栈的用于TX和用户RX接口对接起来形成回环,同时设置FIFO深度和RAM类型,还需设置主机IP地址、MAC地址、子网掩码等信息,系统上电后,10G-UDP协议栈将自动实现数据的回环收发;10G-UDP协议栈配置如下:
1:设置链路速率为 10Gbps:
在这里插入图片描述
2:设置评估板 MAC 地址为 00-23-20-21-22-23,IP 地址为 192.168.0.25,子网掩码为255.255.254.0;
在这里插入图片描述

10G Ethernet PCS/PMA IP核

本案例使用 10G Ethernet PCS/PMA IP 核实现物理层(PCS 与 PMA)功能;10G Ethernet PCS/PMA IP 核开发文档为Xilinx 官方参考文档《pg068-ten-gig-eth-pcs-pma》,具体配置说明如下:
1:选中"Additional transceiver control and status ports",新增并设置 TX Pre-Cursor、TX Post-Cursor 和 TX Diff Swing 选项值,以提高 GTX 信号传输质量。其中 tx_pre_cursor设置为 0x15、tx_pre_cursor 设置为 0xA、tx_diff_swing 设置为 0x9;
在这里插入图片描述
在这里插入图片描述
2:勾选 Shared Logic 的"Include Shared Logic in core",配置 10G Ethernet PCS/PMA IP核包含共享逻辑;
在这里插入图片描述
工程代码架构如下:
在这里插入图片描述
综合编译后的FPGA资源消耗和功耗预估如下:
在这里插入图片描述

5、上板调试验证并演示

本实验需要用户自己准备 10G 网卡,插到电脑主板上。下图为我在某鱼上买的二手货。。。
在这里插入图片描述
连接方式如下:
在这里插入图片描述
开发板侧SFP连接如下:
在这里插入图片描述
FPGA开发板 IP 地址已通过10G-UDP协议栈模块配置为 192.168.0.25。请设置 PC 机 IP 地址与FPGA开发板 IP 地址处于同一网段。此处将 PC 机 IP 地址设置为 192.168.0.88,子网掩码设为255.255.254.0;
在这里插入图片描述
请下载bit运行程序,此时 PC 机将会识别网络连接状态为 10Gbps;
在这里插入图片描述
由于10G-UDP协议栈模块不支持 动态ARP(Address Resolution Protocol)地址解析协议,因此需通过添加FPGA开发板 IP 地址和 MAC 地址的静态映射关系。请以管理员身份打开 Windows PowerShell或者CMD,并执行如下命令;
在这里插入图片描述
双击打开网络调试工具 SocketTool_NoAD.exe,在弹出的界面中点击“UDP Client -> 创建”,在“对方 IP”中输入FPGA开发板 IP 地址,再点击确定;网络调试工具 SocketTool_NoAD.exe已放在资料包中,你们也可以使用其他的网络调试工具;
在这里插入图片描述
在“数据发送窗口”中输入需发送至评估板的数据,再点击“发送数据”。“数据接收及提示窗口”中将打印由 PC 机发送至FPGA开发板 ,以及由评估板发送至 PC 机的数据;
在这里插入图片描述

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

福利:工程代码的获取
代码太大,无法邮箱发送,以某度网盘链接方式发送,
资料获取方式:私,或者文章末尾的V名片。
网盘资料如下:
在这里插入图片描述
在这里插入图片描述

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

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

相关文章

自动缩放Kubernetes上的Kinesis Data Streams应用程序

想要学习如何在Kubernetes上自动缩放您的Kinesis Data Streams消费者应用程序,以便节省成本并提高资源效率吗?本文提供了一个逐步指南,教您如何实现这一目标。 通过利用Kubernetes对Kinesis消费者应用程序进行自动缩放,您可以从其…

nps与npc内网穿透搭建

1.简介 nps是一款轻量级、高性能、功能强大的内网穿透代理服务器。目前支持tcp、udp流量转发,可支持任何tcp、udp上层协议,支持内网http代理、内网socks5代理、p2p等,并带有功能强大的web管理端。 使用内网穿透技术可以使你在公共网络环境也能…

第二章 部署DNS服务

♥️作者介绍:奇妙的大歪 ♥️个人名言:但行前路,不负韶华! ♥️个人简介:云计算网络运维专业人员 目录 一.DNS是什么? 1.DNS的工作原理 二.DNS内容 1.本章单词 2.域名空间结构: 3.顶级域…

企业级开发1.6 JdbcTemplate操作

JdbcTemplate操作 一、JdbcTemplate案例演示(一)创建数据库与表1、创建数据库2、创建用户表3、用户表添加记录4、查看用户表内容 (二)打开Spring项目(三)添加数据库相关依赖(四)创建…

李彦宏疯了?百度要把全部产品重做一遍

大家好,我是校长。 前几天李彦宏参加了在北京举办的 2023 中关村论坛,发表了题为《大模型改变世界》的演讲。 聊到了很多有意思的观点,分享几个,我们一起看看。 1、大模型重新定义了人机交互。 李彦宏说:过去几十年&am…

playwright - 剧作家, 端对端测试

本文基于 playwright v1.34.3, node v18.16.0 注意:playwright 版本随 node lts 版本更新而更新,所以请确保 node 版本与 playwright 版本匹配。 写在前面 前端开发阶段,少不了测试,一般包含两类测试:单元测试、端对端…

chatgpt赋能python:Python中输入怎么写?完整教程

Python中输入怎么写?完整教程 如果你正在学习Python编程,那么输入是你必须掌握的重要概念之一。在Python中,输入是指将数据从用户的键盘输入到程序中。这些数据可以是字符串、整数、浮点数或其他任何类型的值。本文将提供有关Python中输入的…

外贸大环境下soho人策略

前阵子也跟一个工厂在聊,现在普遍毛利率只有5%-6%,根本不敢涨价,能不降价就不错了(汇率在涨,所以有的客户还会要求降价)。 卷是一定的。而且,各位如果有了解过拼多多的TEMU业务的,应…

1727_使用虚拟机安装CentOS-7

全部学习汇总:GreyZhang/little_bits_of_linux: My notes on the trip of learning linux. (github.com) 离开Linux很久了,甚至怀念,虚拟机里装个CentOS 7玩玩。使用的是VM虚拟机,下载了CentOS 7的everything安装包。 1&#xf…

chatgpt赋能python:Python中符号怎么输入

Python中符号怎么输入 如果你是一位Python程序员,你肯定会经常使用各种符号,比如冒号、逗号、括号、引号等等。但是有些符号在输入的时候可能会有一些困难,尤其是对于初学者而言。那么在Python中符号怎么输入呢?下面我们来详细介…

4.1 文件操作(File类)

ava中,对文件操作的常用类是java.io.File。这个类提供了许多方法来操作文件和目录。本章节我们将学习关于File类的重要方法以及如何使用它们来操作文件。 4.1.1 创建File对象 创建一个File对象不会在磁盘上创建一个新文件。File对象只是一个在Java代码中表示文件或…

代码覆盖率

在做单元测试时,代码覆盖率常常被拿来作为衡量测试好坏的指标,甚至,用代码覆盖率来考核测试任务完成情况,比如,代码覆盖率必须达到80%或 90%。于是乎,测试人员费尽心思设计案例覆盖代…

【30天熟悉Go语言】4 Go的变量、常量、运算符

文章目录 一、前言二、变量1、变量的基础使用2、变量的多种使用方式1)全局变量2)局部变量3)丢弃赋值 3、Go和Java的变量对比 三、常量1、Go和Java的常量对比 三、运算符1、算术运算符 、--2、运算符 &、* 四、总结 一、前言 Go系列文章&a…

计算机组成原理 之 第四章 指令系统

1. 指令格式 通常包括操作码字段(OP)和地址码字段(A),有的指令不需要地址码 指令系统(指令集):一台计算机的所有指令的集合,eg:X86、ARM (1&#…

手机安卓Termux搭建Hexo博客网站,发布公网访问

文章目录 1. 安装 Hexo2. 安装cpolar内网穿透3. 公网远程访问4. 固定公网地址 转载自cpolar极点云的文章:安卓手机使用Termux搭建Hexo个人博客网站【内网穿透公网访问】 Hexo 是一个用 Nodejs 编写的快速、简洁且高效的博客框架。Hexo 使用 Markdown 解析文章&#…

一键搭建本地Wordpress环境 - MacOS

写在前面:博主是一只经过实战开发历练后投身培训事业的“小山猪”,昵称取自动画片《狮子王》中的“彭彭”,总是以乐观、积极的心态对待周边的事物。本人的技术路线从Java全栈工程师一路奔向大数据开发、数据挖掘领域,如今终有小成…

聊聊企业无线网络安全

新钛云服已累计为您分享749篇技术干货 不知不觉无线网络已经成为了办公网主流。最早接触无线网络的时候是2001年,那时候笔记本电脑还比较少见,标配也不支持无线网络,要使用无线网络需要另外加一块PCMIA接口的无线网卡。第一次体验无线网络的时…

【k8s】Jenkins实现springcloud应用CI、CD实践 【三】

一、运行Jenkins流水线流程思路: 场景:java微服务应用, 单体仓库,多个微服务模块,(并行构建、自动化构建、根据模块变更仅更新特定模块) java、nodejsCI阶段 并行方式; 根据模块变…

【AUTOSAR】Com通讯栈配置说明(三)---- CanSM模块

CanNm模块 该项目中的Nm 并非 autosar nm, 不适用ETAS 配置 CanSM CanSMConfiguration CanSMModeRequestRepetitionMax: 模式请求失败后最大的重试次数 CanSMModeRequestRepetitionTime:模式请求重试时间间隔 CanSMManagerNetworks CanSMBorCounterL1…

数据结构与算法-递归

2.3 递归 概述 定义 计算机科学中,递归是一种解决计算问题的方法,其中解决方案取决于同一类问题的更小子集 In computer science, recursion is a method of solving a computational problem where the solution depends on solutions to smaller in…