网页游戏网站下载,wordpress提示插件安装插件,apt-get install wordpress,网上营销的平台有哪些目录 1、前言工程概述免责声明FPGA高端图像处理培训 2、相关方案推荐我这里已有的FPGA图像缩放方案本方案在Xilinx Artix7 系列FPGA上的应用本方案在Xilinx Kintex7 系列FPGA上的应用本方案在Xilinx Zynq7000 系列FPGA上的应用本方案在国产FPGA紫光同创系列上的应用本方案在国产… 目录 1、前言工程概述免责声明FPGA高端图像处理培训 2、相关方案推荐我这里已有的FPGA图像缩放方案本方案在Xilinx Artix7 系列FPGA上的应用本方案在Xilinx Kintex7 系列FPGA上的应用本方案在Xilinx Zynq7000 系列FPGA上的应用本方案在国产FPGA紫光同创系列上的应用本方案在国产FPGA高云系列上的应用 3、设计思路框架设计框图输入视频之--OV5640摄像头动态彩条输入视频之--HDMI解码芯片动态彩条图像缩放模块详解图像缩放模块使用重点阅读图像缩放模块仿真FDMA图像缓存HDMI视频输出架构工程源码架构配套的FPGA开发板 4、工程代码1详解KU060OV5640输入版本5、工程代码2详解KU060HDMI输入版本6、工程移植说明vivado版本不一致处理FPGA型号不一致处理其他注意事项 7、上板调试验证并演示准备工作图像缩放案例1输出演示图像缩放案例2输出演示图像缩放案例3输出演示 8、福利工程源码获取 Xilinx UltraScale系列FPGA纯verilog图像缩放工程项目解决方案提供2套工程源码和技术支持 1、前言
没玩过图像缩放都不好意思说自己玩儿过FPGA这是CSDN某大佬说过的一句话鄙人深信不疑。。。目前市面上主流的FPGA图像缩放方案如下 1Xilinx的HLS方案该方案简单易于实现但只能用于Xilinx自家的FPGA关于HLS实现图像缩放请参考我之前写的文章HLS实现图像缩放点击查看 HLS图像缩放 2非纯Verilog方案大部分代码使用Verilog实现但中间的fifo或ram等使用了IP导致移植性变差难以在Xilinx、Altera和国产FPGA之间自由移植 3纯Verilog方案也就是本方案一个字牛逼
工程概述
本文使用Xilinx的UltraScale系列FPGA纯verilog代码实现图像缩放输入视频源有两种分别对应开发者手里有没有摄像头的情况一种是使用廉价的OV5640摄像头模组或者板载HDMI输入如果你的手里没有摄像头或者你的开发板没有摄像头接口则可使用FPGA内部逻辑生成的动态彩条模拟摄像头视频视频源的选择通过代码顶层的parameter参数配置默认使用ov5640作为视频源FPGA首先对输入摄像头做i2c配置然后采集输入视频然后对输入视频做图像缩放操作图像缩放模块可实现任意比例缩放支持领域插值和双线性插值2种算法通过模块顶层参数选择默认使用双线性插值缩放后的图像使用本博主常用的FDMA图像缓存架构进行图像缓存本设计用DDR4做缓存介质实现3帧缓存缩放后的视频最好进行缓存操作因为缩放后原本的视频时序已经被打乱不缓存的话直接读出基本是错误且不对齐的数据导致输出的图像是乱码缓存图像从DDR4读出后经过Native时序生成模块输出标准的VGA时序视频然后经过纯verilog显示的RGB转HDMI模块输出HDMI差分视频最后送显示器显示即可本纯verilog图像缩放方案一共移植了16套工程源码涵盖了目前市面上主流的FPGA平台本博文介绍其中基于Xilinx UltraScale系列FPGA的2套工程详情如下 这里说明一下提供的4套工程源码的作用和价值如下
工程源码1
开发板FPGA型号为Xilinx–Kintex UltraScale–xcku060-ffva1156-2-i输入视频源为OV5640摄像头模组或者FPGA内部逻辑生成的动态彩条视频源的选择通过代码顶层的parameter参数配置默认使用ov5640作为视频源FPGA首先对OV5640摄像头做i2c配置本设计将OV5640摄像头分辨率配置为1280x72030Hz然后采集输入视频将2个时钟1个像素的RGB565转换为1个时钟1个像素的RGB888图像然后对输入视频做图像缩放操作将原视频从1280x720缩放到1920x1080您可修改缩放参数轻松缩放到其他分辨率工程只是举例修改方法博客有说明缩放后的图像使用本博主常用的FDMA图像缓存架构进行图像缓存本设计用DDR4做缓存介质实现3帧缓存缓存图像从DDR4读出后经过Native时序生成模块输出标准的VGA时序视频输出有效分辨率为1920x108060Hz为了兼容缩放后的其他分辨率本设计将背景分辨率设计为1920x1080缩放后的图像叠加在其上显示即可这也是本博主的创新点输出然后经过纯verilog显示的RGB转HDMI模块输出HDMI差分视频最后送显示器显示即可该工程适用于Xilinx UltraScale系列FPGA做图像缩放相关应用
工程源码2
开发板FPGA型号为Xilinx–Kintex UltraScale–xcku060-ffva1156-2-i输入视频为板载的HDMI输入接口使用笔记本电脑模拟HDMI输入设备连接到开发板HDMI输入接口HDMI解码方式为ADV7611芯片方案FPGA纯verilog实现的i2c配置模块完成ADV7611配置本设计将分辨率配置为1920x108060HzADV7611输出RGB888视频流FPGA采集到视频后打两拍以实现同步然后对输入视频做图像缩放操作将原视频从1920x1080缩放到1280x720您可修改缩放参数轻松缩放到其他分辨率工程只是举例修改方法博客有说明缩放后的图像使用本博主常用的FDMA图像缓存架构进行图像缓存本设计用DDR4做缓存介质实现3帧缓存缓存图像从DDR4读出后经过Native时序生成模块输出标准的VGA时序视频输出有效分辨率为1280x72060Hz为了兼容缩放后的其他分辨率本设计将背景分辨率设计为1920x1080缩放后的图像叠加在其上显示即可这也是本博主的创新点输出然后经过纯verilog显示的RGB转HDMI模块输出HDMI差分视频最后送显示器显示即可该工程适用于Xilinx UltraScale系列FPGA做图像缩放相关应用
本博客详细描述了FPGA高端项目Xilinx UltraScale系列的纯verilog图像缩放工程解决方案的设计方案工程代码可综合编译上板调试可直接项目移植适用于在校学生、研究生项目开发也适用于在职工程师做学习提升可应用于医疗、军工等行业的高速接口或图像处理领域 提供完整的、跑通的工程源码和技术支持 工程源码和技术支持的获取方式放在了文章末尾请耐心看到最后
免责声明
本工程及其源码即有自己写的一部分也有网络公开渠道获取的一部分(包括CSDN、Xilinx官网、Altera官网以及其他开源免费获取渠道等等)若大佬们觉得有所冒犯请私信批评教育部分模块源码转载自上述网络版权归原作者所有如有侵权请联系我们删除基于此本工程及其源码仅限于读者或粉丝个人学习和研究禁止用于商业用途若由于读者或粉丝自身原因用于商业用途所导致的法律问题与本博客及博主无关请谨慎使用。。。
FPGA高端图像处理培训
鉴于目前的FPGA就业和行业现状本博推出了FPGA高端图像处理培训计划该计划旨在让一部分人先学会FPGA纯verilog图像缩放提高从业者的技术水平和工资待遇详细计划如下
2、相关方案推荐
我这里已有的FPGA图像缩放方案
我的主页目前有FPGA图像缩放专栏改专栏收录了我目前手里已有的FPGA图像缩放方案从实现方式分类有基于HSL实现的图像缩放、基于纯verilog代码实现的图像缩放从应用上分为单路视频图像缩放、多路视频图像缩放、多路视频图像缩放拼接从输入视频分类可分为OV5640摄像头视频缩放、SDI视频缩放、MIPI视频缩放等等以下是专栏地址 点击直接前往
本方案在Xilinx Artix7 系列FPGA上的应用
本方案适应于所有FPGA平台针对目前市面上主流的FPGA本博将本方案分别移植到了Xilinx 的Artix7、Kintex7、Zynq7020、紫光同创、高云等平台本文讲述的是在Xilinx UltraScale系列FPGA上的应用想要直接应用于Xilinx Artix7 系列FPGA的读者可以参考我之前写得博客以下是博客地址 点击直接前往
本方案在Xilinx Kintex7 系列FPGA上的应用
本方案适应于所有FPGA平台针对目前市面上主流的FPGA本博将本方案分别移植到了Xilinx 的Artix7、Kintex7、Zynq7020、紫光同创、高云等平台本文讲述的是在Xilinx UltraScale系列FPGA上的应用想要直接应用于Xilinx Kintex7 系列FPGA的读者可以参考我之前写得博客以下是博客地址 点击直接前往
本方案在Xilinx Zynq7000 系列FPGA上的应用
本方案适应于所有FPGA平台针对目前市面上主流的FPGA本博将本方案分别移植到了Xilinx 的Artix7、Kintex7、Zynq7020、紫光同创、高云等平台本文讲述的是在Xilinx UltraScale系列FPGA上的应用想要直接应用于Xilinx Zynq7000 系列FPGA的读者可以参考我之前写得博客以下是博客地址 点击直接前往
本方案在国产FPGA紫光同创系列上的应用
本方案适应于所有FPGA平台针对目前市面上主流的FPGA本博将本方案分别移植到了Xilinx 的Artix7、Kintex7、Zynq7020、紫光同创、高云等平台本文讲述的是在Xilinx Artix7 系列FPGA上的应用想要直接应用于国产FPGA紫光同创系列FPGA的读者可以参考我之前写得博客以下是博客地址 点击直接前往
本方案在国产FPGA高云系列上的应用
本方案适应于所有FPGA平台针对目前市面上主流的FPGA本博将本方案分别移植到了Xilinx 的Artix7、Kintex7、Zynq7020、紫光同创、高云等平台本文讲述的是在Xilinx Artix7 系列FPGA上的应用想要直接应用于国产FPGA高云系列FPGA的读者可以参考我之前写得博客以下是博客地址 点击直接前往
3、设计思路框架
设计框图
本博客提供2套vivado工程源码设计框图如下
输入视频之–OV5640摄像头动态彩条
输入视频源有两种分别对应开发者手里有没有摄像头的情况一种是使用廉价的OV5640摄像头模组如果你的手里没有摄像头或者你的开发板没有摄像头接口则可使用FPGA内部逻辑生成的动态彩条模拟摄像头视频视频源的选择通过代码顶层的parameter参数配置默认使用ov5640作为视频源模块顶层接口如下 parameter SENSOR_TYPE 0输出ov5640的视频 parameter SENSOR_TYPE 1输出动态彩条的视频
OV5640摄像头需要i2c初始化配置本设计配置为1280x72030Hz分辨率本设计提供纯verilog代码实现的i2c模块实现配置功能此外OV5640摄像头还需要将2个时钟1个像素的RGB565转换为1个时钟1个像素的RGB888图像动态彩条则由FPGA内部逻辑实现由纯verilog代码编写模块代码架构如下
输入视频之–HDMI解码芯片动态彩条
输入视频源有两种分别对应开发者手里有没有摄像头的情况一种是使用板载的HDMI输入视频接口如果你的开发板没有HDMI输入接口则可使用FPGA内部逻辑生成的动态彩条模拟摄像头视频视频源的选择通过代码顶层的parameter参数配置默认使用板载的HDMI输入视频接口使用笔记本电脑接入HDMI输入接口以模拟输入Sensor本设计的HDMI解码方案为专用芯片ADV7611FPGA纯verilog实现的i2c配置模块完成ADV7611配置本设计将分辨率配置为1920x108060HzIT6802输出RGB888视频流模块顶层接口如下 parameter SENSOR_TYPE 0则输出HDMI接口采集的视频 parameter SENSOR_TYPE 1则输出动态彩条的视频 整个模块代码架构如下
图像缩放模块详解
图像缩放模块功能框图如下由跨时钟FIFO、插值RAM阵列构成跨时钟FIFO的目的是解决跨时钟域的问题比如从低分辨率视频放大到高分辨率视频时像素时钟必然需要变大这是就需要异步FIFO了插值算法和RAM阵列具体负责图像缩放算法层面的实现 插值算法和RAM阵列以ram和fifo为核心进行数据缓存和插值实现设计架构如下 依据上图图像缩放模块内部核心是例化了4个双口RAM作用是缓存4行图像以得到4个临近的像素以此为基础做线性插值如果是做图像放大操作就以这4个临近的像素为基准以线性插值为算法在原图像中插入更多的像素点来扩大分辨率如果是做图像缩小操作就以这4个临近的像素为基准以线性插值为算法在原图像中删除更多的像素点来缩小分辨率此外前面描述的工作是实时的、整幅图像全部扫描式的进行所以需要对RAM的读写操作进行精准控制
图像缩放模块代码架构如下模块的例化请参考工程源码的顶层代码 图像缩放模块FIFO的选择可以调用工程对应的vivado工具自带的FIFO IP核也可以使用纯verilog实现的FIFO可通过接口参数选择图像缩放模块顶层接口如下 FIFO_TYPE选择原则如下 1总体原则选择xilinx好处大于选择verilog 2当你的FPGA逻辑资源不足时请选xilinx 3当你图像缩放的视频分辨率较大时请选xilinx 4当你的FPGA没有FIFO IP或者FIFO IP快用完了请选verilog 5当你向自学一下异步FIFO时请选verilog 6不同FPGA型号对应的工程FIFO_TYPE参数不一样但选择原则一样具体参考代码
2种插值算法的整合与选择 本设计将常用的双线性插值和邻域插值算法融合为一个代码中通过输入参数选择某一种算法 具体选择参数如下
input wire i_scaler_type //0--bilinear;1--neighbor通过输入i_scaler_type 的值即可选择 输入0选择双线性插值算法 输入1选择邻域插值算法 代码里的配置如下
图像缩放模块使用重点阅读
图像缩放模块使用非常简单顶层代码里设置了四个参数如下 上图是将输入视频分辨率从1280x720缩放为1920x1080 如果你想将输入视频分辨率从1280x720缩放为640x480 则只需修改为如下 再比如你想将输入视频分辨率从1280x720缩放为960x540 则只需修改为如下 在本博主这里想要实现图像缩放操作就是这么无脑简单就该两个参数就能搞定貌似高大上的双线性插值图像缩放这种设计、这种操作、这种工程源码你还喜欢吗
图像缩放模块仿真
图像缩放模块需要vivado和matlab联合仿真 需要注意的是仿真的目的是为了验证这一步我已经替你们做完了所以读者不再需要单独仿真如果读者是在需要自己仿真玩玩儿需要自己写仿真代码vivado和matlab联合仿真详细步骤如下 第一步网上下载一张1280X720的图片并用matlab将图片转换为RGB格式的txt文档 第二步在vivado下设计tstbench将RGB格式的txt文档作为视频输入源给到图像缩放模块并将缩放后的图像数据写入输出txt文档 第二步用matlab将输出txt文档转换为图片并于原图一并输出显示以做比较 根据以上方法得到以下仿真结果 双线性插值算法原图1280X720缩小到800x600如下 邻域插值算法原图1280X720缩小到800x600如下 双线性插值算法原图1280X720放大到1920x1080如下 邻域插值算法原图1280X720放大到1920x1080如下
FDMA图像缓存
FDMA图像缓存架构实现的功能是将输入视频缓存到板载DDR3中再读出送后续模块目的是实现视频同步输出实现输入视频到输出视频的跨时钟域问题更好的呈现显示效果由于调用了Xilinx官方的MIG作为DDR控制器所以FDMA图像缓存架构就是实现用户数据到MIG的桥接作用架构如下 FDMA图像缓存架构由FDMA控制器FDMA组成FDMA实际上就是一个AXI4-FULL总线主设备与MIG对接MIG配置为AXI4-FULL接口FDMA控制器实际上就是一个视频读写逻辑以写视频为例假设一帧图像的大小为M×N其中M代表图像宽度N代表图像高度FDMA控制器每次写入一行视频数据即每次向DDR4中写入M个像素写N次即可完成1帧图像的缓存读视频与之一样同时调用两个FIFO实现输入输出视频的跨时钟域处理使得用户可以AXI4内部代码以简单地像使用FIFO那样操作AXI总线从而达到读写DDR的目的进而实现视频缓存本设计图像缓存方式为3帧缓存图像缓存模块代码架构如下 基于FDMA的图像缓存架构在Block Design设计中如下
HDMI视频输出架构
缓存图像从DDR4读出后经过Native时序生成模块输出标准的VGA时序视频然后经过纯verilog显示的RGB转HDMI模块输出HDMI差分视频最后送显示器显示即可需要注意的是UltraScale系列FPGA不支持oserdese2原语所以只能用oserdese3原语实现10 bit串化基于此本博主提供的RGB转HDMI模块可支持7系列、ULTRASCALE系列FPGA、ULTRASCALE_PLUS系 FPGA顶层代码如下 代码例化如下
工程源码架构
提供2套工程源码以工程源码1为例工程Block Design设计如下 提供2套工程源码以工程源码1为例综合后的工程源码架构如下 工程编译后资源消耗低、功耗低、时序收敛符合工程项目应用要求如下 上图只是举例资源消耗并非本工程的实际消耗实际消耗请看下文的《工程代码详解》
配套的FPGA开发板
由于Xilinx UltraScale系列FPGA开发板价格普片较贵所以暂不推荐具体的开发板。。。
4、工程代码1详解KU060OV5640输入版本
开发板FPGA型号Xilinx–Kintex UltraScale–xcku060-ffva1156-2-i 开发环境Vivado2019.1 输入OV5640摄像头或者FPGA内部动态彩条分辨率1280x72030Hz 输出HDMIRTL纯逻辑编码方案输出分辨率1920x108060Hz 图像缩放方案纯Verilog图像缩放 图像缩放实例1280x720缩放到1920x1080其他分辨率缩放可自行修改 图像缓存方案FDMA图像缓存DDR3颗粒图像3帧缓存 实现功能FPGA实现纯verilog图像缩放 工程作用掌握FPGA实现纯verilog图像缩放的设计能力以便能够移植和设计自己的项目 工程Block Design和工程代码架构请参考第3章节的《工程源码架构》小节内容 工程的资源消耗和功耗如下
5、工程代码2详解KU060HDMI输入版本
开发板FPGA型号Xilinx–Kintex UltraScale–xcku060-ffva1156-2-i 开发环境Vivado2019.1 输入HDMI或者FPGA内部动态彩条ADV7611芯片解码方案分辨率1920x108060Hz笔记本电脑模拟输入源 输出HDMIRTL纯逻辑编码方案输出分辨率1280x72060Hz 图像缩放方案纯Verilog图像缩放 图像缩放实例1920x1080缩放到1280x720其他分辨率缩放可自行修改 图像缓存方案FDMA图像缓存DDR3颗粒图像3帧缓存 实现功能FPGA实现纯verilog图像缩放 工程作用掌握FPGA实现纯verilog图像缩放的设计能力以便能够移植和设计自己的项目 工程Block Design和工程代码架构请参考第3章节的《工程源码架构》小节内容 工程的资源消耗和功耗如下
6、工程移植说明
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软核
7、上板调试验证并演示
准备工作
需要如下器材设备 1、FPGA开发板推荐适用本博主配套的开发板 2、OV5640摄像头或HDMI输入设备比如笔记本电脑两者都没有则使用动态彩条 2、HDMI连接线和显示器
图像缩放案例1输出演示
我将ov5640摄像头和动态彩条原图从1280x720缩小到800x600输出的视频剪辑整理后如下 视频前半段为动态彩条原图从1280x720缩小到800x600输出 视频前后段为ov5640摄像头原图从1280x720缩小到800x600输出 R-720P-600P-2024 图像缩放案例2输出演示
我将ov5640摄像头和动态彩条原图从1280x720放大到1920x1080输出的视频剪辑整理后如下 视频前半段为动态彩条原图从1280x720放大到1920x1080输出 视频前后段为ov5640摄像头原图从1280x720放大到1920x1080输出 R-720P-1080P-2024 图像缩放案例3输出演示
我将HDMI输入和动态彩条原图从1920x1080缩小到1280x720输出的视频剪辑整理后如下 左边视频为笔记本1920x1080的原视频 右边视频为FPGA缩放到1280x720的视频 R-1080P-720P-2024 8、福利工程源码获取
福利工程代码的获取 代码太大无法邮箱发送以某度网盘链接方式发送 资料获取方式私或者文章末尾的V名片。 网盘资料如下 此外有很多朋友给本博主提了很多意见和建议希望能丰富服务内容和选项因为不同朋友的需求不一样所以本博主还提供以下服务