基于7系列FPGA实现万兆网通信

基于7系列FPGA实现万兆网通信

目录

一、FPGA实现万兆以太网

1.1 、10G PCS/PMA核

1.1.1、以太网XGMII接口

1.1.2 、MDIO接口(可选用)

1.1.3、10G PCS/PMA核

1.2、10G Ethernet Subsystem核实现万兆网

二、万兆网功能测试

2.1 、ARP及Ping功能

2.2 、巨型帧

2.3、测速

2.4、代码


        之前分享过u/u+系列FPGA的万兆网通信:UltraScale/+  FPGA实现万兆网的两种方式:GT核、10G Ethernet Subsystem核,在别的平台有些网友问是否支持巨型帧、7系列、速率等问题,这里就专门写篇7系列的万兆网,相关功能的测试。

        今年最后一篇了。明后年主要准备分享些:

  • 低速器件的开发使用、低速协议
  • RFSoC中的ADC、DAC开发使用
  • PCIe核的开发使用,上位机的驱动开发
  • TCP/IP协议、客户端及服务器的开发
  • GIGE千兆/万兆相机的使用开发
  • zynq的相关开发
  • 一些信号处理

一、FPGA实现万兆以太网

          本文只介绍使用10G以太网核和10G PCS PMA核两种方式实现的万兆网通信;基于SerDes实现10G以太网通信采用64B/66B编码方式,串行线速率为10.3125Gbps。

1.1 、10G PCS/PMA核

        关于该核的使用,参考PG068;此核的用户接口为XGMII。

        对于光纤或者RJ45水晶头的接口(10GBASE-R类型),内部功能结构如下:

        万兆网通信采用64B/66B编码。64B/66B编码在发送前需要对数据加扰,在接收数据时也要先对数据解扰。64B/66B编码:在加扰后的64bit数据前加入2bit的同步位(Sync)组成66bit数据,同步位表示该64bit数据是数据帧还是控制帧。

1.1.1、以太网XGMII接口

        这里只讨论64bit数据位宽的XGMII接口;xgmii_txd对应字节为控制字符时,xgmii_txc对应的控制位为高电平;在xgmii_txd对应字节为数据字符时,xgmii_txc对应的控制位为低电平。

        相关时序:

        XGMII接口中相关数据、控制的定义如下:空闲状态为0x07、起始状态为0xFB、终止状态为0xFD。

        关于以太网帧如何对接XGMII接口,可以通过以下过程理解:

        以太网帧结构如下:

图片

        XGMII接口中:一帧报文的封装发送:添加控制符,空闲IDLE(0x07)+ START(0xFB)+ 前导码+ SFD + MAC + ...... + FCS + TERMINATE(0xFD)。比如以下ILA截图:

图片

        控制对应的控制符为1,后续在64B/66B编码中转换为2bit同步位(Sync)。

图片

        在增加起始、结束、空闲控制符后,按下图的转换规则:比如起始S转换为64bit中MSB字节为0x78;空闲状态为64bit中MSB字节为0x1E。

图片

图片

        最后,将上述64bit的接口数据经加扰,送到10G PCS/PMA核的XGMII接口。

        用户接收到XGMII接口数据,按上述逆过程解析网络帧。

1.1.2 、MDIO接口(可选用)

        本部分只有一些场景会用到,不过多描述,具体寄存器描述见PG068的Configuration Vector描述。

          MDIO接口是该核的寄存器配置接口,类似于千兆网PHY的寄存器配置。其相关时序配置如下:

1.1.3、10G PCS/PMA核

        该核需要license,核页面如下:该核只适用于7系列FPGA。

        上述核配置页面不启用:MDIO接口。

        关于该核的时钟、复位部分的使用可参考其example。

1.1.4、万兆网开发

        借助例化上述GT核后,可按照图1开发编码实现PCS相关功能:对于发送帧功能,用户端的帧数据,封装起始、结束、空闲码后,经加扰后,结合同步字段,经变速箱Gearbox,并串转换等,最终经电路传送出去;对于接收,是上述过程的逆操作。

        开发过程主要涉及:帧数据按照上节内容封装与解封、同步字段的增添与解析、加解扰。其中帧数据的封装与解析按照以太网协议进行即可。

        具体网络协议,用户根据具体需要封装、解析即可,比如UDP、TCP、FTP等;这里只讨论万兆网通信方式,不介绍具体协议,协议内容可参考:FPGA实现千兆网UDP协议(含ARP、ICMP)

1.2、10G Ethernet Subsystem核实现万兆网

        该核的用户数据接口为AXIS,这里不再介绍。

        此方式是实现万兆网通信最快捷的方法,需要license。开发按照以太网协议对网络帧进行解析与封装即可,只需关心如下结构:

图片

        其核配置界面如下:

        根据开发板这里选择10GBASE-R类型,64bit的AXIS数据接口。

        AXI-Lite配置接口时钟范围选择,这里没有启用流控。

        这页主要是DRP及状态接口。

        这页没启用时间戳。

        这页选择时钟及复位是集成核内外。多通道的万兆网通信使用核方式与U/U+系列不同。

        关于时钟及复位的使用,可参考其example。

二、万兆网功能测试

        本文只针对UDP协议栈测试,UDP相关协议可参考:FPGA实现千兆网UDP协议(含ARP、ICMP)。千兆、万兆、40G/50G、100G以太网的UDP协议栈的实现原理相同,只是用户数据位宽、CRC检验的实现难易不同。

2.1 、工程实现

        上述两种方式使用相应的核都可以实现万兆网通信,本文采用UDP协议栈测试工程部分功能。这里不介绍UDP协议栈(ARP缓存、ping、UDP),比如向对端发包前,先查询ARP列表,查询无果则ARP寻址后再发包;对于一些明确的场景,也可以省略ARP寻址。

        比如10G万兆网核的工程:

        两端的信息配置:

2.1 、ARP及Ping功能

        通过ping下位机测试arp及ping应答功能:

2.2 、巨型帧

        不同的网卡、路由器等支持的最大MTU不同,但都支持46~1500字节。为了实现长数据包的传输,产生了巨型帧。

        对于多级路由的网络包传输,为了避免中间路由节点的设备丢弃,采用巨帧分片处理:巨帧拆分成多包,利用IP层的头部分片及偏移字段(第2个DW中)区分数据的完整性和顺序。分片的首包保持帧结构的完整字段,MTU最大1500字节;其他分片包在网络帧结构中去除了UDP的头部字段。

图片

        对于点到点直连的应用场景,或者中间路由节点都支持MTU大值(比如9000字节),则利用巨帧时可采用标准的巨帧分片策略,也可采用不分片的策略。

        FPGA向上位机发送长度为8500字节的UDP巨型帧的测试如下:分片为5包1480字节和最后一包1100字节。

        协议栈仿真:测试模块产生8500字节的测试数据,协议栈进行巨帧分片,环回后接收端能正确解析数据。

        10G以太网核上板测试:测试模块产生8500字节的测试数据

        上位机wireshark观测上发的矩阵数据,分片以及偏移量正常:

        从第2个分片开始,不再有UDP头部字段。

         10G PCS/PMA核的测试:

2.3、测速

        两个工程向上位机发包,当接口空闲时一直上发,测速结果近9.5 Gbps:

2.4、代码

        有相关需要的可私信联系。

往期回顾

UltraScale/+  FPGA实现万兆网的两种方式:GT核、10G Ethernet Subsystem核

FPGA 40G/50G Ethernet Subsystem核的使用

FPGA实现100G UDP通信

FPGA实现千兆网UDP协议(含ARP、ICMP)

FPGA光通信系列4 — 基于64b/66b编码的自定义协议

FPGA光通信系列3 — 基于8b/10b编码的自定义协议应用

FPGA光通信系列2——Aurora 64B/66B的使用

FPGA实现Aurora光通信应用(8B/10B)

JESD204B的使用系列——3、DAC的应用(AD9164  9.6GSPS)

JESD204B的使用系列——2、协议及ADC的应用(AD9689)

JESD 204B的使用系列—1、时钟芯片的应用

Read more

零成本搭建飞书机器人:手把手教你用Webhook实现高效消息推送

1. 为什么你需要一个飞书机器人? 在日常工作中,我们经常需要处理各种通知需求。比如系统报警、任务提醒、审批结果通知等等。传统的解决方案包括短信、邮件或者第三方推送平台,但这些方式要么成本高,要么实时性差。飞书机器人提供了一种零成本、高效率的替代方案。 我去年负责的一个ERP系统升级项目就遇到了这个问题。当时我们需要在关键业务流程节点给不同部门的同事发送实时通知。如果使用短信,按照每天200条计算,一个月就要花费上千元。后来我们改用飞书机器人,不仅完全免费,还能实现更丰富的消息格式和精准的@提醒功能。 飞书机器人本质上是一个自动化程序,它通过Webhook技术接收外部系统的消息,并转发到指定的飞书群聊中。这种机制特别适合企业内部系统与飞书之间的集成,比如: * 运维报警通知 * 审批流程提醒 * 业务系统状态更新 * 日报/周报自动推送 * 数据监控预警 2. 5分钟快速创建你的第一个机器人 创建飞书机器人非常简单,不需要任何开发经验。下面我以电脑端操作为例,手把手带你完成整个过程。 首先打开飞书客户端,进入你想要添加机器人的群聊。点击右上角的"..."菜单,

Windows安装Neo4j保姆级教程(图文详解)

Windows安装Neo4j保姆级教程(图文详解)

文章目录 * 前言 * 系统要求 * 安装Java环境 * 步骤1:检查Java版本 * 步骤2:下载Java JDK * 步骤3:安装Java JDK * 下载Neo4j * 步骤1:访问官方网站下载Neo4j * 步骤2:解压Neo4j * 启动Neo4j服务 * 步骤1:以管理员身份打开命令提示符 * 步骤2:导航到Neo4j的bin目录 * 步骤3:安装Neo4j服务 * 步骤4:启动Neo4j服务 * 步骤5:验证服务状态 * 访问Neo4j * 基本操作和配置 * 常用管理命令 * 配置文件修改 * 常见问题解决 * 问题1:端口被占用 * 问题2:Java版本不匹配 * 问题3:服务启动失败 * 总结 前言 Neo4j是一款强大的图数据库,特别适合处理复杂的关系数据。本教程将手把手教你在Windows系统上安装Neo4j,并配置可视化工具,让你快速上手图数据库的世界。 系统要求 在开始安装之前,请确保你的系统满足以下要求: 操作系统:

【保姆级教程】从零入手:Python + Neo4j 构建你的第一个知识图谱

【保姆级教程】从零入手:Python + Neo4j 构建你的第一个知识图谱

摘要: 大数据时代,数据之间的关系往往比数据本身更有价值。传统的 SQL 数据库在处理复杂关系(如社交网络、推荐系统、风控分析)时显得力不从心,而 知识图谱 和 图数据库 Neo4j 正是为此而生。本文将带你从 0 基础出发,理解知识图谱核心概念,安装 Neo4j 环境,并手把手教你用 Python 代码构建一个生动的人物关系图谱。拒绝枯燥理论,全是实战干货! 一、 什么是知识图谱与 Neo4j? 在动手写代码之前,我们先用大白话把两个核心概念捋清楚。 1. 什么是知识图谱 (Knowledge Graph)? 不要被高大上的名字吓到。知识图谱本质上就是把世界上的事物(节点)和它们之间的联系(关系)画成一张巨大的网。 * Excel 思维: 罗列数据。例如:张三,25岁;李四,

AI绘画不求人:Z-Image Turbo本地部署全攻略,开箱即用

AI绘画不求人:Z-Image Turbo本地部署全攻略,开箱即用 你是不是也经历过这样的时刻:看到一张惊艳的AI插画,立刻打开浏览器搜教程,结果被“CUDA版本冲突”“PyTorch编译失败”“显存不足OOM”这些报错拦在门外?明明只是想画一幅水墨小景,却卡在环境配置第三步,连WebUI的界面都没见着。 别再折腾了。今天这篇不是教你“如何硬刚报错”,而是直接给你一条干净、稳定、真正能跑起来的本地部署路径——专为 Z-Image Turbo 量身定制的 Gradio + Diffusers 极速画板镜像,从下载到出图,全程无需改一行代码、不装一个依赖、不碰一次终端命令。它不是“理论上可行”的方案,而是我亲手在RTX 4060、RTX 3090、甚至16GB显存的MacBook Pro(M3 Max + Metal后端)上反复验证过的“开箱即用”方案。 更关键的是,它解决了国产AI绘画模型落地最头疼的三大痛点:黑图、