FPGA高端项目:FPGA解码MIPI视频+图像缩放+视频拼接,基于MIPI CSI-2 RX Subsystem架构实现,提供4套工程源码和技术支持

目录

  • 1、前言
    • 工程概述
    • 免责声明
  • 2、相关方案推荐
    • 我这里已有的 MIPI 编解码方案
    • 本方案在Xilinx Artix7-35T上解码MIPI视频的应用
    • 本方案在Xilinx Artix7-100T上解码MIPI视频的应用
    • 本方案在Xilinx Kintex7上解码MIPI视频的应用
    • 本方案在Xilinx Zynq7000上解码MIPI视频的应用
    • 本方案在Xilinx Zynq UltraScale上解码MIPI视频的应用
    • 本方案的图像缩放应用
    • 纯VHDL代码解码ov5640-MIPI视频方案
    • Video Processing Subsystem图像缩放应用
    • Video Mixer视频拼接应用
  • 3、详细设计方案
    • 设计原理框图
    • OV5640及其配置
    • MIPI-DPHY硬件权电阻方案
    • MIPI CSI-2 RX Subsystem
    • Sensor Demosaic图像格式转换
    • Gammer LUT伽马校正
    • Video Processing Subsystem 介绍
    • VDMA图像缓存
    • Video Mixer介绍
    • AXI4-Stream toVideo Out
    • HDMI输出
    • 工程源码架构
  • 4、vivado工程1详解:Kintex7-35T版本--2路视频缩放拼接
  • 5、vivado工程2详解:Kintex7-35T版本--4路视频缩放拼接
  • 6、vivado工程3详解:Zynq7020版本--2路视频缩放拼接
  • 7、vivado工程4详解:Zynq7020版本--4路视频缩放拼接
  • 8、工程移植说明
    • vivado版本不一致处理
    • FPGA型号不一致处理
    • 其他注意事项
  • 9、上板调试验证
    • 准备工作
    • 输出视频演示
  • 14、福利:工程代码的获取

FPGA高端项目:FPGA解码MIPI视频+图像缩放+视频拼接,基于MIPI CSI-2 RX Subsystem架构实现,提供4套工程源码和技术支持

1、前言

FPGA图像采集领域目前协议最复杂、技术难度最高的应该就是MIPI协议了,MIPI解码难度之高,令无数英雄竞折腰,以至于Xilinx官方不得不推出专用的IP核供开发者使用,不然太高端的操作直接吓退一大批FPGA开发者,就没人玩儿了。

工程概述

本设计基于Xilinx系列FPGA开发板,采集OV5640摄像头的2Lane MIPI视频,OV5640摄像头配置为MIPI模式,引脚经过权电阻方案后接入FPGA的HS BANK的LVDS差分IO;调用Xilinx的MIPI CSI-2 RX Subsystem IP实现MIPI的D-PHY功能,该IP由Xilinx免费提供,将MIPI视频解码后以AXIS视频流格式输出;再调用Xilinx的Sensor Demosaic IP实现RAM转RGB功能; 再调用Xilinx的Gammer LUT IP实现伽马校正功能; 再调用Xilinx官方的Video Processing Subsystem IP核将输入视频进行图像缩放操作,该操作通过Zynq软核SDK软件配置,其本质为通过AXI_Lite 做寄存器配置;再调用Xilinx的VDMA IP实现图像三帧缓存功能;再调用Xilinx的Video Mixer IP实现多路视频拼接操作,该操作通过Zynq软核SDK软件配置,其本质为通过AXI_Lite 做寄存器配置;再调用Xilinx的Video Timing Controller和AXI4-Stream toVideo Out IP实现视频流从AXI4-Stream到VGA时序的转换;最后调用纯verilog代码实现的RGB转HDMI模块将视频以HDMI接口输出显示器显示;针对目前市面上主流的FPGA,本Xilinx系列FPGA解码OV5640-MIPI视频方案一共移植了4套工程源码,详情如下:
在这里插入图片描述
这里说明一下提供的4套工程源码的作用和价值,如下:

工程源码1

FPGA开发板型号为Xilinx–Kintex7–xc7k325tffg900-2,输入视频为OV5640摄像头,MIPI模式,2 Line,RAW10输出像素,分辨率配置为1280x720@60Hz;经过MIPI CSI-2 RX Subsystem实现MIPI解码并输出AXI4-Stream视频流,再经过Sensor Demosaic实现Bayer转RGB,再经过Gammer LUT实现伽马校正,然后将视频复制为2路,以模拟2路视频源;再经过Video Processing Subsystem 实现图像缩放,将原始视频从1280x720缩放为960x540;再经过VDMA实现视频三帧缓存,图像缓存介质为DDR3,再经过Video Mixer IP实现2路视频拼接;最后视频以HDMI接口输出,输出分辨率为在1920x1080黑色背景下叠加2路缩放拼接后的视频;该方案适用于Xilinx 7系列运行MicroBlaze的FPGA;

工程源码2

FPGA开发板型号为Xilinx–Kintex7–xc7k325tffg900-2,输入视频为OV5640摄像头,MIPI模式,2 Line,RAW10输出像素,分辨率配置为1280x720@60Hz;经过MIPI CSI-2 RX Subsystem实现MIPI解码并输出AXI4-Stream视频流,再经过Sensor Demosaic实现Bayer转RGB,再经过Gammer LUT实现伽马校正,然后将视频复制为4路,以模拟4路视频源;再经过Video Processing Subsystem 实现图像缩放,将原始视频从1280x720缩放为960x540;再经过VDMA实现视频三帧缓存,图像缓存介质为DDR3,再经过Video Mixer IP实现4路视频拼接;最后视频以HDMI接口输出,输出分辨率为在1920x1080黑色背景下叠加4路缩放拼接后的视频;该方案适用于Xilinx 7系列运行MicroBlaze的FPGA;

工程源码3

FPGA开发板型号为Xilinx–Zynq7020–xc7z020clg400-2,输入视频为OV5640摄像头,MIPI模式,2 Line,RAW10输出像素,分辨率配置为1280x720@60Hz;经过MIPI CSI-2 RX Subsystem实现MIPI解码并输出AXI4-Stream视频流,再经过Sensor Demosaic实现Bayer转RGB,再经过Gammer LUT实现伽马校正,然后将视频复制为2路,以模拟2路视频源;再经过Video Processing Subsystem 实现图像缩放,将原始视频从1280x720缩放为960x540;再经过VDMA实现视频三帧缓存,图像缓存介质为DDR3,再经过Video Mixer IP实现2路视频拼接;最后视频以HDMI接口输出,输出分辨率为在1920x1080黑色背景下叠加2路缩放拼接后的视频;该方案适用于Xilinx Zynq7000系列运行Zynq的FPGA;

工程源码4

FPGA开发板型号为Xilinx–Zynq7020–xc7z020clg400-2,输入视频为OV5640摄像头,MIPI模式,2 Line,RAW10输出像素,分辨率配置为1280x720@60Hz;经过MIPI CSI-2 RX Subsystem实现MIPI解码并输出AXI4-Stream视频流,再经过Sensor Demosaic实现Bayer转RGB,再经过Gammer LUT实现伽马校正,然后将视频复制为4路,以模拟4路视频源;再经过Video Processing Subsystem 实现图像缩放,将原始视频从1280x720缩放为960x540;再经过VDMA实现视频三帧缓存,图像缓存介质为DDR3,再经过Video Mixer IP实现4路视频拼接;最后视频以HDMI接口输出,输出分辨率为在1920x1080黑色背景下叠加4路缩放拼接后的视频;该方案适用于Xilinx Zynq7000系列运行Zynq的FPGA;

本文详细描述了Xilinx 系列FPGA解码MIPI视频+图像缩放+视频拼接的设计方案,工程代码编译通过后上板调试验证,可直接项目移植,适用于在校学生做毕业设计、研究生项目开发,也适用于在职工程师做项目开发,可应用于医疗、军工等行业的数字成像和图像传输领域;整个工程调用Zynq软核做IP的配置,Zynq的配置在Vitis SDK里以C语言软件代码的形式运行,所以整个工程包括FPGA逻辑设计和Vitis SDK软件设计两部分,需要具备FPGA和嵌入式C语言的综合能力,不适合初学者或者小白;
提供完整的、跑通的工程源码和技术支持;
工程源码和技术支持的获取方式放在了文章末尾,请耐心看到最后;

关于MIPI协议,请自行搜索,csdn就有很多大佬讲得很详细,我就不多写这块了;

免责声明

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

2、相关方案推荐

我这里已有的 MIPI 编解码方案

我这里目前已有丰富的基于FPGA的MIPI编解码方案,主要是MIPI解码的,既有纯vhdl实现的MIPI解码,也有调用Xilinx官方IP实现的MIPI解码,既有2line的MIPI解码,也有4line的MIPI解码,既有4K分辨率的MIPI解码,也有小到720P分辨率的MIPI解码,既有基于Xilinx平台FPGA的MIPI解码也有基于Altera平台FPGA的MIPI解码,还有基于Lattice平台FPGA的MIPI解码,后续还将继续推出更过国产FPGA的MIPI解码方案,毕竟目前国产化方案才是未来主流,后续也将推出更多MIPI编码的DSI方案,努力将FPGA的MIPI编解码方案做成白菜价。。。
基于此,我专门建了一个MIPI编解码的专栏,并将MIPI编解码的博客都放到了专栏里整理,对FPGA编解码MIPI有项目需求或学习兴趣的兄弟可以去我的专栏看看,专栏地址如下:
点击直接前往专栏

本方案在Xilinx Artix7-35T上解码MIPI视频的应用

本方案适应于Xilinx系列FPGA平台,针对目前市面上主流的FPGA,本博将本方案分别移植到了Xilinx 的Artix7、Kintex7、Zynq7000、Zynq UltraScale等平台共计16套工程源码,本文讲述的是在Zynq7000中端FPGA上的应用,想要直接应用于Xilinx Artix7-35T 系列FPGA上的ov5640-MIPI视频解码应用的读者,可以参考我之前写得博客,以下是博客地址:
点击直接前往

本方案在Xilinx Artix7-100T上解码MIPI视频的应用

本方案适应于Xilinx系列FPGA平台,针对目前市面上主流的FPGA,本博将本方案分别移植到了Xilinx 的Artix7、Kintex7、Zynq7000、Zynq UltraScale等平台共计16套工程源码,本文讲述的是在Zynq7000中端FPGA上的应用,想要直接应用于Xilinx Artix7-100T 系列FPGA上的ov5640-MIPI视频解码应用的读者,可以参考我之前写得博客,以下是博客地址:
点击直接前往

本方案在Xilinx Kintex7上解码MIPI视频的应用

本方案适应于Xilinx系列FPGA平台,针对目前市面上主流的FPGA,本博将本方案分别移植到了Xilinx 的Artix7、Kintex7、Zynq7000、Zynq UltraScale等平台共计16套工程源码,本文讲述的是在Artix7-100T低端FPGA上的应用,想要直接应用于Xilinx Kintex7系列FPGA上的ov5640-MIPI视频解码应用的读者,可以参考我之前写得博客,以下是博客地址:
点击直接前往

本方案在Xilinx Zynq7000上解码MIPI视频的应用

本方案适应于Xilinx系列FPGA平台,针对目前市面上主流的FPGA,本博将本方案分别移植到了Xilinx 的Artix7、Kintex7、Zynq7000、Zynq UltraScale等平台共计16套工程源码,本文讲述的是在Kintex7中端FPGA上的应用,想要直接应用于Xilinx Zynq7000系列FPGA上的ov5640-MIPI视频解码应用的读者,可以参考我之前写得博客,里面包括了Zynq7020、Zynq7030、Zynq7035、Zynq7045、Zynq7100等平台;以下是博客地址:
点击直接前往

本方案在Xilinx Zynq UltraScale上解码MIPI视频的应用

本方案适应于Xilinx系列FPGA平台,针对目前市面上主流的FPGA,本博将本方案分别移植到了Xilinx 的Artix7、Kintex7、Zynq7000、Zynq UltraScale等平台共计16套工程源码,本文讲述的是在Artix7-100T低端FPGA上的应用,想要直接应用于Xilinx Zynq UltraScale系列FPGA上的ov5640-MIPI视频解码应用的读者,可以参考我之前写得博客,里面包括了Zynq UltraScale XCZU2CG、Zynq UltraScale XCZU3EG、Zynq UltraScale XCZU4EV、Zynq UltraScale XCZU7EV、Zynq UltraScale XCZU9EG等平台;以下是博客地址:
点击直接前往

本方案的图像缩放应用

基于MIPI CSI-2 RX Subsystem架构实现的MIPI视频解码,还可以加上图像缩放应用,使得其应用范围更广,之前写过一片啊博客;以下是博客地址:
点击直接前往

纯VHDL代码解码ov5640-MIPI视频方案

与上述基于MIPI CSI-2 RX Subsystem方案不同,本博也提供基于纯VHDL代码解码ov5640-MIPI视频的方案,该方案的区别与优势在于可以看到VHDL源码而非单纯的IP,能看到源码的意思就是你可以任意修改源码以适配自己的项目,其意义与价值无需多言,该方案目前已在Xilinx Zynq7020上移植成功,共有两套工程源码,一套是单路ov5640-MIPI视频解码后HDMI输出;另一套是4路ov5640-MIPI视频解码经缩放拼接后HDMI 4分屏输出;感兴趣的可以参考我之前的博客;
单路MIPI解码输出博客地址如下:
点击直接前往
4路MIPI解码缩放拼接输出博客地址如下:
点击直接前往

Video Processing Subsystem图像缩放应用

本设计采用Vivado2022.2版本设计,该版本属于高版本,不能使用HLS2019.2及其以下版本生成的HLS IP,所以也就不能使用本博客自研的HLS图像缩放IP,只能使用Video Processing Subsystem,关于Video Processing Subsystem,之前写过一篇博客,可以参考学习,以下是博客地址:
点击直接前往

Video Mixer视频拼接应用

关于Video Mixer,之前写过一篇博客,可以参考学习,以下是博客地址:
点击直接前往

3、详细设计方案

设计原理框图

设计原理框图如下:
在这里插入图片描述

OV5640及其配置

输入视频采用廉价的OV5640摄像头模组,配置为MIPI模式,2 Lane,数据格式为RAW10,线速率为1000Mbps,视频分辨率为1280X720,一个时钟一个像素,OV5640需要SCCB总线配置才能运行,该总线等价于I2C总线,纯FPGA的工程调用AXI-GPIO模拟I2C,利用Vitis软件配置OV5640;Zynq的工程使用PS端自带的i2c片内外资源,利用Vitis软件配置OV5640,配置部分代码有C语言实现,具体参考Vitis程序;

MIPI-DPHY硬件权电阻方案

使用Xilinx官方推荐的权电阻硬件方案将输入的差分MIPI对恢复HS和PL,原理图部分截图如下:
在这里插入图片描述
注意:权电阻方案只在低速率的MIPI模式下可用,高速率的MIPI请用专用芯片实现,比如MC20001,MC系列这种方案可以支持到2Gbps/Lane速率以上,只要FPGA的IO速率够用;

MIPI CSI-2 RX Subsystem

调用Xilinx的MIPI CSI-2 RX Subsystem IP实现MIPI的D-PHY功能,该IP由Xilinx免费提供,将MIPI视频解码后以AXIS视频流格式输出;该IP不需要额外的SDK软件配置,调用和配置如下:
在这里插入图片描述
在这里插入图片描述
由于调用了Xilinx的MIPI CSI-2 RX Subsystem IP核,所以性能上就取决于你的FPGA型号,理论上FPGA越高端,支持的IO线速率或者GT高速接口线速率就越高,就能跑速率更高的MIPI视频;
该IP适应性极强,支持的MIPI相机性能参数如下:
在这里插入图片描述
在这里插入图片描述
并且,在越高端的FPGA型号上,该IP支持的高端性能也越多;
由于调用了Xilinx的MIPI CSI-2 RX Subsystem IP核,NIPI视频解码的稳定性很好,且使用及其简单,缺点是看不到源码,出了问题后不好排查,只能在输入输出接口添加ila进行逐级追踪;
本方案使用的FPGA型号为Xilinx zynq 7000系列,属于中端FPGA的MIPI解码应用,再小型的Artix7-35T或者Spartan7、Spartan6等就已经不能使用MIPI CSI-2 RX Subsystem了;

以工程源码3为例,MIPI CSI-2 RX Subsystem占用逻辑资源如下:
在这里插入图片描述

Sensor Demosaic图像格式转换

调用Xilinx的Sensor Demosaic IP实现RAM转RGB功能,该IP通过Vitis的C代码软件配置,Sensor Demosaic调用和C代码软件配置代码截图如下:
在这里插入图片描述
在这里插入图片描述

Gammer LUT伽马校正

调用Xilinx的Gammer LUT IP实现伽马校正功能,该IP通过Vitis的C代码软件配置,Gammer LUT调用和C代码软件配置代码截图如下:
在这里插入图片描述
在这里插入图片描述

Video Processing Subsystem 介绍

由于工程所用到的IP都是常用IP,所以这里重点介绍一下Video Processing Subsystem;
Video Processing Subsystem有缩放、去隔行、颜色空间转换等功能,这里仅使用图像缩放功能;其特点如下:
优点1:适用于Xilinx所有系列的FPGA器件和所有的Vivado版本;
优点2:支持最大分辨率:8K,即可以处理高达8K的视频;
优点3:输入视频格式:AXI4-Stream,方便对接Xilinx图像处理套路的相关IP;
优点4:输出视频格式:AXI4-Stream,方便对接Xilinx图像处理套路的相关IP;
优点5:模块占用的FPGA逻辑资源更小,相比于自己写的HLS图像缩放而言,官方的Video Processing Subsystem资源占用大约减小30%左右,且更高效:
注意!!!!
注意!!!!
注意!!!!
注意!!!!
缺点1:需要SDK软件配置,其本质为通过AXI_Lite 做寄存器配置,设计难度现对复杂,对新手小白不太友好;
缺点2:Xilinx官方提供的Video Processing Subsystem IAP并不能实现任意尺寸的图像缩放,只能在IAP中视频分辨率查找表范围内进行缩放操作,如果想要实现自定义任意尺寸缩放,需要修改Xilinx官方提供的API源代码,对新手小白极其友好,有此类需求的朋友可以联系博主,提供私人定制服务,也就是我帮你修改Xilinx官方提供的API源代码,以实现自定义任意尺寸缩放操作;

Video Processing Subsystem逻辑资源如下,请谨慎评估你的FPGA资源情况;
在这里插入图片描述
Video Processing Subsystem IP配置如下:这里配置为双线性插值图像缩放算法;
在这里插入图片描述
在这里插入图片描述

VDMA图像缓存

调用Xilinx的VDMA IP实现图像三帧缓存功能,该IP通过Vitis的C代码软件配置;VDMA调用和C代码软件配置代码截图如下:
在这里插入图片描述

Video Mixer介绍

这里重点介绍一下Video Mixer IP;
支持最大分辨率:8K,即可以处理高达8K的视频;
支持最多16层视频拼接叠加,即最多可拼接16路视频;
输入视频格式:AXI4-Stream;
输出视频格式:AXI4-Stream;
需要SDK软件配置,其本质为通过AXI_Lite 做寄存器配置;
提供自定义的配置API,通过调用该库函数即可轻松使用,具体参考SDK代码;
模块占用的FPGA逻辑资源更小,相比于自己写的HLS视频拼接而言,官方的Video Mixer资源占用大约减小30%左右,且更高效:
以工程源码3的2路视频拼接为例,Video Mixer逻辑资源如下,请谨慎评估你的FPGA资源情况;
在这里插入图片描述

AXI4-Stream toVideo Out

再调用Xilinx的Video Timing Controller和AXI4-Stream toVideo Out IP实现视频流从AXI4-Stream到VGA时序的转换;Video Timing Controller配置为1920x1080@60Hz,输出分辨率为在1920x1080黑色背景下叠加的2路或4路缩放拼接后的视频;这两个IP不需要软件配置;Video Timing Controller和AXI4-Stream toVideo Out调用截图如下:
在这里插入图片描述

HDMI输出

最后用纯verilog实现的HDMI发送模块将视频输出显示器显示,该IP最大输出分辨率只支持1920*1080@60Hz;IP调用截图如下:
在这里插入图片描述

工程源码架构

该工程由vivado Block Design设计和SDK软件设计构成;
vivado Block Design设计主要是MIPI解码、ISP处理、图像缓存、图像输出等逻辑部分设计;
SDK软件设计主要是对Block Design设计中使用到的各种IP进行初始化和配置;
以工程源码3的2路视频缩放拼接为例,vivado Block Design设计架构如下:
在这里插入图片描述
以工程源码3的2路视频缩放拼接为例,综合后的工程代码架构如下:
在这里插入图片描述
以工程源码3的2路视频缩放拼接为例,Vitis SDK C语言软件是为了配置FPGA调用的IP,用VItis打开即可查看,代码内容如下:
在这里插入图片描述
由于工程中用到了HLS生成的IP,Sensor Demosaic和Gammer LUT,可能会出现综合编译失败,或者警告后在Vitis SDK里找不到设备ID等情况,此时需要更改电脑系统时间或者打上官方补丁解决这件事情,具体方法参考这位大佬博文:
直接点击前往

4、vivado工程1详解:Kintex7-35T版本–2路视频缩放拼接

开发板FPGA型号:Xilinx–Kintex7–xc7k325tffg900-2;
开发环境:Vivado2022.2;
输入:OV5640摄像头–MIPI–2 Line–RAW10-1280x720@60Hz;
输出:HDMI ,分辨率1920x1080@60Hz黑色背景下叠加的缩放后的视频;
图像缩放方案:Xilinx–Video Processing Subsystem方案;
图像缩放实例:1280x720缩放为960x540;
视频拼接方案:Xilinx–Video Mixer方案;
视频拼接实例:2路视频拼接;
方案应用:Xilinx 系列FPGA解码MIPI视频+图像缩放;
工程代码架构请参考第3章节的《工程源码架构》小节内容;
工程的资源消耗和功耗如下:
在这里插入图片描述

5、vivado工程2详解:Kintex7-35T版本–4路视频缩放拼接

开发板FPGA型号:Xilinx–Kintex7–xc7k325tffg900-2;
开发环境:Vivado2022.2;
输入:OV5640摄像头–MIPI–2 Line–RAW10-1280x720@60Hz;
输出:HDMI ,分辨率1920x1080@60Hz黑色背景下叠加的缩放后的视频;
图像缩放方案:Xilinx–Video Processing Subsystem方案;
图像缩放实例:1280x720缩放为960x540;
视频拼接方案:Xilinx–Video Mixer方案;
视频拼接实例:4路视频拼接;
方案应用:Xilinx 系列FPGA解码MIPI视频+图像缩放;
工程代码架构请参考第3章节的《工程源码架构》小节内容;
工程的资源消耗和功耗如下:
在这里插入图片描述

6、vivado工程3详解:Zynq7020版本–2路视频缩放拼接

开发板FPGA型号:Xilinx–Zynq7020–xc7z020clg400-2;
开发环境:Vivado2022.2;
输入:OV5640摄像头–MIPI–2 Line–RAW10-1280x720@60Hz;
输出:HDMI ,分辨率1920x1080@60Hz黑色背景下叠加的缩放后的视频;
图像缩放方案:Xilinx–Video Processing Subsystem方案;
图像缩放实例:1280x720缩放为960x540;
视频拼接方案:Xilinx–Video Mixer方案;
视频拼接实例:2路视频拼接;
方案应用:Xilinx 系列FPGA解码MIPI视频+图像缩放;
工程代码架构请参考第3章节的《工程源码架构》小节内容;
工程的资源消耗和功耗如下:
在这里插入图片描述

7、vivado工程4详解:Zynq7020版本–4路视频缩放拼接

开发板FPGA型号:Xilinx–Zynq7020–xc7z020clg400-2;
开发环境:Vivado2022.2;
输入:OV5640摄像头–MIPI–2 Line–RAW10-1280x720@60Hz;
输出:HDMI ,分辨率1920x1080@60Hz黑色背景下叠加的缩放后的视频;
图像缩放方案:Xilinx–Video Processing Subsystem方案;
图像缩放实例:1280x720缩放为960x540;
视频拼接方案:Xilinx–Video Mixer方案;
视频拼接实例:4路视频拼接;
方案应用:Xilinx 系列FPGA解码MIPI视频+图像缩放;
工程代码架构请参考第3章节的《工程源码架构》小节内容;
工程的资源消耗和功耗如下:
在这里插入图片描述

8、工程移植说明

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

9、上板调试验证

准备工作

需要准备的器材如下:
FPGA开发板,可以自己准备,也可以购买本博主使用的同款开发板,省事儿;
MIPI-OV5640摄像头,可以自己准备,也可以购买本博主使用的同款开发板,省事儿;
HDMI显示器;
MIPI-OV5640摄像头与开发板连接如下:
在这里插入图片描述
然后上电并下载bit测试;

输出视频演示

以工程源码3为例,2路视频缩放拼接输出如下:

FPGA解码MIPI视频+缩放+2路拼接-ov5640

以工程源码4为例,4路视频缩放拼接输出如下:

FPGA解码MIPI视频+缩放+4路拼接-ov5640

14、福利:工程代码的获取

福利:工程代码的获取
代码太大,无法邮箱发送,以某度网盘链接方式发送,
资料获取方式:私,或者文章末尾的V名片。
网盘资料如下:
在这里插入图片描述
此外,有很多朋友给本博主提了很多意见和建议,希望能丰富服务内容和选项,因为不同朋友的需求不一样,所以本博主还提供以下服务:
在这里插入图片描述

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

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

相关文章

11.1 排序算法

目录 11.1 排序算法 11.1.1 评价维度 11.1.2 理想排序算法 11.1 排序算法 排序算法(sorting algorithm)用于对一组数据按照特定顺序进行排列。排序算法有着广泛的应用,因为有序数据通常能够被更高效地查找、分析和处理。 如图 1…

常用电机测试方法的介绍与功能实现(M测试方法)

目录 概述 1 常用电机测速方法简介 1.1 方法概览 1.2 编码器测速方法 2 M法测速 2.1 理论描述 2.2 实现原理 2.3 速度计算方法 3 功能实现 3.1 功能介绍 3.2 代码实现 3.2.1 使用STM32Cube配置参数 3.2.2 脉冲计数功能 3.2.3 测速函数 4 测试 概述 本文主要介绍…

黑马一站制造数仓实战2

问题 DG连接问题 原理:JDBC:用Java代码连接数据库 Hive/SparkSQL:端口有区别 可以为同一个端口,只要不在同一台机器 项目:一台机器 HiveServer:10000 hiveserver.port 10000 SparkSQL:10001…

一维时间序列信号的广义傅里叶族变换(Matlab)

广义傅里叶族变换是一种时频变换方法,傅里叶变换、短时傅里叶变换、S变换和许多小波变换都是其特殊情况,完整代码及子函数如下,很容易读懂: % Run a demo by creating a signal, transforming it, and plotting the results% Cre…

不同厂商SOC芯片在视频记录仪领域的应用

不同SoC公司芯片在不同产品上的应用信息: 大唐半导体 芯片型号: LC1860C (主控) LC1160 (PMU)产品应用: 红米2A (399元)大疆晓Spark技术规格: 28nm工艺,4个ARM Cortex-A7处理器,1.5GHz主频,2核MaliT628 GPU,1300万像…

计算属性与监听属性

【 1 】计算属性 计算属性大致就是这样 # 1 计算属性是基于它们的依赖进行缓存的# 2 计算属性只有在它的相关依赖发生改变时才会重新求值# 3 计算属性就像Python中的property,可以把方法/函数伪装成属性 # 计算属性本质上是一个函数,它们可以通过 get…

数据隐私新篇章:Facebook如何保护用户信息

随着数字化时代的到来,数据隐私保护成为了社交媒体平台和用户共同关注的焦点。作为全球最大的社交网络之一,Facebook一直致力于保护用户的隐私和数据安全。本文将深入探讨Facebook在数据隐私保护方面的措施和实践,以及其如何开启数据隐私的新…

vue实现简易基本对话功能

基于vue3.0实现的功能&#xff0c;仿照微信、QQ聊天界面。 HTML代码块 <template><el-container style"height: 100%" ref"bodyform"><div class"el_main_content"><div class"main_content_header">这是一…

Git基本配置,使用Gitee(一)

1、设置Giter的user name和email 设置提交用户的信息 git config --global user.name "username" git config --global user.email "Your e-mail"查看配置 git config --list2、生成 SSH 公钥 通过命令 ssh-keygen 生成 SSH Key -t key 类型 -C 注释 ssh-…

K8S 证书过期不能使用kubectl之后,kubeadm 重新生成证书

查询证书过期时间 kubeadm certs check-expiration重新生成证书 # 重新生成所有证书 kubeadm certs renew all # 重新生成某个组件的证书 kubeadm certs renew 组件名称 如&#xff1a;apiserver生成新的配置 # 重新生成kubeconfig配置 kubeadm init phase kubeconfig # 重…

LabVIEW中PID控制器系统的噪声与扰动抑制策略

在LabVIEW中处理PID控制器系统中的噪声和外部扰动&#xff0c;需要从信号处理、控制算法优化、硬件滤波和系统设计四个角度入手。采用滤波技术、调节PID参数、增加前馈控制和实施硬件滤波器等方法&#xff0c;可以有效减少噪声和扰动对系统性能的影响&#xff0c;提高控制系统的…

原生小程序一键获取手机号

1.效果图 2.代码index.wxml <!-- 获取手机号 利用手机号快速填写的功能&#xff0c;将button组件 open-type 的值设置为 getPhoneNumber--><button open-type"getPhoneNumber" bindgetphonenumber"getPhoneNumber">获取手机号</button> …

Spring使用的设计模式

Spring 框架是一个广泛使用的 Java 框架&#xff0c;它内部使用了多种设计模式来简化开发过程、提高代码的可维护性和扩展性。 以下是一些在 Spring 框架中常见的设计模式&#xff0c;以及用代码示例来解释它们&#xff1a; 一、工厂模式&#xff08;Factory Pattern&#xff…

elasticsearch7.15实现用户输入自动补全

Elasticsearch Completion Suggester&#xff08;补全建议&#xff09; Elasticsearch7.15安装 官方文档 补全建议器提供了根据输入自动补全/搜索的功能。这是一个导航功能&#xff0c;引导用户在输入时找到相关结果&#xff0c;提高搜索精度。 理想情况下&#xff0c;自动补…

02-CSS3基本样式

目录 1. CSS3简介 1.1 CSS3的兼容情况 1.2 优雅降级和渐进增强的开发思想 2. 新增选择器 2.1 选择相邻兄弟 2.2 匹配选择器 2.3 属性选择器(重点) 2.4 结构性伪类选择器&#xff08;重点&#xff09; 2.4.1 整体结构类型 2.4.2 标签结构类型 2.4.3 指定子元素的序号&…

模型训练、结果存储、API 调用的系列优化|ModelWhale 版本更新

蜂飞蝶舞&#xff0c;万物并秀&#xff0c;明媚的春光中 ModelWhale 带来新一轮的版本更新&#xff0c;期待为大家带来更优质的使用体验。 本次更新中&#xff0c;ModelWhale 主要进行了以下功能迭代&#xff1a; 新增 IDE 中使用训练记录&#xff08;专业版✓ 团队版✓&…

Ansible04-Ansible Vars变量详解

目录 写在前面6 Ansible Vars 变量6.1 playbook中的变量6.1.1 playbook中定义变量的格式6.1.2 举例6.1.3 小tip 6.2 共有变量6.2.1 变量文件6.2.1.1 变量文件编写6.2.1.2 playbook编写6.2.1.3 运行测试 6.2.2 根据主机组使用变量6.2.2.1 groups_vars编写6.2.2.2 playbook编写6.…

迈的普拉姆利普绘图:深入解析与实战应用

新书上架~&#x1f447;全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我&#x1f446;&#xff0c;收藏下次不迷路┗|&#xff40;O′|┛ 嗷~~ 目录 一、引言&#xff1a;matplotlib绘图的基本原理 代码案例 二、深入了解&#xff1a;matplo…

数据结构与算法02-排序算法

介绍 排序算法是计算机科学中被广泛研究的一个课题。历时多年&#xff0c;它发展出了数十种算法&#xff0c;这些 算法都着眼于一个问题&#xff1a;如何将一个无序的数字数组整理成升序&#xff1f;先来学习一些“简单排序”&#xff0c;它们很好懂&#xff0c;但效率不如其他…

闽盾杯 2021 DNS协议分析

今年CISCN的Tough DNS 的前戏就是DNS协议分析 直接可以查找到flag的base64形式Zmxh 发现就是请求的dnslog 携带的数据 过滤器就是 dns tshark -r dns.pcapng -T json -Y "dns" >1.json 字段选择 dns.qry.name tshark -r dns.pcapng -T json -Y "dns"…