没玩过GT高速接口和4K 高清视频都不好意思说自己玩儿过FPGA,这是CSDN某大佬说过的一句话,鄙人深信不疑。。。GT资源是Xilinx系列FPGA的重要卖点,也是做高速接口的基础,不管是PCIE、SATA、MAC等,都需要用到GT资源来做数据高速串化和解串处理,Xilinx不同的FPGA系列拥有不同的GT资源类型,低端的A7由GTP,K7有GTX,V7有GTH,更高端的U+系列还有GTY等,他们的速度越来越高,应用场景也越来越高端。。。4K 高清视频需要的速率和带宽很大,传统的IO已经不能满足,只有利用FPGA的GT高速接口方能实现;
本文使用Xilinx的Zynq UltraScale+MPSoCs系列的xczu7ev-ffvc1156-2-i型号FPGA 的GTH高速接口资源做4K @60Hz的HDMI视频收发实验,4K @60Hz的视频源首先进入板载的TMDS181IRGZT芯片做电平转换,然后差分视频信号直接连到GTH 高速收发器BANK223上;调用Xilinx官方的Video PHY Controller IP核接收4K 高清视频并做解串工作,将原来高速串行信号解为3路20bit的AXI4-Stream并行数据,该IP利用FPGA GT资源,即利用GTH;然后调用Xilinx官方的HDMI 1.4/2.0 Receiver Subsystem IP核做4K 高清视频的解码工作,IP 同时解码出音频流核视频流,以AXI4-Stream流输出;然后Xilinx官方的Video Test Pattem Generator (TPG),解码后的AXI4-Stream视频流进入TPG,该IP在没有外部AXI4-Stream视频流进入时输出彩条视频,否则输出外部AXI4-Stream视频;同时添加Xilinx官方推荐的音频生成模块(aud_pat_gen.v)和音频acr控制模块(hdmi_acr_ctrl.v),解码后的AXI4-Stream音频流进入这两个模块进行处理;至此,HDMI的解码工作已经完成,此时可以对解码后的视频进行个性化处理了,比如缓存、缩放、卷积啥的,本工程只做回环输出操作;然后Xilinx官方的HDMI 1.4/2.0 Transmitter Subsystem IP核做4K 高清视频的编码工作,同时编码视频流和音频流,输出3路AXI4-Stream流和DDC控制信号;3路AXI4-Stream流进入前面调用的Video PHY Controller IP核做4K 高清视频并做串化工作,将原3路20bit的AXI4-Stream并行数据串化为高速串行信号,该IP利用FPGA GT资源,即利用GTH;输出的差分视频信号从GTH 高速收发器 BANK223上输出,进入到板载的SN65DP159RGZ芯片做电平转换,然后连接到HDMI输出接口;板载的很多芯片都需要i2c配置,调用的很多IP核也需要配置,所以还需要调用Zynq软核进行配置,Zynq软核开发工具为Vitis SDK,利用ARM运行C语言软件代码,通过AXI-Lite总线配置IP寄存器实现配置;在Vitis SDK软件工程里做了两个工程,工程1是4K HDMI视频回环,即就收–发送;工程2是4K HDMI视频发送,即对外发送彩条视频;连接4K显示器,下载bit即可看到输出的4K HDMI视频;
注意!
注意!
注意!
本工程所用到的FPGA属于高端器件,所用到的资源也是高端资源,需要对FPGA GT高速接口、图像处理、FPGA异构特性、C语言嵌入式编程等有极高的熟练度要求,所以本工程源码不适合新手或小白,只适合有工作经验的工程师或者研究生;新手或小白请自行屏蔽;
本博客详细描述了Zynq UltraScale+MPSoCs系列的xczu7ev-ffvc1156-2-i型号FPGA 的GTH高速接口资源做4K @60Hz的HDMI视频收发实验的设计方案,工程代码可综合编译上板调试,可直接项目移植,适用于在校学生、研究生项目开发,也适用于在职工程师做学习提升,可应用于医疗、军工等行业的高速接口或图像处理领域;
提供完整的、跑通的工程源码和技术支持;
工程源码和技术支持的获取方式放在了文章末尾,请耐心看到最后;
本工程及其源码即有自己写的一部分,也有网络公开渠道获取的一部分(包括CSDN、Xilinx官网、Altera官网等等),若大佬们觉得有所冒犯,请私信批评教育;基于此,本工程及其源码仅限于读者或粉丝个人学习和研究,禁止用于商业用途,若由于读者或粉丝自身原因用于商业用途所导致的法律问题,与本博客及博主无关,请谨慎使用。。。
我的主页有FPGA GT 高速接口专栏,该专栏有 GTP 、 GTX 、 GTH 、 GTY 等GT 资源的视频传输例程和PCIE传输例程,其中 GTP基于A7系列FPGA开发板搭建,GTX基于K7或者ZYNQ系列FPGA开发板搭建,GTH基于KU或者V7系列FPGA开发板搭建,GTY基于KU+系列FPGA开发板搭建;以下是专栏地址:
点击直接前往
我的主页目前有FPGA图像处理专栏,改专栏收录了我目前手里已有的FPGA图像处理方案,包括图像缩放、图像识别、图像拼接、图像融合、图像去雾、图像叠加、图像旋转、图像增强、图像字符叠加等等;以下是专栏地址:
点击直接前往
本文使用Xilinx的Zynq UltraScale+MPSoCs系列的xczu7ev-ffvc1156-2-i型号FPGA 的GTH高速接口资源做4K @60Hz的HDMI视频收发实验,4K @60Hz的视频源首先进入板载的TMDS181IRGZT芯片做电平转换,然后差分视频信号直接连到GTH 高速收发器BANK223上;调用Xilinx官方的Video PHY Controller IP核接收4K 高清视频并做解串工作,将原来高速串行信号解为3路20bit的AXI4-Stream并行数据,该IP利用FPGA GT资源,即利用GTH;然后调用Xilinx官方的HDMI 1.4/2.0 Receiver Subsystem IP核做4K 高清视频的解码工作,IP 同时解码出音频流核视频流,以AXI4-Stream流输出;然后Xilinx官方的Video Test Pattem Generator (TPG),解码后的AXI4-Stream视频流进入TPG,该IP在没有外部AXI4-Stream视频流进入时输出彩条视频,否则输出外部AXI4-Stream视频;同时添加Xilinx官方推荐的音频生成模块(aud_pat_gen.v)和音频acr控制模块(hdmi_acr_ctrl.v),解码后的AXI4-Stream音频流进入这两个模块进行处理;至此,HDMI的解码工作已经完成,此时可以对解码后的视频进行个性化处理了,比如缓存、缩放、卷积啥的,本工程只做回环输出操作;然后Xilinx官方的HDMI 1.4/2.0 Transmitter Subsystem IP核做4K 高清视频的编码工作,同时编码视频流和音频流,输出3路AXI4-Stream流和DDC控制信号;3路AXI4-Stream流进入前面调用的Video PHY Controller IP核做4K 高清视频并做串化工作,将原3路20bit的AXI4-Stream并行数据串化为高速串行信号,该IP利用FPGA GT资源,即利用GTH;输出的差分视频信号从GTH 高速收发器 BANK223上输出,进入到板载的SN65DP159RGZ芯片做电平转换,然后连接到HDMI输出接口;板载的很多芯片都需要i2c配置,调用的很多IP核也需要配置,所以还需要调用Zynq软核进行配置,Zynq软核开发工具为Vitis SDK,利用ARM运行C语言软件代码,通过AXI-Lite总线配置IP寄存器实现配置;在Vitis SDK软件工程里做了两个工程,工程1是4K HDMI视频回环,即就收–发送;工程2是4K HDMI视频发送,即对外发送彩条视频;连接4K显示器,下载bit即可看到输出的4K HDMI视频;
本设计使用的是Xilinx官方推荐的方案,该方案大致如下:
具体到本设计的工程详细设计方案框图如下:
这里使用Xilinx推荐的方案,即TMDS181IRGZT芯片做电平转换,然后差分视频信号直接连到GTH 高速收发器BANK223上,其他方案肯定也是可以的,但这块目前开发的公司并不多,所以为了稳健考虑,还是使用Xilinx推荐的方案为佳,主要部分原理图如下:
用XIlinx方案做4K HDMI视频收发必须要用到此IP,Video PHY Controller IP核主要做解串和串化的工作,利用FPGA GT资源,即利用GTH;在接收端接收4K 高清视频并做解串工作,将原来高速串行信号解为3路20bit的AXI4-Stream并行数据,在发送端做4K 高清视频并做串化工作,将原3路20bit的AXI4-Stream并行数据串化为高速串行信号;Video PHY Controller配置如下:
该IP需要在Vitis SDK中做进一步详细配置,详情参考Vitis SDK C语言软件代码;
用XIlinx方案做4K HDMI视频收发必须要用到此IP,4K HDMI输入视频经过Video PHY Controller解串后输入HDMI 1.4/2.0 Receiver Subsystem IP,该IP做4K 高清视频的解码工作,IP 同时解码出音频流核视频流,以AXI4-Stream流输出;HDMI 1.4/2.0 Receiver Subsystemr配置如下:
该IP需要在Vitis SDK中做进一步详细配置,详情参考Vitis SDK C语言软件代码;
HDMI 1.4/2.0 Receiver Subsystem同时解码出AXI4-Stream格式的视频流和音频流,视频流输入Xilinx官方的Video Test Pattem Generator IP核(TPG),该IP在没有外部AXI4-Stream视频流进入时输出彩条视频,否则输出外部AXI4-Stream视频;TPG配合AXI-GPIO复位使用,IP组进行了封装,如下:
展开后以及TPG配置如下:
该IP需要在Vitis SDK中做进一步详细配置,详情参考Vitis SDK C语言软件代码;
HDMI 1.4/2.0 Receiver Subsystem同时解码出AXI4-Stream格式的视频流和音频流,音频流输入Xilinx官方的音频生成模块(aud_pat_gen.v)和音频acr控制模块(hdmi_acr_ctrl.v),解码后的AXI4-Stream音频流进入这两个模块进行处理;两个模块进行了封装,如下:
展开后如下:
这两个模块需要在Vitis SDK中做进一步详细配置,详情参考Vitis SDK C语言软件代码;
用XIlinx方案做4K HDMI视频收发必须要用到此IP,需要输出的4K HDMI视频先进入Xilinx官方的HDMI 1.4/2.0 Transmitter Subsystem IP核做4K 高清视频的编码工作,同时编码视频流和音频流,输出3路AXI4-Stream流和DDC控制信号;3路AXI4-Stream流进入前面调用的Video PHY Controller IP核做4K 高清视频并做串化工作,将原3路20bit的AXI4-Stream并行数据串化为高速串行信号;DMI 1.4/2.0 Transmitter Subsystem配置如下:
该IP需要在Vitis SDK中做进一步详细配置,详情参考Vitis SDK C语言软件代码;
这里使用Xilinx推荐的方案,即SN65DP159RGZ芯片做电平转换,输出的差分视频信号从GTH 高速收发器 BANK223上输出,进入到板载的SN65DP159RGZ芯片做电平转换,然后连接到HDMI输出接口;其他方案肯定也是可以的,但这块目前开发的公司并不多,所以为了稳健考虑,还是使用Xilinx推荐的方案为佳,主要部分原理图如下:
开发板FPGA型号:Xilinx–Zynq UltraScale+MPSoCs–xczu7ev-ffvc1156-2-i;
开发环境:Vivado2022.2;
输入:HDMI,分辨率4K @60Hz;
输出:HDMI,分辨率4K @60Hz;
工程作用:FPGA高端项目:基于GTH的4K HDMI 视频收发;
工程BD如下:
工程代码架构如下:
工程的资源消耗和功耗如下:
PS 端 Vitis SDK 软件依然是参考了Xilinx官方推荐的设计方案,主要是对一系列硬件芯片和IP做配置,在Vitis SDK软件工程里做了两个工程,工程1是4K HDMI视频回环,即就收–发送;工程2是4K HDMI视频发送,即对外发送彩条视频;工程代码架构如下:
源码展开后如下:
由于是参考了Xilinx官方推荐的设计方案,所以代码很冗长,很多代码也用不到,且官方的代码还有BUG,导致编译不通过,我已经对BUG进行了修复,但依然保留了代码的冗长特性,虽然不好看,但功能不受影响;
1:如果你的vivado版本与本工程vivado版本一致,则直接打开工程;
2:如果你的vivado版本低于本工程vivado版本,则需要打开工程后,点击文件–>另存为;但此方法并不保险,最保险的方法是将你的vivado版本升级到本工程vivado的版本或者更高版本;
3:如果你的vivado版本高于本工程vivado版本,解决如下:
打开工程后会发现IP都被锁住了,如下:
此时需要升级IP,操作如下:
如果你的FPGA型号与我的不一致,则需要更改FPGA型号,操作如下:
更改FPGA型号后还需要升级IP,升级IP的方法前面已经讲述了;
1:由于每个板子的DDR不一定完全一样,所以MIG IP需要根据你自己的原理图进行配置,甚至可以直接删掉我这里原工程的MIG并重新添加IP,重新配置;
2:根据你自己的原理图修改引脚约束,在xdc文件中修改即可;
3:纯FPGA移植到Zynq需要在工程中添加zynq软核;
FPGA开发板,我用的Zynq UltraScale+MPSoCs xczu7ev;
4K HDMI输入源;
4K HDMI显示器;
4K HDMI线;
连接好设备后下载bit;
输出静态演示如下:
可以看到,4K视频的清晰度和色彩亮度等十分好看,不是低端相机能比拟的;
录制了一个小视频,输出动态演示如下:
4K HDMI
福利:工程代码的获取
代码太大,无法邮箱发送,以某度网盘链接方式发送,
资料获取方式:私,或者文章末尾的V名片。
网盘资料如下: