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

07-02 1410阅读

目录

  • 1、前言
    • 工程概述
    • 免责声明
    • 2、相关方案推荐
      • 我这里已有的FPGA图像缩放方案
      • 4K视频输入输出方案
      • Video Processing Subsystem视频缩放方案
      • 3、详细设计方案
        • 设计框图
        • 测试彩条
        • AXI4-Stream Data FIFO
        • Video Processing Subsystem
        • HDMI 1.4/2.0 Transmitter Subsystem
        • Video PHY Controller
        • 输出均衡电路
        • 视频输出显示
        • FPGA开发板
        • 工程源码架构
        • 4、工程源码1详解-->Kintex7版本,4K@30Hz版本
        • 5、工程源码2详解-->Kintex7版本,4K@60Hz版本
        • 6、工程源码3详解-->XCZU4EV版本,4K@30Hz版本
        • 7、工程源码4详解-->XCZU4EV版本,4K@60Hz版本
        • 8、工程移植说明
          • vivado版本不一致处理
          • FPGA型号不一致处理
          • 其他注意事项
          • 9、上板调试验证并演示
            • 准备工作
            • 输出效果演示
            • 10、福利:工程代码的获取

              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套工程源码,详情如下:

              Xilinx系列FPGA实现4K视频缩放,基于Video Processing Subsystem实现,提供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官方推荐的方案,设计框图如下:

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

              测试彩条

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

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

              测试彩条在Block Design中如下:

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

              AXI4-Stream Data FIFO

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

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

              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资源情况;

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

              Video Processing Subsystem IP配置如下:

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

              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配置如下:

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

              该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配置如下:

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

              该IP需要在Vitis SDK中做进一步详细配置,详情参考Vitis SDK C语言软件代码;

              输出均衡电路

              在HDMI输出端需要加均衡器电路,大体方案如下:

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

              图中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逻辑设计架构截图如下:

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

              综合后的源码架构如下:

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

              Vitis SDK软件代码如下:

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

              代码为了兼容不同板卡的外围IC,所以代码显得冗余复杂,图中标记的为必须使用到的代码,大多数保持默认即可;主函数中图像缩放驱动调用如下:

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

              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视频缩放的设计能力,以便能够移植和设计自己的项目;

              工程的资源消耗和功耗如下:

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

              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视频缩放的设计能力,以便能够移植和设计自己的项目;

              工程的资源消耗和功耗如下:

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

              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视频缩放的设计能力,以便能够移植和设计自己的项目;

              工程的资源消耗和功耗如下:

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

              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视频缩放的设计能力,以便能够移植和设计自己的项目;

              工程的资源消耗和功耗如下:

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

              8、工程移植说明

              vivado版本不一致处理

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

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

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

              3:如果你的vivado版本高于本工程vivado版本,解决如下:

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

              打开工程后会发现IP都被锁住了,如下:

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

              此时需要升级IP,操作如下:

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

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

              FPGA型号不一致处理

              如果你的FPGA型号与我的不一致,则需要更改FPGA型号,操作如下:

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

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

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

              更改FPGA型号后还需要升级IP,升级IP的方法前面已经讲述了;

              其他注意事项

              1:由于每个板子的DDR不一定完全一样,所以MIG IP需要根据你自己的原理图进行配置,甚至可以直接删掉我这里原工程的MIG并重新添加IP,重新配置;

              2:根据你自己的原理图修改引脚约束,在xdc文件中修改即可;

              3:纯FPGA移植到Zynq需要在工程中添加zynq软核;

              9、上板调试验证并演示

              准备工作

              试验需要准备以下设备:

              FPGA开发板,可以自行购买,也可以找本博主购买同款开发板;

              HDMI线;

              4K分辨率显示器;

              以工程源码1的开发板为例进行上板调试;

              连接如下:

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

              输出效果演示

              输出效果静态演示如下:

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

              输出效果动态演示如下:

              FPGA-4K视频缩放

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

              福利:工程代码的获取

              代码太大,无法邮箱发送,以某度网盘链接方式发送,

              资料获取方式:私,或者文章末尾的V名片。

              网盘资料如下:

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

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

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

VPS购买请点击我

文章版权声明:除非注明,否则均为主机测评原创文章,转载或复制请以超链接形式并注明出处。

目录[+]