Xilinx系列FPGA实现4K视频缩放,基于Video Processing Subsystem实现,提供4套工程源码和技术支持


Xilinx系列FPGA实现4K视频缩放,基于Video Processing Subsystem实现,提供4套工程源码和技术支持

1、前言

没玩过图像缩放都不好意思说自己玩儿过FPGA,这是CSDN某大佬说过的一句话,鄙人深信不疑。。。目前市面上主流的FPGA图像缩放方案如下:
1:Xilinx的HLS方案,该方案简单,易于实现,但只能用于Xilinx自家的FPGA;
2:非纯Verilog方案,大部分代码使用Verilog实现,但中间的fifo或ram等使用了IP,导致移植性变差,难以在Xilinx、Altera和国产FPGA之间自由移植;
3:纯Verilog方案;
以上方案基本都很难实现4K分辨率的视频缩放,对此,Xilinx官方推出了Video Processing Subsystem IP核,该IP可轻松支持4K视频缩放,但遗憾的是仅可在Xilinx自家系列FPGA上使用,或许复旦微也可以;

工程概述

本设采用Xilinx官方的Video Processing Subsystem IP核为核心,实现4K视频缩放;输入源为手写的一个彩条视频,彩条分辨率为1920x1080@30Hz或60Hz,双像素输出(一个时钟48bit像素),输出接口为AXI4-Stream;彩条生成后给到Xilinx官方的AXI4-Stream Data FIFO实现数据跨时钟域处理;然后给到Xilinx官方的Video Processing Subsystem IP核实现视频缩放操作,将输入的1920x1080视频放大为3840x2160;然后给到Xilinx官方HDMI 1.4/2.0 Transmitter Subsystem IP核做4K视频的编码工作,可同时编码视频流和音频流,本工程没有音频输入;输出3路AXI4-Stream流和DDC控制信号,3路AXI4-Stream流进入Xilinx官方的Video PHY Controller IP核做4K视频并串转化工作,将原3路20bit的AXI4-Stream并行数据串化为高速串行信号,该IP需使用FPGA GT高速接口资源;输出的差分视频信号从GT BANK上输出,进入到板载的DP159或其他同等功能的芯片做均衡处理,然后连接到HDMI2.0输出接口;HDMI2.0周边电路需要i2c配置,所以还需要调用Zynq或者MicroBlaze软核进行配置,软核开发工具为Vitis SDK;
针对目前市面上主流的FPGA,共移植了4套工程源码,详情如下:
在这里插入图片描述
现对上述4套工程源码做如下解释,方便读者理解:

工程源码1

开发板FPGA型号为Xilinx–>Xilinx–Kintex7–xc7k325tffg676-2;FPGA内部逻辑产生一个分辨率为1920x1080@30Hz、双像素输出(一个时钟48bit像素)、输出接口为AXI4-Stream的彩条视频作为输入源,再经过Xilinx官方的AXI4-Stream Data FIFO实现数据跨时钟域处理;再经过Xilinx官方的Video Processing Subsystem IP核实现视频缩放操作,将输入的1920x1080@30Hz视频放大为3840x2160@30Hz;再经过Xilinx官方的HDMI 1.4/2.0 Transmitter Subsystem IP核做4K视频的编码,再经过Xilinx官方的Video PHY Controller IP核做4K视频并串转换,输出的差分视频信号从GTX BANK上输出,最后连接到HDMI2.0输出接口;该工程需要运行MicroBlaze软核进行配置,适用于Xilinx 7系列FPGA开发移植;

工程源码2

开发板FPGA型号为Xilinx–>Xilinx–Kintex7–xc7k325tffg676-2;FPGA内部逻辑产生一个分辨率为1920x1080@60Hz、双像素输出(一个时钟48bit像素)、输出接口为AXI4-Stream的彩条视频作为输入源,再经过Xilinx官方的AXI4-Stream Data FIFO实现数据跨时钟域处理;再经过Xilinx官方的Video Processing Subsystem IP核实现视频缩放操作,将输入的1920x1080@60Hz视频放大为3840x2160@60Hz;再经过Xilinx官方的HDMI 1.4/2.0 Transmitter Subsystem IP核做4K视频的编码,再经过Xilinx官方的Video PHY Controller IP核做4K视频并串转换,输出的差分视频信号从GTX BANK上输出,最后连接到HDMI2.0输出接口;该工程需要运行MicroBlaze软核进行配置,适用于Xilinx 7系列FPGA开发移植;

工程源码3

开发板FPGA型号为Xilinx–>Xilinx–Zynq UltraScale+MPSoCs–xczu4ev-sfvc784-2-i;FPGA内部逻辑产生一个分辨率为1920x1080@30Hz、双像素输出(一个时钟48bit像素)、输出接口为AXI4-Stream的彩条视频作为输入源,再经过Xilinx官方的AXI4-Stream Data FIFO实现数据跨时钟域处理;再经过Xilinx官方的Video Processing Subsystem IP核实现视频缩放操作,将输入的1920x1080@30Hz视频放大为3840x2160@30Hz;再经过Xilinx官方的HDMI 1.4/2.0 Transmitter Subsystem IP核做4K视频的编码,再经过Xilinx官方的Video PHY Controller IP核做4K视频并串转换,输出的差分视频信号从GTH BANK上输出,最后连接到HDMI2.0输出接口;该工程需要运行Zynq软核进行配置,适用于Xilinx UltraScale+系列FPGA开发移植;

工程源码4

开发板FPGA型号为Xilinx–>Xilinx–Zynq UltraScale+MPSoCs–xczu4ev-sfvc784-2-i;FPGA内部逻辑产生一个分辨率为1920x1080@60Hz、双像素输出(一个时钟48bit像素)、输出接口为AXI4-Stream的彩条视频作为输入源,再经过Xilinx官方的AXI4-Stream Data FIFO实现数据跨时钟域处理;再经过Xilinx官方的Video Processing Subsystem IP核实现视频缩放操作,将输入的1920x1080@60Hz视频放大为3840x2160@60Hz;再经过Xilinx官方的HDMI 1.4/2.0 Transmitter Subsystem IP核做4K视频的编码,再经过Xilinx官方的Video PHY Controller IP核做4K视频并串转换,输出的差分视频信号从GTH BANK上输出,最后连接到HDMI2.0输出接口;该工程需要运行Zynq软核进行配置,适用于Xilinx UltraScale+系列FPGA开发移植;

本文详细描述了Xilinx系列FPGA实现4K视频缩放的设计方案,经过反复大量测试稳定可靠,可在项目中直接移植使用,工程代码可综合编译上板调试,可直接项目移植,适用于在校学生、研究生项目开发,也适用于在职工程师做项目开发,可应用于医疗、军工等行业的数字通信领域;
提供完整的、跑通的工程源码和技术支持;
工程源码和技术支持的获取方式放在了文章末尾,请耐心看到最后;

免责声明

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

2、相关方案推荐

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

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

4K视频输入输出方案

Xilinx系列FPGA有一套专用的基于GT高速接口资源的4K视频实现方案,我之前出过专门的博客,博客链接如下:
点击直接前往

Video Processing Subsystem视频缩放方案

Video Processing Subsystem是Xilinx官方推出的视频缩放方案,我之前出过专门的博客,博客链接如下:
点击直接前往

3、详细设计方案

设计框图

本设计使用的是Xilinx官方推荐的方案,设计框图如下:
在这里插入图片描述

测试彩条

输入源为纯verilog手写的一个彩条视频,彩条分辨率为1920x1080@30Hz或60Hz,双像素输出(一个时钟48bit像素),输出接口为AXI4-Stream;由于是双像素,所以30Hz的彩条参考时钟为74.25÷2=37.125M;60Hz的彩条参考时钟为148.5÷2=74.25M;彩条设置为8阶彩条,效果如下:
在这里插入图片描述
测试彩条在Block Design中如下:
在这里插入图片描述

AXI4-Stream Data FIFO

AXI4-Stream Data FIFO的作用是实现彩条数据跨时钟处理,由原来的37.125M或74.25M跨越到300M,这里的读时钟用300M,对应3840x2160的参考时钟;AXI4-Stream Data FIFO在Block Design中如下:
在这里插入图片描述

Video Processing Subsystem

本设计用到Xilinx官方的Video Processing Subsystem IP核实现视频缩放操作,将输入的1920x1080@30Hz视频放大为3840x2160@30Hz;Video Processing Subsystem有缩放、去隔行、颜色空间转换等功能,这里仅使用图像缩放功能;其特点如下:
优点1:适用于Xilinx所有系列的FPGA器件和所有的Vivado版本;
优点2:支持最大分辨率8K的视频缩放;
优点3:输入视频格式:AXI4-Stream,方便对接Xilinx图像处理套路的相关IP;
优点4:输出视频格式:AXI4-Stream,方便对接Xilinx图像处理套路的相关IP;
优点5:模块占用的FPGA逻辑资源更小,相比于自己写的HLS图像缩放而言,官方的Video Processing Subsystem资源占用大约减小30%左右,且更高效:
注意!!!!
注意!!!!
注意!!!!
注意!!!!
缺点1:需要SDK软件配置,其本质为通过AXI_Lite 做寄存器配置,设计难度现对复杂,对新手小白不太友好;
缺点2:Xilinx官方提供的Video Processing Subsystem IAP并不能实现任意尺寸的图像缩放,只能在IAP中视频分辨率查找表范围内进行缩放操作,如果想要实现自定义任意尺寸缩放,需要修改Xilinx官方提供的API源代码,对新手小白极其友好,有此类需求的朋友可以联系博主,提供私人定制服务,也就是我帮你修改Xilinx官方提供的API源代码,以实现自定义任意尺寸缩放操作;但本设计的4K30帧分辨率在官方的API中存在,所以不需要定制;

以工程源码2为例,Video Processing Subsystem逻辑资源如下,请谨慎评估你的FPGA资源情况;
在这里插入图片描述
Video Processing Subsystem IP配置如下:
在这里插入图片描述

HDMI 1.4/2.0 Transmitter Subsystem

用XIlinx方案做4K HDMI视频收发必须要用到此IP,需要输出的4K HDMI视频先进入Xilinx官方的HDMI 1.4/2.0 Transmitter Subsystem IP核做4K 高清视频的编码工作,同时编码视频流和音频流,这里的音频流并没有数据传入,只是做了预留,用户可根据需求决定是否加入音频;输出3路AXI4-Stream流和DDC控制信号;DMI 1.4/2.0 Transmitter Subsystem配置如下:
在这里插入图片描述
该IP需要在Vitis SDK中做进一步详细配置,详情参考Vitis SDK C语言软件代码;

Video PHY Controller

用XIlinx方案做4K HDMI2.0视频收发必须要用到此IP,Video PHY Controller IP核主要做解串和串化的工作,利用FPGA GT资源,在发送端做4K 高清视频并做串化工作,将原3路20bit的AXI4-Stream并行数据串化为高速串行信号;Video PHY Controller配置如下:
在这里插入图片描述
该IP需要在Vitis SDK中做进一步详细配置,详情参考Vitis SDK C语言软件代码;

输出均衡电路

在HDMI输出端需要加均衡器电路,大体方案如下:
在这里插入图片描述
图中IC型号只做参考,具体根据你的项目方案而定;

视频输出显示

视频输出显示需要支持4K@60Hz,一般情况下,1千块以内的显示器是不支持的,我是用的是家里的电视机,品牌为小米电视EA55-2022款(@雷军,雷总请给鸡腿),你可以查询一下你的电视是否支持4K@60Hz。。。

FPGA开发板

为了确保工程与硬件FPGA开发板的适配性,推荐使用本博主同款开发板,以减少移植难度和快速验证,当然,如果你有自己的FPGA板子,也可以用自己的,只不过需要根据你板子将工程移植一下;本博主现有两款FPGA开发板可配套本工程的两套代码,分别如下:
1–>Xilinx Kintxe7 FPGA开发板;
2–>Zynq UltraScale+ FPGA开发板
需要这两款开发板的请联系博主。。。

工程源码架构

工程源码架构包括vivado Block Design逻辑设计和vitis SDK软件设计;
以工程源码2为例,Block Design逻辑设计架构截图如下:
在这里插入图片描述
综合后的源码架构如下:
在这里插入图片描述
Vitis SDK软件代码如下:
在这里插入图片描述
代码为了兼容不同板卡的外围IC,所以代码显得冗余复杂,图中标记的为必须使用到的代码,大多数保持默认即可;主函数中图像缩放驱动调用如下:
在这里插入图片描述

4、工程源码1详解–>Kintex7版本,4K@30Hz版本

开发板FPGA型号:Xilinx–Kintex7–xc7k325tffg676-2;
开发环境:Vivado2022.2;
输入:FPGA内部生成彩条,双像素,分辨率1920x1080@30Hz;
图像缩放方案:Xilinx官方Video Processing Subsystem方案;
图像缩放示例:1920x1080@30Hz放大为3840x2160@30Hz;
输出:小米电视,HDMI2.0,分辨率3840x2160@30Hz;
软核类型:MicroBlaze;
使用GT资源类型:GTX;
工程源码架构请参考前面第3章节中的《工程源码架构》小节;
工程作用:此工程目的是让读者掌握Xilinx系列FPGA实现4K视频缩放的设计能力,以便能够移植和设计自己的项目;
工程的资源消耗和功耗如下:
在这里插入图片描述

5、工程源码2详解–>Kintex7版本,4K@60Hz版本

开发板FPGA型号:Xilinx–Kintex7–xc7k325tffg676-2;
开发环境:Vivado2022.2;
输入:FPGA内部生成彩条,双像素,分辨率1920x1080@60Hz;
图像缩放方案:Xilinx官方Video Processing Subsystem方案;
图像缩放示例:1920x1080@60Hz放大为3840x2160@60Hz;
输出:小米电视,HDMI2.0,分辨率3840x2160@60Hz;
软核类型:MicroBlaze;
使用GT资源类型:GTX;
工程源码架构请参考前面第3章节中的《工程源码架构》小节;
工程作用:此工程目的是让读者掌握Xilinx系列FPGA实现4K视频缩放的设计能力,以便能够移植和设计自己的项目;
工程的资源消耗和功耗如下:
在这里插入图片描述

6、工程源码3详解–>XCZU4EV版本,4K@30Hz版本

开发板FPGA型号:Xilinx–Zynq UltraScale+MPSoCs–xczu4ev-sfvc784-2-i;
开发环境:Vivado2022.2;
输入:FPGA内部生成彩条,双像素,分辨率1920x1080@30Hz;
图像缩放方案:Xilinx官方Video Processing Subsystem方案;
图像缩放示例:1920x1080@30Hz放大为3840x2160@30Hz;
输出:小米电视,HDMI2.0,分辨率3840x2160@30Hz;
工程源码架构请参考前面第3章节中的《工程源码架构》小节;
软核类型:Zynq UltraScale+ MPSoC;
使用GT资源类型:GTH;
工程作用:此工程目的是让读者掌握Xilinx系列FPGA实现4K视频缩放的设计能力,以便能够移植和设计自己的项目;
工程的资源消耗和功耗如下:
在这里插入图片描述

7、工程源码4详解–>XCZU4EV版本,4K@60Hz版本

开发板FPGA型号:Xilinx–Zynq UltraScale+MPSoCs–xczu4ev-sfvc784-2-i;
开发环境:Vivado2022.2;
输入:FPGA内部生成彩条,双像素,分辨率1920x1080@60Hz;
图像缩放方案:Xilinx官方Video Processing Subsystem方案;
图像缩放示例:1920x1080@60Hz放大为3840x2160@60Hz;
输出:小米电视,HDMI2.0,分辨率3840x2160@60Hz;
工程源码架构请参考前面第3章节中的《工程源码架构》小节;
软核类型:Zynq UltraScale+ MPSoC;
使用GT资源类型:GTH;
工程作用:此工程目的是让读者掌握Xilinx系列FPGA实现4K视频缩放的设计能力,以便能够移植和设计自己的项目;
工程的资源消耗和功耗如下:
在这里插入图片描述

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、上板调试验证并演示

准备工作

试验需要准备以下设备:
FPGA开发板,可以自行购买,也可以找本博主购买同款开发板;
HDMI线;
4K分辨率显示器;
以工程源码1的开发板为例进行上板调试;
连接如下:
在这里插入图片描述

输出效果演示

输出效果静态演示如下:
在这里插入图片描述
输出效果动态演示如下:

FPGA-4K视频缩放

10、福利:工程代码的获取

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

  • 16
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

9527华安

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

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

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

打赏作者

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

抵扣说明:

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

余额充值