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

news/2024/5/18 11:52:45 标签: fpga开发, udp, 网络协议, XGMII

目录

  • 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.niftyadmin.cn/n/382528.html

相关文章

c#特性Attribute

C# 特性(Attribute) 特性(Attribute)是用于在运行时传递程序中各种元素(比如类、方法、结构、枚举、组件等)的行为信息的声明性标签。您可以通过使用特性向程序添加声明性信息。一个声明性标签是通过放置在…

华为AR3260路由器配置NAT地址回流

1:地址回流一般指的是内网用户在公司内部通过公网地址访问内部服务器。 2:我一般都是在WEB界面配置NAT相对容易一些。路由器G0/0/0口接的外网,G0/0/1口接的是内网。登录路由器在IP业务中找到NAT。 3:我一般是使用一对一地址转&am…

聊聊我在淘宝做性能分析的经历

我们新推出大淘宝技术年度特刊《长期主义,往往从一些小事开始——工程师成长总结专题》,专题收录多位工程师真诚的心路历程与经验思考,覆盖终端、服务端、数据算法、技术质量等7大技术领域,欢迎一起沟通交流。 本文为此系列第三篇…

面试专题:java多线程(3)---关于 Atomic 原子类

1.介绍一下Atomic 原子类Atomic 翻译成中文是原子的意思。在化学上,我们知道原子是构成一般物质的最小单位,在化学反应中是不可分割的。在我们这里 Atomic 是指一个操作是不可中断的。即使是在多个线程一起执行的时候,一个操作一旦开…

Hibernate框架【四】——基本映射——多对一和一对多映射

系列文章目录 Hibernate框架【三】——基本映射——一对一映射 基本映射——多对一和一对多映射 系列文章目录前言一、多对一映射是什么?1.案例:现在有两个实体User实体和Group,其中多个User属于一个Group,表现出多对一的关系。①…

华为OD机试真题B卷 Java 实现【人民币转换】,附详细解题思路

一、题目描述 考试题目和要点: 中文大写金额数字前应标明“人民币”字样。中文大写金额数字应用壹、贰、叁、肆、伍、陆、柒、捌、玖、拾、佰、仟、万、亿、元、角、分、零、整等字样填写。中文大写金额数字到“元”为止的,在“元”之后,应…

2023年Q1美团财报解读:拨开云雾 始见月明

原文出处:走马财经 5月底,随着京东、阿里巴巴、腾讯、快手、拼多多、美团等相继发布财报,中国互联网主流大公司的财报发布季结束。 一方面他们体量够大,另一方面他们要么深耕零售,要么与零售、消费息息相关&#xff…

【数据库优化-count()】count()统计行数

目录 1 count(*)为什么性能差? 2 优化count(*)性能 2.1 增加redis缓存 2.2 多线程执行 2.3 减少join的表 3 count的各种用法性能对比 数据库:Mysql8、存储引擎是Innodb。 通常情况下,分页接口一般会查询两次数据库,第一次是…