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


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套工程,详情如下:
在这里插入图片描述
这里说明一下提供的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就业高端项目培训计划细节:
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工程源码,设计框图如下:
在这里插入图片描述

为什么选择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作为视频源;视频源选择如下:
在这里插入图片描述
视频源选择逻辑代码部分如下:
在这里插入图片描述
选择逻辑如下:
当(注释) define COLOR_TEST时,输入源视频是ov7725摄像头;
当(不注释) define COLOR_TEST时,输入源视频是动态彩条;

OV7725摄像头配置及采集

视频源有两种,分别对应开发者手里有没有摄像头的情况,一种是使用廉价的OV7725摄像头模组;如果你的手里没有摄像头,或者你的开发板没有摄像头接口,则可使用代码内部生成的动态彩条模拟摄像头视频;视频源的选择通过代码顶层的define宏定义进行,默认使用OV7725作为视频源;OV7725需要i2c配置才能使用,需要i2c配置分辨率,然后将DVP接口的两个时钟一个像素的GRB565视频数据采集为一个时钟一个像素的RGB565或者RGB888视频数据;OV7725 i2c配置及采集代码如下:
在这里插入图片描述
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,动态彩条模块代码位置和顶层接口和例化如下:
在这里插入图片描述
在这里插入图片描述
动态彩条模块的例化请参考工程源码的顶层代码;

图像缩放模块详解

图像缩放模块功能框图如下,由跨时钟FIFO、插值+RAM阵列构成,跨时钟FIFO的目的是解决跨时钟域的问题,比如从低分辨率视频放大到高分辨率视频时,像素时钟必然需要变大,这是就需要异步FIFO了,插值算法和RAM阵列具体负责图像缩放算法层面的实现;
在这里插入图片描述
插值算法和RAM阵列以ram和fifo为核心进行数据缓存和插值实现,设计架构如下:
在这里插入图片描述
图像缩放模块代码架构如下:模块的例化请参考工程源码的顶层代码;
在这里插入图片描述
图像缩放模块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选择邻域插值算法;

代码里的配置如下:
在这里插入图片描述

图像缩放模块使用

图像缩放模块使用非常简单,顶层代码里设置了四个参数,如下:
在这里插入图片描述
上图视频通过图像缩放模块但不进行缩放操作,旨在掌握图像缩放模块的用法;如果需要将图像放大到720P,则修改为如下:
在这里插入图片描述
当然,需要修改的不仅仅这一个地方,FDMA的配置也需要相应修改,详情请参考代码,但我想要证明的是,图像缩放模块使用非常简单,你都不需要知道它内部具体怎么实现的,上手就能用;

HDMA图像缓存

HDMA图像缓存的本质就是一个封装了用户接口的AXI4-FULL-MASTER总线,HDMA对外与DDR3交互,紫光同创FPGA自带的DDR3控制器的用户接口为AXI4-FULL总线,HDMA对内例化两个FIFO与FPGA内部逻辑交互,所以开发者在使用HDMA时,已无需再关心复杂的为AXI4-FULL协议,只需要像使用FIFO那样简单即可;HDMA架构如下:
在这里插入图片描述
代码架构如下:
在这里插入图片描述

输入输出视频

输入视频的数据格式为RGB,即典型的pclk、vs、de、rgb形式的VGA视频时序,但需要注意的是,因为输入视频直接与FIFO交互,FIFO的AXI侧的数据位宽为128位,为了数据的不错位,输入视频的rgb信号接口不能为传统的24位,这里可以设置为16或者32位,代码中通过参数配置,我配置为32位,如下:
在这里插入图片描述

HDMA缓冲FIFO

例化两个FIFO作为FPGA逻辑数据与AXI4数据的缓冲,所谓缓冲,即数据位宽的转换、时钟域的转换、读写时机的控制等部分,FPGA逻辑侧的数据位宽为32位,AXI4侧的数据位宽为128位;以写FIFO为例,配置如下:
在这里插入图片描述

HDMA控制模块

HDMA控制模块的主要功能是实现AXI4-FULL主机和图像缓存读写地址切换两大功能;AXI4-FULL主机比较简单,照着AXI4-FULL时序图写就完事儿了,图像缓存读写地址切换就难了,本设计通过顶层的参数来配置图像缓存的帧数,如下:
HDMA_PINGPANG_EN=1则图像做三帧缓存;
HDMA_PINGPANG_EN=0则图像做单帧缓存;
本设计配置为HDMA_PINGPANG_EN=1;
为了实现图像的多帧缓存,将读写地址分段,如下:
读写地址=帧地址+数据地址;
数据地址:即正常的AXI4数据突发的地址增量;
写帧地址:一帧图像到来时+1;
读帧地址:一帧图像到来时+2;
如此做到了同时读写不同的帧地址,输出的图像是完美的。。。
这也叫做乒乓操作,核心代码如下:
在这里插入图片描述

VGA时序和HDMI输出

HDMI输出包括VGA时序和HDMI编码模块,VGA时序在紫光PGL22G-6MBG324 FPGA上只能做到720P,因为此FPGA可能太低端了,无法输出742.5M的串行时钟,当然,你用HDMI编码芯片是可以实现1080P的,所以这里只能做到720P的输出分辨率;HDMI编码模块待用原语实现,和Xilinx家的一样,代码结构如下:
在这里插入图片描述

工程源码架构

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

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

开发板FPGA型号:紫光同创–PGL22G-6MBG324;
开发环境:Pango Design Suite 2021.4
输入:OV7725摄像头或动态彩条,分辨率640x480;
输出:HDMI,720P分辨率下的640x480有效区域显示;
输入输出缩放方案:输入640x480–>输出640x480;
工程作用:掌握图像缩放模块的用法,为后面的缩小和放大等操作打好基础;
工程代码架构请参考第3章节“设计思路框架”的“工程源码架构”小节内容;
工程的资源消耗和功耗如下:该工程使用的是紫光fifo方案;
在这里插入图片描述
工程已经综合编译完成,如下:
在这里插入图片描述

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

开发板FPGA型号:紫光同创–PGL22G-6MBG324;
开发环境:Pango Design Suite 2021.4
输入:OV7725摄像头或动态彩条,分辨率640x480;
输出:HDMI,720P分辨率下的600x400有效区域显示;
输入输出缩放方案:输入640x480–>输出600x400;
工程作用:掌握图像缩放模块缩小操作的用法,以便能够移植和设计自己的项目;
工程代码架构请参考第3章节“设计思路框架”的“工程源码架构”小节内容;
工程的资源消耗和功耗如下:该工程使用的是紫光fifo方案;
在这里插入图片描述
工程已经综合编译完成,如下:
在这里插入图片描述

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

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

8、上板调试验证并演示

准备工作

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

静态演示

工程12:OV7725输入640x480分辨率不缩放HDMI输出静态演示如下:
在这里插入图片描述
工程12:动态彩条输入640x480分辨率不缩放HDMI输出静态演示如下:
在这里插入图片描述
工程13:OV7725输入640x480分辨率缩小到600x400后HDMI输出静态演示如下:
在这里插入图片描述
工程13:动态彩条输入640x480分辨率缩小到600x400后HDMI输出静态演示如下:
在这里插入图片描述
工程14:OV7725输入640x480分辨率放大到1280x720后HDMI输出静态演示如下:
在这里插入图片描述
工程14:动态彩条输入640x480分辨率放大到1280x720后HDMI输出静态演示如下:
在这里插入图片描述

动态演示

动态视频演示如下:

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

9、福利:工程源码获取

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

  • 0
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: FPGA是一种可编程逻辑器件,它具有可编程性和可重构性的特点,因此FPGA在数字信号处理、通信、控制、图像处理等许多领域都有着广泛的应用。而FPGA项目进阶则需要具备一定的技术和经验,下面从几个方面分别进行介绍。 首先,FPGA项目进阶需要掌握VHDL或Verilog等硬件描述语言。这是实现FPGA设计的必备基础知识,编写VHDL或Verilog代码可以描述FPGA芯片内部的嵌入式逻辑电路,并将其映射到硬件上。 其次,FPGA项目进阶需要具备系统级设计的能力。包括FPGA与外设的接口设计、时序约束的处理、时钟和复位的管理等。这些技能需要有广泛的硬件、电路设计和EDA软件使用经验。 再次,FPGA项目进阶需要有足够的信号完整性和时序设计的知识。因为在设计大规模和高速的FPGA芯片时,信号完整性、时序和时钟等问题应得到高度重视,避免出现信号干扰、时序偏移、时钟抖动等问题。 此外,FPGA项目进阶也需要掌握FPGA的设计流程和开发工具,包括Xilinx Vivado、Quartus Prime、ISE等工具的使用方法和调试技巧。 总之,FPGA项目进阶需要功底扎实、经验丰富的FPGA工程师来完成。只有不断学习和实践,不断优化设计,才能在FPGA项目设计和开发领域获得更高的技术水平和经验。 ### 回答2: FPGA项目进阶是一个长期的过程,需要不断的学习和实践。在这个过程中,需要掌握FPGA器件的基本原理、逻辑设计、时序分析等知识。同时,还需要熟悉FPGA开发工具的使用,比如Vivado等。下面分别从FPGA器件和开发工具这两方面进行讨论。 在FPGA器件方面,需要了解FPGA器件的体系结构和资源等基本知识。要掌握FPGA器件的编程,需要熟悉HDL语言,如VHDL和Verilog等。了解FPGA器件的时序分析、时钟控制、时钟域等概念,以及各种接口标准,如AXI、PCIe等,都是必要的。 在FPGA开发工具方面,需要掌握Vivado等FPGA开发工具的使用方法,包括项目的创建、工程文件的创建和配置、IP核的使用、仿真调试等。此外,还需要了解FPGA开发工具的优化方法,如利用多块FPGA构建高性能系统、采用面向对象的可重用设计等。 总之,FPGA项目的进阶需要不断的学习和实践,并且需要不断地关注新技术的发展,结合实际应用需求进行优化和创新,才能在FPGA应用领域中取得更好的成果。 ### 回答3: FPGA 是一个非常有用的硬件设计工具,它可以使用可编程逻辑单元来实现不同种类的电路,例如数字信号处理、图像处理、加密、通信等等。在我们的 FPGA 项目进阶中,我们需要掌握更多的 FPGA 设计技术,以便设计出更加复杂和先进的电路。 首先,我们需要了解 FPGA 的内部结构和工作原理。这包括了 FPGA 的片上资源(例如可编程逻辑单元、分频器、时钟控制器等等)、时序设计和时钟域交叉等知识。通过理解 FPGA 的内部结构和工作原理,我们可以更好地利用 FPGA 的特性来设计合适的电路。 然后,我们需要掌握 HDL(硬件描述语言)的编程。HDL 是一种用于 FPGA 设计的编程语言,它可以描述电路的功能、时序和结构。目前使用最广泛的 HDL 是 Verilog 和 VHDL。通过学习 HDL,我们可以利用 FPGA 的可编程性和灵活性,更加高效地设计和验证电路。 除此之外,我们还需要了解 FPGA 的性能调优、时序分析和电源管理等方面的知识。这些技术可以帮助我们优化设计,提高电路的运行速度和可靠性,同时减少功耗和热量消耗。 最后,我们可以通过阅读相关的书籍、参加培训班或者参与开源社区等方式来深入了解 FPGA 的设计技术。通过不断地学习和实践,我们可以提高 FPGA 设计的水平,为实现更多有用的电路打下坚实的基础。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

9527华安

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值