FPGA千兆网 UDP 网络视频传输,基于88E1518 PHY实现,提供工程和QT上位机源码加技术支持

news2025/1/12 12:21:23

目录

  • 1、前言
    • 版本更新说明
    • 免责声明
  • 2、我这里已有的以太网方案
  • 3、设计思路框架
    • 视频源选择
    • OV5640摄像头配置及采集
    • 动态彩条
    • UDP协议栈
    • UDP视频数据组包
    • UDP协议栈数据发送
    • UDP协议栈数据缓冲
    • IP地址、端口号的修改
    • Tri Mode Ethernet MAC介绍以及移植注意事项
    • 88E1518 PHY
    • QT上位机和源码
  • 4、vivado工程详解
  • 5、工程移植说明
    • vivado版本不一致处理
    • FPGA型号不一致处理
    • 其他注意事项
  • 6、上板调试验证并演示
    • 准备工作
    • ping一下
    • 静态演示
    • 动态演示
  • 7、福利:工程源码获取

1、前言

没玩过UDP协议栈都不好意思说自己玩儿过FPGA,这是CSDN某大佬说过的一句话,鄙人深信不疑。。。
UDP协议栈在实际项目中应用广泛,特别是在医疗和军工行业,目前市面上的图像拼接方案主要有Xilinx官方推出的Video Mixer方案和自己手撕代码的自定义方案;Xilinx官方推出的Video Mixer方案直接调用IP,通过SDK配置即可实现,但他的使能难度较高,且对FPGA资源要求也很高,不太适合小规模FPGA,在zynq和K7以上平台倒是很使用,如果对Video Mixer方案感兴趣,可以参考我之前的博客,博客地址:
点击直接前往

本文使用Xilinx的Kintex7 FPGA基于88E1518 网络PHY芯片实现千兆网UDP视频传输,视频源有两种,分别对应开发者手里有没有摄像头的情况,一种是使用廉价的OV5640摄像头模组;另一种是如果你的手里没有摄像头,或者你的开发板没摄像头输入接口,则可使用代码内部生成的动态彩条模拟摄像头视频,视频源的选择通过代码顶层的`define宏定义进行,上电默认选择OV5640摄像头模组作为视频输入源;FPGA采集视频后,使用FDMA将视频缓存到DDR3中,然后将视频读出,根据与QT上位机的通信协议将视频进行UDP数据组包,然后使用我们的UDP协议栈对视频进行UDP数据封装,再将数据送入Tri Mode Ethernet MAC IP,输出给开发板板载的88E1518 网络PHY,然后UDP视频通过开发板板载的RJ45网口经网线传输给电脑主机,电脑端用我们提供的QT上位机采集图像并显示;提供vivado2019.1版本的FPGA工程源码和QT上位机及其源码;

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

版本更新说明

此版本为第2版,根据读者的建议,对第1版工程做了如下改进和更新:
1:增加了输入视频动态彩条的选择,有的读者说他手里没有OV5640摄像头,或者摄像头原理图和我的不一致,导致在移植过程中困难很大,基于此,增加了动态彩条,它由FPGA内部产生,不需要外接摄像头就可以使用,使用方法在后文有说明;
2:优化了FDMA,之前的FDMA内AXI4的数据读写突发长度为256,导致在低端FPGA上带宽不够,从而图像质量不佳,基于此,将FDMA内AXI4的数据读写突发长度改为128;
3:优化了UDP协议栈及其数据缓冲FIFO组的代码,并在博文里增加了这一部分的代码说明;
4:增加了Tri Mode Ethernet MAC IP核的使用、更新、修改等说明,以单独文档形式放在了资料包中;
5:优化了整体代码架构,使得之前看起来杂乱无章的代码变得清爽简洁;

免责声明

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

2、我这里已有的以太网方案

目前我这里有大量UDP协议的工程源码,包括UDP数据回环,视频传输,AD采集传输等,也有TCP协议的工程,还有RDMA的NIC 10G 25G 100G网卡工程源码,对网络通信有需求的兄弟可以去看看:直接点击前往
其中千兆TCP协议的工程博客如下:
直接点击前往

3、设计思路框架

FPGA工程设计框图如下:
在这里插入图片描述

视频源选择

视频源有两种,分别对应开发者手里有没有摄像头的情况,一种是使用廉价的OV5640摄像头模组;另一种是如果你的手里没有摄像头,或者你的开发板没摄像头输入接口,则可使用代码内部生成的动态彩条模拟摄像头视频,视频源的选择通过代码顶层的宏定义进行,上电默认选择OV5640摄像头模组作为视频输入源;
视频源的选择通过代码顶层的`define宏定义进行;如下:
在这里插入图片描述
选择逻辑代码部分如下:
在这里插入图片描述
选择逻辑如下:
当(注释) define COLOR_IN时,输入源视频是动态彩条;
当(不注释) define COLOR_IN时,输入源视频是ov5640摄像头;

OV5640摄像头配置及采集

OV5640摄像头需要i2c配置才能使用,需要将DVP接口的视频数据采集为RGB565或者RGB888格式的视频数据,这两部分均用verilog代码模块实现,代码位置如下:
在这里插入图片描述
其中摄像头配置为分辨率1280x720,如下:
在这里插入图片描述
摄像头采集模块支持RGB565和RGB888格式的视频输出,可由参数配置,如下:
在这里插入图片描述
RGB_TYPE=0输出本RGB565格式;
RGB_TYPE=1输出本RGB888格式;
设计选择RGB565格式;

动态彩条

动态彩条可配置为不同分辨率的视频,视频的边框宽度,动态移动方块的大小,移动速度等都可以参数化配置,我这里配置为辨率1280x720,动态彩条模块代码位置和顶层接口和例化如下:
在这里插入图片描述
在这里插入图片描述

UDP协议栈

本UDP协议栈方案需配合Xilinx的Tri Mode Ethernet MAC三速网IP一起使用,使用UDP协议栈网表文件,虽看不见源码但可正常实现UDP通信,该协议栈目前并不开源,只提供网表文件,但不影响使用,该协议栈带有用户接口,使得用户无需关心复杂的UDP协议而只需关心简单的用户接口时序即可操作UDP收发,非常简单;
协议栈架构如下:
在这里插入图片描述
协议栈性能表现如下:
1:支持 UDP 接收校验和检验功能,暂不支持 UDP 发送校验和生成;
2:支持 IP 首部校验和的生成和校验,同时支持 ICMP 协议中的 PING 功能,可接收并响应同一个子网内部设备的 PING 请求;
3:可自动发起或响应同一个子网内设备的 ARP 请求,ARP 收发完全自适应。ARP 表可保存同一个子网内部256 个 IP 和 MAC 地址对;
4:支持 ARP 超时机制,可检测所需发送数据包的目的 IP 地址是否可达;
5:协议栈发送带宽利用率可达 93%,高发送带宽下,内部仲裁机制保证 PING 和 ARP 功能不受任何影响;
6:发送过程不会造成丢包;
7:提供64bit位宽AXI4-Stream形式的MAC接口,可与Xilinx官方的千兆以太网IP核Tri Mode Ethernet MAC,以及万兆以太网 IP 核 10 Gigabit Ethernet Subsystem、10 Gigabit Ethernet MAC 配合使用;
有了此协议栈,我们无需关心复杂的UDP协议的实现了,直接调用接口即可使用。。。
本UDP协议栈用户接口发送时序如下:
在这里插入图片描述
本UDP协议栈用户接口接收时序如下:
在这里插入图片描述

UDP视频数据组包

实现UDP视频数据的组包,UDP数据发送必须与QT上位机的接受程序一致,上位机定义的UDP帧格式包括帧头个UDP数据,帧头定义如下:
在这里插入图片描述
FPGA端的UDP数据组包代码必须与上图的数据帧格式对应,否则QT无法解析,代码中定义了数据组包状态机以及数据帧,如下:
在这里插入图片描述
另外,由于UDP发送是64位数据位宽,而图像像素数据是24bit位宽,所以必须将UDP数据重新组合,以保证像素数据的对齐,这部分是整个工程的难点,也是所有FPGA做UDP数据传输的难点;

UDP协议栈数据发送

UDP协议栈具有发送和接收功能,但这里仅用到了发送,此部分代码架构如下:
在这里插入图片描述
UDP协议栈代码组我已经做好,用户可直接拿去使用;

UDP协议栈数据缓冲

这里对代码中用到的数据缓冲FIFO组做如下解释:
由于 UDP IP 协议栈的 AXI-Stream 数据接口位宽为 64bit,而 Tri Mode Ethernet MAC 的 AXI-Stream数据接口位宽为 8bit。因此,要将 UDP IP 协议栈与 Tri Mode Ethernet MAC 之间通过 AXI-Stream 接口互联,需要进行时钟域和数据位宽的转换。实现方案如下图所示:
在这里插入图片描述
收发路径(本设计只用到了发送)都使用了2个AXI-Stream DATA FIFO,通过其中1个FIFO实现异步时钟域的转换,1个FIFO实
现数据缓冲和同步Packet mode功能;由于千兆速率下Tri Mode Ethernet MAC的AXI-Stream数据接口同步时钟信号为125MHz,此时,UDP协议栈64bit的AXI-Stream数据接口同步时钟信号应该为125MHz/(64/8)=15.625MHz,因此,异步
AXI-Stream DATA FIFO两端的时钟分别为125MHz(8bit),15.625MHz(64bit);UDP IP协议栈的AXI-Stream接口经过FIFO时钟域转换后,还需要进行数据数据位宽转换,数据位宽的转换通过AXI4-Stream Data Width Converter完成,在接收路径中,进行 8bit 到 64bit 的转换;在发送路径中,进行 64bit 到 8bit 的转换;

IP地址、端口号的修改

UDP协议栈留出了IP地址、端口号的修改端口供用户自由修改,位置如下:
在这里插入图片描述

Tri Mode Ethernet MAC介绍以及移植注意事项

本设计调用了Xilinx官方IP:Tri Mode Ethernet MAC,其在代码中的位置如下:
在这里插入图片描述
可以看到其中Tri Mode Ethernet MAC IP核处于被锁定状态,这是我们故意为之,目的是根据不同的PHY延时参数而修改其内部代码和内部时序约束代码,由于本设计使用的网络PHY为88E1518 ,所以这里重点介绍使用88E1518 时Tri Mode Ethernet MAC的修改和移植事项,当你需要工程移植,或者你的vivado版本与我的不一致时,Tri Mode Ethernet MAC都需要在vivado中进行升级,但由于该IP已被我们人为锁定,所以升级和修改需要一些高端操作,关于操作方法,我专门写了一篇文档,已附在资料包里,如下:
在这里插入图片描述

88E1518 PHY

本设计开发板使用的网络PHY为88E1518 ,工作在延时模式下,原理图引出了MDIO,但代码中不需要MDIO配置,通过上下拉电阻即可使88E1518 工作于延时模式,该PHY最高支持千兆,且能在10M/100M/1000M之间自动协商,但本设计在Tri Mode Ethernet MAC端固定为1000M;在资料包中,我们提供88E1518 的原理图;
在这里插入图片描述

QT上位机和源码

我们提供和UDP通信协议相匹配的QT抓图显示上位机及其源代码,目录如下:
在这里插入图片描述
我们的QT目前仅支持1280x720分辨率的视频抓图显示,但同时预留了1080P接口,对QT开发感兴趣的朋友可以尝试修改代码以适应1080P,因为QT在这里只是验证工具,不是本工程的重点,所以不再过多赘述,详情请参考资料包的QT源码,位置如下:
在这里插入图片描述

4、vivado工程详解

开发板FPGA型号:Xilinx–Kintex7–xc7k325tffg676-2;
开发环境:Vivado2019.1;
输入:OV5640摄像头或动态彩条,分辨率1280x720;
输出:千兆UDP协议栈,88E1518 PHY,RJ45网口;
工程作用:千兆UDP网络视频传输;
工程BD如下:
在这里插入图片描述
工程代码架构如下:
在这里插入图片描述
工程的资源消耗和功耗如下:
在这里插入图片描述

5、工程移植说明

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

6、上板调试验证并演示

准备工作

首先连接开发板和电脑,开发板端连接后如下图:
在这里插入图片描述
然后将你的电脑IP地址改为和代码里规定的IP一致,当然,代码里的IP是可以任意设置的,但代码里的IP修改后,电脑端的IP也要跟着改,我的设置如下:
在这里插入图片描述

ping一下

在开始测试前,我们先ping一下,测试UDP是否连通,如下:
在这里插入图片描述

静态演示

ov5640摄像头1280x720输入UDP网络传输QT上位机显示如下:
在这里插入图片描述
动态彩条1280x720输入UDP网络传输QT上位机显示如下:
在这里插入图片描述

动态演示

动态视频演示如下:

FPGA-UDP-视频传输-K7

7、福利:工程源码获取

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

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

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

相关文章

人工智能AI 全栈体系(五)

第一章 神经网络是如何实现的 为什么使用 ReLu 函数? 五、梯度消失问题 1. 什么是梯度消失问题? 前面我们介绍的 BP 算法中,是这样更新权重值的: δ ∗ h o h ( 1 − o h ) ∑ ∗ k ∈ 后续 ( h ) δ ∗ k w ∗ k h \delta*h …

基于Python+Flask实现一个简易网页验证码登录系统案例

在当今的互联网世界中,为了防止恶意访问,许多网站在登录和注册表单中都采用了验证码技术。验证码可以防止机器人自动提交表单,确保提交行为背后有一个真实的人类用户。 本文将向您展示如何使用Python的Flask框架来创建一个简单的验证码登录系…

在线教育线上课堂知识付费源码 网络课堂在线课堂系统源码 含完整代码包和搭建教程

随着互联网技术的不断发展,在线教育逐渐成为了人们获取知识和技能的重要途径。线上课堂作为在线教育的一种具体实现方式,为广大学生提供了便捷、高效的学习平台。 分享一个在线教育线上课堂知识付费源码、网络课堂在线课堂系统源码,含完整搭…

数据分析的-五种常用方法实例

一、对照 俗称对比,单独看一个数据是不会有感觉的,必需跟另一个数据做对比才会有感觉。比如下面的图a和图b。 图a毫无感觉 图b经过跟昨天的成交量对比,就会发现,今天跟昨天实则差了一大截。 这是最基本的思路,也是最重…

数字图像处理中的击中与击不中运算(数字图像处理大题复习 P10)

文章目录 模板元 B 解析尝试覆盖得到结果 击中与击不中 可以看作就是 进阶版的腐蚀 模板元 B 解析 1 就是要求是 1 0 就是要求是 0 x 就是不管,随便是什么 尝试覆盖 如果我们选择一个地方覆盖,他符合这个模板即可 得到结果 这样我们就得到了击中与…

润和软件HopeStage与华宇信息TAS应用中间件完成产品兼容性互认证

近日,江苏润和软件股份有限公司(以下简称“润和软件”)HopeStage 操作系统与北京华宇信息技术有限公司(以下简称“华宇信息”)TAS应用中间件软件完成产品兼容性测试。 测试结果表明,企业级通用操作系统Hope…

如何批量为文件夹命名

如果你想要命名一些这样名字具有规律性的文件夹,当文件的数量增多,一个一个命名是非常耗费时间的。很容易想到,如果使用EXCEL,只需往下拉,就能很轻松的拉出1到5。那么,我们如何利用EXCEL来对文件夹进行快速…

高压配电安全监测系统:确保电力系统的稳定运行

随着现代社会对电力需求的不断增长,高压配电系统的重要性日益凸显。为了保证电力系统的稳定运行,提高供电质量,采用高压配电安全监测系统至关重要。 力安科技高压配电安全监测系统通过在每面高压柜(进线柜、出线柜、联络柜&#x…

K8S-存储卷,pv,pvc

一、emptyDir存储卷 1.概述 当Pod被分配给节点时,首先创建emptyDir卷,并且只要该Pod在该节点上运行,该卷就会存在。正如卷的名字所述,它最初是空的。Pod 中的容器可以读取和写入emptyDir卷中的相同文件,尽管该卷可以…

React useRequest解读

源码结构: 可以看到虽然是一个hooks(具有一定功能且具备状态的单一函数) 但是各种文件功能分得也是很细的,方便抽离和复用 useRequest.ts 抽离的原则还是单一功能原则 可以看出 真正的hooks实现是在Implement里 对于类型type的引…

(Clock Domain Crossing)跨时钟域信号的处理 (自我总结)

CummingsSNUG2008Boston_CDC.pdf 参考: 跨时钟域处理方法总结–最终详尽版 - love小酒窝 - 博客园 跨时钟域(CDC)设计方法之单bit信号篇(一) | 电子创新网赛灵思社区 孤独的单刀_Verilog语法,FPGA设计与调试,FPGA接口与…

关于ABB机器人的IO创建和设置

首先要链接网线,请求写权限 关于ABB机器人的默认地址位10有的是63.31看你硬接线 ABB机器人分配好信号机器人控制柜要重启 可以把机器人分配的信号导出为EIO 类似与发那科机器人IO

支付宝支付对接-附带完整代码!!

支付宝对接 文章目录 支付宝对接1、大纲1.1 整体业务流程图1.2、开发流程图1.3、核心参数1.4、支付宝开放平台1.5、支付应用场景1.6、支付宝入驻 2、环境准备2.1 首先注册自己的支付宝账号2.2 沙箱环境2.3 支持产品列表 3、项目实现3.1、项目代码地址3.2、 代码层级3.3、快速启…

【产品运营】如何提升B端产品的竞争力(上)

B端产品的核心竞争力不是只有产品功能丰富度、易用度这些维度,判断产品核心竞争力应该基于产品所定位解决的问题场景。 B端产品的成交因素很多,包括产品本身、公司品牌、客情关系、成功案例、产品定价、客户成熟度、需求匹配度等,本文只谈产品…

大数据(九):数据可视化(一)

专栏介绍 结合自身经验和内部资料总结的Python教程,每天3-5章,最短1个月就能全方位的完成Python的学习并进行实战开发,学完了定能成为大佬!加油吧!卷起来! 全部文章请访问专栏:《Python全栈教…

网站整站优化-网站整站优化工具

您是否曾为您的网站在搜索引擎中的排名而感到焦虑?是否苦苦思考如何提高流量、吸引更多用户? 什么是整站优化。简而言之,它是一项用于提升网站在搜索引擎中排名的策略和技巧。通过对网站的内容、结构、速度等方面进行优化,可以使…

Acer宏碁暗影骑士5笔记本AN517-54原装出厂Win10系统工厂模式

宏基电脑原厂WINDOWS10系统自带所有硬件的驱动、NITROSENSE风扇键盘控制中心、Office办公软件、出厂主题壁纸LOGO、 Acer Care Center、Quick Access等预装程序 链接:https://pan.baidu.com/s/1Ovui_CvsUaF-TX0NbuhEVg?pwdcrmv 提取码:crmv 所需要工…

第1讲:前后端分离思想

什么是前端 前端其实是个很大的范畴。 简单点说,针对浏览器的开发,浏览器呈现出来的页面就是前端。它的实质是前端代码在浏览器端被编译、运行、渲染。前端代码主要由三个部分构成:HTML(超文本标记语言)、CSS&#xf…

[CISCN 2019 初赛]Love Math 通过进制转换执行命令

目录 hex2bin bin2hex base_convert 动态函数 第一种解法 通过get获取参数 绕过 第二种解法 读取请求头 getallheaders echo a,b 第三种解法 异或获得更多字符 这道题也是很有意思! 通过规定白名单和黑名单 指定了 函数为数学函数 并且参数也只能是规…

角度回归——角度编码方式

文章目录 1.为什么研究角度的编码方式?1.1 角度本身具有周期性1.2 深度学习的损失函数因为角度本身的周期性,在周期性的点上可能产生很大的Loss,造成训练不稳定1.3 那么如何处理边界问题呢:(以θ的边界问题为例&#x…