FPGA精简版UDP协议实现板间网线传输视频,提供3套工程源码

news2025/1/14 18:25:34

目录

  • 1.FPGA精简版UDP介绍
  • 2.网线板间视频传输---精简版UDP再次精简
  • 3.网线板间视频传输---实现方案
  • 4.网线板间视频传输---发送端方案
  • 5.网线板间视频传输---接收端方案
  • 6.工程1介绍---Artix7(RTL8211)双网口环回
  • 7.工程2介绍---Artix7发送--->Kintex7(B50610)接收
  • 8.工程3介绍---Kintex7发送--->Artix7接收
  • 9.板极调试验证
  • 10.福利:工程代码的获取

1.FPGA精简版UDP介绍

精简版UDP协议是一种资源占用少,不限FPGA硬件平台,纯Verilog代码实现的UDP通信方案,经本人反复验证,稳定性很高,关于精简版UDP请参考我之前写的文章点击查看:精简版UDP

2.网线板间视频传输—精简版UDP再次精简

查看我之前写的文章点击查看:精简版UDP后,应该会知道整个UDP方案如下:
在这里插入图片描述
但对于板件视频传输而言,ARP协议是不需要的,我们只需用到串并转换和UDP收发即可,再次精简后的UDP架构如下:
在这里插入图片描述

3.网线板间视频传输—实现方案

总体方案如下图:
在这里插入图片描述

下面解释一下图中的关系:
开发板1:视频发送
视频源:这里是OV5640摄像头,当然,其他视频也可以;
数据采集:OV5640摄像头输出的是RGB565格式图像,这里做数据采集,并生成vs、hs、de等时序;
FDMA视频三帧缓存通路:这部分在UDP发送中并没有实际意义,之所以缓存并输出是为了验证视频采集的正确性,也为了和接收板卡的输出进行比较,看传输是否正确,在验证正确后,可删除此部分,关于FDMA视频三帧缓存通路请参考我之前写的文章点击查看:FDMA视频三帧缓存架构
UDP编码:将摄像头采集数据进行数据编码,为UDP发送做准备;
这里的做准备有如下几层意思:
1、数据位宽的转换:RGB565的16bit数据转换到32bit的UDP数据位宽;
2、时钟域的转换,OV5640输出时钟大概30M左右,转换到UDP千兆模式的125M;
3、数据组包:UDP一次传输一行视频数据,称为一个UDP包,每个UDP包都好包含包头和数据段;包头包括固定的4字节帧头和视频行号,一个UDP包组成如下:
UDP发送:使用精简版UDP再精简实现,关于精简版UDP请参考我之前写的文章点击查看:精简版UDP
PHY1:也就是网络PHY芯片,这里不再多讲;
在这里插入图片描述
图中的字节数需要好好理解一下;

开发板2:视频接收
PHY2:也就是网络PHY芯片,这里不再多讲;
UDP接收:使用精简版UDP再精简实现,关于精简版UDP请参考我之前写的文章点击查看:精简版UDP
UDP解码:将接收到的UDP数据解码为视频数据,并生成vs、hs、de等时序;
这里的解码有如下几层意思:
1、解包,丢弃帧头,保留有效数据;
2、数据位宽的转换:32bit的UDP数据位宽转换到RGB565的16bit数据;
FDMA视频三帧缓存通路:这部分实现将接收到的UDP视频数据输出到显示器上显示,关于FDMA视频三帧缓存通路请参考我之前写的文章点击查看:FDMA视频三帧缓存架构

4.网线板间视频传输—发送端方案

发送端主要实现的功能上面已经讲了,这里主要讲如何实现,很显然,只需一个fifo即可;
发送端顶层接口部分如下:

module ov5640_tx_rj45(
    input              gmii_tx_clk     ,	//发送端时钟	
	input              cam_pclk        ,	//摄像头时钟
    input              rst_n           ,	//系统复位信号,低电平有效  	
    input              tx_done         ,	//以太网发送完成信号
    input              tx_req          ,	//读数据请求信号 	
    output             tx_start_en     ,	//以太网开始发送信号
    output     [31:0]  tx_data         ,	//以太网待发送数据                    
    input              cmos_frame_vsync,    //输入场信号
	input              cmos_frame_href ,    //输入行信号
    input              cmos_frame_valid,    //输入数据有效信号
    input      [15:0]  cmos_data        	//输入数据
    );

关键的部分是数据的组包和fifo读使能的控制,总体思路就是:fifo先缓存一行视频数据,存满后通知UDP来读,然后发起一次UDP发送,就这么简单;
组包部分关键代码如下:

//产生tx端发送数据
always@(posedge gmii_tx_clk)begin
	if(!rst_n || frame_flag_t) tx_data <= 0;
	else if(tx_req && cnt_tx_req == 0) tx_data <= {16'ha151,cnt_v};		
	else if(tx_rd_en) tx_data <= tx_rd_data;		
    else tx_data <= tx_data;		
end	

5.网线板间视频传输—接收端方案

接收端是发送端的逆过程,实现方法依然是一个fifo搞定,不同的是接收端不需要跨时钟域,因为直接把接收时钟作为ddr缓存的写入时钟;
接收端顶层接口部分如下:

module rj45_rx_ov5640(
    input         gmii_rx_clk ,	//接受端时钟	
    input         rst_n       ,	//系统复位信号,低电平有效  	
    input         rec_pkt_done,	//以太网单包数据接收完成信号
    input         rec_en      ,	//以太网接收的数据使能信号
    input  [31:0] rec_data    ,	//以太网接收的数据  
	output        vout_vs     ,	//输出场vs
	output        vout_de     ,	//输出场de
	output [15:0] vout_rgb565	//输出场rgb565 
    );

解包部分关键代码如下:

//产生网络帧帧头
always@(posedge gmii_rx_clk)begin
	if(!rst_n) rx_frame_flag <= 0;
    else if(rec_en_d1 && (pkt_head == 32'ha1510000) && (cnt_rec_en == 1)) rx_frame_flag <= 1;
	else if(cnt_rx_frame_flag >= 100) rx_frame_flag <= 0;
    else rx_frame_flag <= rx_frame_flag;	
end

6.工程1介绍—Artix7(RTL8211)双网口环回

开发板:Artix7开发板;
网络PHY:RTL8211;
开发环境:vivado2019.1;
输入:OV5640摄像头,720P,RGB565;
输出:网线,HDMI显示器;
Artix7开发板有2个网口,PHY均为RTL8211,用网线连接2个网口实现视频回环收发;
工程BD如下:
在这里插入图片描述
工程代码架构如下:
在这里插入图片描述

7.工程2介绍—Artix7发送—>Kintex7(B50610)接收

发送端:
开发板:Artix7开发板;
网络PHY:RTL8211;
开发环境:vivado2019.1;
输入:OV5640摄像头,720P,RGB565;
输出:网线;
接收端:
开发板:Kintex7开发板;
网络PHY:B50610;
开发环境:vivado2019.1;
输入:网线;
输出:HDMI显示器;
整个架构需要两块板子,一根网线,当然也有两个工程,这里就不具体展示了,截图太多手软了;

8.工程3介绍—Kintex7发送—>Artix7接收

发送端:
开发板:Kintex7开发板;
网络PHY:B50610;
开发环境:vivado2019.1;
输入:OV5640摄像头,720P,RGB565;
输出:网线
接收端:
开发板:Artix7开发板;
网络PHY:RTL8211;
开发环境:vivado2019.1
输入:网线;
输出:HDMI显示器;
整个架构需要两块板子,一根网线,当然也有两个工程,这里就不具体展示了,截图太多手软了;

9.板极调试验证

回环工程如图:
在这里插入图片描述
板间收发连接如图:
在这里插入图片描述
再来个视频演示:A7发送K7接收的演示;

udp板间视频传输

10.福利:工程代码的获取

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

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

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

相关文章

RabbitMQ的广播模式(fanout)在(基于xml配置)项目中使用

项目结构 添加相关的jar包&#xff1a; pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation&qu…

@敏捷组织从业者,开放敏捷架构O-AA™标准考试及认证项目重磅上线!

数字化转型和敏捷转型需同时进行&#xff0c; O-AA™标准更强调组织和文化的转型。 认证项目 重磅发布 发布物资源 标准中文从业认证考试 标准讲师认证培训课程 ALL IN ∨ 开放敏捷架构O-AA™标准采用了基于结果、以产品为中心的方法&#xff0c;使企业能够以灵活和敏捷的…

[ros2实操]1-ros2的安装(ubuntu1804)与运行

参考链接: Recording and playing back data — ROS 2 Documentation: Galactic documentation 使用docker创建了一个ubuntu1804镜像: docker run -it --gpus all \-p 8860:8860 \-v /tmp/.X11-unix:/tmp/.X11-unix \-v /home/lbw/temp_dir:/temp_dir \-e DISPLAYunix$DISPL…

软件测试行业5年经验,薪资不如刚入行的应届生,真是日了狗了,问题究竟出在哪里?

最近公司新招了一位刚入行的应届生&#xff0c;作为组长我深刻体验到新人入行的痛楚&#xff0c;对此我十分照顾他&#xff0c;都是手把手教他公司业务流程。直到15号他工资到账15400元短信提示音响起&#xff0c;我才想起这是多么幼稚的行为&#xff0c;凭什么我在公司待了五年…

实验三 静态路由配置

计算机网络实验实验三 静态路由配置一、实验目的二、实验目的三、实验步骤3.1 连接实验拓扑结构3.2 配置路由器IP地址和掩码3.3 配置PC机IP地址、网关地址3.4 配置路由器的路由表四、思考题实验三 静态路由配置 一、实验目的 掌握手工配置路由表的方法 掌握读懂路由表的能力 …

Charles安装配置

目录 一、工作原理 二、主要功能 三、主要优点&#xff08;对比Fiddler&#xff09; 四、安装与配置 1、安装 2、组件介绍 1&#xff09;主导航栏 2&#xff09;请求栏 3&#xff09;请求数据栏 3、设置 1&#xff09;代理设置 2&#xff09;访问控制 4、客户端设置 …

(C语言)P1002 [NOIP2002 普及组] 过河卒

[NOIP2002 普及组] 过河卒 一、题目描述 棋盘上 AAA 点有一个过河卒&#xff0c;需要走到目标 BBB 点。卒行走的规则&#xff1a;可以向下、或者向右。同时在棋盘上 CCC 点有一个对方的马&#xff0c;该马所在的点和所有跳跃一步可达的点称为对方马的控制点。因此称之为“马拦…

Redis实战——短信登录

目录 1 基于Seesion实现短信登录 1.1 发送短信验证码 1.2 登录功能 2 使用Redis进行短信验证码校验登录 2.1 Seesion方法存在的问题 2.2 发送短信验证码 2.3 验证码校验及登录功能 3.拦截器优化 1 基于Seesion实现短信登录 1.1 发送短信验证码 发送验证码请求路径 /u…

2、skywalking-安装(Docker-Compose方式)

1、服务器环境介绍 两台服务器均为Centos7.6 172.16.128.129 vm1 装载skywalking(采用es作为数据库) 172.16.128.130 vm2 项目服务器&#xff0c;然后向vm1集成 2、准备工作 2.1、由于安装skywalking是通过docker-compose方式安装在vm1且项目到时候是直接build成镜像然后发布&a…

行业安全解决方案 | 零售企业如何做好安全建设对抗黑灰产?

随着各行各业信息化、数字化、智能化进程不断加快&#xff0c;零售行业新业态也正在蓬勃发展。然而&#xff0c;随着转型深入推进及业务量的上升&#xff0c;随处可见的安全威胁逐渐成为零售企业的首要难题。 其主要原因在于该类企业一般涵盖大量用户个人数据&#xff0c;当企…

2022,软件测试行业岗位细分,薪资分布

软件测试是个需求多&#xff0c;就业机会大的职业。目前&#xff0c;我国具备软件测试能力的人员数量和市场需求相差巨大&#xff0c;巨大的市场空缺&#xff0c;使软件测试工程师从初级到高级&#xff0c;只需要 1 年甚至更短的时间来完成。所以作为一名软件测试工程师&#x…

图像基础知识、深度学习基础知识以及相关问题

疑难问题总结第一部分&#xff1a;图像基础边缘和轮廓1、图像中&#xff0c;什么是高频域和低频域&#xff1f;2、什么是图像轮廓&#xff0c;什么是图像边缘&#xff1f;第二部分&#xff1a;深度学习第一部分&#xff1a;图像基础 边缘和轮廓 1、图像中&#xff0c;什么是高…

从一座瑞典风机的倒塌看VDI2230用于螺栓连接精确计算的重要性

作者&#xff1a;螺栓设计老张 一、写在前面 引言&#xff1a;在机械行业&#xff0c;螺栓是与轴承、齿轮齐名的三大最主要机械元素&#xff0c;而从应用广泛程度来看&#xff0c;相比于轴承和齿轮是有过之而无不及。无论是机械传动还是机械结构&#xff0c;都离不开螺栓&…

[附源码]Python计算机毕业设计成绩管理与学情分析系统

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…

WPS—JS宏笔记记录

前言&#xff1a;本方法需要一定的JS基础&#xff0c;这边不会赘述&#xff0c;0基础者可先自学JS 文章目录官方参考文档壹——excel表格篇一、创建新的表格输入内容并保存关闭ThisWorkbook&#xff1a;Application.Path:Workbooks:workbooks.Add:Sheets&#xff1a;自测&#…

OpenCV-Python小应用(五):基于模板匹配的图像拼接

OpenCV-Python小应用&#xff08;五&#xff09;&#xff1a;基于模板匹配的图像拼接前言前提条件实验环境基于模板匹配的图像拼接参考文献前言 本文是个人使用OpenCV-Python的应用案例&#xff0c;由于水平有限&#xff0c;难免出现错漏&#xff0c;敬请批评改正。更多精彩内容…

【微服务】分布式组件 Nacos 结合 Feign 的使用

本文主要介绍如何搭建分布式开发基本环境 一、基本概念 1. 注册中心 在分布式系统中&#xff0c;每一个微服务上线&#xff0c;都需要注册到注册中心。&#xff08;方便服务的远程调用&#xff0c;比如订单想调用商品服务&#xff0c;直接从注册中心获得&#xff09; 对应 Sp…

SpringBoot整合mybatis

SpringBoot整合mybatis 以tb_book表格为例&#xff1a; 第一步&#xff1a;创建新模块&#xff0c;选择Spring初始化&#xff0c;并配置模块相关基础信息 第二步&#xff1a;选择当前模块需要使用的技术集&#xff08;MyBatis、MySQL&#xff09; 或者手工导入对应技术的star…

idea创建纯净的maven项目简单的maven工程

idea创建简单的maven项目一、说在前面二、创建步骤一、说在前面 在学习或者开发中&#xff0c;有时候&#xff0c;我们只想创建一个简单的maven工程&#xff0c;不需要有太多的自带的配置或配置文件&#xff0c;本文结合这一需求&#xff0c;将创建步骤分享给大家&#xff0c;…

Python Selenium unittest+HTMLTestRunner实现 自动化测试及发送测试报告邮件

1、UI测试框架搭建-目录结构 2、 文件介绍 2.1、baseinfo->__init__.py 配置文件定义基础参数 #-*-coding:utf-8-*- #测试用例配置参数base_url "http://xxxxx.com" undirect_username "username" undirect_password "password" direct_…