当前位置:   article > 正文

FPGA GT高速接口实现 4K@60Hz视频 HDMI2.0 工程解决方案,提供4套工程源码和技术支持_gt高速收发器phy层代码

gt高速收发器phy层代码


FPGA GT高速接口实现 4K@60Hz视频 HDMI2.0 工程解决方案,提供4套工程源码和技术支持

1、前言

没玩过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、Kintex7、Virtex7等系列FPGA 的GT高速接口资源做4K @60Hz的HDMI视频收发实验,4K视频源使用笔记本电脑输入,4K接收显示设备使用家里的电视机;输入视频首先接入板载的HDMI2.0输入接口,然后经过板载的PS8409或其他同等功能的芯片做均衡处理;然后输入差分视频信号直接连到FPGA的GT BANK2上;然后调用Xilinx官方的Video PHY Controller IP核接收4K输入视频并做解串工作,将原来高速串行信号解为3路20bit的AXI4-Stream并行数据,该IP需使用FPGA GT资源;然后调用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.vhd)和音频acr控制模块(hdmi_acr_ctrl.vhd),解码后的AXI4-Stream音频流进入这两个模块进行处理;至此,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并行数据串化为高速串行信号,该IP需使用FPGA GT资源;输出的差分视频信号从GTH BANK上输出,进入到板载的DP159或其他同等功能的芯片做均衡处理,然后连接到HDMI2.0输出接口;HDMI2.0周边电路需要i2c配置,所以还需要调用Zynq或者MicroBlaze软核进行配置,软核开发工具为Vitis SDK;针对目前市面上主流的项目需求,设计了4套工程源码,详情如下:
在这里插入图片描述
现对上述4套工程源码做如下解释,方便读者理解:

工程源码1:开发板FPGA型号为Zynq UltraScale+MPSoCsXCZU4EV;笔记本电脑输入FPGA开发板,输入分辨率4K@60Hz,然后FPGA内部回环,通过HDMI2.0输出,输出分辨率4K@60Hz,使用小米电视显示;

工程源码2:开发板FPGA型号为Zynq UltraScale+MPSoCsXCZU4EV;输入视频为FPGA内部产生的彩条,输入分辨率4K@60Hz,然后FPGA内部驱动,通过HDMI2.0输出,输出分辨率4K@60Hz,使用小米电视显示;

工程源码3:开发板FPGA型号为Kintex7;笔记本电脑输入FPGA开发板,输入分辨率4K@60Hz,然后FPGA内部回环,通过HDMI2.0输出,输出分辨率4K@60Hz,使用小米电视显示;

工程源码4:开发板FPGA型号为Kintex7;输入视频为FPGA内部产生的彩条,输入分辨率4K@60Hz,然后FPGA内部驱动,通过HDMI2.0输出,输出分辨率4K@60Hz,使用小米电视显示;

注意!
注意!
注意!
本UP主有下列FPGA开发板均可实现4K@60Hz视频 HDMI2.0的收发,本博客仅仅是介绍了其中Zynq UltraScale+系列的开发板实现方案,需要其他方案的朋友可以在博客末尾联系到本UP,现有开发板方案如下:
1–>Xilinx Kintxe7 FPGA开发板;
2–>Xilinx Kintxe7 UltraScale FPGA开发板;
3–>Xilinx Kintxe7 UltraScale+ FPGA开发板;
4–>Xilinx Virtxe7 FPGA开发板;
5–>Zynq UltraScale FPGA开发板;
6–>Zynq UltraScale+ FPGA开发板;

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

免责声明

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

2、相关方案推荐

我已有的 GT 高速接口解决方案

我的主页有FPGA GT 高速接口专栏,该专栏有 GTP 、 GTX 、 GTH 、 GTY 等GT 资源的视频传输例程和PCIE传输例程,其中 GTP基于A7系列FPGA开发板搭建,GTX基于K7或者ZYNQ系列FPGA开发板搭建,GTH基于KU或者V7系列FPGA开发板搭建,GTY基于KU+系列FPGA开发板搭建;以下是专栏地址:
点击直接前往

我已有的FPGA图像处理方案

我的主页目前有FPGA图像处理专栏,改专栏收录了我目前手里已有的FPGA图像处理方案,包括图像缩放、图像识别、图像拼接、图像融合、图像去雾、图像叠加、图像旋转、图像增强、图像字符叠加等等;以下是专栏地址:
点击直接前往

3、详细设计方案

设计框图

本设计使用的是Xilinx官方推荐的方案,该方案大致如下:
在这里插入图片描述
具体到本设计的工程详细设计方案框图如下:
在这里插入图片描述

硬件设计架构

4K HDMI2.0 硬件设计架构如下:
在这里插入图片描述

FPGA开发板

本UP主有下列FPGA开发板均可实现4K@60Hz视频 HDMI2.0的收发,本博客仅仅是介绍了其中Zynq UltraScale+系列的开发板实现方案,需要其他方案的朋友可以在博客末尾联系到本UP,现有开发板方案如下:
1–>Xilinx Kintxe7 FPGA开发板;
2–>Xilinx Kintxe7 UltraScale FPGA开发板;
3–>Xilinx Kintxe7 UltraScale+ FPGA开发板;
4–>Xilinx Virtxe7 FPGA开发板;
5–>Zynq UltraScale FPGA开发板;
6–>Zynq UltraScale+ FPGA开发板(本博客使用到的);
关于本博客使用的这款开发板详细信息,请参考我之前的博客,对这块开发板感兴趣的朋友可以咨询本UP获得;博客链接如下:
点击直接前往

视频输入

工程源码1的视频输入为笔记本电脑,前提是你的笔记本电脑要能够输出4K@60Hz分辨率才行,可通过查看显示驱动版本确定是否支持4K@60Hz分辨率,参考如下:
在这里插入图片描述
一般驱动版本在20.0以上就是支持输出4K的;
工程源码2没有视频输入源,而是采用FPGA内部生成的彩条;

Video PHY Controller

用XIlinx方案做4K HDMI2.0视频收发必须要用到此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语言软件代码;

HDMI 1.4/2.0 Receiver Subsystem

用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语言软件代码;

4K HDMI 解码后的视频流走向

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语言软件代码;

4K HDMI 解码后的音频流走向

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语言软件代码;

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控制信号;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语言软件代码;

视频输出显示

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

工程源码架构

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

4、工程源码1详解–>ZU4EV版本:HDMI2.0 输入输出

开发板FPGA型号:Xilinx–Zynq UltraScale+MPSoCs–xczu4ev-sfvc784-2-i;
开发环境:Vivado2020.2;
输入:笔记本电脑,HDMI2.0,分辨率4K @60Hz;
输出:小米电视,HDMI2.0,分辨率4K @60Hz;
工程源码架构请参考前面第3章节中的《工程源码架构》小节;
工程作用:此工程目的是让读者掌握FPGA GT高速接口实现 4K@60Hz视频 HDMI2.0的设计能力,以便能够移植和设计自己的项目;
工程的资源消耗和功耗如下:
在这里插入图片描述

5、工程源码2详解–>ZU4EV版本:彩条HDMI2.0输出

开发板FPGA型号:Xilinx–Zynq UltraScale+MPSoCs–xczu4ev-sfvc784-2-i;
开发环境:Vivado2020.2;
输入:FPGA内部彩条,分辨率4K @60Hz;
输出:小米电视,HDMI2.0,分辨率4K @60Hz;
工程源码架构请参考前面第3章节中的《工程源码架构》小节;
工程作用:此工程目的是让读者掌握FPGA GT高速接口实现 4K@60Hz视频 HDMI2.0的设计能力,以便能够移植和设计自己的项目;
工程的资源消耗和功耗如下:
在这里插入图片描述

6、工程源码3详解–>Kintex7版本:HDMI2.0 输入输出

开发板FPGA型号:Xilinx–Kintex7–xc7k325tffg676-2;
开发环境:Vivado2020.2;
输入:笔记本电脑,HDMI2.0,分辨率4K @60Hz;
输出:小米电视,HDMI2.0,分辨率4K @60Hz;
工程源码架构请参考前面第3章节中的《工程源码架构》小节;
工程作用:此工程目的是让读者掌握FPGA GT高速接口实现 4K@60Hz视频 HDMI2.0的设计能力,以便能够移植和设计自己的项目;
工程的资源消耗和功耗如下:
在这里插入图片描述

7、工程源码4详解–>Kintex7版本:彩条HDMI2.0输出

开发板FPGA型号:Xilinx–Kintex7–xc7k325tffg676-2;
开发环境:Vivado2020.2;
输入:FPGA内部彩条,分辨率4K @60Hz;
输出:小米电视,HDMI2.0,分辨率4K @60Hz;
工程源码架构请参考前面第3章节中的《工程源码架构》小节;
工程作用:此工程目的是让读者掌握FPGA GT高速接口实现 4K@60Hz视频 HDMI2.0的设计能力,以便能够移植和设计自己的项目;
工程的资源消耗和功耗如下:
在这里插入图片描述

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开发板,推荐使用本博的开发板;
笔记本电脑,没有则选择彩条输入;
4K HDMI显示器或者电视;
HDMI线;
以工程源码1为例,开发板连接如下:
在这里插入图片描述
下载bit,连上笔记本电脑,然后笔记本电脑分辨率设置如下:
在这里插入图片描述

FPGA内部彩条HDMI2.0输出演示

以工程源码1为例,FPGA内部彩条HDMI2.0输出演示如下,工程源码3与之类似;

HDMI2.0-彩条4K@60Hz输出


可以看到彩条输出稳定,同时有滴滴的声音,这是内部生成的测试音频;

HDMI2.0输入输出回环演示

以工程源码2为例,HDMI2.0输入输出回环演示如下,工程源码4与之类似;

HDMI2.0-4K@60Hz-输入输出

10、福利:工程源码获取

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/413293
推荐阅读
相关标签
  

闽ICP备14008679号