网站建设合同内容/百度快速排名软件下载
目录
- 1、前言
- 版本更新说明
- 给读者的一封信
- FPGA就业高端项目培训计划
- 免责声明
- 2、相关方案推荐
- 我这里已有的FPGA图像缩放方案
- 本方案在Xilinx Kintex7 系列FPGA上的应用
- 本方案在Xilinx Artix7 系列FPGA上的应用
- 本方案在国产FPGA紫光同创系列上的应用
- 本方案在国产FPGA高云系列上的应用
- 3、设计思路框架
- 设计框图
- 视频源选择
- ov5640 i2c配置及采集
- 动态彩条
- 图像缩放模块详解
- 图像缩放模块使用
- 图像缓存
- 视频输出
- PL端逻辑工程源码架构
- PS端SDK软件工程源码架构
- 4、vivado和matlab联合仿真
- 5、工程代码9详解:掌握图像缩放模块用法
- 6、工程代码10详解:掌握图像缩小操作
- 7、工程代码11详解:掌握图像放大操作
- 8、工程移植说明
- vivado版本不一致处理
- FPGA型号不一致处理
- 其他注意事项
- 9、上板调试验证并演示
- 准备工作
- 工程9输出演示
- 工程10输出演示
- 工程11输出演示
- 10、福利:工程源码获取
FPGA高端项目:Xilinx Zynq7020 系列FPGA纯verilog图像缩放工程解决方案 提供3套工程源码和技术支持
1、前言
没玩过图像缩放都不好意思说自己玩儿过FPGA,这是CSDN某大佬说过的一句话,鄙人深信不疑。。。目前市面上主流的FPGA图像缩放方案如下:
1:Xilinx的HLS方案,该方案简单,易于实现,但只能用于Xilinx自家的FPGA;关于HLS实现图像缩放请,参考我之前写的文章HLS实现图像缩放点击查看:HLS图像缩放
2:非纯Verilog方案,大部分代码使用Verilog实现,但中间的fifo或ram等使用了IP,导致移植性变差,难以在Xilinx、Altera和国产FPGA之间自由移植;
3:纯Verilog方案,也就是本方案,一个字:牛逼!!!
本文使用Xilinx的Zynq7020系列FPGA纯verilog代码实现图像缩放,视频源有两种,分别对应开发者手里有没有摄像头的情况,一种是使用廉价的OV5640摄像头模组;如果你的手里没有摄像头,或者你的开发板没有摄像头接口,则可使用代码内部生成的动态彩条模拟摄像头视频;视频源的选择通过代码顶层的define宏定义进行,默认使用ov5640作为视频源;图像缩放模块支持领域插值和双线性插值2种算法,通过模块顶层参数选择,默认使用双线性插值;缩放后的图像使用我常用的FDMA图像缓存架构进出DDR3等存储设备进行图像的三帧缓存,缩放后的视频最好进行缓存操作,因为缩放后原本的视频时序已经被打乱,不缓存的话直接读出基本是错误且不对齐的数据,输出的图像是乱码;从DDR3读出视频经过VGA时序生成标准的VGA时序视频,最后用纯verilog显示的HDMI输出模块送显示器显示即可;针对目前市面上主流的FPGA,本纯verilog图像缩放方案一共移植了17套工程源码,本博文介绍其中基于Xilinx Zynq7020系列FPGA的3套工程,详情如下:
这里说明一下提供的3套工程源码的作用和价值,如下:
工程源码1:图像不缩放操作
ov5640或者动态彩条输入,HDMI输出,图像经过图像缩放模块,但并不做缩放操作,即图像进入图像缩放模块前的分辨率为1280x720,图像经过图像缩放模块出来后的分辨率依然为1280x720,目的是让读者知道图像缩放模块的用法,为后面的缩小和放大等操作打好基础;
工程源码2:图像缩小操作
ov5640或者动态彩条输入,HDMI输出,图像经过图像缩放模块,并进行缩小操作,即图像进入图像缩放模块前的分辨率为1280x720,图像经过图像缩放模块出来后的分辨率为800x600,目的是让读者知道图像缩放模块缩小操作的用法,以便能够移植和设计自己的项目;
工程源码3:图像放大操作
ov5640或者动态彩条输入,HDMI输出,图像经过图像缩放模块,并进行放大操作,即图像进入图像缩放模块前的分辨率为1280x720,图像经过图像缩放模块出来后的分辨率为1920x1080,目的是让读者知道图像缩放模块放大操作的用法,以便能够移植和设计自己的项目;
本博客详细描述了FPGA高端项目:Xilinx Zynq7020 系列的纯verilog图像缩放工程解决方案的设计方案,工程代码可综合编译上板调试,可直接项目移植,适用于在校学生、研究生项目开发,也适用于在职工程师做学习提升,可应用于医疗、军工等行业的高速接口或图像处理领域;
提供完整的、跑通的工程源码和技术支持;
工程源码和技术支持的获取方式放在了文章末尾,请耐心看到最后;
版本更新说明
此版本为第3版,之前根据读者的建议,对第1版工程做了改进和更新形成如下的第2版:
1:增加了输入视频动态彩条的选择,有的读者说他手里没有OV5640摄像头或者摄像头原理图和我的不一致,导致在移植过程中困难很大,基于此,增加了动态彩条,它由FPGA内部产生,不需要外接摄像头就可以使用,使用方法在后文有说明;
2:优化了FDMA,之前的FDMA内AXI4的数据读写突发长度为256,导致在低端FPGA上带宽不够,从而图像质量不佳,基于此,将FDMA内AXI4的数据读写突发长度改为128;
3:优化了HDMI输出模块,之前用的自定义IP,有读者说IP无法更新,虽能正常使用,但看源码不方便,基于此,将HDMI输出模块改为纯verilog实现的,直接了当;
4:更新了输出时序模块,我的输出时序模块采用1080P背景中显示有效区域图像的方式,之前的版本,除有效区域图像外,其他区域是花屏的,有读者说看着不舒服,基于此,将,除有效区域图像外的图像优化为黑色,即黑色背景中显示有效区域图像的方式,在后面有贴图;
现在根据读者的建议,又对第2版工程做了改进和更新形成如下的第3版:
1:优化了图像缩放模块代码结构,将原来的跨时钟域FIFO纳入图像缩放模块内部,并添加了新的顶层接口和配置参数,使能原来复杂的顶层接口和参数变得十分简洁;
2:新增了纯verilog实现的异步FIFO,代码里可选Xilinx的FIFO IP核,也可选verilog实现的异步FIFO,通过顶层参数选择,这样就使得图像缩放模块移植性和通用性更强;
3:新增了一套工程源码,该工程主要针对高分辨率输入视频的图像缩放的项目需求,新增的工程采用高达1920x1080@60Hz的HDMI输入视频进行图像缩放操作;
4:工程整体使用难度大大降低,由于优化了图像缩放模块和整体代码架构,加之将原来很多参数进行了统一的设置,代码量和行数减少了近45%,仅需修改集合参数就能快速实现工程的移植和修改;
给读者的一封信
FPGA作为当今热门行业,入行门槛很高,工资待遇不错,一时间引无数英雄尽折腰,但很多初学者甚至工程师都还有很多误区,现给读者一封信如下:
1、矮要承认挨打站稳
要学FPGA,甚至吃这碗饭,每个人都是从零基础开始的,你对自己有自信,认为你行,就自学;你不自信,就找别人学;和古代拜师学艺是一回事儿;首先思维要符合逻辑;
2、基础问题需要自己解决
最基础的知识,比如:verilog语法、vivado工具使用、模电数电基础常识、电脑使用、计算机基本结构。。。这些基础知识在网上都是免费的,既有文字资料也有视频资料;这些基础知识你一定要具备,因为这是你能获得的性价比最高的东西了,首先它免费;其次它简单,只需要你花时间,不需要花脑子;最后它重要,这是你干FPGA的基础;
3、有了源码等于零
你可能认为,我有了源码就能做项目了,我可以肯定的告诉你,该醒醒了;原子弹的详细原理和原料配方甚至生产工艺流程在网上都是公开的,为啥全世界就那联合国几大流氓能造出来的?同样的,源码给你,你看得懂吗?你知道怎么用吗?看不懂不会用的源码,跟废物有什么区别?你需要的是源码+工程,最完美的是源码+工程+技术支持;有了源码,就有了可开发的底层架构,有了工程就知道源码或者模块怎么使用,有了技术支持就可以根据源码修改开发自己的项目;
4、先学会爬在学会跑
对于初学者,没有资格研究代码,你首先需要做的是对工程进行复现;比如给你一个图像的工程,你首先在自己的开发板上复现这个工程的功能,然后再去阅读理解代码,然后对代码的功能部分做小幅修改,比如改一下接口,增加几个输出接口,比如加一个LED输出;小幅修改后再慢慢增加修改幅度,以符合自己的需求;
5、学FPGA要不求甚解
学FPGA要不求甚解,甚至不需要理解,这句话咋听着有点不符合逻辑呢?对于很多功能性模块而言,你不需要理解它怎么实现的,你只需要知道怎么使用它,比如一个图像缩放模块,这种东西都是很老的知识,以你目前的知识水平,该模块的代码你怎么看也看不懂的,但你只要知道怎么使用它就行了,知道怎么使用,就能做项目,就能在公司呆下去了,原因很简单,老板招你来是干活儿的,不是招你来学习的,那是学校的事儿;如果要等什么都懂了才干活儿,那公司早垮了,学FPGA就是在实践中学习,先上前线去干活,边干边学,在实践中遇到问题,并主动去查资料问大佬理解问题,才是成长最快的,而不是一味的咬文嚼字刨根问底;
FPGA就业高端项目培训计划
鉴于目前的FPGA就业和行业现状,本博推出了FPGA就业高端项目培训:纯verilog图像缩放 工程解决方案的计划,该计划旨在让一部分人先学会FPGA纯verilog图像缩放,提高从业者的技术水平和工资待遇,详细计划如下:
FPGA就业高端项目培训计划细节:
1、我发你上述17套工程源码和对应的工程设计文档网盘链接,你保存下载,作为培训的核心资料;
2、你根据自己的实际情况安装好对应的开发环境,然后对着设计文档进行浅层次的学习;
3、遇到不懂的随时问我,包括代码、职业规划、就业咨询、人生规划、战略规划等等;
4、每周末进行一次腾讯会议,我会检查你的学习情况和面对面沟通交流;
5、你可以移植代码到你自己的FPGA开发板上跑,如果你没有板子,你根据你自己的需求修改代码后,编译工程,把bit发我,我帮你下载到我的板子上验证;
免责声明
本工程及其源码即有自己写的一部分,也有网络公开渠道获取的一部分(包括CSDN、Xilinx官网、Altera官网等等),若大佬们觉得有所冒犯,请私信批评教育;基于此,本工程及其源码仅限于读者或粉丝个人学习和研究,禁止用于商业用途,若由于读者或粉丝自身原因用于商业用途所导致的法律问题,与本博客及博主无关,请谨慎使用。。。
2、相关方案推荐
我这里已有的FPGA图像缩放方案
我的主页目前有FPGA图像缩放专栏,改专栏收录了我目前手里已有的FPGA图像缩放方案,从实现方式分类有基于HSL实现的图像缩放、基于纯verilog代码实现的图像缩放;从应用上分为单路视频图像缩放、多路视频图像缩放、多路视频图像缩放拼接;从输入视频分类可分为OV5640摄像头视频缩放、SDI视频缩放、MIPI视频缩放等等;以下是专栏地址:
点击直接前往
本方案在Xilinx Kintex7 系列FPGA上的应用
本方案适应于所有FPGA平台,针对目前市面上主流的FPGA,本博将本方案分别移植到了Xilinx 的Artix7、Kintex7、Zynq7020、紫光同创、高云等平台,本文讲述的是在Xilinx Zynq7020 系列FPGA上的应用,想要直接应用于Xilinx Kintex7 系列FPGA的读者,可以参考我之前写得博客,以下是博客地址:
点击直接前往
本方案在Xilinx Artix7 系列FPGA上的应用
本方案适应于所有FPGA平台,针对目前市面上主流的FPGA,本博将本方案分别移植到了Xilinx 的Artix7、Kintex7、Zynq7020、紫光同创、高云等平台,本文讲述的是在Xilinx Zynq7020 系列FPGA上的应用,想要直接应用于Xilinx Artix7 系列FPGA的读者,可以参考我之前写得博客,以下是博客地址:
点击直接前往
本方案在国产FPGA紫光同创系列上的应用
本方案适应于所有FPGA平台,针对目前市面上主流的FPGA,本博将本方案分别移植到了Xilinx 的Artix7、Kintex7、Zynq7020、紫光同创、高云等平台,本文讲述的是在Xilinx Zynq7020 系列FPGA上的应用,想要直接应用于国产FPGA紫光同创系列FPGA的读者,可以参考我之前写得博客,以下是博客地址:
点击直接前往
本方案在国产FPGA高云系列上的应用
本方案适应于所有FPGA平台,针对目前市面上主流的FPGA,本博将本方案分别移植到了Xilinx 的Artix7、Kintex7、Zynq7020、紫光同创、高云等平台,本文讲述的是在Xilinx Zynq7020 系列FPGA上的应用,想要直接应用于国产FPGA高云系列FPGA的读者,可以参考我之前写得博客,以下是博客地址:
点击直接前往
3、设计思路框架
设计框图
本博客提供4套vivado工程源码,设计框图如下:
本设计的图像缓存在Zynq7020 PS侧DDR3中,需要调用Zynq7软核完成DDR3的配置;
视频源选择
视频源有两种,分别对应开发者手里有没有摄像头的情况,一种是使用廉价的OV5640摄像头模组;如果你的手里没有摄像头,或者你的开发板没有摄像头接口,则可使用代码内部生成的动态彩条模拟摄像头视频;视频源的选择通过代码顶层的define宏定义进行,默认使用ov5640作为视频源;视频源的选择通过代码顶层的`define宏定义进行;如下:
选择逻辑代码部分如下:
选择逻辑如下:
当(注释) define COLOR_TEST时,输入源视频是ov5640摄像头;
当(不注释) define COLOR_TEST时,输入源视频是动态彩条;
ov5640 i2c配置及采集
视频源有两种,分别对应开发者手里有没有摄像头的情况,一种是使用廉价的OV5640摄像头模组;如果你的手里没有摄像头,或者你的开发板没有摄像头接口,则可使用代码内部生成的动态彩条模拟摄像头视频;视频源的选择通过代码顶层的define宏定义进行,默认使用ov5640作为视频源;ov5640需要i2c配置才能使用,需要i2c配置分辨率,然后将DVP接口的两个时钟一个像素的GRB565视频数据采集为一个时钟一个像素的RGB565或者RGB888视频数据;ov5640i2c配置及采集代码如下:
ov5640配置和采集模块顶层参数如下:
module helai_ov5640_rx #(parameter DELAY = 1 , // 有的摄像头使用转接板与FPGA开发板连接,可能需要考虑上电延时,不需要是设为0parameter DEVID = 8'h78, // i2c 从机器件地址parameter IMAGE_WIDTH = 1280 , // ov5640输出视频宽度parameter IMAGE_HEIGHT = 720 , // ov5640输出视频高度parameter RGB_TYPE = 1'd0 // 设为0-->输出RGB565;设为1-->输出RGB888
)(input clk_25m , // 固定输入 25M 时钟input rst_n , // 低电平复位output cmos_scl , // ov5640的scl接口inout cmos_sda , // ov5640的sda接口input cmos_pclk_i , // ov5640的pclk接口input cmos_href_i , // ov5640的href接口input cmos_vsync_i, // ov5640的vsync接口input [7:0] cmos_data_i , // ov5640的data接口output cmos_xclk_o , // ov5640的xclk接口,如果你的摄像头自带晶振,则此信号不需要output [23:0] ov5640_rgb , // 输出的RGB视频像素数据output ov5640_de , // 输出的RGB视频像素数据有效信号output ov5640_vs , // 输出的RGB视频场同步信号output ov5640_hs , // 输出的RGB视频行同步信号output cfg_done // ov5640配置完成拉高信号
);
ov5640配置和采集模块的例化请参考工程源码的顶层代码;
动态彩条
如果你的手里没有ov5640,或者你得开发板没有ov5640接口,则可使用代码内部生成的动态彩条模拟摄像头视频;视频源的选择通过代码顶层的define宏定义进行,动态彩条可配置为不同分辨率的视频,视频的边框宽度,动态移动方块的大小,移动速度等都可以参数化配置,我这里配置为辨率1280x720,动态彩条模块代码位置和顶层接口和例化如下:
动态彩条模块的例化请参考工程源码的顶层代码;
图像缩放模块详解
图像缩放模块功能框图如下,由跨时钟FIFO、插值+RAM阵列构成,跨时钟FIFO的目的是解决跨时钟域的问题,比如从低分辨率视频放大到高分辨率视频时,像素时钟必然需要变大,这是就需要异步FIFO了,插值算法和RAM阵列具体负责图像缩放算法层面的实现;
插值算法和RAM阵列以ram和fifo为核心进行数据缓存和插值实现,设计架构如下:
图像缩放模块代码架构如下:模块的例化请参考工程源码的顶层代码;
图像缩放模块FIFO的选择可以调用工程对应的vivado工具自带的FIFO IP核,也可以使用纯verilog实现的FIFO,可通过接口参数选择,图像缩放模块顶层接口如下:
module helai_video_scale #(//---------------------------Parameters----------------------------------------parameter FIFO_TYPE = "xilinx", // "xilinx" for xilinx-fifo ; "verilog" for verilog-fifoparameter DATA_WIDTH = 8 , //Width of input/output dataparameter CHANNELS = 1 , //Number of channels of DATA_WIDTH, for color imagesparameter INPUT_X_RES_WIDTH = 11 //Widths of input/output resolution control signals
)(input i_reset_n , // 输入--低电平复位信号input [INPUT_X_RES_WIDTH-1:0] i_src_video_width , // 输入视频--即缩放前视频的宽度input [INPUT_X_RES_WIDTH-1:0] i_src_video_height, // 输入视频--即缩放前视频的高度input [INPUT_X_RES_WIDTH-1:0] i_des_video_width , // 输出视频--即缩后前视频的宽度input [INPUT_X_RES_WIDTH-1:0] i_des_video_height, // 输出视频--即缩后前视频的高度input i_src_video_pclk , // 输入视频--即缩前视频的像素时钟input i_src_video_vs , // 输入视频--即缩前视频的场同步信号,必须为高电平有效input i_src_video_de , // 输入视频--即缩前视频的数据有效信号,必须为高电平有效input [DATA_WIDTH*CHANNELS-1:0] i_src_video_pixel , // 输入视频--即缩前视频的像素数据input i_des_video_pclk , // 输出视频--即缩后视频的像素时钟,一般为写入DDR缓存的时钟output o_des_video_vs , // 输出视频--即缩后视频的场同步信号,高电平有效output o_des_video_de , // 输出视频--即缩后视频的数据有效信号,高电平有效output [DATA_WIDTH*CHANNELS-1:0] o_des_video_pixel // 输出视频--即缩后视频的像素数据
);
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选择邻域插值算法;
代码里的配置如下:
图像缩放模块使用
图像缩放模块使用非常简单,顶层代码里设置了四个参数,如下:
上图视频通过图像缩放模块但不进行缩放操作,旨在掌握图像缩放模块的用法;如果需要将图像放大到1080P,则修改为如下:
当然,需要修改的不仅仅这一个地方,FDMA的配置也需要相应修改,详情请参考代码,但我想要证明的是,图像缩放模块使用非常简单,你都不需要知道它内部具体怎么实现的,上手就能用;
图像缓存
Xilinx系列FPGA工程使用我常用的FDMA架构,紫光同创系列FPGA工程使用我常用的HDMA架构,高云系列FPGA工程使用自家带的IP架构;图像缓存的作用是将图像送入DDR中做3帧缓存再读出显示,目的是匹配输入输出的时钟差和提高输出视频质量,关于FDMA,请参考我之前的博客,博客地址:点击直接前往
FDMA图像缓存架构在Block Design中如下:
需要注意的是,Xilinx系列的Artix7、Kintex7以及紫光和高云工程都使用DDR3作为缓存,Zynq7020工程使用PS端的DDR3作为缓存;Artix7、Kintex7工程调用MIG IP实现DDR3读写;Zynq7020工程调用Zynq软核实现DDR3读写;
视频输出
视频从FDMA读出后,经过VGA时序模块和HDMI发送模块后输出显示器,代码位置如下:
VGA时序配置为1920X1080,HDMI发送模块采用verilog代码手写,可以用于FPGA的HDMI发送应用,关于这个模块,请参考我之前的博客,博客地址:点击直接前往
PL端逻辑工程源码架构
Xilinx Zynq7020 系列FPGA工程源码架构具有高度相似性,以工程9为例截图如下:
PS端SDK软件工程源码架构
Xilinx Zynq7020 系列FPGA纯verilog图像缩放工程没有用官方推荐的VDMA方案,而是用了自定义的FDMA方案,虽然不需要SDK配置,但FDMA的AXI4接口时钟由Zynq提供,所以需要运行SDK程序才能启动Zynq,从而为PL端逻辑提供时钟;由于不需要SDK配置,所以SDK软件代码就变得极度简单,只需运行一个“Hello World”即可,如下:
4、vivado和matlab联合仿真
需要注意的是,方针的目的是为了验证,这一步我已经替你们做完了,所以读者不再需要单独仿真,如果读者是在需要自己仿真玩玩儿,需要自己写仿真代码;vivado和matlab联合仿真详细步骤如下:
第一步:网上下载一张1280X720的图片,并用matlab将图片转换为RGB格式的txt文档;
第二步:在vivado下设计tstbench,将RGB格式的txt文档作为视频输入源给到图像缩放模块,并将缩放后的图像数据写入输出txt文档;
第二步:用matlab将输出txt文档转换为图片,并于原图一并输出显示以做比较;
根据以上方法得到以下仿真结果:
双线性插值算法原图1280X720缩小到800x600如下:
邻域插值算法原图1280X720缩小到800x600如下:
双线性插值算法原图1280X720放大到1920x1080如下:
邻域插值算法原图1280X720放大到1920x1080如下:
5、工程代码9详解:掌握图像缩放模块用法
开发板FPGA型号:Xilinx–Zynq7020–xc7z020clg400-2;
开发环境:Vivado2019.1;
输入:OV5640摄像头或动态彩条,分辨率1280x720;
输出:HDMI,1080P分辨率下的720P有效区域显示;
输入输出缩放方案:输入1280x720–>输出1280x720;
工程作用:掌握图像缩放模块的用法,为后面的缩小和放大等操作打好基础;
工程Block Design请参考第3章节“设计思路框架”的“图像缓存”小节内容;
工程代码架构请参考第3章节“设计思路框架”的“PL端逻辑工程源码架构”和“PS端SDK软件工程源码架构”小节内容;
工程的资源消耗和功耗如下:该工程使用的是纯verilog fifo方案;
6、工程代码10详解:掌握图像缩小操作
开发板FPGA型号:Xilinx–Zynq7020–xc7z020clg400-2;
开发环境:Vivado2019.1;
输入:OV5640摄像头或动态彩条,分辨率1280x720;
输出:HDMI,1080P分辨率下的800x600有效区域显示;
输入输出缩放方案:输入1280x720–>输出800x600;
工程作用:掌握图像缩放模块缩小操作的用法,以便能够移植和设计自己的项目;
工程Block Design请参考第3章节“设计思路框架”的“图像缓存”小节内容;
工程代码架构请参考第3章节“设计思路框架”的“PL端逻辑工程源码架构”和“PS端SDK软件工程源码架构”小节内容;
工程的资源消耗和功耗如下:该工程使用的是纯verilog fifo方案;
7、工程代码11详解:掌握图像放大操作
开发板FPGA型号:Xilinx–Zynq7020–xc7z020clg400-2;
开发环境:Vivado2019.1;
输入:OV5640摄像头或动态彩条,分辨率1280x720;
输出:HDMI,1080P分辨率下的1920x1080有效区域显示;
输入输出缩放方案:输入1280x720–>输出1920x1080;
工程作用:掌握图像缩放模块放大操作的用法,以便能够移植和设计自己的项目;
工程Block Design请参考第3章节“设计思路框架”的“图像缓存”小节内容;
工程代码架构请参考第3章节“设计思路框架”的“PL端逻辑工程源码架构”和“PS端SDK软件工程源码架构”小节内容;
工程的资源消耗和功耗如下:该工程使用的是Xilinx fifo ip方案;
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、上板调试验证并演示
准备工作
需要如下器材设备:
1、FPGA开发板;
2、OV5640摄像头或HDMI输入设备,比如笔记本电脑,两者都没有则使用动态彩条;
2、HDMI连接线和显示器;
工程9输出演示
工程9输出演示,我将动态彩条原图1280x720和ov5640摄像头原图1280x720输出的视频剪辑整理后如下:
视频前半段为动态彩条原图1280x720输出;
视频前后段为ov5640摄像头原图1280x720输出;
R-720P-720P-2024
工程10输出演示
工程10输出演示,我将动态彩条原图1280x720缩小到800x600和ov5640摄像头原图1280x720缩小到800x600输出的视频剪辑整理后如下:
视频前半段为动态彩条原图1280x720缩小到800x600输出;
视频前后段为ov5640摄像头原图1280x720缩小到800x600输出;
R-720P-600P-2024
工程11输出演示
工程11输出演示,我将动态彩条原图1280x720放大到1920x1080和ov5640摄像头原图1280x720放大到1920x1080输出的视频剪辑整理后如下:
视频前半段为动态彩条原图1280x720放大到1920x1080输出;
视频前后段为ov5640摄像头原图1280x720放大到1920x1080输出;
R-720P-1080P-2024
10、福利:工程源码获取
福利:工程代码的获取
代码太大,无法邮箱发送,以某度网盘链接方式发送,
资料获取方式:私,或者文章末尾的V名片。
网盘资料如下:
相关文章:

FPGA高端项目:Xilinx Zynq7020 系列FPGA纯verilog图像缩放工程解决方案 提供3套工程源码和技术支持
目录 1、前言版本更新说明给读者的一封信FPGA就业高端项目培训计划免责声明 2、相关方案推荐我这里已有的FPGA图像缩放方案本方案在Xilinx Kintex7 系列FPGA上的应用本方案在Xilinx Artix7 系列FPGA上的应用本方案在国产FPGA紫光同创系列上的应用本方案在国产FPGA高云系列上的应…...

【分布式技术专题】「分布式技术架构」 探索Tomcat集群架构原理和开发分析指南
探索Tomcat技术架构设计模式的奥秘 Tomcat集群原理Tomcat集群能带来什么Tomcat集群产生什么问题Tomcat 单服务体系架构Tomcat集群"简单版"首先要解决Session共享的问题典型负载均衡策略分析Session管理-Session Sticky粘滞会话:Session管理-Session 复制S…...

c++类与对象(五):友元、内部类、临时对象、匿名对象
上次重新再次补全了构造函数的内容,以及static成员:C类与对象(四):再谈构造函数(详解初始化列表)、Static成员 今天就来进行类与对象最后一部分的内容 文章目录 1.友元1.1友元函数1.2友元类 2.内…...

细数语音识别中的几个former
随着Transformer在人工智能领域掀起了一轮技术革命,越来越多的领域开始使用基于Transformer的网络结构。目前在语音识别领域中,Tranformer已经取代了传统ASR建模方式。近几年关于ASR的研究工作很多都是基于Transformer的改进,本文将介绍其中应…...

【MySQL进阶】锁
文章目录 锁概述全局锁语法特点 表级锁表锁意向锁 行级锁行锁间隙锁&临键锁 面试了解数据库的锁吗?介绍一下间隙锁InnoDB中行级锁是怎么实现的?数据库在什么情况下会发生死锁?说说数据库死锁的解决办法 锁 概述 锁机制:数据库…...

redis复制和分区:主从复制、哨兵模式和集群模式
概述 在 Redis 中,复制和分区是用于数据冗余和性能扩展的关键特性。以下是主从复制、哨兵模式和集群模式的工作原理的简要概述: 主从复制 (Replication) 基本概念:Redis 的主从复制功能允许多个 Redis 服务器具有相同的数据副本。这在读取操…...

个人实现的QT拼图游戏(开源),QT拖拽事件详解
文章目录 效果图引言玩法 拖拽概念基本概念如何在Qt中使用拖放注意事项 游戏关键问题总结 效果图 
gin渲染篇
1. 各种数据格式的响应 json、结构体、XML、YAML类似于java的properties、ProtoBuf package mainimport ("github.com/gin-gonic/gin""github.com/gin-gonic/gin/testdata/protoexample" )// 多种响应方式 func main() {// 1.创建路由// 默认使用了2个中…...

第三方控价服务商怎么选
用对了方法,事半功倍,品牌控价也是如此,品牌方在治理工作中,如果选择自建团队进行处理,需要包含对数据技术的抓取团队,还要有对治理规则熟悉的操作团队,涉及人员和系统,费用成本相应…...

大模型的学习路线图推荐—多维度深度分析【云驻共创】
🐲本文背景 近年来,随着深度学习技术的迅猛发展,大模型已经成为学术界和工业界的热门话题。大模型具有数亿到数十亿的参数,这使得它们在处理复杂任务时表现得更为出色,但同时也对计算资源和数据量提出了更高的要求。 …...

【学习】focal loss 损失函数
focal loss用于解决正负样本的不均衡情况 通常我们需要预测的正样本要少于负样本,正负样本分布不均衡会带来什么影响?主要是两个方面。 样本不均衡的话,训练是低效不充分的。因为困难的正样本数量较少,大部分时间都在学习没有用…...

几个好玩好用的AI站点
本文作者系360奇舞团前端开发工程师 ai能力在去年一年飞速增长,各种AI产品如雨后春笋般冒出来,在各种垂直领域上似乎都有AI的身影出现,今天就总结几款好玩的场景,看大家工作生活中是否会用到。 先说一个比较重要的消息是ÿ…...

Java算法 leetcode简单刷题记录5
Java算法 leetcode简单刷题记录5 老人的数目: https://leetcode.cn/problems/number-of-senior-citizens/ substring(a,b) 前闭后开 统计能整除数字的位数: https://leetcode.cn/problems/count-the-digits-that-divide-a-number/ 并不复杂,…...

计算机网络自顶向下Wireshark labs1-Intro
Wireshark labs1 实验文档:http://www-net.cs.umass.edu/wireshark-labs/Wireshark_Intro_v8.0.pdf 介绍 加深对网络协议的理解通常可以通过观察协议的运行和不断调试协议来大大加深,具体而言,就是观察两个协议实体之间交换的报文序列&…...

CSS实现图片放大缩小的几种方法
参考 方法一: 常用使用img标签,制定width或者height的任意一个,图片会自动等比例缩小 <div><img src"https://avatar.csdn.net/8/5/D/1_u012941315.jpg"/> </div> <!-- CSS--> <style> img {widt…...

时间序列预测 — CNN-LSTM-Attention实现多变量负荷预测(Tensorflow):多变量滚动
专栏链接:https://blog.csdn.net/qq_41921826/category_12495091.html 专栏内容 所有文章提供源代码、数据集、效果可视化 文章多次上领域内容榜、每日必看榜单、全站综合热榜 时间序列预测存在的问题 现有的大量方法没有真正的预测未…...

angular-tree-component组件中实现特定节点自动展开
核心API 都在 expandToNode这个函数中 HTML treeData的数据结构大概如下 [{"key": "3293040275","id": "law_category/3293040275","name": "嘿嘿嘿嘿","rank": 0,"parentKey": "0&q…...

Linux系统下安装Vcpkg,并使用Vcpkg安装、编译OpenSceneGraph
环境:CentOS7 内存:8g(内存过少编译osg时会出现内存不足导致编译失败的情况,内存设置为4G时失败了,我直接加到了8g,所以就以8g为准了) 安装和配置vcpkg cd ~/ git clone https://www.github.com/microsoft/vcpkg cd …...

设计模式二(工厂模式)
本质:实例化对象不用new,用工厂代替,实现了创建者和调用者分离 满足: 开闭原则:对拓展开放,对修改关闭 依赖倒置原则:要针对接口编程 迪米特原则:最少了解原则,只与自己直…...

Maven应用手册
没加载出来就reimport,这个时候clean和install没用,那是编译安装项目的。 reimport干了什么? 结合idea的maven教程 父子模块 子模块不需要groupId ruoyi中父模块还添加了子模块的依赖,,, 先安装父再是子…...

笨蛋学设计模式行为型模式-状态模式【20】
行为型模式-状态模式 8.7状态模式8.7.1概念8.7.2场景8.7.3优势 / 劣势8.7.4状态模式可分为8.7.5状态模式8.7.6实战8.7.6.1题目描述8.7.6.2输入描述8.7.6.3输出描述8.7.6.4代码 8.7.7总结 8.7状态模式 8.7.1概念 状态模式是指对象在运行时可以根据内部状态的不同而改变它们…...

C++从零开始的打怪升级之路(day18)
这是关于一个普通双非本科大一学生的C的学习记录贴 在此前,我学了一点点C语言还有简单的数据结构,如果有小伙伴想和我一起学习的,可以私信我交流分享学习资料 那么开启正题 今天分享的是关于vector的题目 1.只出现一次的数字1 136. 只出…...

浅谈安科瑞直流电表在新加坡光伏系统中的应用
摘要:本文介绍了安科瑞直流电表在新加坡光伏系统中的应用。主要用于光伏系统中的电流电压电能的计量,配合分流器对发电量进行计量。 Abstract: This article introduces the application of Acrel DC meters in PV system in Indonesia.The device is …...

C++参悟:数值运算相关
数值运算相关 一、概述二、常用数学函数1. 基础运算1. 浮点值的绝对值( |x| )2. 浮点除法运算的余数3. 除法运算的有符号余数4. 除法运算的有符号余数和最后三个二进制位5. 混合的乘加运算6. 两个浮点值的较大者7. 两个浮点值的较小者8. 两个浮点值的正数…...

【Web前端开发基础】CSS的定位和装饰
CSS的定位和装饰 目录 CSS的定位和装饰一、学习目标二、文章内容2.1 定位2.1.1 定位的基本介绍2.1.2 定位的基本使用2.1.3 静态定位2.1.4 相对定位2.1.5 绝对定位2.1.6 子绝父相2.1.7 固定定位2.1.8元素的层级关系 2.2 装饰2.2.1 垂直对齐方式2.2.2 光标类型2.2.3 边框圆角2.2.…...

[pytorch入门] 3. torchvision中的transforms
torchvision中的transforms 是transforms.py工具箱,含有totensor、resize等工具 用于将特定格式的图片转换为想要的图片的结果,即用于图片变换 用法 在transforms中选择一个类创建对象,使用这个对象选择相应方法进行处理 能够选择的类 列…...

WINCC读写EXCEL-VBS
原创 RENHQ WINCC 关于VBS操作EXCEL的文档不管在论坛上还是在网上,相关的脚本已经很多,但是依然有很多人在问这个问题,于是把我以前在论坛上发的一个集合帖子的脚本拿来,重新开个帖子,如果再有人问的话,可…...

Python os模块
简介 Python的os模块是一个标准库模块,用于提供与操作系统相关的功能(相当于接口)。os模块允许Python程序与文件系统、目录结构、进程管理等操作系统级别的功能进行交互。 主要功能 文件和目录操作 创建、删除、重命名文件和目录…...

Elasticsearch:2023 年 Lucene 领域发生了什么?
作者:来自 Elastic Adrien Grand 2023 年刚刚结束,又是 Apache Lucene 开发活跃的一年。 让我们花点时间回顾一下去年的亮点。 社区 2023 年,有: 5 个次要版本(9.5、9.6、9.7、9.8 和 9.9),1 …...

Java算法 leetcode简单刷题记录4
Java算法 leetcode简单刷题记录4 买卖股票的最佳时机: https://leetcode.cn/problems/best-time-to-buy-and-sell-stock/ 笨办法: 记录当天的值及之后的最大值,相减得到利润; 所有的天都计算下,比较得到利润最大值&…...