紫光同创FPGA纯verilog代码实现图像缩放,两种插值算法任意尺寸缩放,提供3套PDS工程源码

这篇具有很好参考价值的文章主要介绍了紫光同创FPGA纯verilog代码实现图像缩放,两种插值算法任意尺寸缩放,提供3套PDS工程源码。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


FPGA高端项目:紫光同创系列FPGA纯verilog图像缩放工程解决方案 提供3套工程源码和技术支持

1、前言

“苟利国家生死以,岂因祸福避趋之!”大洋彼岸的我优秀地下档员,敏锐地洞察到祖国的短板在于高精尖半导体的制造领域,于是本着为中华民族伟大复兴的中国梦贡献绵薄之力的初心,建国站在高略高度和长远角度谋划,宁愿背当代一世之骂名也要为祖国千秋万世谋,2018年7月,建国正式打响毛衣战,随后又使出恰勃纸战术,旨在为祖国先进制程半导体领域做出自主可控的战略推动;在此,请收下我一声谢谢啊!!!!!!

2019年初我刚出道时,还是Xilinx遥遥领先的时代(现在貌似也是),那时的国产FPGA还处于辣鸡段位,国产FPGA仰望Xilinx情不自禁道:你以为躲在这里就找不到你吗?没用的,你那样拉轰的男人,无论在哪里,都像黑夜里的萤火虫那样的鲜明、那样的出众,你那忧郁的眼神,稀嘘的胡渣子,神乎其技的刀法,还有那杯Dry martine,都深深的迷住了我。。。然而才短短4年,如今的国产FPGA属于百家争鸣、百花齐放、八仙过海、神仙打架、方兴未艾、得陇望蜀、友商都是XX的喜极而泣之局面,面对此情此景,不得不吟唱老人家的诗句:魏武挥鞭,东临碣石有遗篇,萧瑟秋风今又是,换了人间。。。
言归正传,目前对于国产FPGA的共识有以下几点:
1:性价比高,与同级别国外大厂芯片相比,价格相差几倍甚至十几倍;
2:自主可控,国产FPGA拥有完整自主知识产权的产业链,从芯片到相关EDA工具
3:响应迅速,FAE技术支持比较到位,及时解决开发过程中遇到的问题,毕竟中文数据手册。。
4:采购方便,产业链自主可控,采购便捷

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

本文使用紫光同创的PGL22G-6MBG324 FPGA纯verilog代码实现图像缩放,视频源有两种,分别对应开发者手里有没有摄像头的情况,一种是使用廉价的OV7725摄像头模组;如果你得手里没有摄像头,或者你得开发板没有摄像头接口,则可使用代码内部生成的动态彩条模拟摄像头视频;视频源的选择通过代码顶层的`define宏定义进行,上电默认使用OV7725作为视频源;使用纯verilog代码实现的图像缩放模块做输入图像的缩小或放大;图像缩放模块支持领域插值和双线性插值2种算法,通过模块顶层参数选择;缩放后的图像经过fifo缓冲后进入图像缓存阶段;使用本人开发的HDMA视频缓存架构方案实现图像的三帧缓存,缩放后的视频最好进行缓存操作,因为缩放后,原本的视频时序已经被打乱,不缓存的话直接读出基本是错误且不对齐的数据,输出的图像是乱码;读出视频后,用纯verilog显示的HDMI输出模块送显示器显示即可;
针对目前市面上主流的FPGA,本纯verilog图像缩放方案一共移植了17套工程源码,本博文介绍其中基于紫光同创的PGL22G-6MBG324 FPGA的3套工程,详情如下:
紫光同创FPGA纯verilog代码实现图像缩放,两种插值算法任意尺寸缩放,提供3套PDS工程源码,国产FPGA--紫光同创--工程源码,FPGA图像缩放,菜鸟FPGA图像处理专题,fpga开发,算法,紫光同创,图像缩放,PDS,verilog
这里说明一下提供的3套工程源码的作用和价值,如下:

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

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

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

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

版本更新说明

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

根据读者的建议,又对第2版工程又做了改进和更新形成如下的第3版::
1:优化了图像缩放模块代码结构,将原来的跨时钟域FIFO纳入图像缩放模块内部,并添加了新的顶层接口和配置参数,使能原来复杂的顶层接口和参数变得十分简洁;
2:新增了纯verilog实现的异步FIFO,代码里可选紫光的FIFO IP核,也可选verilog实现的异步FIFO,通过顶层参数选择,这样就使得图像缩放模块移植性和通用性更强;
3:工程整体使用难度大大降低,由于优化了图像缩放模块和整体代码架构,加之将原来很多参数进行了统一的设置,代码量和行数减少了近45%,仅需修改集合参数就能快速实现工程的移植和修改;

给读者的一封信

FPGA作为当今热门行业,入行门槛很高,工资待遇不错,一时间引无数英雄尽折腰,但很多初学者甚至工程师都还有很多误区,现给读者一封信如下:
1、矮要承认挨打站稳
要学FPGA,甚至吃这碗饭,每个人都是从零基础开始的,你对自己有自信,认为你行,就自学;你不自信,就找别人学;和古代拜师学艺是一回事儿;首先思维要符合逻辑;
2、基础问题需要自己解决
最基础的知识,比如:verilog语法、vivado工具使用、模电数电基础常识、电脑使用、计算机基本结构。。。这些基础知识在网上都是免费的,既有文字资料也有视频资料;这些基础知识你一定要具备,因为这是你能获得的性价比最高的东西了,首先它免费;其次它简单,只需要你花时间,不需要花脑子;最后它重要,这是你干FPGA的基础;
3、有了源码等于零
你可能认为,我有了源码就能做项目了,我可以肯定的告诉你,该醒醒了;原子弹的详细原理和原料配方甚至生产工艺流程在网上都是公开的,为啥全世界就那联合国几大流氓能造出来的?同样的,源码给你,你看得懂吗?你知道怎么用吗?看不懂不会用的源码,跟废物有什么区别?你需要的是源码+工程,最完美的是源码+工程+技术支持;有了源码,就有了可开发的底层架构,有了工程就知道源码或者模块怎么使用,有了技术支持就可以根据源码修改开发自己的项目;
4、先学会爬在学会跑
对于初学者,没有资格研究代码,你首先需要做的是对工程进行复现;比如给你一个图像的工程,你首先在自己的开发板上复现这个工程的功能,然后再去阅读理解代码,然后对代码的功能部分做小幅修改,比如改一下接口,增加几个输出接口,比如加一个LED输出;小幅修改后再慢慢增加修改幅度,以符合自己的需求;
5、学FPGA要不求甚解
学FPGA要不求甚解,甚至不需要理解,这句话咋听着有点不符合逻辑呢?对于很多功能性模块而言,你不需要理解它怎么实现的,你只需要知道怎么使用它,比如一个图像缩放模块,这种东西都是很老的知识,以你目前的知识水平,该模块的代码你怎么看也看不懂的,但你只要知道怎么使用它就行了,知道怎么使用,就能做项目,就能在公司呆下去了,原因很简单,老板招你来是干活儿的,不是招你来学习的,那是学校的事儿;如果要等什么都懂了才干活儿,那公司早垮了,学FPGA就是在实践中学习,先上前线去干活,边干边学,在实践中遇到问题,并主动去查资料问大佬理解问题,才是成长最快的,而不是一味的咬文嚼字刨根问底;

FPGA就业高端项目培训计划

鉴于目前的FPGA就业和行业现状,本博推出了FPGA就业高端项目培训:纯verilog图像缩放 工程解决方案的计划,该计划旨在让一部分人先学会FPGA纯verilog图像缩放,提高从业者的技术水平和工资待遇,详细计划如下:
紫光同创FPGA纯verilog代码实现图像缩放,两种插值算法任意尺寸缩放,提供3套PDS工程源码,国产FPGA--紫光同创--工程源码,FPGA图像缩放,菜鸟FPGA图像处理专题,fpga开发,算法,紫光同创,图像缩放,PDS,verilog
FPGA就业高端项目培训计划细节:
1、我发你上述17套工程源码和对应的工程设计文档网盘链接,你保存下载,作为培训的核心资料;
2、你根据自己的实际情况安装好对应的开发环境,然后对着设计文档进行浅层次的学习;
3、遇到不懂的随时问我,包括代码、职业规划、就业咨询、人生规划、战略规划等等;
4、每周末进行一次腾讯会议,我会检查你的学习情况和面对面沟通交流;
5、你可以移植代码到你自己的FPGA开发板上跑,如果你没有板子,你根据你自己的需求修改代码后,编译工程,把bit发我,我帮你下载到我的板子上验证;

免责声明

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

2、相关方案推荐

我这里已有的FPGA图像缩放方案推荐

我的主页目前有FPGA图像缩放专栏,改专栏收录了我目前手里已有的FPGA图像缩放方案,从实现方式分类有基于HSL实现的图像缩放、基于纯verilog代码实现的图像缩放;从应用上分为单路视频图像缩放、多路视频图像缩放、多路视频图像缩放拼接;从输入视频分类可分为OV5640摄像头视频缩放、SDI视频缩放、MIPI视频缩放等等;以下是专栏地址:点击直接前往

紫光同创FPGA图像采集方案推荐

本设计使用紫光同创FPGA做图像缩放,但图像缩放的基础是图像采集显示,缩放不过是图像处理的一种而已,FPGA图像采集显示的核心在于图像的DDR缓存,紫光同创FPGA自带DDR控制器IP,该IP带AXI4-FULL从机接口,所以对于图像的DDR缓存,就相对简单了,我之前专门出过一篇紫光同创FPGA采集OV7725摄像头HDMI显示的博客,感兴趣的可以前往查看,以下是博客地址:点击直接前往

本方案在Xilinx Kintex7系列FPGA上的应用

本方案适应于所有FPGA平台,针对目前市面上主流的FPGA,本博将本方案分别移植到了Xilinx 的Artix7、Kintex7、Zynq7020、紫光同创、高云等平台,本文讲述的是在紫光同创系列FPGA上的应用,想要直接应用于Xilinx Kintex7系列FPGA的读者,可以参考我之前写得博客,以下是博客地址:
点击直接前往

本方案在Xilinx Artix7系列FPGA上的应用

本方案适应于所有FPGA平台,针对目前市面上主流的FPGA,本博将本方案分别移植到了Xilinx 的Artix7、Kintex7、Zynq7020、紫光同创、高云等平台,本文讲述的是在紫光同创系列FPGA上的应用,想要直接应用于Xilinx Artix7系列FPGA的读者,可以参考我之前写得博客,以下是博客地址:
点击直接前往

本方案在Xilinx Zynq7000系列FPGA上的应用

本方案适应于所有FPGA平台,针对目前市面上主流的FPGA,本博将本方案分别移植到了Xilinx 的Artix7、Kintex7、Zynq7020、紫光同创、高云等平台,本文讲述的是在紫光同创系列FPGA上的应用,想要直接应用于Xilinx Zynq7000系列FPGA的读者,可以参考我之前写得博客,以下是博客地址:
点击直接前往

本方案在国产高云系列FPGA上的应用

本方案适应于所有FPGA平台,针对目前市面上主流的FPGA,本博将本方案分别移植到了Xilinx 的Artix7、Kintex7、Zynq7020、紫光同创、高云等平台,本文讲述的是在紫光同创系列FPGA上的应用,想要直接应用于国产高云系列FPGA的读者,可以参考我之前写得博客,以下是博客地址:点击直接前往

3、设计思路框架

设计框图

本博客提供3套vivado工程源码,设计框图如下:
紫光同创FPGA纯verilog代码实现图像缩放,两种插值算法任意尺寸缩放,提供3套PDS工程源码,国产FPGA--紫光同创--工程源码,FPGA图像缩放,菜鸟FPGA图像处理专题,fpga开发,算法,紫光同创,图像缩放,PDS,verilog

为什么选择OV7725摄像头?

紫光同创FPGA做图像缩放,理论上可以选择使用任何摄像头作为视频输入源,比如廉价的OV7725、OV5640等,但紫光同创的PGL22G-6MBG324 FPGA PLL无法输出742.5M的时钟,所以在开发板没有HDMI编码芯片的情况下,紫光同创的PGL22G-6MBG324 FPGA最大只能输出1280X720@60Hz的视频,如果使用OV5640,则不好做图像放大的试验,因为OV5640的输出分辨率就已经达到了1280X720;反观OV7725摄像头则很合适,因为OV7725摄像头输出分辨率为640X480@60Hz,可以做图像缩放的放大试验,放大到1280X720@60Hz,刚好达到紫光同创的PGL22G-6MBG324 FPGA的输出分辨率上线,也可以做做图像缩放的缩小试验;此外,OV7725摄像头也更便宜。。。

视频源选择

视频源有两种,分别对应开发者手里有没有摄像头的情况,一种是使用廉价的OV7725摄像头模组;如果你得手里没有摄像头,或者你得开发板没有摄像头接口,则可使用代码内部生成的动态彩条模拟摄像头视频;视频源的选择通过代码顶层的`define宏定义进行,上电默认使用OV7725作为视频源;视频源选择如下:
紫光同创FPGA纯verilog代码实现图像缩放,两种插值算法任意尺寸缩放,提供3套PDS工程源码,国产FPGA--紫光同创--工程源码,FPGA图像缩放,菜鸟FPGA图像处理专题,fpga开发,算法,紫光同创,图像缩放,PDS,verilog
视频源选择逻辑代码部分如下:
紫光同创FPGA纯verilog代码实现图像缩放,两种插值算法任意尺寸缩放,提供3套PDS工程源码,国产FPGA--紫光同创--工程源码,FPGA图像缩放,菜鸟FPGA图像处理专题,fpga开发,算法,紫光同创,图像缩放,PDS,verilog
选择逻辑如下:
当(注释) define COLOR_TEST时,输入源视频是ov7725摄像头;
当(不注释) define COLOR_TEST时,输入源视频是动态彩条;

OV7725摄像头配置及采集

视频源有两种,分别对应开发者手里有没有摄像头的情况,一种是使用廉价的OV7725摄像头模组;如果你的手里没有摄像头,或者你的开发板没有摄像头接口,则可使用代码内部生成的动态彩条模拟摄像头视频;视频源的选择通过代码顶层的define宏定义进行,默认使用OV7725作为视频源;OV7725需要i2c配置才能使用,需要i2c配置分辨率,然后将DVP接口的两个时钟一个像素的GRB565视频数据采集为一个时钟一个像素的RGB565或者RGB888视频数据;OV7725 i2c配置及采集代码如下:
紫光同创FPGA纯verilog代码实现图像缩放,两种插值算法任意尺寸缩放,提供3套PDS工程源码,国产FPGA--紫光同创--工程源码,FPGA图像缩放,菜鸟FPGA图像处理专题,fpga开发,算法,紫光同创,图像缩放,PDS,verilog
ov7725配置为分辨率640x480;配置和采集模块顶层参数如下:

// ov7725 配置+采集模块
module helai_ov7725_rx #(
	parameter RBG_TYPE   = 1             ,	// 0-->GRB565  1-->RGB888
	parameter BIT_CTRL   = 0			 ,	//OV7725的字节地址为8位  0:8位 1:16位
	parameter SLAVE_ADDR = 7'b1010000    ,	//从机地址
	parameter CLK_FREQ   = 26'd50_000_000,	//模块输入的时钟频率
	parameter I2C_FREQ   = 18'd250_000      //IIC_SCL的时钟频率
)(
    input         clk              ,
    input         rst_n            ,
    output        cam_scl          ,  //cmos SCCB_SCL线
    inout         cam_sda          ,  //cmos SCCB_SDA线                     
    input         cam_pclk         ,  //cmos 数据像素时钟
    input         cam_vsync        ,  //cmos 场同步信号
    input         cam_href         ,  //cmos 行同步信号
    input  [7:0]  cam_data         ,  //cmos 像素数据                         
    output        cmos_frame_vsync ,  //帧有效信号
    output        cmos_frame_href  ,  //行有效信号
    output        cmos_frame_valid ,  //数据有效使能信号
    output [23:0] cmos_frame_data  ,  //有效数据
    output        cam_rst_n        ,  //cmos 复位信号,低电平有效
    output        cam_sgm_ctrl        //cmos 时钟选择信号, 1:使用摄像头自带的晶振
);

动态彩条

如果你的手里没有ov7725,或者你得开发板没有ov7725接口,则可使用代码内部生成的动态彩条模拟摄像头视频;视频源的选择通过代码顶层的define宏定义进行,动态彩条可配置为不同分辨率的视频,视频的边框宽度,动态移动方块的大小,移动速度等都可以参数化配置,我这里配置为辨率640x480,动态彩条模块代码位置和顶层接口和例化如下:
紫光同创FPGA纯verilog代码实现图像缩放,两种插值算法任意尺寸缩放,提供3套PDS工程源码,国产FPGA--紫光同创--工程源码,FPGA图像缩放,菜鸟FPGA图像处理专题,fpga开发,算法,紫光同创,图像缩放,PDS,verilog
紫光同创FPGA纯verilog代码实现图像缩放,两种插值算法任意尺寸缩放,提供3套PDS工程源码,国产FPGA--紫光同创--工程源码,FPGA图像缩放,菜鸟FPGA图像处理专题,fpga开发,算法,紫光同创,图像缩放,PDS,verilog
动态彩条模块的例化请参考工程源码的顶层代码;

图像缩放模块详解

图像缩放模块功能框图如下,由跨时钟FIFO、插值+RAM阵列构成,跨时钟FIFO的目的是解决跨时钟域的问题,比如从低分辨率视频放大到高分辨率视频时,像素时钟必然需要变大,这是就需要异步FIFO了,插值算法和RAM阵列具体负责图像缩放算法层面的实现;
紫光同创FPGA纯verilog代码实现图像缩放,两种插值算法任意尺寸缩放,提供3套PDS工程源码,国产FPGA--紫光同创--工程源码,FPGA图像缩放,菜鸟FPGA图像处理专题,fpga开发,算法,紫光同创,图像缩放,PDS,verilog
插值算法和RAM阵列以ram和fifo为核心进行数据缓存和插值实现,设计架构如下:
紫光同创FPGA纯verilog代码实现图像缩放,两种插值算法任意尺寸缩放,提供3套PDS工程源码,国产FPGA--紫光同创--工程源码,FPGA图像缩放,菜鸟FPGA图像处理专题,fpga开发,算法,紫光同创,图像缩放,PDS,verilog
图像缩放模块代码架构如下:模块的例化请参考工程源码的顶层代码;
紫光同创FPGA纯verilog代码实现图像缩放,两种插值算法任意尺寸缩放,提供3套PDS工程源码,国产FPGA--紫光同创--工程源码,FPGA图像缩放,菜鸟FPGA图像处理专题,fpga开发,算法,紫光同创,图像缩放,PDS,verilog
图像缩放模块FIFO的选择可以调用工程对应的vivado工具自带的FIFO IP核,也可以使用纯verilog实现的FIFO,可通过接口参数选择,图像缩放模块顶层接口如下:

module helai_video_scale #(
	//---------------------------Parameters----------------------------------------
	parameter FIFO_TYPE          =	"ziguang",		// "ziguang" for ziguang-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:总体原则,选择"ziguang"好处大于选择"verilog";
2:当你的FPGA逻辑资源不足时,请选"ziguang";
3:当你图像缩放的视频分辨率较大时,请选"ziguang";
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选择邻域插值算法;

代码里的配置如下:
紫光同创FPGA纯verilog代码实现图像缩放,两种插值算法任意尺寸缩放,提供3套PDS工程源码,国产FPGA--紫光同创--工程源码,FPGA图像缩放,菜鸟FPGA图像处理专题,fpga开发,算法,紫光同创,图像缩放,PDS,verilog

图像缩放模块使用

图像缩放模块使用非常简单,顶层代码里设置了四个参数,如下:
紫光同创FPGA纯verilog代码实现图像缩放,两种插值算法任意尺寸缩放,提供3套PDS工程源码,国产FPGA--紫光同创--工程源码,FPGA图像缩放,菜鸟FPGA图像处理专题,fpga开发,算法,紫光同创,图像缩放,PDS,verilog
上图视频通过图像缩放模块但不进行缩放操作,旨在掌握图像缩放模块的用法;如果需要将图像放大到720P,则修改为如下:
紫光同创FPGA纯verilog代码实现图像缩放,两种插值算法任意尺寸缩放,提供3套PDS工程源码,国产FPGA--紫光同创--工程源码,FPGA图像缩放,菜鸟FPGA图像处理专题,fpga开发,算法,紫光同创,图像缩放,PDS,verilog
当然,需要修改的不仅仅这一个地方,FDMA的配置也需要相应修改,详情请参考代码,但我想要证明的是,图像缩放模块使用非常简单,你都不需要知道它内部具体怎么实现的,上手就能用;

HDMA图像缓存

HDMA图像缓存的本质就是一个封装了用户接口的AXI4-FULL-MASTER总线,HDMA对外与DDR3交互,紫光同创FPGA自带的DDR3控制器的用户接口为AXI4-FULL总线,HDMA对内例化两个FIFO与FPGA内部逻辑交互,所以开发者在使用HDMA时,已无需再关心复杂的为AXI4-FULL协议,只需要像使用FIFO那样简单即可;HDMA架构如下:
紫光同创FPGA纯verilog代码实现图像缩放,两种插值算法任意尺寸缩放,提供3套PDS工程源码,国产FPGA--紫光同创--工程源码,FPGA图像缩放,菜鸟FPGA图像处理专题,fpga开发,算法,紫光同创,图像缩放,PDS,verilog
代码架构如下:
紫光同创FPGA纯verilog代码实现图像缩放,两种插值算法任意尺寸缩放,提供3套PDS工程源码,国产FPGA--紫光同创--工程源码,FPGA图像缩放,菜鸟FPGA图像处理专题,fpga开发,算法,紫光同创,图像缩放,PDS,verilog

输入输出视频

输入视频的数据格式为RGB,即典型的pclk、vs、de、rgb形式的VGA视频时序,但需要注意的是,因为输入视频直接与FIFO交互,FIFO的AXI侧的数据位宽为128位,为了数据的不错位,输入视频的rgb信号接口不能为传统的24位,这里可以设置为16或者32位,代码中通过参数配置,我配置为32位,如下:
紫光同创FPGA纯verilog代码实现图像缩放,两种插值算法任意尺寸缩放,提供3套PDS工程源码,国产FPGA--紫光同创--工程源码,FPGA图像缩放,菜鸟FPGA图像处理专题,fpga开发,算法,紫光同创,图像缩放,PDS,verilog

HDMA缓冲FIFO

例化两个FIFO作为FPGA逻辑数据与AXI4数据的缓冲,所谓缓冲,即数据位宽的转换、时钟域的转换、读写时机的控制等部分,FPGA逻辑侧的数据位宽为32位,AXI4侧的数据位宽为128位;以写FIFO为例,配置如下:
紫光同创FPGA纯verilog代码实现图像缩放,两种插值算法任意尺寸缩放,提供3套PDS工程源码,国产FPGA--紫光同创--工程源码,FPGA图像缩放,菜鸟FPGA图像处理专题,fpga开发,算法,紫光同创,图像缩放,PDS,verilog

HDMA控制模块

HDMA控制模块的主要功能是实现AXI4-FULL主机和图像缓存读写地址切换两大功能;AXI4-FULL主机比较简单,照着AXI4-FULL时序图写就完事儿了,图像缓存读写地址切换就难了,本设计通过顶层的参数来配置图像缓存的帧数,如下:
HDMA_PINGPANG_EN=1则图像做三帧缓存;
HDMA_PINGPANG_EN=0则图像做单帧缓存;
本设计配置为HDMA_PINGPANG_EN=1;
为了实现图像的多帧缓存,将读写地址分段,如下:
读写地址=帧地址+数据地址;
数据地址:即正常的AXI4数据突发的地址增量;
写帧地址:一帧图像到来时+1;
读帧地址:一帧图像到来时+2;
如此做到了同时读写不同的帧地址,输出的图像是完美的。。。
这也叫做乒乓操作,核心代码如下:
紫光同创FPGA纯verilog代码实现图像缩放,两种插值算法任意尺寸缩放,提供3套PDS工程源码,国产FPGA--紫光同创--工程源码,FPGA图像缩放,菜鸟FPGA图像处理专题,fpga开发,算法,紫光同创,图像缩放,PDS,verilog

VGA时序和HDMI输出

HDMI输出包括VGA时序和HDMI编码模块,VGA时序在紫光PGL22G-6MBG324 FPGA上只能做到720P,因为此FPGA可能太低端了,无法输出742.5M的串行时钟,当然,你用HDMI编码芯片是可以实现1080P的,所以这里只能做到720P的输出分辨率;HDMI编码模块待用原语实现,和Xilinx家的一样,代码结构如下:
紫光同创FPGA纯verilog代码实现图像缩放,两种插值算法任意尺寸缩放,提供3套PDS工程源码,国产FPGA--紫光同创--工程源码,FPGA图像缩放,菜鸟FPGA图像处理专题,fpga开发,算法,紫光同创,图像缩放,PDS,verilog

工程源码架构

紫光同创系列FPGA工程源码架构具有高度相似性,以工程12为例截图如下:
紫光同创FPGA纯verilog代码实现图像缩放,两种插值算法任意尺寸缩放,提供3套PDS工程源码,国产FPGA--紫光同创--工程源码,FPGA图像缩放,菜鸟FPGA图像处理专题,fpga开发,算法,紫光同创,图像缩放,PDS,verilog

4、vivado和matlab联合仿真

需要注意的是,方针的目的是为了验证,这一步我已经替你们做完了,所以读者不再需要单独仿真,如果读者是在需要自己仿真玩玩儿,需要自己写仿真代码;vivado和matlab联合仿真详细步骤如下:
第一步:网上下载一张1280X720的图片,并用matlab将图片转换为RGB格式的txt文档;
第二步:在vivado下设计tstbench,将RGB格式的txt文档作为视频输入源给到图像缩放模块,并将缩放后的图像数据写入输出txt文档;
第二步:用matlab将输出txt文档转换为图片,并于原图一并输出显示以做比较;
根据以上方法得到以下仿真结果:
双线性插值算法原图1280X720缩小到800x600如下:
紫光同创FPGA纯verilog代码实现图像缩放,两种插值算法任意尺寸缩放,提供3套PDS工程源码,国产FPGA--紫光同创--工程源码,FPGA图像缩放,菜鸟FPGA图像处理专题,fpga开发,算法,紫光同创,图像缩放,PDS,verilog
邻域插值算法原图1280X720缩小到800x600如下:
紫光同创FPGA纯verilog代码实现图像缩放,两种插值算法任意尺寸缩放,提供3套PDS工程源码,国产FPGA--紫光同创--工程源码,FPGA图像缩放,菜鸟FPGA图像处理专题,fpga开发,算法,紫光同创,图像缩放,PDS,verilog
双线性插值算法原图1280X720放大到1920x1080如下:
紫光同创FPGA纯verilog代码实现图像缩放,两种插值算法任意尺寸缩放,提供3套PDS工程源码,国产FPGA--紫光同创--工程源码,FPGA图像缩放,菜鸟FPGA图像处理专题,fpga开发,算法,紫光同创,图像缩放,PDS,verilog
邻域插值算法原图1280X720放大到1920x1080如下:
紫光同创FPGA纯verilog代码实现图像缩放,两种插值算法任意尺寸缩放,提供3套PDS工程源码,国产FPGA--紫光同创--工程源码,FPGA图像缩放,菜鸟FPGA图像处理专题,fpga开发,算法,紫光同创,图像缩放,PDS,verilog

5、工程代码12详解:掌握图像缩放模块用法

开发板FPGA型号:紫光同创–PGL22G-6MBG324;
开发环境:Pango Design Suite 2021.4
输入:OV7725摄像头或动态彩条,分辨率640x480;
输出:HDMI,720P分辨率下的640x480有效区域显示;
输入输出缩放方案:输入640x480–>输出640x480;
工程作用:掌握图像缩放模块的用法,为后面的缩小和放大等操作打好基础;
工程代码架构请参考第3章节“设计思路框架”的“工程源码架构”小节内容;
工程的资源消耗和功耗如下:该工程使用的是紫光fifo方案;
紫光同创FPGA纯verilog代码实现图像缩放,两种插值算法任意尺寸缩放,提供3套PDS工程源码,国产FPGA--紫光同创--工程源码,FPGA图像缩放,菜鸟FPGA图像处理专题,fpga开发,算法,紫光同创,图像缩放,PDS,verilog
工程已经综合编译完成,如下:
紫光同创FPGA纯verilog代码实现图像缩放,两种插值算法任意尺寸缩放,提供3套PDS工程源码,国产FPGA--紫光同创--工程源码,FPGA图像缩放,菜鸟FPGA图像处理专题,fpga开发,算法,紫光同创,图像缩放,PDS,verilog

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

开发板FPGA型号:紫光同创–PGL22G-6MBG324;
开发环境:Pango Design Suite 2021.4
输入:OV7725摄像头或动态彩条,分辨率640x480;
输出:HDMI,720P分辨率下的600x400有效区域显示;
输入输出缩放方案:输入640x480–>输出600x400;
工程作用:掌握图像缩放模块缩小操作的用法,以便能够移植和设计自己的项目;
工程代码架构请参考第3章节“设计思路框架”的“工程源码架构”小节内容;
工程的资源消耗和功耗如下:该工程使用的是紫光fifo方案;
紫光同创FPGA纯verilog代码实现图像缩放,两种插值算法任意尺寸缩放,提供3套PDS工程源码,国产FPGA--紫光同创--工程源码,FPGA图像缩放,菜鸟FPGA图像处理专题,fpga开发,算法,紫光同创,图像缩放,PDS,verilog
工程已经综合编译完成,如下:
紫光同创FPGA纯verilog代码实现图像缩放,两种插值算法任意尺寸缩放,提供3套PDS工程源码,国产FPGA--紫光同创--工程源码,FPGA图像缩放,菜鸟FPGA图像处理专题,fpga开发,算法,紫光同创,图像缩放,PDS,verilog

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

开发板FPGA型号:紫光同创–PGL22G-6MBG324;
开发环境:Pango Design Suite 2021.4
输入:OV7725摄像头或动态彩条,分辨率640x480;
输出:HDMI,720P分辨率下的600x400有效区域显示;
输入输出缩放方案:输入640x480–>输出1280x720;
工程作用:掌握图像缩放模块放大操作的用法,以便能够移植和设计自己的项目;
工程代码架构请参考第3章节“设计思路框架”的“工程源码架构”小节内容;
工程的资源消耗和功耗如下:该工程使用的是紫光fifo方案;
紫光同创FPGA纯verilog代码实现图像缩放,两种插值算法任意尺寸缩放,提供3套PDS工程源码,国产FPGA--紫光同创--工程源码,FPGA图像缩放,菜鸟FPGA图像处理专题,fpga开发,算法,紫光同创,图像缩放,PDS,verilog
工程已经综合编译完成,如下:
紫光同创FPGA纯verilog代码实现图像缩放,两种插值算法任意尺寸缩放,提供3套PDS工程源码,国产FPGA--紫光同创--工程源码,FPGA图像缩放,菜鸟FPGA图像处理专题,fpga开发,算法,紫光同创,图像缩放,PDS,verilog

8、上板调试验证并演示

准备工作

你需要有以下装备才能移植并测试该工程代码:
1:FPGA开发板;
2:OV7725摄像头,如果没有也可以,就选择动态彩条;
3:HDMI传输线;
4:HDMI显示,要求分辨率支持1280x720;

静态演示

工程12:OV7725输入640x480分辨率不缩放HDMI输出静态演示如下:
紫光同创FPGA纯verilog代码实现图像缩放,两种插值算法任意尺寸缩放,提供3套PDS工程源码,国产FPGA--紫光同创--工程源码,FPGA图像缩放,菜鸟FPGA图像处理专题,fpga开发,算法,紫光同创,图像缩放,PDS,verilog
工程12:动态彩条输入640x480分辨率不缩放HDMI输出静态演示如下:
紫光同创FPGA纯verilog代码实现图像缩放,两种插值算法任意尺寸缩放,提供3套PDS工程源码,国产FPGA--紫光同创--工程源码,FPGA图像缩放,菜鸟FPGA图像处理专题,fpga开发,算法,紫光同创,图像缩放,PDS,verilog
工程13:OV7725输入640x480分辨率缩小到600x400后HDMI输出静态演示如下:
紫光同创FPGA纯verilog代码实现图像缩放,两种插值算法任意尺寸缩放,提供3套PDS工程源码,国产FPGA--紫光同创--工程源码,FPGA图像缩放,菜鸟FPGA图像处理专题,fpga开发,算法,紫光同创,图像缩放,PDS,verilog
工程13:动态彩条输入640x480分辨率缩小到600x400后HDMI输出静态演示如下:
紫光同创FPGA纯verilog代码实现图像缩放,两种插值算法任意尺寸缩放,提供3套PDS工程源码,国产FPGA--紫光同创--工程源码,FPGA图像缩放,菜鸟FPGA图像处理专题,fpga开发,算法,紫光同创,图像缩放,PDS,verilog
工程14:OV7725输入640x480分辨率放大到1280x720后HDMI输出静态演示如下:
紫光同创FPGA纯verilog代码实现图像缩放,两种插值算法任意尺寸缩放,提供3套PDS工程源码,国产FPGA--紫光同创--工程源码,FPGA图像缩放,菜鸟FPGA图像处理专题,fpga开发,算法,紫光同创,图像缩放,PDS,verilog
工程14:动态彩条输入640x480分辨率放大到1280x720后HDMI输出静态演示如下:
紫光同创FPGA纯verilog代码实现图像缩放,两种插值算法任意尺寸缩放,提供3套PDS工程源码,国产FPGA--紫光同创--工程源码,FPGA图像缩放,菜鸟FPGA图像处理专题,fpga开发,算法,紫光同创,图像缩放,PDS,verilog

动态演示

动态视频演示如下:

紫光同创FPGA-OV7725-图像缩放

9、福利:工程源码获取

福利:工程代码的获取
代码太大,无法邮箱发送,以某度网盘链接方式发送,
资料获取方式:私,或者文章末尾的V名片。
紫光同创FPGA纯verilog代码实现图像缩放,两种插值算法任意尺寸缩放,提供3套PDS工程源码,国产FPGA--紫光同创--工程源码,FPGA图像缩放,菜鸟FPGA图像处理专题,fpga开发,算法,紫光同创,图像缩放,PDS,verilog文章来源地址https://www.toymoban.com/news/detail-712859.html

到了这里,关于紫光同创FPGA纯verilog代码实现图像缩放,两种插值算法任意尺寸缩放,提供3套PDS工程源码的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 基于紫光同创FPGA的图像采集及AI加速

    本原创文章由深圳市小眼睛科技有限公司创作,版权归本公司所有,如需转载,需授权并注明出处 适用于板卡型号: 紫光同创PGL50H开发平台(盘古50K开发板) 本篇优秀作品:2023集创赛全国总决赛紫光同创杯赛一等奖获奖作品,来自东莞理工+BugMaker的内容分享。 获奖作品:

    2024年04月14日
    浏览(42)
  • 紫光同创FPGA图像视频采集系统,提供2套PDS工程源码和技术支持

    紫光同创FPGA图像视频采集系统,提供2套PDS工程源码和技术支持 “苟利国家生死以,岂因祸福避趋之!”大洋彼岸的我优秀地下档员,敏锐地洞察到祖国的短板在于高精尖半导体的制造领域,于是本着为中华民族伟大复兴的中国梦贡献绵薄之力的初心,懂先生站在高略高度和

    2024年02月08日
    浏览(50)
  • 紫光同创FPGA实现PCIE测速试验,提供PDS工程和Linux QT上位机源码和技术支持

    紫光同创FPGA实现PCIE测速试验,提供PDS工程和Linux QT上位机源码和技术支持 “苟利国家生死以,岂因祸福避趋之!”大洋彼岸的我优秀地下档员,敏锐地洞察到祖国的短板在于高精尖半导体的制造领域,于是本着为中华民族伟大复兴的中国梦贡献绵薄之力的初心,懂先生站在

    2024年02月08日
    浏览(47)
  • 基于紫光同创 FPGA 的 DDR3 读写实验

    此篇为专栏 《紫光同创FPGA开发笔记》 的第二篇,记录我的学习FPGA的一些开发过程和心得感悟,刚接触FPGA的朋友们可以先去此专栏置顶 《FPGA零基础入门学习路线》来做最基础的扫盲。 本篇内容基于笔者实际开发过程和正点原子资料撰写,将会详细讲解此 FPGA 实验的全流程

    2024年01月20日
    浏览(50)
  • 紫光同创 FPGA 开发跳坑指南(三)—— 联合 Modelsim 仿真

        Modelsim 是 FPGA 开发中重要的 EDA 设计仿真工具,主要用于验证数字电路设计是否正确。紫光 Pango Design Suite 开发套件支持联合 Modelsim 仿真,这里作简要的介绍。 方法一     打开 Pango Design Suite,点击 Tools - Compile Simulation Libraries,在弹出来的窗口中,设置需要编译

    2023年04月10日
    浏览(57)
  • 紫光同创FPGA实现UDP协议栈带ping功能,基于YT8511和RTL8211,提供2套PDS工程源码和技术支持

    紫光同创FPGA实现UDP协议栈带ping功能,基于YT8511和RTL8211,提供2套PDS工程源码和技术支持 “苟利国家生死以,岂因祸福避趋之!”大洋彼岸的我优秀地下档员,敏锐地洞察到祖国的短板在于高精尖半导体的制造领域,于是本着为中华民族伟大复兴的中国梦贡献绵薄之力的初心

    2024年02月08日
    浏览(65)
  • FPGA以太网入门(一)——MDIO接口读写测试实验(基于紫光同创)

    此篇为专栏《紫光同创FPGA开发笔记》的第五篇,记录我的学习 FPGA 的一些开发过程和心得感悟,刚接触 FPGA 的朋友们可以先去此博客 《FPGA零基础入门学习路线》来做最基础的扫盲。 本篇内容基于笔者实际开发过程和正点原子资料撰写,将会详细讲解此 FPGA 实验的全流程,

    2024年04月15日
    浏览(69)
  • FPGA以太网入门(二)——ARP测试实验(基于紫光同创,含原语介绍)

    此篇为专栏《紫光同创FPGA开发笔记》的 第六篇 ,同时也是 FPGA 以太网入门 的 第二篇 ,记录我的学习 FPGA 的一些开发过程和心得感悟,刚接触 FPGA 的朋友们可以先去此博客 《FPGA零基础入门学习路线》来做最基础的扫盲。 本篇内容基于笔者实际开发过程和正点原子资料撰写

    2024年02月20日
    浏览(58)
  • 紫光同创 FPGA 开发跳坑指南(四)—— DDR3 控制器 IP 的使用

    DDR3 是一种大容量的存储器件,采用了预取技术和双边沿采样技术,以实现高速数据存储与读取,在视频处理中可以用来缓存 1 帧或多帧图像。 目录 一、紫光 DDR3 IP 的安装 二、紫光 DDR3 IP 的配置 三、DDR3 IP 的使用 3.1 DDR3 写操作 3.2 DDR3 读操作         在 Pango Design Suit 中,选

    2024年01月25日
    浏览(51)
  • 【两周学会FPGA】从0到1学习紫光同创FPGA开发|盘古PGL22G开发板学习之数码管静态显示(四)

      本原创教程由深圳市小眼睛科技有限公司创作,版权归本公司所有,如需转载,需授权并注明出处 适用于板卡型号: 紫光同创PGL22G开发平台(盘古22K) 一:盘古22K开发板(紫光同创PGL22G开发平台)简介 盘古22K开发板是基于紫光同创Logos系列PGL22G芯片设计的一款FPGA开发板

    2024年02月10日
    浏览(53)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包