FPGA基于10G Ethernet PCS/PMA的10G UDP网络通信,XGMII接口64bit,提供2套工程源码和技术支持


FPGA基于10G Ethernet PCS/PMA的10G UDP网络通信,XGMII接口64bit,提供2套工程源码和技术支持

1、前言

Xilinx 7系列FPGA实现10G UDP网络通信的MAC层解决方案目前有两种,均为Xilinx官方推出的IP,一个是10G Ethernet Subsystem,另一个是10G Ethernet PCS/PMA;本设计重点介绍基于10G Ethernet Subsystem的10G UDP网络通信设计方案;本设计使用Xilinx系列FPGA基于10G Ethernet PCS/PMA的10G 实现10G UDP网络通信,以FPGA开发板作为远端网卡,PC电脑端作为远端连接对象,中间用10G 网卡为桥接,实现10G UDP网络通信的测试架构;

数据接收:
PC电脑端发起ping操作或者打开网络调试助手发送数据;数据经PC主板的PCIE卡槽给到10G网卡,网卡将数据通过光纤发送给FPGA开发板;FPGA开发板的SFP光口接收PC发来的数据,给到GT BANK,调用Xilinx官方的10G Ethernet PCS/PMA的10G IP核做物理层和链路层解析,并以XGMII-64bit数据流输出数据;然后再给到10G UDP协议栈做以太网数据帧解析,去掉以太网帧头、协议层数据包头,提取有效数据以AXI4-Stream的用户接口输出;接收用户接口将数据给到UDP用户数据测试模块,将接收数据回环转发给PC;到这里,数据接收流程就结束了;

数据发送:
数据发送的发起者是UDP用户数据测试模块,将接收到的数据送入10G UDP协议栈做以太网数据帧组包,加上协议层数据包头、以太网帧头、有效数据然后XGMII-64bit数据流输出数据;再调用Xilinx官方的10G Ethernet PCS/PMA的10G IP核做发送数据的物理层和链路层编码;输出数据经FPGA开发板的SFP光口通过光纤连接10G网卡;10G网卡经PC主板的PCIE卡槽经数据发送给PC端;PC端再用网络调试助手接收数据或打开资源管理器查看网卡速率;到这里,数据发送流程就结束了;

本设计使用的FPGA包括Kintex7和Zynq7100,都属于Xilinx 7系列FPGA,共设计了2套工程源码,详情如下:
在这里插入图片描述
现对上述2套工程源码解释如下:

工程源码1:
开发板FPGA型号为Xilinx Kintex7-325T;使用1个10G Ethernet PCS/PMA IP核,XGMII接口64bit,做接收转输出的回环测试,输入输出接口为1路SFP光口,功能是10G UDP网络通信;工程应用是FPGA的10G UDP网卡;

工程源码2:
开发板FPGA型号为Xilinx Zynq7100;使用1个10G Ethernet PCS/PMA IP核,XGMII接口64bit,做接收转输出的回环测试,输入输出接口为1路SFP光口,功能是10G UDP网络通信;工程应用是FPGA的10G UDP网卡;

本博客详细描述了Xilinx系列FPGA基于10G Ethernet PCS/PMA的10G UDP网络通信的设计方案,工程代码可综合编译上板调试,可直接项目移植,适用于在校学生、研究生项目开发,也适用于在职工程师做学习提升,可应用于医疗、军工等行业的高速接口或图像处理领域;
提供完整的、跑通的工程源码和技术支持;
工程源码和技术支持的获取方式放在了文章末尾,请耐心看到最后;

免责声明

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

2、我这里已有的UDP方案

我这里已有的以太网方案

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

基于10G Ethernet Subsystem的10G UDP网络通信,无巨型帧版本

基于10G Ethernet Subsystem的10G UDP网络通信适用于Xilinx 7系列FPGA,共推出了8套工程源码,与本博客设计架构一样,但使用的UDP协议栈不支持巨型帧,请参考我之前的博客,博客地址如下:
直接点击前往

基于10G Ethernet Subsystem的10G UDP网络通信,支持巨型帧版本

基于10G Ethernet Subsystem的10G UDP网络通信适用于Xilinx 7系列FPGA,共推出了8套工程源码,与本博客设计架构一样,但使用的UDP协议栈支持巨型帧,请参考我之前的博客,博客地址如下:
直接点击前往

基于10G/25G Ethernet Subsystem的10G UDP网络通信,无巨型帧版本

基于10G/25G Ethernet Subsystem的10G UDP网络通信适用于Xilinx KU系列FPGA,共推出了4套工程源码,与本博客设计架构一样,但使用的UDP协议栈不支持巨型帧,请参考我之前的博客,博客地址如下:
直接点击前往

基于10G/25G Ethernet Subsystem的10G UDP网络通信,支持巨型帧版本

基于10G Ethernet Subsystem的10G UDP网络通信适用于Xilinx KU系列FPGA,共推出了4套工程源码,与本博客设计架构一样,但使用的UDP协议栈支持巨型帧,请参考我之前的博客,博客地址如下:
直接点击前往

3、详细设计方案

设计框图

本设计使用的工程详细设计方案框图如下:
在这里插入图片描述

测试用PC端电脑

测试用PC端电脑要求如下:
主板有PCIE卡槽,能插10G 网卡;
安装网络调试助手软件,软件已提供在资料包中;
我的10G 网卡插到主板如下:
在这里插入图片描述

测试用10G 网卡

测试用10G 网卡要求如下:
必须支持10G速率;
必须是SFP光口;
必须安装好网卡驱动,驱动找卖家要;
我的网卡驱动安装后如下:
在这里插入图片描述

SFP光口

FPGA开发板需要至少拥有1路SFP光口,且至少支持10G速率,此外还需要SFP光模块和光纤,用于连接10网卡,我的FPGA开发板与10G 网卡连接如下:
在这里插入图片描述

10G Ethernet PCS/PMA 详解

10G Ethernet PCS/PMA是Xilinx推出的具有10G速率的MAC,用户接口为XGMII,使用Xilinx GT高速接口作为物理层,官方数据手册为《PG068》,本博对10G Ethernet PCS/PMA的解析主要是对《PG068》的翻译和总结,详细细节读者还需自行阅读官方英文原版手册;
10G Ethernet PCS/PMA框架如下:
在这里插入图片描述
与之前博客使用的10G Ethernet Subsystem不同,10G Ethernet PCS/PMA更为底层,并不包含10G MAC,用户接口为XGMII,需要用户自行设计MAC;

10G Ethernet PCS/PMA 用户接口

10G Ethernet PCS/PMA 用户接口为XGMII,可配置为32bit或64bit,本设计配置为64bit,发送时序如下:
在这里插入图片描述
XGMII发送时序非常简单,xgmii_txd为发送数据,xgmii_txc为发送控制,xgmii_txc=0时表示发送的是有效数据,xgmii_txc=1时表示发送的是控制信息;当xgmii_txd位宽为64bit时,xgmii_txc[7:0]指示低字节到高字节的xgmii_txd数据;

接收时序如下:
在这里插入图片描述
XGMII接收时序非常简单,xgmii_rxd为发送数据,xgmii_rxc为发送控制,xgmii_rxc=0时表示发送的是有效数据,xgmii_rxc=1时表示发送的是控制信息;当xgmii_rxd位宽为64bit时,xgmii_rxc[7:0]指示低字节到高字节的xgmii_rxd数据;

10G Ethernet PCS/PMA使用

10G Ethernet PCS/PMA通过调用IP方式使用,这里只对重点配置讲解,如下:
在这里插入图片描述
7系列FPGA只能选择10GBASE-R标准,配置为64bit数据位宽,所以GT硬件设计的差分时钟必须为156.25M;这点很重要,因为它对硬件有定性要求,可以选择SIL系列可编程的差分晶振,否则硬件设计兼容性很差;

XGMII接口的10G UDP协议栈–概述

XGMII接口的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,不带ICMP(ping)功能;
7:XGMII-64bit接口,156.25 MHz 时钟;可与 Xilinx 的 10G Ethernet PCS/PMA连接使用;

10G-UDP协议栈由接收和发送两大功能模块组成,模块具体框图如下:
在这里插入图片描述
XGMII接口的10G UDP协议栈模块的顶层parameter参数解释如下:
在这里插入图片描述

XGMII接口的10G UDP协议栈–发送接口描述

10G UDP协议栈的时钟、复位和HOST-SETTINGS接口为固定接口,其余都是独立接口,其中发送用户接口为AXI4-Stream,与MAC层的数据接口为XGMII接口;HOST-SETTINGS接口主要配置主从机的IP地址、MAC地址、子网掩码等,这些配置信息将传递到UDP的接收和发送通路逻辑中去;
用户发送接口为AXI4-Stream时序,功能描述如下:
在这里插入图片描述
其中:
TX_FRAME_VALID等于AXI4-Stream的axis_tvalid;
TX_FRAME_RDY等于AXI4-Stream的axis_tready;
TX_FRAME_LAST等于AXI4-Stream的axis_tlast;
TX_FRAME_BE等于AXI4-Stream的axis_tkeep;
TX_FRAME_DATA等于AXI4-Stream的axis_tdata;

对于FPGA开发者而言,最关注的莫非于用户接口的时序,某种意义而言,看懂了用户时序,或者给出了用户时序图,我们就可以写出对接的时序,就能设计我们想要的功能,对于发送端的时序而言主要由两个,一个是数据发送前的UDP/IP的基本参数的输入,HOST-SETTINGS接口主要配置主从机的IP地址、MAC地址、子网掩码等,才发送时序下的载入如下:
在这里插入图片描述
可以看到,第1个时钟到第4个时钟之间虽然IP、MAC等参数虽已载入总线,但TX_FRAME_VALID和TX_FRAME_RDY并未握手成功,所以为无效数据,在第5个时钟被采集;
数据传输时的用户发送时序如下:
在这里插入图片描述

XGMII接口的10G UDP协议栈–接收接口描述

10G UDP协议栈的时钟、复位和HOST-SETTINGS接口为固定接口,其余都是独立接口,其中接收用户接口为AXI4-Stream,与MAC层的数据接口为XGMII接口;HOST-SETTINGS接口主要配置主从机的IP地址、MAC地址、子网掩码等,这些配置信息将传递到UDP的接收和发送通路逻辑中去;
用户接收接口为AXI4-Stream时序,功能描述如下:
在这里插入图片描述
其中:
RX_FRAME_VALID等于AXI4-Stream的axis_tvalid;
RX_FRAME_RDY等于AXI4-Stream的axis_tready;
RX_FRAME_LAST等于AXI4-Stream的axis_tlast;
RX_FRAME_BE等于AXI4-Stream的axis_tkeep;
RX_FRAME_DATA等于AXI4-Stream的axis_tdata;

对于FPGA开发者而言,最关注的莫非于用户接口的时序,某种意义而言,看懂了用户时序,或者给出了用户时序图,我们就可以写出对接的时序,就能设计我们想要的功能,对于接收端的时序而言主要由两个,一个是数据发送前的UDP/IP的基本参数的输入,HOST-SETTINGS接口主要配置主从机的IP地址、MAC地址、子网掩码等,才发送时序下的载入如下:
在这里插入图片描述

XGMII接口的10G UDP协议栈–配置接口描述

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

IP地址修改

工程可修改FPGA开发板的IP地址、MAC地址、端口号等信息,同时也可以修改远程节点的IP地址、端口号等信息,其中目的IP地址、目的MAC地址和端口号不需要设置,因为代码里直接将接收的这些信息直接回环,所以只需将电脑端的IP设置为与FPGA端同一网段即可,IP等地址修改代码如下:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

工程源码架构

由于10G Ethernet PCS/PMA与10G UDP协议栈接口众多,为了减少例化与连线的负担,工程采用Block Design方式搭建工程,其中10G Ethernet PCS/PMA为直接添加IP核,10G UDP源码顶层文件直接拖入Block Design形成IP,搭建好后的Block Design如下:
在这里插入图片描述
综合后的代码架构如下:
在这里插入图片描述

4、工程源码1详解:K7版本,10G Ethernet PCS/PMA架构

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

5、工程源码1详解:Zynq版本,10G Ethernet PCS/PMA架构

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

6、工程移植说明

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软核;

7、上板调试验证并演示

测试器材准备

本实验需要如下设备:
FPGA开发板,可以使用你自己的,也可以使用本博主的;
SFP光模块,支持10G线速率;
光纤,支持10G线速率;
10G网卡;
带PCIE的电脑主机;
网络调试助手软件;

PC端准备工作

首先插上你的10G网卡;
然后安装网卡驱动;
然后修改网卡IP地址如下:
将你的电脑IP地址改为和代码里规定的IP一致,当然,代码里的IP是可以任意设置的,但代码里的IP修改后,电脑端的IP也要跟着改,我的设置如下:
在这里插入图片描述

绑定ARP

由于10G UDP协议栈不支持动态ARP,所以需要手动绑定,操作如下:
在这里插入图片描述
在这里插入图片描述
输入指令分别如下:
arp -s 192.168.10.1 aa-bb-cc-dd-ee-ff
arp -a

数据收发测试

确保工程代码中的UDP用户数据测试模块选择的是接收数据回环功能;
下载bit;
然后是用网络调试助手进行数据收发测试,如下:
在这里插入图片描述
既有手动收发测试,也有循环12小时的长时间收发测试,测试结果没有出现丢包的情况。。。

8、福利:工程源码获取

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

  • 3
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

9527华安

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值