news 2026/8/24 15:23:01

Xilinx Zynq7000系列FPGA纯verilog图像缩放,串口上位机动态调整缩放分辨率,提供4套工程源码和技术支持

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Xilinx Zynq7000系列FPGA纯verilog图像缩放,串口上位机动态调整缩放分辨率,提供4套工程源码和技术支持

目录

  • 1、方案概述
    • 创作背景
    • 工程概述
    • 免责声明
  • 2、相关方案推荐
    • 本博主所有FPGA工程项目-->汇总目录
    • 我这里已有的FPGA图像缩放方案
    • 本方案在Xilinx Artix7 系列FPGA上的应用
    • 本方案在Xilinx Kintex7 系列FPGA上的应用
    • 本方案在Xilinx UltraScale 系列FPGA上的应用
    • 本方案在国产FPGA紫光同创系列上的应用
    • 本方案在国产FPGA高云系列上的应用
    • 本方案在国产FPGA安路系列上的应用
  • 3、设计思路框架
    • 设计框图
    • 输入视频之-->OV5640摄像头+动态彩条
    • 输入视频之-->RTL解码HDMI+动态彩条
    • 图像缩放模块详解
    • 图像缩放模块仿真
    • 上位机控制图像缩放
    • 串口控制模块
    • 图像缓存架构
    • HDMI视频输出架构
    • 工程源码架构
    • 配套的FPGA开发板
  • 4、工程代码1详解:Zynq7020,OV5640输入版本
  • 5、工程代码2详解:Zynq7020,动态彩条输入版本
  • 6、工程代码3详解:Zynq7100,OV5640输入版本
  • 7、工程代码4详解:Zynq7100,HDMI输入版本
  • 8、工程移植说明
    • vivado版本不一致处理
    • FPGA型号不一致处理
    • 其他注意事项
  • 9、上板调试验证并演示
    • 准备工作
    • 上位机控制图像缩放输出演示
  • 10、福利:工程源码获取

Xilinx Zynq7000系列FPGA纯verilog图像缩放,串口上位机动态调整缩放分辨率,提供4套工程源码和技术支持

FPGA图像缩放,纯verilog实现,上位机控制机

1、方案概述

创作背景

图像处理方向是目前FPGA所有就业方向中需求量最大的一个,没有之一,而图像缩放又是FPGA图像就业方向的必备基础技能,也没有之一,足见FPGA图像处理的含金量。
目前市面上主流的FPGA图像缩放方案如下:

基于Xilinx的HLS方案

该方案实现极其简单,直接使用c++语言几行代码即可实现,这也是软件开发人员最喜欢的方式,依赖于Xilinx的HLS工具,可将c++软件代码综合为RTL硬件描述语言,设计人员无需关心复杂的时序和逻辑,也不需要懂FPGA,工具自动帮你生成verilog代码;但HLS综合生成的verilog模块时序较差、资源消耗较多,且一般要生成自定义IP核,需要配合vitis进行配置,使用的灵活性较差,且HLS方案仅限于Xilinx自家的FPGA平台使用,无法跨平台移植,使用单位较为有限。关于HLS实现图像缩放详情,参考我之前写的文章HLS实现图像缩放点击查看:
点击直接前往

非纯Verilog方案

该方案大部分大量采用FIFO、RAM、乘法器、除法器等IP核,功能上没有问题,时序和资源也没问题,但移植性较差,很多IP核在不同厂家的开发工具中略有偏差,某个接口不适配,则很难顺利移植。比如在Altera的FPGA中有专门的移位寄存器IP核,在Xilinx中就没有,在Xilinx很多专用型IP核在国产FPGA中也没有。

纯Verilog方案

也就是本博客的方案,该方案采用纯verilog代码实现,设计人员可根据需要随时修改代码进行调整,模块可在市面上所有FPGA厂家的的器件中自由移植运行。该方案目前已被博主应用在Xilinx、Altera、紫光同创、安陆、高云等厂家的器件中,运行十分稳定可靠。本方案的特点不仅在于纯Verilog代码实现,还在于提供了基于串口上位机的动态调整缩放分辨率方案,可以通过上位机直接输入想要的缩放分辨率,然后点一下鼠标,即可实现图像缩放,实现了简单的人机交互功能,为单调的图像缩放提供了便捷性和趣味性。

工程概述

本文使用Xilinx的Zynq7000系列FPGA纯verilog代码实现图像缩放;输入视频源有两种,分别对应开发者手里有没有摄像头的情况,一种是使用廉价的OV5640摄像头模组或者板载HDMI输入;如果你的手里没有摄像头,或者你的开发板没有摄像头接口,则可使用FPGA内部逻辑生成的动态彩条模拟摄像头视频;视频源的选择通过代码顶层的parameter参数配置,默认使用ov5640作为视频源;FPGA首先对输入摄像头做i2c配置;然后采集输入视频;然后采集视频送入纯verilog代码实现的图像缩放模块对输入视频做图像缩放操作,图像缩放模块可实现任意比例缩放,支持临域插值和双线性插值2种算法,通过模块顶层参数选择,默认使用双线性插值;本设计提供基于串口的上位机动态调整缩放分辨率;缩放后的图像送入纯verilog代码实现的图像缓存模块做图像缓存,本设计用Zynq的PS端DDR3做缓存介质实现3帧缓存;缩放后的视频最好进行缓存操作,因为缩放后原本的视频时序已经被打乱,不缓存的话直接读出基本是错误且不对齐的数据,导致输出的图像是乱码;然后Native视频时序控制图像缓存架构从DDR3中读取视频,并做Native视频时序同步,输出RGB888视频;RGB视频再送入纯verilog实现的RGB转HDMI模块输出HDMI差分视频;最后送显示器显示即可;本纯verilog图像缩放方案一共移植了16套工程源码,涵盖了目前市面上主流的FPGA平台;本博文介绍其中基于Xilinx Artix7 系列FPGA的4套工程,详情如下:

这里说明一下提供的4套工程源码的作用和价值,如下:

工程源码1

开发板FPGA型号为Xilinx–>Zynq7020–xc7z020clg400-2;
输入视频源为OV5640摄像头模组或者FPGA内部逻辑生成的动态彩条;视频源的选择通过代码顶层的parameter参数配置,默认使用ov5640作为视频源;FPGA首先对OV5640摄像头做i2c配置,本设计将OV5640摄像头分辨率配置为1280x720@30Hz;然后采集输入视频,将2个时钟1个像素的RGB565转换为1个时钟1个像素的RGB888图像;然后对输入视频做图像缩放操作,将原视频从1280x720缩放到1920x1080,您可通过我们提供的上位机动态调整缩放分辨率,后文有上位机使用说明;缩放后的图像送入纯verilog代码实现的图像缓存模块做图像缓存,本设计用Zynq的PS端DDR3做缓存介质实现3帧缓存;缩放后的视频最好进行缓存操作,因为缩放后原本的视频时序已经被打乱,不缓存的话直接读出基本是错误且不对齐的数据,导致输出的图像是乱码;然后Native视频时序控制图像缓存架构从DDR3中读取视频,并做Native视频时序同步,输出RGB888视频;RGB视频再送入纯verilog实现的RGB转HDMI模块输出HDMI差分视频;最后送显示器显示即可;输出有效分辨率为1920x1080@60Hz,为了兼容缩放后的其他分辨率,本设计将背景分辨率设计为1920x1080,缩放后的图像叠加在其上显示即可,这也是本博主的创新点;
该工程适用于Xilinx Zynq7000系列FPGA做图像缩放相关应用;

工程源码2

开发板FPGA型号为Xilinx–>Zynq7020–xc7z020clg400-2;
FPGA内部逻辑生成的动态彩条,分辨率配置为1920x1080@60Hz;因为博主使用的Zynq7020开发板没有板载的HDMI输入接口,所以用FPGA内部逻辑生成的动态彩条模拟;然后对输入视频做图像缩放操作,将原视频从1920x1080缩放到1280x720,您可通过我们提供的上位机动态调整缩放分辨率,后文有上位机使用说明;缩放后的图像送入纯verilog代码实现的图像缓存模块做图像缓存,本设计用DDR3做缓存介质实现3帧缓存;缩放后的视频最好进行缓存操作,因为缩放后原本的视频时序已经被打乱,不缓存的话直接读出基本是错误且不对齐的数据,导致输出的图像是乱码;然后Native视频时序控制图像缓存架构从DDR3中读取视频,并做Native视频时序同步,输出RGB888视频;RGB视频再送入纯verilog实现的RGB转HDMI模块输出HDMI差分视频;最后送显示器显示即可;输出有效分辨率为1920x1080@60Hz,为了兼容缩放后的其他分辨率,本设计将背景分辨率设计为1920x1080,缩放后的图像叠加在其上显示即可,这也是本博主的创新点;
该工程适用于Xilinx Zynq7000系列FPGA做图像缩放相关应用;

工程源码3

开发板FPGA型号为Xilinx–>Zynq7100–xc7z100ffg900-2;
输入视频源为OV5640摄像头模组或者FPGA内部逻辑生成的动态彩条;视频源的选择通过代码顶层的parameter参数配置,默认使用ov5640作为视频源;FPGA首先对OV5640摄像头做i2c配置,本设计将OV5640摄像头分辨率配置为1280x720@30Hz;然后采集输入视频,将2个时钟1个像素的RGB565转换为1个时钟1个像素的RGB888图像;然后对输入视频做图像缩放操作,将原视频从1280x720缩放到1920x1080,您可通过我们提供的上位机动态调整缩放分辨率,后文有上位机使用说明;缩放后的图像送入纯verilog代码实现的图像缓存模块做图像缓存,本设计用Zynq的PS端DDR3做缓存介质实现3帧缓存;缩放后的视频最好进行缓存操作,因为缩放后原本的视频时序已经被打乱,不缓存的话直接读出基本是错误且不对齐的数据,导致输出的图像是乱码;然后Native视频时序控制图像缓存架构从DDR3中读取视频,并做Native视频时序同步,输出RGB888视频;RGB视频再送入纯verilog实现的RGB转HDMI模块输出HDMI差分视频;最后送显示器显示即可;输出有效分辨率为1920x1080@60Hz,为了兼容缩放后的其他分辨率,本设计将背景分辨率设计为1920x1080,缩放后的图像叠加在其上显示即可,这也是本博主的创新点;
该工程适用于Xilinx Zynq7000系列FPGA做图像缩放相关应用;

工程源码4

开发板FPGA型号为Xilinx–>Zynq7100–xc7z100ffg900-2;
输入视频为板载的HDMI输入接口,使用笔记本电脑模拟HDMI输入设备连接到开发板HDMI输入接口;HDMI解码方式为纯VHDL代码方案;首先FPGA纯verilog实现的i2c配置模块完成HDMI RX的DDC接口配置,EDID配置为1920x1080@60Hz,使用纯VDHL代码实现的HDMI转RGB模块实现输入HDMI视频解码操作,并输出Native的RGB888视频流;为了支持1920x1080@60Hz,在硬件设计上需要加上驱动芯片,本设计采用TMDS141RHAR,也可采用其他型号;然后对输入视频做图像缩放操作,将原视频从1920x1080缩放到1280x720,您可通过我们提供的上位机动态调整缩放分辨率,后文有上位机使用说明;缩放后的图像送入纯verilog代码实现的图像缓存模块做图像缓存,本设计用DDR3做缓存介质实现3帧缓存;缩放后的视频最好进行缓存操作,因为缩放后原本的视频时序已经被打乱,不缓存的话直接读出基本是错误且不对齐的数据,导致输出的图像是乱码;然后Native视频时序控制图像缓存架构从DDR3中读取视频,并做Native视频时序同步,输出RGB888视频;RGB视频再送入纯verilog实现的RGB转HDMI模块输出HDMI差分视频;最后送显示器显示即可;输出有效分辨率为1920x1080@60Hz,为了兼容缩放后的其他分辨率,本设计将背景分辨率设计为1920x1080,缩放后的图像叠加在其上显示即可,这也是本博主的创新点;
该工程适用于Xilinx Zynq7000系列FPGA做图像缩放相关应用;

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

免责声明

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

2、相关方案推荐

本博主所有FPGA工程项目–>汇总目录

其实一直有朋友反馈,说我的博客文章太多了,乱花渐欲迷人,自己看得一头雾水,不方便快速定位找到自己想要的项目,所以写了一篇汇总目录的博文并置顶,列出我目前已有的所有项目,并给出总目录,每个项目的文章链接,当然,本博文实时更新。。。博客链接如下:
点击直接前往

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

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

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

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

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

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

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

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

本方案在国产FPGA紫光同创系列上的应用

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

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

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

本方案在国产FPGA安路系列上的应用

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

3、设计思路框架

设计框图

FPGA工程设计框图如下:

输入视频之–>OV5640摄像头+动态彩条

输入视频源有两种,分别对应开发者手里有没有摄像头的情况,一种是使用廉价的OV5640摄像头模组;如果你的手里没有摄像头,或者你的开发板没有摄像头接口,则可使用FPGA内部逻辑生成的动态彩条模拟摄像头视频;视频源的选择通过代码顶层的parameter参数配置,默认使用ov5640作为视频源;模块顶层接口如下:

parameter SENSOR_TYPE = 0;输出ov5640的视频
parameter SENSOR_TYPE = 1;输出动态彩条的视频

OV5640摄像头需要i2c初始化配置,本设计配置为1280x720@30Hz分辨率,本设计提供纯verilog代码实现的i2c模块实现配置功能;此外,OV5640摄像头还需要将2个时钟1个像素的RGB565转换为1个时钟1个像素的RGB888图像;动态彩条则由FPGA内部逻辑实现,由纯verilog代码编写;模块代码架构如下:

输入视频之–>RTL解码HDMI+动态彩条

输入视频源有两种,分别对应开发者手里有没有摄像头的情况,一种是使用板载的HDMI输入视频接口;如果你的开发板没有HDMI输入接口,则可使用FPGA内部逻辑生成的动态彩条模拟摄像头视频;视频源的选择通过代码顶层的parameter参数配置,默认使用板载的HDMI输入视频接口;使用笔记本电脑接入HDMI输入接口,以模拟输入Sensor;HDMI解码方案为纯VHDL解码;HDMI输入接口逻辑设计,必须要考虑DDC通信,即通过i2c总线与输入设备协商分辨率,即EDID配置;本设计提供纯VHDL代码实现的i2c模块实现EDID配置;此外,TMDS差分视频进入FPGA IO后,需要将其解码为RGB视频,使用纯VDHL代码实现的HDMI转RGB模块实现输入HDMI视频解码操作,并输出1920x1080@60Hz分辨率的RGB888视频流,本博主已将该代码封装为了自定义IP,可在vivado中直接调用,如下:

HDMI转RGB模块代码架构如下:

为了支持1080P@60Hz的输入视频,在硬件设计上需要加上驱动芯片,本设计采用TMDS141RHAR,也可采用其他型号,参考原理图如下:

模块顶层接口如下:

parameter SENSOR_TYPE = 0;则输出HDMI接口采集的视频;
parameter SENSOR_TYPE = 1;则输出动态彩条的视频;

整个模块代码架构如下:

图像缩放模块详解

图像缩放模块功能框图如下,由跨时钟FIFO、插值+RAM阵列构成,跨时钟FIFO的目的是解决跨时钟域的问题,比如从低分辨率视频放大到高分辨率视频时,像素时钟必然需要变大,这是就需要异步FIFO了,插值算法和RAM阵列具体负责图像缩放算法层面的实现;

插值算法和RAM阵列以ram和fifo为核心进行数据缓存和插值实现,设计架构如下:

依据上图,图像缩放模块内部核心是例化了4个双口RAM,作用是缓存4行图像,以得到4个临近的像素,以此为基础做线性插值;如果是做图像放大操作,就以这4个临近的像素为基准,以线性插值为算法,在原图像中插入更多的像素点来扩大分辨率;如果是做图像缩小操作,就以这4个临近的像素为基准,以线性插值为算法,在原图像中删除更多的像素点来缩小分辨率;此外,前面描述的工作是实时的、整幅图像全部扫描式的进行,所以需要对RAM的读写操作进行精准控制;

图像缩放模块代码架构如下:模块的例化请参考工程源码的顶层代码;

图像缩放模块FIFO的选择可以调用工程对应的vivado工具自带的FIFO IP核,也可以使用纯verilog实现的FIFO,可通过接口参数选择,图像缩放模块顶层接口如下:

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选择邻域插值算法;

代码里的配置如下:

图像缩放模块仿真

图像缩放模块需要vivado和matlab联合仿真;
需要注意的是,仿真的目的是为了验证,这一步我已经替你们做完了,所以读者不再需要单独仿真,如果读者是在需要自己仿真玩玩儿,需要自己写仿真代码;vivado和matlab联合仿真详细步骤如下:
第一步:网上下载一张1280X720的图片,并用matlab将图片转换为RGB格式的txt文档;
第二步:在vivado下设计tstbench,将RGB格式的txt文档作为视频输入源给到图像缩放模块,并将缩放后的图像数据写入输出txt文档;
第二步:用matlab将输出txt文档转换为图片,并于原图一并输出显示以做比较;
根据以上方法得到以下仿真结果:
双线性插值算法原图1280X720缩小到800x600如下:

邻域插值算法原图1280X720缩小到800x600如下:

双线性插值算法原图1280X720放大到1920x1080如下:

邻域插值算法原图1280X720放大到1920x1080如下:

上位机控制图像缩放

本方案的特点不仅在于纯Verilog代码实现,还在于提供了基于串口上位机的动态调整缩放分辨率方案,可以通过上位机直接输入想要的缩放分辨率,然后点一下鼠标,即可实现图像缩放,实现了简单的人机交互功能,为单调的图像缩放提供了便捷性和趣味性。本设计使用基于串口协议帧的上位机,开发工具为python。
提供上位机源码,此外,我们也编译好了上位机,生成了.exe可执行文件,可直接点击运行,位置如下:

上位机运行界面如下:

串口控制模块

串口控制模块主要有两个作用。
作用1:接收PC端上位机下发的串口指令帧,然后解析串口指令帧,提取有效信息,再根据有效信息中的控制信息提取复位信号和图像缩放参数,再控制图像缩放模块和图像缓存模块,实现PC端上位机控制FPGA的桥梁。
作用2:实时发送FPGA内部当前的图像缩放后的视频宽度和高度信息给PC端上位机。
串口控制模块的串口协议帧格式如下:

串口控制模块代码架构如下:

图像缓存架构

图像缓存方案采用纯verilog实现,缓存介质为DDR3/4;
图像缓存架构实现的功能是将输入视频缓存到板载DDR中再读出送后续模块,目的是实现视频同步输出,实现输入视频到输出视频的跨时钟域问题,更好的呈现显示效果;由于调用了Xilinx官方的MIG作为DDR控制器,所以FDMA图像缓存架构就是实现用户数据到MIG的桥接作用;架构如下:

图像缓存架构代码如下:

图像缓存架构由FDMA控制器+FDMA组成;FDMA实际上就是一个AXI4-FULL总线主设备,与MIG对接,MIG配置为AXI4-FULL接口;FDMA控制器实际上就是一个视频读写逻辑,以写视频为例,假设一帧图像的大小为M×N,其中M代表图像宽度,N代表图像高度;FDMA控制器每次写入一行视频数据,即每次向DDR中写入M个像素,写N次即可完成1帧图像的缓存,读视频与之一样;同时调用两个FIFO实现输入输出视频的跨时钟域处理,使得用户可以AXI4内部代码,以简单地像使用FIFO那样操作AXI总线,从而达到读写DDR的目的,进而实现视频缓存;本设计图像缓存方式为3帧缓存;
图像缓存使用Xilinx vivado的Block Design设计,如下图:

关于FDMA更详细的介绍,请参考我之前的博客,博文链接如下:
点击直接前往

HDMI视频输出架构

缓存图像从DDR3读出后经过Native时序生成模块输出标准的VGA时序视频,然后经过纯verilog显示的RGB转HDMI模块输出HDMI差分视频;最后送显示器显示即可;代码例化如下:

工程源码架构

提供4套工程源码,以工程源码1为例,工程Block Design设计如下:

提供4套工程源码,以工程源码1为例,综合后的工程源码架构如下:

FDMA图像缓存架构虽然不需要SDK配置,但PL端时钟由Zynq软核提供,所以需要运行运行SDK以启动Zynq;由于不需要SDK配置,所以SDK软件代码就变得极度简单,只需运行一个“Hello World”即可,如下:

工程编译后资源消耗低、功耗低、时序收敛,符合工程项目应用要求,如下:

上图只是举例,资源消耗并非本工程的实际消耗,实际消耗请看下文的《工程代码详解》;

配套的FPGA开发板

工程源码配套的2款FPGA开发板为选配,可用于工程验证和后续开发,这里仅提供Zynq7100版本 开发板,本博主使用的Zynq7020版本开发板性价比不高,故不再推荐,用户可自行购买开发板移植;具体如下:
该开发板为精简、小巧、适用、经济、功能齐全的本博主专属VIP开发板,VIP开发板由核心板+底板构成;具体配置和接口如下:

Zynq7100 版本的FPGA开发板由核心板+底板构成,配置如下:

核心板配置如下:
板载FPGA型号:Zynq7100–xc7z100ffg900-2;Xilinx经济型FPGA;
板载时钟晶振:板载1颗200M差分晶振,给PL端用,板载一颗33.333MHZ单端晶振,给PS端用;
板载DDR3型号:MT41K256M16-107,板载4片该型号DDR3,内存512M,其中2片连接PS端,另2片连接PL端;
板载FLASH型号:25Q128JVEQ,板载2片该型号FLASH,128M容量,用于程序固化;
板载EMMC:KLM8G1GETF-B041,板载2片该型号FLASH,8G容量,用于程序固化;
板载2颗用户LED灯,用于用户开发;取消了板载按键,鸡肋设计,直接用VIO调控即可;
板载拨码开关:用于启动模式切换;

底板配置如下:
板载时钟晶振:板载1颗148.5M和150M差分晶振,给PL端高速接口用,其中150M差分晶振可更换为其他频率;
板载1路LVDS接口,为30 PIN用户2.0间距的IO引脚,可接本博主的LVDS显示屏;可配套本博主开发的LVDS项目;
板载2路SFP光口,用于高速接口开发;速率高达10Gb/s;可配套本博主开发的GTP高速接口项目;
板载PCIE2.0 X4接口,用于PCIE开发;可配套本博主开发的PCIE项目;
板载1路RJ45网口,用于以太网开发,PHY芯片为RTL8211E;可配套本博主开发的以太网项目;
板载1路OV5640摄像头接口,用于图像开发;可配套本博主开发的图像处理项目;
板载1路HDMI输入接口,最大支持1920x1080@60Hz分辨率,IT6802解码芯片;可配套本博主开发的图像处理项目;
板载1路HDMI输出接口,最大支持1920x1080@60Hz分辨率,直连FPGA的HP BANK;可配套本博主开发的图像处理项目;
板载2路SDI输入接口,最高支持3G-SDI;可配套本博主开发的SDI编解码项目;
板载2路SDI输出接口,最高支持3G-SDI;可配套本博主开发的SDI编解码项目;
板载1路USB2.0接口,PHY芯片为Cypress的CY7C68013A;可配套本博主开发的USB收发项目;
板载1路SATA接口,可接固态硬盘;
板载1路耳机输出接口,PHY芯片为TI的TLV320AIC3104;可配套本博主开发的音频项目;
板载1路串口,用于用户调试;
板载2路canfd/can接口;
板载1路SD卡接口;
板载1颗E2prom,型号为AT24C02;
板载4颗用户LED灯,用于用户开发;
板载2颗用户按键,用于用户开发;
板载JTAG接口,用于程序调试;
板载12V直流电源接口,用于开发板供电;
板载40 PIN用户2.0间距的IO引脚,可接其他外设;

配套的FPGA开发板发货清单如下:

物品数量
Zynq7100–FPGA开发板1块
开发板电源1个
开发板下载器1个
OV5640摄像头1个
USB串口线1根

4、工程代码1详解:Zynq7020,OV5640输入版本

开发板FPGA型号:Xilinx–Zynq7020–xc7z020clg400-2;
开发环境:Vivado2019.1;
输入:OV5640摄像头或者FPGA内部动态彩条,分辨率1280x720@30Hz;
输出:HDMI,RTL纯逻辑编码方案,输出分辨率1920x1080@60Hz;
图像缩放方案:纯Verilog图像缩放;
图像缩放实例:1280x720缩放到1920x1080,其他分辨率缩放可自行修改;
图像缩放控制:PC端上位机实时动态控制;
图像缓存方案:纯verilog图像缓存+PS端DDR3颗粒+图像3帧缓存;
实现功能:FPGA实现纯verilog图像缩放;
工程作用:掌握FPGA实现纯verilog图像缩放的设计能力,以便能够移植和设计自己的项目;
工程Block Design和工程代码架构请参考第3章节的《工程源码架构》小节内容;
工程的资源消耗和功耗如下:

5、工程代码2详解:Zynq7020,动态彩条输入版本

开发板FPGA型号:Xilinx–Zynq7020–xc7z020clg400-2;
开发环境:Vivado2019.1;
输入:FPGA内部动态彩条,分辨率1920x1080@60Hz;
输出:HDMI,RTL纯逻辑编码方案,输出分辨率1280x720@60Hz;
图像缩放方案:纯Verilog图像缩放;
图像缩放实例:1280x720缩放到1920x1080,其他分辨率缩放可自行修改;
图像缩放控制:PC端上位机实时动态控制;
图像缓存方案:纯verilog图像缓存+PS端DDR3颗粒+图像3帧缓存;
实现功能:FPGA实现纯verilog图像缩放;
工程作用:掌握FPGA实现纯verilog图像缩放的设计能力,以便能够移植和设计自己的项目;
工程Block Design和工程代码架构请参考第3章节的《工程源码架构》小节内容;
工程的资源消耗和功耗如下:

6、工程代码3详解:Zynq7100,OV5640输入版本

开发板FPGA型号:Virtex7-Zynq7100–xc7z100ffg900-2;
开发环境:Vivado2019.1;
输入:OV5640摄像头或者FPGA内部动态彩条,分辨率1280x720@30Hz;
输出:HDMI,RTL纯逻辑编码方案,输出分辨率1920x1080@60Hz;
图像缩放方案:纯Verilog图像缩放;
图像缩放实例:1280x720缩放到1920x1080,其他分辨率缩放可自行修改;
图像缩放控制:PC端上位机实时动态控制;
图像缓存方案:纯verilog图像缓存+PS端DDR3颗粒+图像3帧缓存;
实现功能:FPGA实现纯verilog图像缩放;
工程作用:掌握FPGA实现纯verilog图像缩放的设计能力,以便能够移植和设计自己的项目;
工程Block Design和工程代码架构请参考第3章节的《工程源码架构》小节内容;
工程的资源消耗和功耗如下:

7、工程代码4详解:Zynq7100,HDMI输入版本

开发板FPGA型号:Virtex7-Zynq7100–xc7z100ffg900-2;
开发环境:Vivado2019.1;
输入:HDMI或者FPGA内部动态彩条,纯VHDL解码方案,分辨率1920x1080@60Hz,笔记本电脑模拟输入源;
输出:HDMI,RTL纯逻辑编码方案,输出分辨率1280x720@60Hz;
图像缩放方案:纯Verilog图像缩放;
图像缩放实例:1920x1080缩放到1280x720,其他分辨率缩放可自行修改;
图像缩放控制:PC端上位机实时动态控制;
图像缓存方案:纯verilog图像缓存+PS端DDR3颗粒+图像3帧缓存;
实现功能:FPGA实现纯verilog图像缩放;
工程作用:掌握FPGA实现纯verilog图像缩放的设计能力,以便能够移植和设计自己的项目;
工程Block Design和工程代码架构请参考第3章节的《工程源码架构》小节内容;
工程的资源消耗和功耗如下:

8、工程移植说明

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

9、上板调试验证并演示

准备工作

需要如下器材设备:
1、FPGA开发板;推荐适用本博主配套的开发板;
2、OV5640摄像头或HDMI输入设备,比如笔记本电脑,两者都没有则使用动态彩条;
3、串口线;
4、HDMI连接线和显示器;

上位机控制图像缩放输出演示

上位机控制图像缩放输出演示如下:

FPGA图像缩放,纯verilog实现,上位机控制机

10、福利:工程源码获取

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

此外,有很多朋友给本博主提了很多意见和建议,希望能丰富服务内容和选项,因为不同朋友的需求不一样,所以本博主还提供以下服务:

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/24 15:19:55

WebP元数据缺失不能补成0

前 篇排查完“读取调用完成,Canvas 宽高却仍未提供”后,我一度想用一个很常见的办法把界面补齐:没有值就显示 0。表格会整齐,后面的尺寸判断也能继续写,似乎比一大片“未提供”更像一个完整功能。 幸好我没有直接提交那…

作者头像 李华
网站建设 2026/8/24 15:16:34

基于SpringBoot的教学管理自动化系统设计与实现毕业设计项目源码

联系博主 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 …

作者头像 李华
网站建设 2026/8/24 15:09:11

如何查找科研论文:实用方法与高效检索技巧指南

科研党避坑指南|不囤工具只选对的,从入门到精通全靠这4款(含切问学术实操) 走过科研新手期的坑,才明白一个道理:好用的科研工具,从来不是越多越好,而是精准匹配需求、能真正解决问题…

作者头像 李华
网站建设 2026/8/24 15:07:40

AIGC(生成式AI)试用 56 -- CLI

用 AI 学习AI。 是否有更简洁的方式 或 接口调用 CLI? 浅尝之,试用之,实践之。 1. 为什么要用CLI CLI,Command Line Interface,命令行界面 -- 那个传统的黑乎乎的界面,那个传说中高手的操作小黑框…

作者头像 李华