Zynq-7000系列FPGA使用 Video Processing Subsystem 实现图像缩放,提供工程源码和技术支持

这篇具有很好参考价值的文章主要介绍了Zynq-7000系列FPGA使用 Video Processing Subsystem 实现图像缩放,提供工程源码和技术支持。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


Zynq-7000系列FPGA使用 Video Processing Subsystem 实现图像缩放,提供工程源码和技术支持

1、前言

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

本文使用Xilinx Zynq7000系列FPGA Zynq7020实现Video Processing Subsystem图像缩放,输入视频源采用OV5640摄像头模组;FPGA采集OV5640摄像头视频DVP转RGB888,调用Zynq软核的片内i2c控制器将OV5640配置为1280x720@30Hz分辨率;然后调用Xilinx官方的Video In to AXI4-Stream IP核将RGB视频流转换为AXI4-Stream视频流;然后调用Xilinx官方的Video Processing Subsystem IP核将输入视频进行任意尺寸图像缩放操作,该操作通过Zynq软核SDK软件配置,其本质为通过AXI_Lite 做寄存器配置;然后调用Xilinx官方的VDMA IP将视频做PS侧DDR3的视频缓存操作,调用Zynq将VDMA配置为三帧缓存,其本质为通过AXI_Lite 做寄存器配置;然后调用Xilinx官方的Video Timing Controller IP和AXI4-Stream to Video Out IP将AXI4-Stream视频流转换为RGB视频流;然后添加自定义的HDMI发送IP将RGB视频转换为TMDS的差分视频送显示器显示;提供一套vivado2019.1版本的工程源码和技术支持;

本博客详细描述了Zynq-7000系列FPGA使用 Video Processing Subsystem 实现图像缩放的设计方案,工程代码可综合编译上板调试,可直接项目移植,适用于在校学生、研究生项目开发,也适用于在职工程师做学习提升,可应用于医疗、军工等行业的高速接口或图像处理领域;整个工程调用Zynq软核做IP的配置,Zynq的配置在SDK里以C语言软件代码的形式运行,所以整个工程包括FPGA逻辑设计和SDK软件设计两部分,需要具备FPGA和嵌入式C语言的综合能力,不适合初学者或者小白;

提供完整的、跑通的工程源码和技术支持;
工程源码和技术支持的获取方式放在了文章末尾,请耐心看到最后;

免责声明

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

2、相关方案推荐

FPGA图像处理方案

我的主页目前有FPGA图像处理专栏,改专栏收录了我目前手里已有的FPGA图像处理方案,包括图像缩放、图像识别、图像拼接、图像融合、图像去雾、图像叠加、图像旋转、图像增强、图像字符叠加等等;以下是专栏地址:
点击直接前往

FPGA图像缩放方案

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

自己写的HLS图像缩放方案

之前写过一篇自己写的HLS图像缩放的博客,该方案与官方的Video Processing Subsystem区别在于手写的看得到;以下是博客地址:
点击直接前往

3、设计思路详解

本文使用Xilinx Zynq7000系列FPGA Zynq7020实现Video Processing Subsystem图像缩放,输入视频源采用OV5640摄像头模组;FPGA采集OV5640摄像头视频DVP转RGB888,调用Zynq软核的片内i2c控制器将OV5640配置为1280x720@30Hz分辨率;然后调用Xilinx官方的Video In to AXI4-Stream IP核将RGB视频流转换为AXI4-Stream视频流;然后调用Xilinx官方的Video Processing Subsystem IP核将输入视频进行任意尺寸图像缩放操作,该操作通过Zynq软核SDK软件配置,其本质为通过AXI_Lite 做寄存器配置;然后调用Xilinx官方的VDMA IP将视频做PS侧DDR3的视频缓存操作,调用Zynq将VDMA配置为三帧缓存,其本质为通过AXI_Lite 做寄存器配置;然后调用Xilinx官方的Video Timing Controller IP和AXI4-Stream to Video Out IP将AXI4-Stream视频流转换为RGB视频流;然后添加自定义的HDMI发送IP将RGB视频转换为TMDS的差分视频送显示器显示;提供一套vivado2019.1版本的工程源码和技术支持;
工程源码设计框图如下:
Zynq-7000系列FPGA使用 Video Processing Subsystem 实现图像缩放,提供工程源码和技术支持,FPGA图像缩放,菜鸟FPGA HLS专题,菜鸟FPGA图像处理专题,fpga开发,Zynq,图像缩放
框图解释:箭头表示数据流向,箭头内文字表示数据格式,箭头外数字表示数据柳巷的步骤;

Video Processing Subsystem 介绍

由于工程所用到的IP都是常用IP,所以这里重点介绍一下Video Processing Subsystem;
Video Processing Subsystem有缩放、去隔行、颜色空间转换等功能,这里仅使用图像缩放功能;其特点如下:
适用于Xilinx所有系列的FPGA器件;
支持最大分辨率:8K,即可以处理高达8K的视频;
输入视频格式:AXI4-Stream;
输出视频格式:AXI4-Stream;
需要SDK软件配置,其本质为通过AXI_Lite 做寄存器配置;
提供自定义的配置API,通过调用该库函数即可轻松使用,具体参考SDK代码;
模块占用的FPGA逻辑资源更小,相比于自己写的HLS图像缩放而言,官方的Video Processing Subsystem资源占用大约减小30%左右,且更高效:
Video Processing Subsystem逻辑资源如下,请谨慎评估你的FPGA资源情况;
Zynq-7000系列FPGA使用 Video Processing Subsystem 实现图像缩放,提供工程源码和技术支持,FPGA图像缩放,菜鸟FPGA HLS专题,菜鸟FPGA图像处理专题,fpga开发,Zynq,图像缩放
Video Processing Subsystem IP配置如下:这里配置为双线性插值图像缩放算法;
Zynq-7000系列FPGA使用 Video Processing Subsystem 实现图像缩放,提供工程源码和技术支持,FPGA图像缩放,菜鸟FPGA HLS专题,菜鸟FPGA图像处理专题,fpga开发,Zynq,图像缩放
Zynq-7000系列FPGA使用 Video Processing Subsystem 实现图像缩放,提供工程源码和技术支持,FPGA图像缩放,菜鸟FPGA HLS专题,菜鸟FPGA图像处理专题,fpga开发,Zynq,图像缩放

4、工程代码详解

PL 端 FPGA 逻辑设计

开发板FPGA型号:Xilinx–Zynq7020–xc7z020clg400-2;
开发环境:Vivado2019.1;
输入:OV5640摄像头,分辨率1280x720p;
输出:HDMI,1080P分辨率下的有效区域显示;
工程作用:Zynq-7000系列FPGA使用Video Processing Subsystem实现图像缩放, HDMI 输出;
工程BD如下:
Zynq-7000系列FPGA使用 Video Processing Subsystem 实现图像缩放,提供工程源码和技术支持,FPGA图像缩放,菜鸟FPGA HLS专题,菜鸟FPGA图像处理专题,fpga开发,Zynq,图像缩放
工程代码架构如下:
Zynq-7000系列FPGA使用 Video Processing Subsystem 实现图像缩放,提供工程源码和技术支持,FPGA图像缩放,菜鸟FPGA HLS专题,菜鸟FPGA图像处理专题,fpga开发,Zynq,图像缩放
工程的资源消耗和功耗如下:
Zynq-7000系列FPGA使用 Video Processing Subsystem 实现图像缩放,提供工程源码和技术支持,FPGA图像缩放,菜鸟FPGA HLS专题,菜鸟FPGA图像处理专题,fpga开发,Zynq,图像缩放

PS 端 SDK 软件设计

PS 端 SDK 软件工程代码架构如下:
Zynq-7000系列FPGA使用 Video Processing Subsystem 实现图像缩放,提供工程源码和技术支持,FPGA图像缩放,菜鸟FPGA HLS专题,菜鸟FPGA图像处理专题,fpga开发,Zynq,图像缩放
主函数通过如下的五个宏定义设计了五种不同的图像缩放方案:
ov5640输入分辨率1280x720,HDMI输出分辨率1280x720;
ov5640输入分辨率1280x720,HDMI输出分辨率640x480;
ov5640输入分辨率1280x720,HDMI输出分辨率300x300;
ov5640输入分辨率1280x720,HDMI输出分辨率1600x800;
ov5640输入分辨率1280x720,HDMI输出分辨率1920x1080;
Zynq-7000系列FPGA使用 Video Processing Subsystem 实现图像缩放,提供工程源码和技术支持,FPGA图像缩放,菜鸟FPGA HLS专题,菜鸟FPGA图像处理专题,fpga开发,Zynq,图像缩放
主函数进行相应的图像缩放操作,并打印相关信息,代码如下:
Zynq-7000系列FPGA使用 Video Processing Subsystem 实现图像缩放,提供工程源码和技术支持,FPGA图像缩放,菜鸟FPGA HLS专题,菜鸟FPGA图像处理专题,fpga开发,Zynq,图像缩放

5、工程移植说明

vivado版本不一致处理

1:如果你的vivado版本与本工程vivado版本一致,则直接打开工程;
2:如果你的vivado版本低于本工程vivado版本,则需要打开工程后,点击文件–>另存为;但此方法并不保险,最保险的方法是将你的vivado版本升级到本工程vivado的版本或者更高版本;
Zynq-7000系列FPGA使用 Video Processing Subsystem 实现图像缩放,提供工程源码和技术支持,FPGA图像缩放,菜鸟FPGA HLS专题,菜鸟FPGA图像处理专题,fpga开发,Zynq,图像缩放
3:如果你的vivado版本高于本工程vivado版本,解决如下:
Zynq-7000系列FPGA使用 Video Processing Subsystem 实现图像缩放,提供工程源码和技术支持,FPGA图像缩放,菜鸟FPGA HLS专题,菜鸟FPGA图像处理专题,fpga开发,Zynq,图像缩放
打开工程后会发现IP都被锁住了,如下:
Zynq-7000系列FPGA使用 Video Processing Subsystem 实现图像缩放,提供工程源码和技术支持,FPGA图像缩放,菜鸟FPGA HLS专题,菜鸟FPGA图像处理专题,fpga开发,Zynq,图像缩放
此时需要升级IP,操作如下:
Zynq-7000系列FPGA使用 Video Processing Subsystem 实现图像缩放,提供工程源码和技术支持,FPGA图像缩放,菜鸟FPGA HLS专题,菜鸟FPGA图像处理专题,fpga开发,Zynq,图像缩放
Zynq-7000系列FPGA使用 Video Processing Subsystem 实现图像缩放,提供工程源码和技术支持,FPGA图像缩放,菜鸟FPGA HLS专题,菜鸟FPGA图像处理专题,fpga开发,Zynq,图像缩放

FPGA型号不一致处理

如果你的FPGA型号与我的不一致,则需要更改FPGA型号,操作如下:
Zynq-7000系列FPGA使用 Video Processing Subsystem 实现图像缩放,提供工程源码和技术支持,FPGA图像缩放,菜鸟FPGA HLS专题,菜鸟FPGA图像处理专题,fpga开发,Zynq,图像缩放
Zynq-7000系列FPGA使用 Video Processing Subsystem 实现图像缩放,提供工程源码和技术支持,FPGA图像缩放,菜鸟FPGA HLS专题,菜鸟FPGA图像处理专题,fpga开发,Zynq,图像缩放
Zynq-7000系列FPGA使用 Video Processing Subsystem 实现图像缩放,提供工程源码和技术支持,FPGA图像缩放,菜鸟FPGA HLS专题,菜鸟FPGA图像处理专题,fpga开发,Zynq,图像缩放
更改FPGA型号后还需要升级IP,升级IP的方法前面已经讲述了;

其他注意事项

1:由于每个板子的DDR不一定完全一样,所以MIG IP需要根据你自己的原理图进行配置,甚至可以直接删掉我这里原工程的MIG并重新添加IP,重新配置;
2:根据你自己的原理图修改引脚约束,在xdc文件中修改即可;
3:纯FPGA移植到Zynq需要在工程中添加zynq软核;

6、上板调试验证并演示

准备工作

Zynq7000系列开发板;
OV5640摄像头;
HDMI显示器或者LCD显示屏,我用到的LCD显示屏为4.3寸分辨率800x480;

输出静态演示

ov5640输入分辨率1280x720,HDMI输出分辨率1280x720;
HDMI显示输出和串口打印分别如下:
Zynq-7000系列FPGA使用 Video Processing Subsystem 实现图像缩放,提供工程源码和技术支持,FPGA图像缩放,菜鸟FPGA HLS专题,菜鸟FPGA图像处理专题,fpga开发,Zynq,图像缩放
Zynq-7000系列FPGA使用 Video Processing Subsystem 实现图像缩放,提供工程源码和技术支持,FPGA图像缩放,菜鸟FPGA HLS专题,菜鸟FPGA图像处理专题,fpga开发,Zynq,图像缩放
ov5640输入分辨率1280x720,HDMI输出分辨率640x480;
HDMI显示输出和串口打印分别如下:
Zynq-7000系列FPGA使用 Video Processing Subsystem 实现图像缩放,提供工程源码和技术支持,FPGA图像缩放,菜鸟FPGA HLS专题,菜鸟FPGA图像处理专题,fpga开发,Zynq,图像缩放
Zynq-7000系列FPGA使用 Video Processing Subsystem 实现图像缩放,提供工程源码和技术支持,FPGA图像缩放,菜鸟FPGA HLS专题,菜鸟FPGA图像处理专题,fpga开发,Zynq,图像缩放
ov5640输入分辨率1280x720,HDMI输出分辨率300x300;
HDMI显示输出和串口打印分别如下:
Zynq-7000系列FPGA使用 Video Processing Subsystem 实现图像缩放,提供工程源码和技术支持,FPGA图像缩放,菜鸟FPGA HLS专题,菜鸟FPGA图像处理专题,fpga开发,Zynq,图像缩放
Zynq-7000系列FPGA使用 Video Processing Subsystem 实现图像缩放,提供工程源码和技术支持,FPGA图像缩放,菜鸟FPGA HLS专题,菜鸟FPGA图像处理专题,fpga开发,Zynq,图像缩放
ov5640输入分辨率1280x720,HDMI输出分辨率1600x800;
HDMI显示输出和串口打印分别如下:
Zynq-7000系列FPGA使用 Video Processing Subsystem 实现图像缩放,提供工程源码和技术支持,FPGA图像缩放,菜鸟FPGA HLS专题,菜鸟FPGA图像处理专题,fpga开发,Zynq,图像缩放
Zynq-7000系列FPGA使用 Video Processing Subsystem 实现图像缩放,提供工程源码和技术支持,FPGA图像缩放,菜鸟FPGA HLS专题,菜鸟FPGA图像处理专题,fpga开发,Zynq,图像缩放
ov5640输入分辨率1280x720,HDMI输出分辨率1920x1080;
HDMI显示输出和串口打印分别如下:
Zynq-7000系列FPGA使用 Video Processing Subsystem 实现图像缩放,提供工程源码和技术支持,FPGA图像缩放,菜鸟FPGA HLS专题,菜鸟FPGA图像处理专题,fpga开发,Zynq,图像缩放
Zynq-7000系列FPGA使用 Video Processing Subsystem 实现图像缩放,提供工程源码和技术支持,FPGA图像缩放,菜鸟FPGA HLS专题,菜鸟FPGA图像处理专题,fpga开发,Zynq,图像缩放

7、福利:工程源码获取

福利:工程代码的获取
代码太大,无法邮箱发送,以某度网盘链接方式发送,
资料获取方式:私,或者文章末尾的V名片。
网盘资料如下:
Zynq-7000系列FPGA使用 Video Processing Subsystem 实现图像缩放,提供工程源码和技术支持,FPGA图像缩放,菜鸟FPGA HLS专题,菜鸟FPGA图像处理专题,fpga开发,Zynq,图像缩放文章来源地址https://www.toymoban.com/news/detail-754870.html

到了这里,关于Zynq-7000系列FPGA使用 Video Processing Subsystem 实现图像缩放,提供工程源码和技术支持的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • Xilinx Zynq-7000系列FPGA多路视频处理:图像缩放+视频拼接显示,提供工程源码和技术支持

    Xilinx Zynq-7000系列FPGA多路视频处理:图像缩放+视频拼接显示,提供工程源码和技术支持 没玩过图像缩放和视频拼接都不好意思说自己玩儿过FPGA,这是CSDN某大佬说过的一句话,鄙人深信不疑。。。本文使用Xilinx Zynq7000系列FPGA Zynq7020实现HLS图像缩放+视频拼接,输入视频源采用

    2024年02月04日
    浏览(42)
  • zynq7000系列芯片介绍

    ZYNQ从架构上可以划分为两大模块,一个是PS(处理器系统),另一个是PL(可编程逻辑) PS由APU、内存接口、IO外设、互连线4大模块组成。 1、APU(Application Processor Unit)应用处理单元 即PS【可编程逻辑里面最最核心的东西】,它由两个双核心的Cortex-ARM A9、一些缓存和存储组成

    2024年02月06日
    浏览(39)
  • xilinx zynq7000系列 sdio时钟超频详解

    zynq7000的时钟系统很简单,首先是PS_CLK输入时钟,这是外部33.33333Mhz晶振时钟,直接输入到三路PLL(锁相环),分别是 ARM PLL、I/O PLL、DDR PLL;ARM PLL给 CPU核心、SCU(用来管理多核通信)、OCM、AXI总线提供时钟;I/O PLL给各类外设包括SDIO、USB、Ethernet等提供时钟;DDR PLL仅用来给DDR2/3提供

    2023年04月08日
    浏览(33)
  • ZYNQ7000 PL与PS交互(一): PL到PS中断的使用与实现

    翻译以xilinx用户手册ug585,知道ZYNQ7000有几类中断即可。 PS基于ARM架构,使用了两个Cortex-A9处理器和GIC PL390中断控制器。中断结构与CPU密切相关,并接收来自IO外设和可编程单元PL的中断请求。 本章主要信息: 私有、共享和软件中断。 GIC功能介绍 中断优先级和处理 1.1.1 Zynq 中

    2024年04月15日
    浏览(37)
  • Xilinx Zynq-7000系列XC7Z035/XC7Z045高性能SoC处理器评估板PS端ETH RJ45接口

    (数据手册见Datasheet目录) ZYNQ7035 PS端ETH RJ45接口 评估板XQ6657Z35-EVM ,ZYNQ XC7Z035/45的PS端 引出了1路千兆网口,其引脚定义如下图:

    2024年02月12日
    浏览(32)
  • XILINX ZYNQ 7000 AXI总线 (二)

    了解了AXI 的大部分内容后,开始做一个实战,就是完成AXI 结构的输入输出搭建。 一.创建一个IP 3. 4. 5. 6.选择AXI FULL,创界主接口和从接口 7. 8.可以看到XILINX AXI FULL 的源代码 二.创建一个新的工程,把IP导入到这个工程 2.创建 block design 放入两个AXI IP 三 设计 创建两个 接口进行

    2024年02月16日
    浏览(44)
  • Xilinx ZYNQ 7000学习笔记三(小结)

    ZYNQ 7000的启动模式由外部引脚决定的,5个模式引脚MIO[6:2]用于配置NAND flash、并行NOR flash、Serial NOR (Quad-SPI)、SD flash以及JTAG 一共5种启动模式。具体而言就是复位时,zynq-7000 SOC对下述引脚进行连续3个时钟周期采样。复位采样MIO[6:2]并将采样的模式值保存到系统级控制寄存器SL

    2024年02月09日
    浏览(35)
  • ZYNQ7000 SPI LCD与Petalinux

    ZYNQ内部集成两个ARM Cortex A9核心,Xilinx也推出了Petalinux工具,与Vidado搭配可以方便地完成Linux的uboot、kernel、rootfs部署。 开发板上集成了HDMI,但是需要在FPGA中实现逻辑,但是实现之后占用了7010快一半的资源,多少有点离谱,而且HDMI还是不方便,所以就用linux内核中的fbtft驱动

    2024年02月10日
    浏览(27)
  • Xilinx ZYNQ 7000学习笔记一(复位和启动)

    参考文献:Zynq-7000 SoC Technical Reference Manual (UG585)-ch26 Reset System zynq7000复位信号源包括硬件复位、看门狗定时器、JTAG控制器复位信号和软件复位信号。其中,硬件复位引脚由上电复位信号PS_POR_B和系统复位信号PS_SRST_B驱动。在PS中,有3个看门狗定时器可用来产生复位信号;JTA

    2024年02月06日
    浏览(50)
  • zynq7000学习(1)——vivado环境下PL配置

    一、新建工程:       现开发板型号为xc7z100ffg900-2  选择芯片 (选择芯片7100的话,就输入xc7z100  后面的-1和-2是速度等级), 更改项目名为system 。 Create Block Design (创建模块化的设计)——设置设计名称为system。     这时会出现design窗口和source窗口、画布窗口,source中出

    2024年02月13日
    浏览(44)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包