我的创作纪念日

机缘

玩过图像缩放都不好意思说自己玩儿过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语言的综合能力,不适合初学者或者小白。


收获

玩过图像缩放都不好意思说自己玩儿过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语言的综合能力,不适合初学者或者小白;


日常

本文使用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版本的工程源码和技术支持;


成就

由于工程所用到的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资源情况;


憧憬

vivado版本不一致处理

1:如果你的vivado版本与本工程vivado版本一致,则直接打开工程;

2:如果你的vivado版本低于本工程vivado版本,则需要打开工程后,点击文件-->另存为;但此方法并不保险,最保险的方法是将你的vivado版本升级到本工程vivado的版本或者更高版本;

相关推荐

  1. 创作纪念日

    2024-01-22 23:26:01       51 阅读
  2. 创作纪念日

    2024-01-22 23:26:01       71 阅读
  3. 创作纪念日

    2024-01-22 23:26:01       71 阅读
  4. 创作纪念日

    2024-01-22 23:26:01       61 阅读
  5. 创作纪念日

    2024-01-22 23:26:01       69 阅读
  6. 创作纪念日

    2024-01-22 23:26:01       69 阅读
  7. 创作纪念日

    2024-01-22 23:26:01       61 阅读
  8. 创作纪念日

    2024-01-22 23:26:01       76 阅读
  9. 创作纪念日

    2024-01-22 23:26:01       67 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-01-22 23:26:01       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-01-22 23:26:01       106 阅读
  3. 在Django里面运行非项目文件

    2024-01-22 23:26:01       87 阅读
  4. Python语言-面向对象

    2024-01-22 23:26:01       96 阅读

热门阅读

  1. 2024.1.18力扣每日一题——拿出最少数目的魔法豆

    2024-01-22 23:26:01       63 阅读
  2. 前端笔试题(九)——请使用jQuery实现Ajax请求

    2024-01-22 23:26:01       49 阅读
  3. day13打卡

    2024-01-22 23:26:01       61 阅读
  4. String 字符串类和编码 以及StringBuilder StringBuffer

    2024-01-22 23:26:01       47 阅读
  5. 猫咪与Git 解决git clone 443问题

    2024-01-22 23:26:01       53 阅读
  6. Leetcode 3012. Minimize Length of Array Using Operations

    2024-01-22 23:26:01       61 阅读
  7. PG DBA培训23:PostgreSQL执行计划与统计信息

    2024-01-22 23:26:01       54 阅读
  8. 前端开发领域的细分领域与特点

    2024-01-22 23:26:01       55 阅读
  9. 转 义 字 符

    2024-01-22 23:26:01       50 阅读
  10. Vue与React:核心异同点解析

    2024-01-22 23:26:01       52 阅读
  11. LeetCode 每日一题 Day 46 ||枚举

    2024-01-22 23:26:01       52 阅读
  12. k8s-pvc/pv扩容记录

    2024-01-22 23:26:01       44 阅读
  13. 电话号码的字母组合-算法

    2024-01-22 23:26:01       48 阅读