FPGA高端项目:Xilinx Artix7 系列FPGA纯verilog图像缩放工程解决方案 提供4套工程源码和技术支持

目录

  • 1、前言
    • 版本更新说明
    • 给读者的一封信
    • FPGA就业高端项目培训计划
    • 免责声明
  • 2、相关方案推荐
    • 我这里已有的FPGA图像缩放方案
    • 本方案在Xilinx Kintex7 系列FPGA上的应用
    • 本方案在国产FPGA紫光同创系列上的应用
    • 本方案在国产FPGA高云系列上的应用
  • 3、设计思路框架
    • 设计框图
    • 视频源选择
    • ov5640 i2c配置及采集
    • ADV7611 i2c配置及采集
    • 动态彩条
    • 图像缩放模块详解
    • 图像缩放模块使用
    • 图像缓存
    • 视频输出
    • 工程源码架构
  • 4、vivado和matlab联合仿真
  • 5、工程代码1详解:掌握图像缩放模块用法
  • 6、工程代码2详解:掌握图像缩小操作
  • 7、工程代码3详解:掌握图像放大操作
  • 8、工程代码4详解:掌握高分辨率图像缩小操作
  • 9、工程移植说明
    • vivado版本不一致处理
    • FPGA型号不一致处理
    • 其他注意事项
  • 10、上板调试验证并演示
    • 静态演示
    • 动态演示
  • 11、福利:工程源码获取

FPGA高端项目:Xilinx Artix7 系列FPGA纯verilog图像缩放工程解决方案 提供4套工程源码和技术支持

1、前言

没玩过图像缩放都不好意思说自己玩儿过FPGA,这是CSDN某大佬说过的一句话,鄙人深信不疑。。。目前市面上主流的FPGA图像缩放方案如下:
1:Xilinx的HLS方案,该方案简单,易于实现,但只能用于Xilinx自家的FPGA;关于HLS实现图像缩放请,参考我之前写的文章HLS实现图像缩放点击查看:HLS图像缩放
2:非纯Verilog方案,大部分代码使用Verilog实现,但中间的fifo或ram等使用了IP,导致移植性变差,难以在Xilinx、Altera和国产FPGA之间自由移植;
3:纯Verilog方案,也就是本方案,一个字:牛逼!!!

本文使用Xilinx的Artix7系列FPGA纯verilog代码实现图像缩放,视频源有两种,分别对应开发者手里有没有摄像头的情况,一种是使用廉价的OV5640摄像头模组或者HDMI输入;如果你的手里没有摄像头,或者你的开发板没有摄像头接口,则可使用代码内部生成的动态彩条模拟摄像头视频;视频源的选择通过代码顶层的define宏定义进行,默认使用ov5640作为视频源;图像缩放模块支持领域插值和双线性插值2种算法,通过模块顶层参数选择,默认使用双线性插值;缩放后的图像使用我常用的FDMA图像缓存架构进出DDR3等存储设备进行图像的三帧缓存,缩放后的视频最好进行缓存操作,因为缩放后原本的视频时序已经被打乱,不缓存的话直接读出基本是错误且不对齐的数据,输出的图像是乱码;从DDR3读出视频经过VGA时序生成标准的VGA时序视频,最后用纯verilog显示的HDMI输出模块送显示器显示即可;针对目前市面上主流的FPGA,本纯verilog图像缩放方案一共移植了17套工程源码,本博文介绍其中基于Xilinx Artix7 系列FPGA的4套工程,详情如下:
在这里插入图片描述
这里说明一下提供的4套工程源码的作用和价值,如下:

工程源码1:图像不缩放操作
ov5640或者动态彩条输入,HDMI输出,图像经过图像缩放模块,但并不做缩放操作,即图像进入图像缩放模块前的分辨率为1280x720,图像经过图像缩放模块出来后的分辨率依然为1280x720,目的是让读者知道图像缩放模块的用法,为后面的缩小和放大等操作打好基础;

工程源码2:图像缩小操作
ov5640或者动态彩条输入,HDMI输出,图像经过图像缩放模块,并进行缩小操作,即图像进入图像缩放模块前的分辨率为1280x720,图像经过图像缩放模块出来后的分辨率为800x600,目的是让读者知道图像缩放模块缩小操作的用法,以便能够移植和设计自己的项目;

工程源码3:图像放大操作
ov5640或者动态彩条输入,HDMI输出,图像经过图像缩放模块,并进行放大操作,即图像进入图像缩放模块前的分辨率为1280x720,图像经过图像缩放模块出来后的分辨率为1920x1080,目的是让读者知道图像缩放模块放大操作的用法,以便能够移植和设计自己的项目;

工程源码4:高分辨率图像缩小操作
HDMI或者动态彩条输入,HDMI输出,图像经过图像缩放模块,并进行缩小操作,即图像进入图像缩放模块前的分辨率为1920x1080,注意,这里是高分辨率进入,图像经过图像缩放模块出来后的分辨率为1280x720,目的是让读者知道高分辨率下图像缩放模块缩小操作的用法,以便能够移植和设计自己的项目;

本博客详细描述了FPGA高端项目:Xilinx Artix7 系列的纯verilog图像缩放工程解决方案的设计方案,工程代码可综合编译上板调试,可直接项目移植,适用于在校学生、研究生项目开发,也适用于在职工程师做学习提升,可应用于医疗、军工等行业的高速接口或图像处理领域;
提供完整的、跑通的工程源码和技术支持;
工程源码和技术支持的获取方式放在了文章末尾,请耐心看到最后;

版本更新说明

此版本为第3版,之前根据读者的建议,对第1版工程做了改进和更新形成如下的第2版:
1:增加了输入视频动态彩条的选择,有的读者说他手里没有OV5640摄像头或者摄像头原理图和我的不一致,导致在移植过程中困难很大,基于此,增加了动态彩条,它由FPGA内部产生,不需要外接摄像头就可以使用,使用方法在后文有说明;
2:优化了FDMA,之前的FDMA内AXI4的数据读写突发长度为256,导致在低端FPGA上带宽不够,从而图像质量不佳,基于此,将FDMA内AXI4的数据读写突发长度改为128;
3:优化了HDMI输出模块,之前用的自定义IP,有读者说IP无法更新,虽能正常使用,但看源码不方便,基于此,将HDMI输出模块改为纯verilog实现的,直接了当;
4:更新了输出时序模块,我的输出时序模块采用1080P背景中显示有效区域图像的方式,之前的版本,除有效区域图像外,其他区域是花屏的,有读者说看着不舒服,基于此,将,除有效区域图像外的图像优化为黑色,即黑色背景中显示有效区域图像的方式,在第9章节有贴图;

现在根据读者的建议,又对第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 Artix7 系列FPGA上的应用,想要直接应用于Xilinx Kintex7 系列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、设计思路框架

设计框图

本博客提供4套vivado工程源码,设计框图如下:
在这里插入图片描述

视频源选择

视频源有两种,分别对应开发者手里有没有摄像头的情况,一种是使用廉价的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开发板连接,可能需要考虑上电延时,不需要是设为0
	parameter 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配置和采集模块的例化请参考工程源码的顶层代码;

ADV7611 i2c配置及采集

工程4使用HDMI输入视频,采用ADV7611 作为HDMI解码芯片,ADV7611 需要i2c配置才能使用,需要i2c配置分辨率,然后将输入视频数据打两拍以同步数据;ADV7611 i2c配置及采集代码如下:
在这里插入图片描述
工程4的HDMI输入设备为笔记本电脑,将笔记本电脑分辨率设置为1920x1080@60Hz作为输入源,通过HDMI线连接到FPGA开发板的HDMI输入接口;

动态彩条

如果你的手里没有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-fifo
	parameter DATA_WIDTH         =	8       ,		//Width of input/output data
	parameter CHANNELS           =	1       ,		//Number of channels of DATA_WIDTH, for color images
	parameter 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发送应用,关于这个模块,请参考我之前的博客,博客地址:点击直接前往

工程源码架构

Xilinx Kintex7系列FPGA工程源码架构具有高度相似性,以工程1为例截图如下:
在这里插入图片描述

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、工程代码1详解:掌握图像缩放模块用法

开发板FPGA型号:Xilinx–Artix7–xc7a35tfgg484-2;
开发环境:Vivado2019.1;
输入:OV5640摄像头或动态彩条,分辨率1280x720;
输出:HDMI,1080P分辨率下的720P有效区域显示;
输入输出缩放方案:输入1280x720–>输出1280x720;
工程作用:掌握图像缩放模块的用法,为后面的缩小和放大等操作打好基础;
工程Block Design请参考第3章节“设计思路框架”的“图像缓存”小节内容;
工程代码架构请参考第3章节“设计思路框架”的“工程源码架构”小节内容;
工程的资源消耗和功耗如下:该工程使用的是纯verilog fifo方案;
在这里插入图片描述

6、工程代码2详解:掌握图像缩小操作

开发板FPGA型号:Xilinx–Artix7–xc7a35tfgg484-2;
开发环境:Vivado2019.1;
输入:OV5640摄像头或动态彩条,分辨率1280x720;
输出:HDMI,1080P分辨率下的800x600有效区域显示;
输入输出缩放方案:输入1280x720–>输出800x600;
工程作用:掌握图像缩放模块缩小操作的用法,以便能够移植和设计自己的项目;
工程Block Design请参考第3章节“设计思路框架”的“图像缓存”小节内容;
工程代码架构请参考第3章节“设计思路框架”的“工程源码架构”小节内容;
工程的资源消耗和功耗如下:该工程使用的是纯verilog fifo方案;
在这里插入图片描述

7、工程代码3详解:掌握图像放大操作

开发板FPGA型号:Xilinx–Artix7–xc7a35tfgg484-2;
开发环境:Vivado2019.1;
输入:OV5640摄像头或动态彩条,分辨率1280x720;
输出:HDMI,1080P分辨率下的1920x1080有效区域显示;
输入输出缩放方案:输入1280x720–>输出1920x1080;
工程作用:掌握图像缩放模块放大操作的用法,以便能够移植和设计自己的项目;
工程Block Design请参考第3章节“设计思路框架”的“图像缓存”小节内容;
工程代码架构请参考第3章节“设计思路框架”的“工程源码架构”小节内容;
工程的资源消耗和功耗如下:该工程使用的是Xilinx fifo ip方案;
在这里插入图片描述

8、工程代码4详解:掌握高分辨率图像缩小操作

开发板FPGA型号:Xilinx–Artix7–xc7a35tfgg484-2;
开发环境:Vivado2019.1;
输入:HDMI,分辨率1920x1080;ADV7611解码;
输出:HDMI,1080P分辨率下的1280x720有效区域显示;
输入输出缩放方案:输入1920x1080–>输出1280x720;
工程作用:掌握高分辨率图像的图像缩放模块缩小操作的用法,以便能够移植和设计自己的项目;
工程Block Design请参考第3章节“设计思路框架”的“图像缓存”小节内容;
工程代码架构请参考第3章节“设计思路框架”的“工程源码架构”小节内容;
工程的资源消耗和功耗如下:该工程使用的是Xilinx fifo ip方案,因为输入分辨率很大;
在这里插入图片描述

9、工程移植说明

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

10、上板调试验证并演示

静态演示

工程1:ov5640摄像头原图1280x720输出效果如下:
在这里插入图片描述
工程1:动态彩条原图1280x720输出效果如下:
在这里插入图片描述
工程2:ov5640摄像头原图1280x720缩小到800x600输出效果如下:
在这里插入图片描述
工程2:动态彩条原图1280x720缩小到800x600输出效果如下:
在这里插入图片描述
工程3:ov5640摄像头原图1280x720放大到1920x1080输出效果如下:
在这里插入图片描述
工程3:动态彩条原图1280x720放大到1920x1080输出效果如下:
在这里插入图片描述

动态演示

动态视频演示如下:

纯verilog图像缩放-2023-16比9

11、福利:工程源码获取

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

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

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

相关文章

PGSQL安装PostGIS扩展模块

一、PostGIS简介 1、PostGIS介绍 PostGIS是一个空间数据库,空间数据库像存储和操作数据库中其他任何对象一样去存储和操作空间对象。 空间数据与数据库关联起来的三个要素:数据类型、索引和函数。 空间数据类型:用于指定图形为点&#xff0…

浏览器插件:WebScraper基本用法和抓取页面内容(不会编程也能爬取数据)

Web Scraper 是一个浏览器扩展,用于从页面中提取数据(网页爬虫)。对于简单或偶然的需求非常有用,例如正在写代码缺少一些示例数据,使用此插件可以很快从类似的网站提取内容作为模拟数据。从 Chrome 的插件市场安装后,页面 F12 打开…

实例分割模型解析:solo模型

论文链接:https://arxiv.org/abs/1912.04488 代码:https://github.com/WXinlong/SOLO 1.摘要 我们提出了一种新的、极其简单的实例分割方法。与许多其他密集预测任务(例如语义分割)相比,任意数量的实例使得实例分割更…

leetCode-42.接雨水

📑前言 本文主要是【算法】——算法模拟的文章,如果有什么需要改进的地方还请大佬指出⛺️ 🎬作者简介:大家好,我是听风与他🥇 ☁️博客首页:CSDN主页听风与他 🌄每日一句&#xff…

广东省考报名相片上传成功了,必须<30kb

(一)报名时间 2024年1月16日9︰00至22日16︰00。 (二)报考注册 报考者登录广东省公务员考试录用管理信息系统(https://ggfw.hrss.gd.gov.cn/gwyks/index.do),用本人身份证号码进行注册,在注册前应仔细阅读本公告、全省各级机关招录职位表(附件1)和报考指…

知识图谱的广泛应用与价值

目录 前言1 语义搜索2 知识问答2.1 问答对的深度关联2.2 文本挖掘与答案精准性2.3 知识图谱问答的全面服务 3 辅助推荐4 辅助大数据分析4.1 知识图谱推理的应用4.2 知识图谱的数据分析4.3 动态本体技术的引入 5 故障诊断5.1 故障诊断系统的应用5.2 知识图谱在语言理解中的作用5…

2024年1月13日~2024年1月19日(研读论文、了解语义分割)

一、前言 上周完成《SeisInvNet》论文的初步阅读工作。 本周继续阅读《SeisInvNet》论文,并理解其逻辑结构。另外,在B站寻找视频了解了语义分割任务逻辑、深度学习一些概念等。 二、论文SeisInvNet 标题:Deep learning Inversion of Seismic…

基于 UniAPP 社区论坛项目多端开发实战

社区论坛项目多端开发实战 基于 UniAPP 社区论坛项目多端开发实战一、项目准备1.1 ThinkSNS 简介及相关文档1.2 使用 UniAPP 构建项目1.3 构建项目文件结构1.4 配置页面 TabBar 导航1.5 使用 npm 引入 uView UI 插件库 二、首页功能实现2.1 首页 header 广告位轮播图功能实现2.…

php array_diff 比较两个数组bug避坑 深入了解

今天实用array_diff出现的异常问题,预想的结果应该是返回 "integral_initiate">"0",实际没有 先看测试代码: $a ["user_name">"测","see_num">0,"integral_initiate&quo…

开发实践8_REST

一、Django REST Framework, Django View & APIView MTV模式实现前后端分离。Representational State Transfer 表现层状态转化。Representation 资源(Resource a specific info. on net.)具体呈现形式。ST 修改服务端的数据。修改数据 POST请求。…

LeetCode、2300. 咒语和药水的成功对数【中等,排序+二分】

文章目录 前言LeetCode、2300. 咒语和药水的成功对数【中等,排序二分】题目及类型思路及代码 资料获取 前言 博主介绍:✌目前全网粉丝2W,csdn博客专家、Java领域优质创作者,博客之星、阿里云平台优质作者、专注于Java后端技术领域…

2024年显著性检测论文及代码汇总(1)

ACM MM Distortion-aware Transformer in 360 Salient Object Detection code Abstacrt:现有的方法无法处理二维等矩投影引起的畸变。本文提出了一个基于Transformer的模型,即DATFormer。首先,引入两个畸变自适应模块。其一是畸变映射模块&…

【Spring Boot 3】【Redis】基本数据类型操作

【Spring Boot 3】【Redis】基本数据类型操作 背景介绍开发环境开发步骤及源码工程目录结构 背景 软件开发是一门实践性科学,对大多数人来说,学习一种新技术不是一开始就去深究其原理,而是先从做出一个可工作的DEMO入手。但在我个人学习和工…

tidb Cloud 连接spring boot 项目

一、 免费试用tidbitcloud TiDB Cloud Documentation | PingCAP Docs 1.github账号登录 2.创建集群 3.点击对应集群cludter0 导入数据 导入 本地导入只支持csv文件,其他导入需要AWZ账号使用S3云存储 二、连接spingboot项目 选择java,复制下面的jd…

前台vue配置

前台 vue环境 1.傻瓜式安装node: 官网下载:https://nodejs.org/zh-cn/2.安装cnpm: >: npm install -g cnpm --registryhttps://registry.npm.taobao.org3.安装vue最新脚手架: >: cnpm install -g vue/cli注:如果2、3步报错,清除缓…

美团RASP大规模研发部署实践总结

01 背景 RASP 是 Runtime Application Self-Protection(运行时应用自我保护)的缩写,是一种应用程序安全技术。RASP 技术能够在应用程序运行时检测并阻止应用级别的攻击。随着云计算和大数据的发展,应用程序安全越来越受到重视。其…

总结网络中的一些基本概念

1. IP地址 描述一个设备在网络上的位置,而且计算机是通过数字来描述IP地址的。例如(生活中的地址) 2. 端口号 描述一个主机上的哪个应用程序,有了IP可以确定主机,但是一个主机上可能有很多程序在使用网络,…

CloudPanel RCE漏洞复现(CVE-2023-35885)

0x01 产品简介 CloudPanel 是一个基于 Web 的控制面板或管理界面,旨在简化云托管环境的管理。它提供了一个集中式平台,用于管理云基础架构的各个方面,包括虚拟机 (VM)、存储、网络和应用程序。 0x02 漏洞概述 由于2.3.1 之前的 CloudPanel 具有不安全的文件管理器 cook…

Docker技巧汇总

Docker技巧汇总 前言使用流程安装配置镜像管理创建并运行容器使用容器/常用命令导出和导入查看元数据挂载数据卷端口映射/转发VS Code连接Docker 前言 Docker 是一个开源的应用容器引擎,可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中&#xf…

go语言(八)---- map

map的声明方式有以下三种。 package mainimport "fmt"func main() {//第一种声明方式//声明map1是一个map类型,key是String,value是Stringvar myMap1 map[string] stringif myMap1 nil {fmt.Println("myMap1 是一个空map")}//在使…