FPGA优质开源项目 – UDP万兆光纤以太网通信

本文开源一个FPGA项目:UDP万兆光通信。该项目实现了万兆光纤以太网数据回环传输功能。Vivado工程代码结构和之前开源的《UDP RGMII千兆以太网》类似,只不过万兆以太网是调用了Xilinx的10G Ethernet Subsystem IP核实现。

下面围绕该IP核的使用、用户接口,以及数据传输方案展开介绍。文章末尾有该工程源码获取方式,有需要的小伙伴可以点赞、分享支持一下~

一、软硬件平台

  • 软件平台:Vivado 2017.4;
  • 硬件平台:XC7Z035FFG676-2;

二、IP核参数配置 

AXI4-Stream数据位宽选择64bits。对应的用户接口时钟频率为156.25MHZ。

PCS/PMA Options:配置GTX动态重配置端口DRP时钟为100MHZ(该设置同样仅对IP核out-of-context模式的综合有效);不使用Transceiver Debug功能。

IEEE1588 Options:IEEE1588功能一般用于某些需要进行网络时间同步的场合,例如音(视)频传输。在本项目中只是进行数据传输,因此可以不选择使用。

Shared Logic:由于在此项目Vivado工程中只需例化一个该IP核,因此这里选择Include Shared Logic in core,将共享资源包含在IP内部即可。如果需要例化多个该IP核,只需将其中一个IP核配置为Include Shared Logic in core,其余的都配置为Include Shared Logic in example design。

 三、用户接口

  • AXI-Stream发送接口

用户通过该接口将要发送的以太网数据包写入IP核。另外,由tx_ifg_delay接口控制发送间隔,将其配置为0即可。AXI-Stream发送接口时序如下图所示。

  • AXI-Stream接收接口

用户通过该接口读取IP核输出的以太网数据包。AXI-Stream接收接口时序如下图所示。

  • Pcspma-Status接口

该接口用于输出IP核内部PCS PMA部分工作状态,在该工程中只有第0bit有效,用于指示PCS Block Lock。

  • Sim-Speed-Up接口

该接口只在仿真时会用到,用于加快仿真速度,在该工程中将其设置为0即可。

  • Optical模块接口

signal_detect:光模块状态指示信号,配置为1;

tx_fault:光模块状态指示信号,配置为0;

tx_disable:输出光模块控制信号。

  • Flow-Control接口

在高带宽、大负荷传输场合,一般需要流量控制功能。在该工程不需要发送暂停帧,因此将以下两个信号设置为0。

s_axis_pause_tvalid & s_axis_pause_tdata。

  • AXI-Lite接口

该接口用于读写IP核内部寄存器,通过对IP核各参数进行配置,以实现基本的以太网数据包收发功能。

四、数据传输方案及测试 

该项目的功能主要用于实现万兆以太网光纤数据回环传输,在电脑端通过网络调试助手向FPGA发送数据包,FPGA端接收、缓存数据包后回传给上位机。以太网数据回环传输方案如下图所示。

其中,时钟为156.25MHZ,数据位宽为64bits。在UDP IP核和10G Ethernet Subsystem IP核之间,通过插入FIFO实现对每包以太网数据流的缓存功能。

利用wireshark软件抓取PC端和FPGA端之间以太网双向传输数据包,结果如下图所示。

五、源码获取方式

需要该工程源码的小伙伴,请下载我的 资源:《FPGA优质开源项目获取方式 ,里面有Vivado工程源码免费获取方式。 或者点击链接,跳转到原文获取:《FPGA优质开源项目 – UDP万兆光纤以太网通信》。

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

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

相关文章

柔性数组

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、柔性数组的特点二、柔性数组的使用三、柔性数组的优势 前言 也许你从来没有听说过柔性数组(flexible array)这个概念,但…

LLMs NLP模型评估Model evaluation ROUGE and BLEU SCORE

在整个课程中,你看到过类似模型在这个任务上表现良好,或者这个微调模型在性能上相对于基础模型有显著提升等陈述。 这些陈述是什么意思?如何形式化你的微调模型在你起初的预训练模型上的性能改进?让我们探讨一些由大型语言模型开…

TypeScript学习 + 贪吃蛇项目

TypeSCript简介 TypeScript是JavaScript的超集。它对JS进行了扩展,向JS中引入了类型的概念,并添加了许多新的特性。TS代码需要通过编译器编译为JS,然后再交由JS解析器执行。TS完全兼容JS,换言之,任何的JS代码都可以直…

iOS swift5 弹出提示文字(停留1~2s)XHToastSwift

CoderZhuXH/XHToastSwift - github // // XHToast.swift // XHToastSwiftExample // // Created by xiaohui on 16/8/12. // Copyright © 2016年 CoderZhuXH. All rights reserved. // 代码地址:https://github.com/CoderZhuXH/XHToastSwiftimport UIKit/*** Toast…

MySQL高阶语句(三)

一、NULL值 在 SQL 语句使用过程中,经常会碰到 NULL 这几个字符。通常使用 NULL 来表示缺失 的值,也就是在表中该字段是没有值的。如果在创建表时,限制某些字段不为空,则可以使用 NOT NULL 关键字,不使用则默认可以为空…

数据结构学习系列之用队列实现栈功能与用栈实现队列功能

队列与栈:队列(Queue)是一种先进先出(FIFO)的线性表;栈(Stack)是一种后进先出(LIFO)的线性表;实例1:用队列实现栈的功能;算…

架构,平台,框架的区别和联系

1、解释说明 - 架构:在软件开发中,架构是指软件的整体设计和组织方式。它包括了软件的结构、组件和交互方式等方面的设计。架构定义了系统的高级结构和组织方式,以及各个组件之间的关系和交互方式。一个良好的架构可以提高软件的可维护性、可…

中级深入--day16

爬虫(Spider),反爬虫(Anti-Spider),反反爬虫(Anti-Anti-Spider) 之间恢宏壮阔的斗争... Day 1 小黄想要某站上所有的电影,写了标准的爬虫(基于HttpClient库),不断地遍历某站的电影列表页面,根据 Html 分析电影名字存进…

Multisim14.0仿真(五)三角波发生器

一、仿真原理图: 二、仿真效果:

Three.js相机参数及Z-Fighting问题的解决方案

本主题讨论透视相机以及如何为远距离环境设置合适的视锥体。 推荐:用 NSDT编辑器 快速搭建可编程3D场景 透视相机是一种投影模式,旨在模仿人类在现实世界中看待事物的方式。 这是渲染 3D 场景最常用的投影模式。 - three.js 如果你看一下 Three.js 文档…

单元测试:优雅编写Kotlin单元测试

一、MockK简介 MockK是一款功能强大、易于使用的Kotlin mocking框架。在编写单元测试时,MockK能够帮助我们简化代码、提高测试覆盖率,并改善测试的可维护性。除了基本用法外,MockK还提供了许多额外的功能和灵活的用法,让我们能够…

汇编原理学习记录:物理地址=段地址*16+偏移地址

文章目录 知识点个人思考解释存储器大小为1MB段的最大占用存储为64KB物理地址段地址*16偏移地址 知识点 8086计算机拥有20根地址总线和16根数据总线,地址总线中的16根和数据总线存在复用 数据总线的数量决定了数据总线的宽度,决定了处理器的位数&#…

go语言基础操作--二

a : 10str : "mike"//匿名函数,没有函数名字 形成一个闭包,函数定义,还没有调用f1 : func() { //:自动推到类型fmt.Println("a ", a)fmt.Println("str ", str)}f1()//给一个函数类型起别名 这个写法不推荐type FuncType …

04. 函数和函数调用机制

1. 先学习/复习C语言的入门知识 1.1 C语言简介 C语言是一种通用的编程语言,于1972年由丹尼斯里奇(Dennis Ritchie)创建。C语言最初目的是为了开发UNIX操作系统,但由于其简洁的语法、快速的执行速度和可移植性,自此成…

【Python数据分析】数据分析之numpy基础

实验环境:建立在Python3的基础之上 numpy提供了一种数据类型,提供了数据分析的运算基础,安装方式 pip install numpy导入numpy到python项目 import numpy as np本文以案例的方式展示numpy的基本语法,没有介绍语法的细枝末节&am…

03-Flask-工程配置加载方式

工程配置加载方式 前言配置对象中加载配置文件中加载环境变量中加载三种配置方式优缺点工厂模式创建Flask app 前言 本篇来学习下Flake工程配置加载方式 配置对象中加载 应用场景:作为默认配置写在代码中 # -*- coding: utf-8 -*- # Time : 2023/9/2 # Autho…

String实例化的区别

面试题:请解释String类中两种对象实例化的区别 String str “hello”(常量池对象) 只会开辟一块堆内存空间,保存在字符串常量池中,然后str共享常量池中的String对象String str new String(“hello”)(常量…

ZooKeeper基础命令和Java客户端操作

1、zkCli的常用命令操作 (1)Help (2)ls 使用 ls 命令来查看当前znode中所包含的内容 (3)ls2查看当前节点数据并能看到更新次数等数据 (4)stat查看节点状态 (5&#xf…

【ROS系统】Ubuntu22.04系统中安装ROS2系统_ubuntu 安装ros2_GoesM

【ROS系统】Ubuntu22.04系统中安装ROS2系统_ubuntu 安装ros2_GoesM Excerpt ROS仿真、专为自动驾驶研发提供的系统平台_ubuntu 安装ros2 参考博客:ROS 安装详细教程 —— Ubuntu22.0.4 LTS 安装 Part 0. 准备 首先,我们需要一个Ubuntu系统。 Part 1. …

Spring Boot复用yaml文件

如果Spring Boot项目的配置过多,可以把一些配置项放在单独的yaml文件中,并以application-xxx.yaml命名。这些配置文件可以保存在当前项目的resources目录中,也可以保存在maven依赖的resources目录中,并在当前项目引入。 在applic…