基于 OV2640 的以太网 RGMII 图像传输系统设计

相关文章:
(1)千兆以太网网络层 ARP 协议的原理与 FPGA 实现
(2)千兆以太网硬件设计及链路层 MAC 协议格式
(3)CRC校验原理及实现
(4)RGMII 与 GMII 转换电路设计
(5)千兆以太网网络层 IP 协议介绍与 IP 校 验和算法实现
(6)千兆以太网传输层 UDP 协议原理与 FPGA 实现(UDP发送)
(7)千兆以太网传输层 UDP 协议原理与 FPGA 实现(UDP接收)
(8)千兆以太网传输层 UDP 协议原理与 FPGA 实现(UDP回环)
(9)以太网初始化设计(MDIO 控制器)
(10)基于 OV2640 的以太网 RGMII 图像传输系统设计

文章目录

  • 前言
  • 一、UDP 协议的特点
  • 二、图像数据编码原理
  • 三、系统总体设计
  • 四、图像编码模块介绍
    • 4.1、图像编码模块作用
    • 4.2、图像编码模块功能实现
    • 4.3、仿真
  • 五、其他涉及模块说明
  • 六、顶层模块
  • 七、下载与验证


前言

本节主要讲述了一种对数据以行为单位的编码方法。该方法采用摄像头采集数据后经由 FPGA 的 RGMII 接口通过 UDP 协议实现以太网图像传输。以该方法进行 UDP 协议下的以太网图像传输,可以有效缓解 UDP 协议的差错控制缺陷带来的传输质量不佳问题。


提示:任何文章不要过度深思!万事万物都经不起审视,因为世上没有同样的成长环境,也没有同样的认知水平,更「没有适用于所有人的解决方案」 ;不要急着评判文章列出的观点,只需代入其中,适度审视一番自己即可,能「跳脱出来从外人的角度看看现在的自己处在什么样的阶段」才不为俗人 。怎么想、怎么做,全在乎自己「不断实践中寻找适合自己的大道」

一、UDP 协议的特点

我们通过以太网进行数据传输时,通常对于一些对数据正确性要求较低
(允许少量丢失)但是不能有较大时延的场景,都会使用 UDP 协议。UDP 协议是传输层的一种协议,该协议具有以下特点:

  1. 提供不可靠传输。在进行数据传输时 UDP 提供尽最大努力的交付,但不保证可靠交付。
  2. 高效而无连接性。UDP 协议在传输数据前不建立连接,不对数据报进行检查与修改,无须等待对方的应答,所以会出现分组丢失、重复、乱序等问题,如果因为网络原因没有传送到对端,UDP 也不会给应用层返回错误信息。但正因为 UDP 在进行发送时不需要建立连接,所以其在网络开销较小的同时工作时效也相当高。
  3. UDP 没有拥塞控制。应用层能够更好的控制要发送的数据和发送时间,网络中的拥塞控制也不会影响主机的发送速率,因此UDP协议常常被用于某些对数据发送速率有一定要求,能容忍一些数据的丢失,但是不能允许有较大的时延的场景,如直播,视频等。
  4. UDP 在现场测控领域,往往面向的是分布化的控制器、监测器等应用。现场测控领域的电磁环境往往较为复杂,基于此,现场通信中,若某一应用要将一组数据传送给网络中的另一个节点,可由 UDP 进程将数据加上报头后传送给 IP 进程。由于 UDP 协议省去了建立连接和拆除连接的过程,取消了重发检验机制,所以能够达到较高的通信速率。

正因为 UDP 协议有如上种种优点,所以可以对 UDP 协议图像传输的策略进行改进,而降低干扰的影响后,UDP 协议仍然可以作为图像传输的一种优质
方案。

二、图像数据编码原理

我们前面说过:以太网图像数据的传输通常采用 UDP 协议,图像数据在传输时一旦受到外界干扰发生数据丢失,而数据的丢失会导致图像发生断层,割裂,压缩等现象。
正因为如此,我们可以进行如下有针对性的改进后,仍保留使用 UDP 协议:如果我们对图像数据进行处理,将摄像头采集到的图像数据按照一定的编号方式例如以行为单位编号后,再通过 UDP 协议经由以太网传输到电脑,电脑接收FPGA 发送的图像数据解析后按照编号将相应的图像内容绘制到电脑显示屏的对应位置上,就能有效解决该问题。
经过该种编码方法改进,当数据在通过 UDP 协议传输的时候,理论上即使发生了少量数据丢失也不会出现断层割裂等效果。而对于图像传输显示这类场景,对于图像数据的准确性要求较低,即使一幅图像中有一两行数据的丢失,只要不是每幅图像都有该丢失情况,在每秒几十上百帧的刷新率下,其影响也极小。为了让上述理论能够更加加通俗易懂,我们结合图形,来对该理论进行讲解。
本次设计原理如图所示:
在这里插入图片描述
左边第一张为图像的写入过程,图像数据从左至右被依次写入。
第二张图为正常写入后所应展现出的画面,假设被标绿线的行在传输过程中丢失了,在未对行号进行编码的情况下,将会得到第三张图中被压缩的结果,而后续如果仍有图像传输过来,甚至可能出现两张图像重叠的情况,会影响后续图像数据的显示效果。
如果我们对每行图像数据进行编号,即使数据在传输过程中有部分行的数据丢失了,但因为序号的存在,它们仍会排列在自己所应处的位置。
举例来说:上图中,假设绿色行发生丢失,数据在显示屏上的显示画面如第四张图,被丢失的行由于没有数据,会显示黑色,即使数据丢失,图像也不会发生压缩等现象,只会在当前帧有影响,不会影响后续帧的图像。在每秒几十帧的刷新率下,一两行数据的丢失对人眼而言甚至无法识别到,或者只是看到黑线一闪而过。
在理解了本次设计最终目的的实现原理后,接下来可以开始进行工程的设
计。

三、系统总体设计

我们可以结合前面开发的内容,作如下设计。本次本次板级验证我们将在开发板上结合前面章节学习过的以太网传图工程对设计模块进行验证。
在这里插入图片描述
结合板级验证的硬件搭建环境,本章节的原理作如下对应与深化讲解:

  1. 整个系统在开始工作前,首先按照初始化 table 表对摄像头进行初始化参考基于 OV2640 的图像采集显示系统(camera_init 摄像头初始化模块)
  2. 然后对以太网芯片初始化(此模块可以不用),可参考以太网初始化设计(MDIO 控制器)
  3. 随 后 摄 像 头 将 采 集 到 的 数 据 经 由 DVP 接 口 输 送 给Camera_ETH_Formator模块,也就是本次设计的模块,该模块会根据输入数据行场同步信号的高低电平,以行为单位,对其进行编码。
  4. 随后数据进入一个双口 FIFO 中,当 FIFO 中的值足够进行一次以太网数据传输时,数据就会被发送模块读出。使用 UDP 协议将读出的数据经过 crc 校验后,经由以太网发送到 PC 机,参考千兆以太网传输层 UDP 协议原理与 FPGA 实现(UDP发送)、RGMII 与 GMII 转换电路设计
  5. PC 端使用显示软件接收 FPGA发送的包含行编号的图像数据,解析后还原为图像内容绘制在PC 机显示屏上。
    根据前面学习内容的基础,在本章,我们着重讲解图像编码模块的作用,

以上处顶层模块与Camera_ETH_Formator模块外其他模块均在相关文章中讲述,可以参考我的相关文章。

四、图像编码模块介绍

4.1、图像编码模块作用

根据前面介绍的设计思想,本次模块设计的目的是实现对图像数据以行为单位进行编号。如果实现数据以行为单位编号,就需要知道当前输入的数据位
于每帧图像数据的哪一行。对此,我们可以通过计数行场同步信号实现。
模块 Camera_ETH_Formator 在整个系统内,可以起到防止在图像显示的过
程中由于某一行数据的丢失,导致的图像压缩断层现象发生的作用。在加入了该模块后,数据会按照其排列序号一行行进行排列,即使有一行或多行数据丢失,其余行数据也会排列在自己所应处的位置。
综合以上信息,设计模块 Camera_ETH_Formator 的结构如图 :
在这里插入图片描述
其中各个信号的含义如表所示:
在这里插入图片描述
当 HREF由低电平转为高电平时,DATA开始输入到图像数据编码模块,当
HREF 从高电平转为低电平时代表一行的数据输出完成,当模块中的数据处理完成后便会产生 wrreq 信号,并输出 8 位的 wrdata 数据。
我们以 1280*720 的显示屏为例,在摄像头将采集到的 RGB565 格式数据通过以太网发送给 PC 的显示屏显示的过程中,每一行有两倍 1280 个字节即 2560字节有效数据。依照前文我们介绍的设计思想:为了让部分数据即使在丢失的情况下其余行数据也能显示在自己应处的位置,我们可以在每一行的数据前加上 2 个字节的行号。也就是说,以太网每一帧,需要发送一行的数据外加两个字节的行号。

4.2、图像编码模块功能实现

为了方便理解和设计,我们绘制了本次模块设计各个信号之间的时序图,如图图像编码模块时序图:
在这里插入图片描述
上图中:href_r1 和 href_r2 为对摄像头行同步 HREF 信号寄存后得到的信号,data_tmp 为 24 位的寄存器,用来完成对数据的移位转换。
如:时序图中 C0 时刻,当 HREF 出现上升沿时,代表数据开始输入。此时
我们可以用 HREF 与 href_r1 位拼接后的值表示,当{href_r1,HREF }的值为2’b01 时,HREF 的电平由低到高,数据开始输入;当{ href_r1,HREF }的值为2’b10 时,HREF 的电平由高到低,一行数据输入完毕,数据停止输入。
本次模块设计的目的是以行为单位,对数据进行编号,根据 HREF 的电平变化,我们可以利用计数器对行信号进行下降沿次数的累加生成行号,该部分代码实现如下:

//---------------------------------------
	//VSYNC为高电平(有效)时,每当HREF1拉低时自加1,为记录行号
	always@(posedge PCLK or negedge Rst_n)
	if(!Rst_n)
		Vcnt <= 0;
	else if(!VSYNC)
		Vcnt <= 0;
	else if({
   href_r1,HREF} == 2'b10)
		Vcnt <= Vcnt + 1'd1;
 //---------------------------------------	

代码中:Vcnt 为行号计数器,每当 HREF 电平状态由高变低时,代表一行数据输出完毕,此时我们只需使计数器自加一即可,当VSYNC信号为低电平,即代表一幅图像数据输入完成,此时将计数器清零。完成了行号的产生,接下来就是将行号写入数据中。

如时序图中所示,C0 处检测到 HREF 信号的上升沿,由于该上升沿在时钟上升沿之后才到来,所以实质上该信号是在下一个时钟上升沿到来时才被采集到。该信号被采集后,随即将行号写入 data_tmp 寄存器中。当 2 字节的行号输出完成后,再开始输出图像数据,相应的代码如下:

//---------------------------------------
	//对HREF进行计数,用于判断奇偶,对data_tmp进行数据拼接
	reg [11:0]HREF_CNT;
	always@(posedge PCLK or negedge Rst_n)
		if(!Rst_n)	
			HREF_CNT <= 0;
		else if({
   href_r1,HREF} == 2'b01)
			HREF_CNT <= HREF_CNT + 1;
		else if(href_r1)
			HREF_CNT <= HREF_CNT + 1;
		else if(!href_r1)
			HREF_CNT <= 0;
		else 
			HREF_CNT <= HREF_CNT;
			
//---------------------------------------



//---------------------------------------
	//HREF1上升沿时移位传输数据
	always@(posedge PCLK or negedge Rst_n)
		if(!Rst_n)
			data_tmp <= 0;
		else if({href_r1,HREF} == 2'b01)
			data_tmp <= {
   Vcnt[7:0],Vcnt[15:8],DATA};
		else if(HREF_CNT[

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【代码随想录】刷题笔记Day39

前言 下午答疑课过于无聊了&#xff0c;后台在跑代码也写不了作业&#xff0c;再刷点题吧~难得一天两篇 56. 合并区间 - 力扣&#xff08;LeetCode&#xff09; 和之前重叠区间是同个类型&#xff0c;和res里的元素比较&#xff0c;重叠就更新res里最后元素的最右边界 class…

CAN协议FPGA篇

一.引言 CAN&#xff08;Controller Area Network&#xff09;总线&#xff0c;即控制器局域网总线&#xff0c;是一种功能丰富的车用总线标准。该协议最初是由德国博世&#xff08;Bosch&#xff09;公司在1983年制定的&#xff0c;之后在美国密歇根州底特律举行的汽车工程师协…

实训4---硬件部分---点灯实验--按键控制灯实验--uart串口实验

目录 三、硬件部分 【1】点灯实验 【2】按键控制灯实验 【3】uart串口实验 核心代码&#xff1a; 实验视频 实现流水灯 uart串口实验 三、硬件部分 GPIO 【1】点灯实验 1.首先找到要点的灯&#xff0c;在板子上看到对应的白色丝印&#xff0c;比如绿灯D10.然后打开底板…

全国10米分辨率植被覆盖(FVC)数据集

全国10米分辨率植被覆盖&#xff08;FVC&#xff09;数据集 本数据集包括2015至2022年间&#xff0c;全国植被覆盖度数据&#xff0c;FVC范围值为0-1&#xff0c;数据为浮点型&#xff0c;GeoTIFF格式。GeoTIFF文件均可用ArcGIS软件和GDAL读取和打开。 植被覆盖度是指植被&…

Vue3-26-路由-useRouter 和 useRoute 两个API 的作用介绍

先来说说两个API 的作用 useRouter() : 返回的是项目中的 路由实例的对象 可以通过这个实例对象进行路由的逻辑跳转 useRoute() : 返回的是当前的 路由对象&#xff0c; 可以在当前路由对象中获取到路由名称、路由参数、路由路径等玩完整的路由信息。 写个案例看一下具体是什么…

【番外】在Windows安装Airsim/UE4踩坑合集

在Windows安装Airsim/UE4踩坑合集 1.安装过程中一定要确保Epic Games Launcher是英文环境&#xff0c;保存路径什么的也尽量是英文。2.UE4中的虚幻引擎一定要安装4.27版本以上的&#xff0c;不然的话最后运行vs的时候会报语法错误&#xff0c;网上根本查不到的那种错误。换了版…

【WSL2】安装和配置ubuntu

文章目录 1. 安装WSL22. 安装ubuntu2.1. 通过Microsoft Store2.1. 通过命令行 3. ubuntu的使用3.1. 创建管理员root账户3.2. 换源3.3. 安装图形化界面 1. 安装WSL2 在控制面板 - 程序 - 程序与功能中点击启用或关闭Windows功能&#xff0c;选择 虚拟机平台适用于Linux的Window…

Advanced IP Scanner - 网络扫描器

Advanced IP Scanner - 网络扫描器 1. Advanced IP ScannerReferences https://www.advanced-ip-scanner.com/cn/ ​ 可靠且免费的网络扫描器可以分析 LAN。该程序可扫描所有网络设备&#xff0c;使您能够访问共享文件夹和 FTP 服务器&#xff0c;(通过 RDP 和 Radmin) 远程控制…

LeetCode——1954. 收集足够苹果的最小花园周长

通过万岁&#xff01;&#xff01;&#xff01; 题目&#xff1a;这个题目比较复杂&#xff0c;就是给你一个坐标轴&#xff0c;然后让你以0,0为中心选择一个边长为整数的正方形&#xff0c;使得正方形中所有点坐标的绝对值之和要大于给定的neededApples。但是我们需要输出的是…

阿里云OpenSearch-LLM智能问答故障的一天

上周五使用阿里云开放搜索问答版时&#xff0c;故障了一整天&#xff0c;可能这个服务使用的人比较少&#xff0c;没有什么消息爆出来&#xff0c;特此记录下这几天的阿里云处理过程&#xff0c;不免让人怀疑阿里云整体都外包出去了&#xff0c;反应迟钝&#xff0c;水平业余&a…

ServletConfig对象.

是什么 ServletConfig是javax.servlet.包下的一个接口&#xff0c;ServletConfig它是Servlet的一个配置对象&#xff1b; ServletConfig是由tomcat容器创建&#xff0c;通过init方法传入给Servlet&#xff1b; ServletConfig对象如何获取? 在GenericServlet里面定义了&#x…

Upload-lab(pass1~2)

Pass-1-js检查 这里检验 因为是前端js校验,所以只用绕过js前端校验 用burp抓包修改文件类型 写一个简易版本的php Pass-2-只验证Content-type 仅仅判断content-type类型 因此上传shell.php抓包修改content-type为图片类型&#xff1a;image/jpeg、image/png、image/gif

git集成github(一):主要步骤

一、创建仓库 1、创建本地git仓库 在pcharm主界面顶栏&#xff0c;点击VCS&#xff0c;再点击创建git仓库&#xff0c;然后选择项目根路径&#xff0c;点击确认。这时&#xff0c;可以看到顶栏的VCS变成了git。 2、远程仓库下载到本地 打开一个远程仓库&#xff0c;点击code…

Servlet入门

目录 1.Servlet介绍 1.1什么是Servlet 1.2Servlet的使用方法 1.3Servlet接口的继承结构 2.Servlet快速入门 2.1创建javaweb项目 2.1.1创建maven工程 2.1.2添加webapp目录 2.2添加依赖 2.3创建servlet实例 2.4配置servlet 2.5设置打包方式 2.6部署web项目 3.servl…

Flink Has Become the De-facto Standard of Streaming Compute

摘要&#xff1a;本文整理自 Apache Flink 中文社区发起人、阿里巴巴开源大数据平台负责人王峰&#xff08;莫问&#xff09;&#xff0c;在 Flink Forward Asia 2023 主会场的分享。Flink 从 2014 年诞生之后&#xff0c;已经发展了将近 10 年&#xff0c;尤其是最近这些年得到…

【Windows】共享文件夹拍照还原防火墙设置(入站,出站设置)---图文并茂详细讲解

目录 一 共享文件夹(两种形式) 1.1 普通共享与高级共享区别 1.2 使用 二 拍照还原 2.1 是什么 2.2 使用 三 防火墙设置&#xff08;入栈&#xff0c;出站设置&#xff09; 3.1 引入 3.2 入站出站设置 3.2.1入站出站含义 3.3入站设置 3.4安装jdk 3.5使用tomcat进行访…

nat地址转换

原理 将内网地址转换成外网地址 方式 掌握动态NAT的配置方法 掌握Easy IP的配置方法 掌握NAT Server的配置方法 实验 r1 r2 是内网 ar1 ip地址 ip add ip地址 掩码 ip route-static 0.0.0.0 0 192.168.1.254 默认网关 吓一跳网关 相等于设置了网关 ar2 …

低代码选型注意事项

凭借着革命性的生产力优势&#xff0c;低代码技术火爆了整个IT圈。面对纷繁复杂的低代码和无代码产品&#xff0c;开发者该如何选择&#xff1f; 在研究低代码平台的年数上&#xff0c;本人已有3年&#xff0c;也算是个低代码资深用户了&#xff0c;很多企业面临低代码选型上的…

内网穿透的应用-Ubuntu安装XRDP远程桌面结合内网穿透实现远程桌面Ubuntu

文章目录 一、 同个局域网内远程桌面Ubuntu二、使用Windows远程桌面连接三、公网环境系统远程桌面Ubuntu1. 注册cpolar账号并安装2. 创建隧道&#xff0c;映射3389端口3. Windows远程桌面Ubuntu 四、 配置固定公网地址远程Ubuntu1. 保留固定TCP地址2. 配置固定的TCP地址3. 使用…

ES-搜索

聚合分析 聚合分析&#xff0c;英文为Aggregation&#xff0c;是es 除搜索功能外提供的针对es 数据做统计分析的功能 - 功能丰富&#xff0c;提供Bucket、Metric、Pipeline等多种分析方式&#xff0c;可以满足大部分的分析需求 实时性高&#xff0c;所有的计算结果都是即时返回…