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

news2024/11/25 3:01:00

目录

  • 1、前言
  • 2、我这里已有的UDP方案
  • 3、详细设计方案
    • 传统UDP网络通信方案
    • 本方案详细设计说明
      • DMA和BRAM
      • AXIS-FIFO
      • 10G-UDP协议栈
      • 10G Ethernet PCS/PMA IP核
      • 输出
  • 4、vivado工程详解
    • Block Design设计
    • SDK设计
  • 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通信,这种方案不需要外接网络变压器即可完成,本方案就是此种设计;

本设计调用Xilinx的10G Ethernet PCS/PMA IP,使用纯VHDL语言编写的10G UDP协议栈实现UDP通信的MAC层设计,调用Xilinx官方的10G Ethernet PCS/PMA IP核实现了网络变压器的功能,从而实现无需外挂网络芯片即可实现UDP通信的方案;U10G UDP协议栈已封装为AXIS接口和XGMII接口,使得用户无需关心复杂的UDP协议而只需关心简单的用户接口时序即可操作UDP收发,非常简单;本设计调用AXI DMA和MicroBlaze,实现软核通过DMA发起UDP通信,MicroBlaze也可以用zynq代替,实现了zynq里PS软件通过调用PL端硬件资源实现10G万兆网UDP通信的功能;

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

2、我这里已有的UDP方案

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

3、详细设计方案

传统UDP网络通信方案

在讲述设计方案之前,我们先来看看FPGA实现UDP通信方案应具备什么条件,大体如下:
在这里插入图片描述
1:用户逻辑:
开发者需要收发的实际数据,可以以多种形势存在,比如自定义格式、AXIS数据流格式等等,用户逻辑的接口时序必须与MAC层的接口时序一致;
2:MAC层
主要由UDP、IP、ARP、ICMP等具体的协议逻辑组成,实现网络数据的组包与拆包,相当于做了软件里Sockte做的事儿,Sockte依赖CPU做网络数据包,而这里的MAC层直接使用硬件资源做网络数据包,解放了网络数据包对CPU的奴役,在当今时髦儿的RDMA中得以完美体现。。。本设计的MAC层采用米联客的UDP协议栈,关于这部分,请参考我之前写的文章
3:网络变压器
主要由PCS/PMA组成,PCS主要实现并行数据的编解码,比如经典的8b/10编解码,PMA主要实现并串/串并转换,输出接口是高速差分信号,可直接与SFP或者RG45网口连接;
4:RJ45网口:俗称水晶头,插网线的。。。
5:远端节点
本FPGA开发板可以理解为一个网卡,远端节点就是与之连接的另一个网卡,比如电脑主机上的网卡;

本方案详细设计说明

本设计与上述传统的FPGA实现UDP方案不同的是网络变压器部分,前面的网络变压器是真实的网络PHY芯片,比如我常用到的RTL8211、B50610、88E1518等等;本设计没有用到网络变压器,而是调用Xilinx官方的10G Ethernet PCS/PMA IP核实现了网络变压器的功能,通过SFP光口输出实现UDP协议数据通信,设计框图如下:
在这里插入图片描述

DMA和BRAM

AXI-BRAM充当存储介质,可以用DDR代替,AXI-BRAM负责存储待发送UDP模块的数据,也存储从UDP模块接收到的UDP数据,如果数据量大,则可换成DDR,将AXI-BRAM换成AXI-MIG;AXI-DMA充当软件和硬件之间的桥梁,MicroBlaze软核通过AXI-Lite接口控制DMA的数据流向,也可以将软件侧的数据通过DMA发送出去,后端的UDP模块和AXI-Ethernet等硬件资源完全无需关心;如果是zynq系列器件,则可把MicroBlaze软核替换为Zynq软核,这样就实现了PS和PL资源的交互,且PS软件可直接控制硬件UDP协议完成数据收发,在架构上属于高端架构。。。

AXIS-FIFO

AXIS-FIFO充当AXI-DMA与UDP模块的桥梁,因为AXI-DMA的用户接口为AXIS数据流,而UDP模块也已封装为FIFO接口,所以直接调用两个AXIS-FIFO轻松实现不同数据接口模块之间的屋里连接,这里调用两个AXIS-FIFO,一个作为接收,另一个作为发送;

10G-UDP协议栈

10G-UDP协议栈的用户接口和外部接口分别为AXIS接口和XGMII接口,关于10G-UDP协议栈的详细描述,请参考我之前写的文章,文章链接:https://blog.csdn.net/qq_41667729/article/details/130897803

10G Ethernet PCS/PMA IP核

本案例使用 10G Ethernet PCS/PMA IP 核实现物理层(PCS 与 PMA)功能;10G Ethernet PCS/PMA IP 核开发文档为Xilinx 官方参考文档《pg068-ten-gig-eth-pcs-pma》,具体配置请参考我之前写的文章,文章链接:https://blog.csdn.net/qq_41667729/article/details/130897803

输出

10G Ethernet PCS/PMA IP 核直接输出到SFP接口,并使SFP光口的收发两端相连形成数据回环,即可完成工程的硬件连接,另外,为了与FPGA开发板通信和打印测试信息,工程还调用了一个AXI Uart IP,所以还需要一根USB转串口线连接开发板与电脑,电脑打开串口调试助手接口收到FPGA开发板打印的信息;串口波特率为115200,数据位8,无校验;

4、vivado工程详解

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

Block Design设计

工程Block Design如下:
在这里插入图片描述
在这里插入图片描述
综合后的工程代码架构如下:
在这里插入图片描述
综合编译后的FPGA资源消耗和功耗预估如下:
在这里插入图片描述

SDK设计

SDK代码架构如下:
在这里插入图片描述
SDK实现的功能主要如下:
1:设置传输数据包大小为 65524Byte,如图:
在这里插入图片描述
2:初始化并校准 Timer,如图:
在这里插入图片描述
3:初始化 DMA 设备,如图:
在这里插入图片描述
4:使用轮询模式,关闭 DMA 中断,如图:
在这里插入图片描述
5:构建每次传输所要发送的数据包,如图:
在这里插入图片描述6:分别往 DMA 设备写入源6:地址、目的地址与数据量,并启动 DMA 传输,如图:
在这里插入图片描述
7:启动 DMA 传输后,使用 Timer 进行计时,等待 DMA 传输完成后计算数据传输速率,由于进行 UDP 数据收发时,需将一帧数据包完全存入 FIFO 中才能继续进行数据发送或接收,从而产生时延,因此该案例测试 UDP 数据传输速率时,仅统计 DMA 将数据搬运到 FIFO 的时间,如图:
在这里插入图片描述8:每次传输完成后,对传输8:数据进行校验,如图:
在这里插入图片描述
在这里插入图片描述
9:计算数据传输平均速率与误码率,如图:
在这里插入图片描述

5、上板调试验证并演示

本设计连接1路SFP光口,并使SFP光口的收发两端相连形成数据回环,如下:
在这里插入图片描述
打开vivado工程,编译后导出bit,运行SDK,然后通过SDK下载程序运行,打开电脑的串口调试助手,你会看到如下打印即可看到串口调试终端打印 SFP+光口外部回环的数据传输测试信息。
本案例的 GTX 带宽配置为 10Gbps,即 1250MB/s。如下:
在这里插入图片描述
可从上图得到如下信息:
SFP+光口外部回环的数据传输速率为 1197MB/s;
SFP+光口外部回环的数据传输误码率为 0;

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

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

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

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

相关文章

【ChatGPT】开发人员教程:38 种提高 10 倍工作效率的方法(附Youtube视频地址)...

1. 推荐3本顶级的学习xx的书籍 2. 询问细节:“Head first Java”的主要内容是什么?What are the key takeaways from "Head first Java"? 3. 我如何成为一名前端开发人员?How do I become a front-end developer? (英…

JVM-常用工具(jps、jstat、jinfo、jmap、jhat、jstack、jconsole、jvisualvm)使用

场景 记录JVM中常用工具。 jps:虚拟机进程状态工具 jps(JVM Process Status Tool):虚拟机进程状态工具,可以列出正在运行的虚拟机进程, 并显示虚拟机执行主类(Main Class,main()函数所在的类)的名称&am…

【Mininet】安装篇:安装Mininet

大家好,我是皮皮猫吖! 每文一言:改变你的生活,现在或者从不 本篇文章: 本文是安装 mininet 的简单过程。 正文如下: 一、Mininet的安装 第一步:安装git apt install git 第二步&#xff…

element-ui配置按需引入和全局引入

镇楼图 按需引入 安装element-plus cnpm install element-plus --save 安装按需导入 cnpm install -D unplugin-vue-components unplugin-auto-import修改vite.config.js配置按需加载 import AutoImport from unplugin-auto-import/viteimport Components from unplugin-vue-…

30天从入门到精通TensorFlow1.x第一天,如何创建张量

文章目录 一、TensorFlow基本概念1. 什么是TensorFlow2. TensorFlow的组成3. TensorFlow的三个重要模型 二、TensorFlow的重要底层库1. 先简单来个 helloWord2. 张量什么是张量如何创建张量创建张量(1). 通过定义常量来进行创建张量(2&#x…

Java学习笔记21——常用API

常用API 常用APIMath类Math的常用方法 System类System类常用方法 Object类Object类常用方法 Arrays类Arrays常用方法 基本类型包装类Integer类的概述和使用int和String的相互转换自动装箱和拆箱 日期类Date类Date类的常用方法 SimpleDateFormat类SimpleDateFormat的构造方法Sim…

【计算机网络实验】静态路由协议和RIP协议仿真实验

实验内容  静态路由协议和RIP协议仿真实验 实验目的 1 路由器及路由协议基础知识 2 静态路由配置实验 (1)掌握静态路由和RIP的配置方法; (2)掌握通过静态路由和RIP方式实现网络的连通性; (3…

什么是品牌推广?品牌推广的基本概念及注意要点

品牌推广是企业进行营销活动的关键之一,而现代市场竞争激烈,如何进行有效的品牌推广也成为企业最为关心的问题之一。本文将为大家介绍品牌推广的基本概念、策略以及注意事项。 一、品牌推广的基本概念 品牌推广是指企业通过多种手段,以宣传产…

电脑软件:键盘按键修改器——keytweak使用介绍

对你的电脑键盘的布局不满意、键盘上的某个按键坏掉了等等键盘问题如何解决?有了KeyTweak这一切就可以轻松解决了,KeyTweak是一个免费软件程序,使用它可让你重新映射键盘键。如果您改变主意并想将其改回原样,只需点击一下即可容易…

如何拍摄家具

产品可视化在几乎所有企业中都至关重要,尤其是电子商务,93%的消费者认为视觉外观是购买决策的关键因素。对于家具公司也是一样的。这是您在市场上建立知名度、吸引潜在客户并让他们购买的方式之一。更不用说如今,客户的要求比以往任何时候都高…

Spring Boot中使用WebSocket

文章目录 为什么要用WebSocket?WebSocket的握手阶段Spring Boot中使用WebSocket添加WebSocket依赖服务器代码编写WebSocketSession如何获取用户信息?创建管理类管理用户与会话客户端代码 为什么要用WebSocket? 我们往往需要一些这样的场景&a…

BGP状态机

BGP协议基本概念 BGP是一种外部网管协议(EGP),与OSPF、RIP等内部网管协议(IGP)不同,其着眼点不在于自动发现网络拓扑,而在于AS之间选择最佳路由和控制路由的传播。 自治系统AS( Autonomous System) 由同一个技术管理机构管理、使用统一选路策略的一些路由器的集合。 …

使用select实现TCP并发服务器模型

文章目录 前言一、select是什么?1.1 高级IO模型1.2 select实现1.3 select缺点: 二、使用select实现TCP并发服务器模型1.引入库2.TCP服务器端3. TCP服务器端3. 运行结果 总结 前言 本期主要分享的是对于select的使用,使用select实现TCP并发服务器模型&am…

JSR-133/Java内存模型(JMM)规范

by Doug Lea, with help from members of the JMM mailing list. 原文地址 The JSR-133 Cookbook for Compiler Writers 重排序(Reorderings)Volatiles and MonitorsFinal Fields 内存屏障(Memory Barrires)屏障类别数据依赖和屏障之间的关系原子指令与屏障之间的相互作用 屏…

总结885

5月小结 数学做了1800基础部分, 英语背了7篇文章 每日必复习(5分钟) 画思维导图1~15讲 学习内容: 英语:继续 背诵《we stand on the same starting point》 数学:进步本题目,我知道为啥总会…

嵌入式调试技巧-代码自动初始化

代码自动初始化 概述 在嵌入式开发过程中,可能会遇到初始化代码自动初始化,比如RTT中就运用到这项技术。那么初始化代码是如何做到自动化调用的呢? 在嵌入式实际开发过程中,往往需要对 bsp 部分进行外设配置,以及一…

springboot+vue+java在线考试系统 试题库组卷系统

这次开发的精品在线试题库系统有管理员,教师,学生三个角色。管理员功能有个人中心,专业管理,学生管理,教师管理,试卷管理,试题管理,考试管理。教师可以管理试题和试卷,查…

基于C#制作一个贪吃蛇小游戏

基于C#制作一个贪吃蛇小游戏,简单耐玩,操作简单。 一、项目创建1.1、创建1.2、素材准备1.3、界面绘制1.4、设置定时器1.5、获取键盘事件1.6、游戏结束事件二、帮助类2.1、坐标DTO2.2、果实DTO2.3、移动DTO结语一、项目创建 1.1、创建 打开Visual Studio,右侧选择创建新项目…

AutoGPT 使用教程及上手体验(一分钟配置可用)

ChatGPT 是新一代 AI 文本助手,可以帮助解决我们在多个领域的问题。 在某些复杂问题上,ChatGPT 需要经过不断的调教与沟通,才能得到接近正确的答案。 当你是某个领域的专家时,你很容易做到这一点。 但是,在你不熟悉…

【Linux】文件的压缩和解压

欢迎来到博主 Apeiron 的博客,祝您旅程愉快 ! 时止则止,时行则行。动静不失其时,其道光明。 目录 1、压缩格式 2、压缩软件 3、tar 命令简介 4、tar 命令压缩 5、总结 1、压缩格式 在市面上有非常多的压缩格式,…