FPGA实现HDMI输入转SDI视频输出,提供4套工程源码和技术支持

目录

  • 1、前言
    • 免责声明
  • 2、我目前已有的SDI编解码方案
  • 3、设计思路框架核模块解析
    • 设计框图
    • IT6802解码芯片配置及采集
    • ADV7611解码芯片配置及采集
    • silicon9011解码芯片配置及采集
    • 纯verilog的HDMI 解码模块
    • RGB888转YUV422
    • SPMTE编码
    • SDI模式
    • 图像缓存
    • SPMTE SDI
    • GTX
    • GV8500
  • 4、vivado工程1-->IT6802采集SDI输出
  • 5、vivado工程2-->ADV7611采集SDI输出
  • 6、vivado工程3-->silicon9011采集SDI输出
  • 7、vivado工程4-->HDMI RTL解码SDI输出
  • 8、工程移植说明
    • vivado版本不一致处理
    • FPGA型号不一致处理
    • 其他注意事项
  • 9、上板调试验证并演示
    • 准备工作
    • 输出演示
  • 10、福利:工程代码的获取

FPGA实现HDMI输入转SDI视频输出,提供4套工程源码和技术支持

1、前言

FPGA实现SDI视频编解码目前有两种方案:
一是使用专用编解码芯片,比如典型的接收器GS2971,发送器GS2972,优点是简单,比如GS2971接收器直接将SDI解码为并行的YCRCB,GS2972发送器直接将并行的YCRCB编码为SDI视频,缺点是成本较高,可以百度一下GS2971和GS2972的价格;另一种方案是使用FPGA实现编解码,利用FPGA的GTP/GTX资源实现解串,优点是合理利用了FPGA资源,GTP/GTX资源不用白不用,缺点是操作难度大一些,对FPGA水平要求较高。

没玩过SDI都不好意思说自己玩儿过FPGA,这是CSDN某大佬说过的一句话,鄙人深信不疑。。。本文使用Xilinx的Kintex7 FPGA实现HDMI转SDI视频输出;提供3套vivado2019.1版本的工程源码,4套工程的不同点在于输入HDMI视频解码方式的不同,以适应不同的FPGA开发板。第一套工程使用IT6802解码输入的HDMI视频,适应板载IT6802解码芯片的FPGA开发板;第二套工程使用ADV7611解码输入的HDMI视频,适应板载ADV7611解码芯片的FPGA开发板;第三套工程使用silicon9011解码输入的HDMI视频,适应板载silicon9011解码芯片的FPGA开发板;第四套工程使用纯verilog实现的HDMI解码模块解码输入的HDMI视频,适应没有板载HDMI解码芯片只有HDMI输入接口的FPGA开发板;四套工程列表如下:

_______________________________________________________________
|vivado工程    | 第一套工程 | 第二套工程 | 第三套工程 | 第四套工程 |
|vivado版本    |  2019.1   |   2019.1  |   2019.1  |   2019.1  |
|HDMI解码芯片  |   IT6802  |  ADV7611  |silicon9011||
|HDMI解码方式  |  硬件解码  |  硬件解码 |  硬件解码  | RTL模块解码 |
|输入视频      |   HDMI    |    HDMI   |   HDMI    |    HDMI    |
|HDMI解码后视频|   RGB888  |    RGB888 |   RGB888  |    RGB888  |
|输出视频      |    SDI    |    SDI    |    SDI    |    SDI    |
_______________________________________________________________

使用笔记本电脑模拟HDMI输入视频,分辨率为1920X1080@60Hz,FPGA首先用纯verilog实现的i2c控制器配置HDMI解码芯片(第四套工程除外),FPGA采集HDMI输入解码后的RGB888数据,经过RGB888转YUV422模块输出YUV422视频,再经过SPMTE编码模块将YUV422视频数据加上SDI数据帧头、帧尾以及控制信息等组成数据包,此时,原有的视频时序已经被打乱,需要将视频缓存致DDR3中,所以先将视频写入DDR3,然后读出送入Xilinx官方的SPMTE SDI IP核做SDI数据编码,同时需要输入SDI模式,该模块也包含在代码中,从SPMTE SDI IP核输出的已是标准SDI并行视频,最后调用GTX原语将SDI并行视频进行高速串行编码发送,为了保证数据的可靠性,在FPGA开发板需配套一颗GV8500以增强驱动,当然换其他IC也可以做到,最后通过板载的BNC接口将SDI视频发送出去。

本文详细描述了FPGA实现HDMI转SDI视频输出的实现设计方案,工程代码编译通过后上板调试验证,文章末尾有演示视频,可直接项目移植,适用于在校学生、研究生项目开发,也适用于在职工程师做项目开发,可应用于医疗、军工等行业的数字成像和图像传输领域;
提供完整的、跑通的工程源码和技术支持;
工程源码和技术支持的获取方式放在了文章末尾,请耐心看到最后;
关于SDI的理论知识部分,可自行搜索一下,很多大佬讲得很详细,也可以参考我之前写的文章点击查看:SDI理论

免责声明

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

2、我目前已有的SDI编解码方案

我的博客主页开设有SDI视频专栏,里面全是FPGA编解码SDI的工程源码及博客介绍;既有基于GS2971/GS2972的SDI编解码,也有基于GTP/GTX资源的SDI编解码;专栏地址链接:点击直接前往

3、设计思路框架核模块解析

提供3套vivado2019.1版本的工程源码,4套工程的不同点在于输入HDMI视频解码方式的不同,以适应不同的FPGA开发板。第一套工程使用IT6802解码输入的HDMI视频,适应板载IT6802解码芯片的FPGA开发板;第二套工程使用ADV7611解码输入的HDMI视频,适应板载ADV7611解码芯片的FPGA开发板;第三套工程使用silicon9011解码输入的HDMI视频,适应板载silicon9011解码芯片的FPGA开发板;第四套工程使用纯verilog实现的HDMI解码模块解码输入的HDMI视频,适应没有板载HDMI解码芯片只有HDMI输入接口的FPGA开发板;四套工程列表如下:

设计框图

第一套工程设计框架如下:
在这里插入图片描述
第二套工程设计框架如下:
在这里插入图片描述
第三套工程设计框架如下:
在这里插入图片描述
第四套工程设计框架如下:
在这里插入图片描述

IT6802解码芯片配置及采集

第一套工程使用IT6802解码输入的HDMI视频,适应板载IT6802解码芯片的FPGA开发板;IT6802解码芯片需要i2c配置才能使用,关于IT6802解码芯片的配置和使用,请参考我往期的博客,博客地址:点击直接前往
IT6802解码芯片配置及采集这两部分均用verilog代码模块实现,代码中配置为1920x1080分辨率;代码位置如下:
在这里插入图片描述

ADV7611解码芯片配置及采集

第二套工程使用ADV7611解码输入的HDMI视频,适应板载ADV7611解码芯片的FPGA开发板;ADV7611解码芯片需要i2c配置才能使用,ADV7611解码芯片配置及采集这两部分均用verilog代码模块实现,代码中配置为1920x1080分辨率;代码位置如下:
在这里插入图片描述

silicon9011解码芯片配置及采集

第三套工程使用silicon9011解码输入的HDMI视频,适应板载silicon9011解码芯片的FPGA开发板;silicon9011解码芯片需要i2c配置才能使用,关于silicon9011解码芯片的配置和使用,请参考我往期的博客,博客地址:点击直接前往
silicon9011解码芯片配置及采集这两部分均用verilog代码模块实现,代码位置如下:
在这里插入图片描述

纯verilog的HDMI 解码模块

第四套工程使用纯verilog实现的HDMI解码模块解码输入的HDMI视频,适应没有板载HDMI解码芯片只有HDMI输入接口的FPGA开发板;模块输入为差分HDMI视频,输出为RGB888的VGA视频,并伴随解码的像素时钟、行同步信号、场同步信号以及数据有效信号;此外,该模块还有配套的EDID模块,负责和输入源协商视频分辨率等基本信息,通过i2c接口与外接通信,IDED信息是固定的十六进制文件,例化了ROM用来存储,上电自动加载;该模块最高只支持1920x1080@60Hz分辨率的输入视频解码,更高的2K、4K暂不支持;代码位置如下:
在这里插入图片描述

RGB888转YUV422

这个模块很简单, RGB888进YUV422出,十几行代码的事儿,不必多讲,采用纯verilog代码实现,代码位置如下:
在这里插入图片描述

SPMTE编码

SPMTE编码模块将YUV422视频数据加上SDI数据帧头、帧尾以及控制信息等组成数据包,此时,原有的视频时序已经被打乱,代码位置和核心代码部分如下:
在这里插入图片描述
在这里插入图片描述

SDI模式

这个模块根据输入的HDMI视频分辨率来选择不同的SDI模式,这个信号会给到后面的Xilinx官方的SPMTE SDI IP核使用,根据Xilinx官方手册,SDI发送模式如下:
在这里插入图片描述
代码中体现如下:
在这里插入图片描述
代码位置如下:
在这里插入图片描述

图像缓存

由于原有的输入视频时序已经被打乱,所以输入图像必须经DDR缓存,调用Xilinx官方的MIG 核FIFO IP核,将DDR的用户接口封装为FIFO读写模式,方便用户使用,将图像缓存进DDR3中做4帧缓存,如果你觉得延时太高了,可以改为缓存2帧,DDR3地址读写部分如下:
在这里插入图片描述
图像缓存代码位置如下:
在这里插入图片描述

SPMTE SDI

调用Xilinx官方的SPMTE SDI IP核做SDI数据编码,同时需要输入SDI模式,该模块也包含在代码中,从SPMTE SDI IP核输出的已是标准SDI并行视频,SPMTE SDI IP是Xilinx提供的专门用于SDI视频编解码的IP,可以免费试用,这里调用该IP,并添加了一些用户代码,代码位置如下:
在这里插入图片描述

GTX

调用GTX原语将SDI并行视频进行高速串行编码发送,为了达到GTX变速的目的,这里没有调用GTX IP,而是直接调用其原语实现,需要读者对GTX有较深的理解,代码位置如下:
在这里插入图片描述
这里对GTX的时钟有严格要求,必须使用一对148.5 MHz和一对148.35 MHz的时钟作为参考时钟,否则运行不了SDI视频解码;原理图如下:
在这里插入图片描述

GV8500

为了保证数据的可靠性,在FPGA开发板需配套一颗GV8500以增强驱动,当然换其他IC也可以做到,最后通过板载的BNC接口将SDI视频发送出去。原理图如下:
在这里插入图片描述

4、vivado工程1–>IT6802采集SDI输出

开发板FPGA型号:Xilinx–Kintex7–xc7k325tffg676-2;
开发环境:Vivado2019.1;
输入:笔记本电脑输出模拟HDMI视频输入,分辨率1920x1080@60Hz,IT6802解码;
输出:SDI;
应用:FPGA实现HDMI转SDI视频输出
工程代码架构如下:
在这里插入图片描述
综合编译完成后的FPGA资源消耗和功耗预估如下:
在这里插入图片描述

5、vivado工程2–>ADV7611采集SDI输出

开发板FPGA型号:Xilinx–Kintex7–xc7k325tffg676-2;
开发环境:Vivado2019.1;
输入:笔记本电脑输出模拟HDMI视频输入,分辨率1920x1080@60Hz,ADV7611解码;
输出:SDI;
应用:FPGA实现HDMI转SDI视频输出
工程代码架构如下:
在这里插入图片描述
综合编译完成后的FPGA资源消耗和功耗预估如下:
在这里插入图片描述

6、vivado工程3–>silicon9011采集SDI输出

开发板FPGA型号:Xilinx–Kintex7–xc7k325tffg676-2;
开发环境:Vivado2019.1;
输入:笔记本电脑输出模拟HDMI视频输入,分辨率1920x1080@60Hz,silicon9011解码;
输出:SDI;
应用:FPGA实现HDMI转SDI视频输出
工程代码架构如下:
在这里插入图片描述
综合编译完成后的FPGA资源消耗和功耗预估如下:
在这里插入图片描述

7、vivado工程4–>HDMI RTL解码SDI输出

开发板FPGA型号:Xilinx–Kintex7–xc7k325tffg676-2;
开发环境:Vivado2019.1;
输入:笔记本电脑输出模拟HDMI视频输入,分辨率1920x1080@60Hz,HDMI RTL模块解码;
输出:SDI;
应用:FPGA实现HDMI转SDI视频输出
工程代码架构如下:
在这里插入图片描述
综合编译完成后的FPGA资源消耗和功耗预估如下:
在这里插入图片描述

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:笔记本电脑
2:FPGA开发板;
3:板载的HDMI输入接口和SDI输出接口;
4:SDI转HDMI盒子;
5:HDMI显示,要求分辨率支持1920x1080;
测试平台框图如下:
在这里插入图片描述
我用的SDI转HDMI盒子如下,某宝有卖:
在这里插入图片描述

输出演示

输出演示如下:
在这里插入图片描述

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/152500.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

排序算法——希尔排序

一、介绍: 希尔排序是一种可以减少插入排序中数据比较次数的排序算法,加速算法的进行,排序的原则是将数据区分为特定步长的小区块,然后以插入排序算法对小区块内部进行排序,经历过一轮排序则减少步长,直到所有数据都排…

超简单的视频截取方法,迅速提取所需片段!

“视频可以截取吗?用相机拍摄了一段视频,但是中途相机发生了故障,录进去了很多不需要的片段,现在想截取一部分视频出来,但是不知道方法,想问问广大的网友,知不知道视频截取的方法。” 无论是工…

国内就能使用的chatgpt网页版,包含AIGC应用工具

Chatgpt的出现在多个领域带来了重要的影响。它能够显著提高我们的工作效率,无论是编写文案代码还是回答常见问题,都能在短时间内完成任务。通过Chatgpt,我们能够迅速获取所需答案。随着人工智能技术的不断发展,相信在未来AI能够带…

交通物流模型 | MDRGCN:用于多模式交通客流预测的深度学习模型

城市交通拥堵是造成交通事故的重要原因,也是城市发展的主要障碍。通过学习历史交通流数据,我们可以预测未来一些区域的交通流,这对城市道路规划、交通管理、交通控制等都有重要意义。然而,由于交通网络拓扑结构的复杂性和影响交通流的因素的多样性,交通模式往往是复杂多变…

Linux系统中实现便捷运维管理和远程访问的1Panel部署方法

文章目录 前言1. Linux 安装1Panel2. 安装cpolar内网穿透3. 配置1Panel公网访问地址4. 公网远程访问1Panel管理界面5. 固定1Panel公网地址 前言 1Panel 是一个现代化、开源的 Linux 服务器运维管理面板。高效管理,通过 Web 端轻松管理 Linux 服务器,包括主机监控、…

利用KerasCV YOLOv8轻松实现目标精确检测

本文中将实现基于KerasCV YOLOv8的交通灯信号检测,并附录完整代码。。 自从You Only Look Once(简称 YOLO)的诞生以来,目标检测问题主要通过深度学习来解决。大多数深度学习架构通过巧妙地将目标检测问题构建为多个小分类问题和回归问题的组合来实现。具体而言,它是通过在…

ClickHouse进阶(二十二):clickhouse管理与运维-服务监控

进入正文前,感谢宝子们订阅专题、点赞、评论、收藏!关注IT贫道,获取高质量博客内容! 🏡个人主页:IT贫道_大数据OLAP体系技术栈,Apache Doris,Kerberos安全认证-CSDN博客 📌订阅:拥抱独家专题,你的订阅将点燃我的创作热情! 👍点赞:赞同优秀创作,你的点赞是对我创…

接口自动化测试详解,看完不会我退出测试界

一、自动化分类 (1)接口自动化 python/javarequestsunittest框架来实现 python/javaRF(RobotFramework)框架来实现——对于编程要求不高 (2)Web UI功能自动化 python/javaseleniumunittestddtPO框架来实…

桥梁安全在线监测预警系统解决方案

在我们的日常生活中,桥梁作为重要的交通枢纽,其安全性与稳定性至关重要。然而,桥梁由于其所处的特殊环境以及复杂的施工过程,往往容易受到各种因素的影响。最近频繁发生的桥梁施工事故引起了人们的广泛关注。这些事故的原因可能各…

有哪些适合初级程序员看的书籍?

1、《C Primer Plus》(中文版名《C Primer Plus(第五版)》) 作者:Stephen Prata 该书以C语言为例,详细介绍了编程语言的基础知识、控制结构、函数、指针、数组、字符串、结构体等重要概念。并且&#xff0…

KUKA机器人通过直接输入法设定负载数据和附加负载数据的具体操作

KUKA机器人通过直接输入法设定负载数据和附加负载数据的具体操作 设置背景色: 工具负载数据 工具负载的定义: 工具负载数据是指所有装在机器人法兰上的负载。它是另外装在机器人上并由机器人一起移动的质量。需要输入的值有质量、重心位置、质量转动惯量以及所属的主惯性轴。…

突发!该国教育部将MDPI、Hindawi和Frontiers三大出版商打包“拉黑”了!

最近,基于对学术诚信和作者署名的特别关切,马来西亚大学教育部发布了一项声明,禁止该国的公立大学使用政府预算来支付在MDPI、Hindawi和Frontiers三家学术出版商旗下的所有期刊上发表论文的费用。 马来西亚大学教育部还成立了一个特别委员会…

Java注解

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 一、在编译时进行格式检查(JDK内置的三个基本注解)二、使用步骤1.理解Annotation2.Annocation的使用示例3.如何自定义注解4.jdk 提供的4种元…

如何更好的使用结构化工艺文件编制软件?——青创智通

青创智通结构化工艺文件编制软件包括文件创建、文件编制、文件修改、文件复制、文件引用、标准文件库、工艺路线、工艺资源库管理、审批管理、文件导出、文件清单汇总、接口管理等功能。具有以下优势及亮点。 1.集中工艺数据管理 以PLM系统平台为核心的结构化工艺数据支撑平台…

Android 源码解析: SharedPreferences的解析

Android源码解析:SharedPreferences的解析 导言 SharedPreferences是Android中的一种轻量的数据持久化手段,可能也是我们在学习Android时接触到的第一种特殊的本地数据持久化手段,本篇文章就将从源码角度分析SharedPreferences的原理。 源…

android 修改输出apk的包名

一,打包方式使用IDE菜单选项 二、在app级别的build.gradle下配置: static def releaseTime() {return new Date().format("yyyyMMdd.kkmm", TimeZone.getTimeZone("GMT8")) }android.applicationVariants.all { variant ->print…

怎么压缩pdf文件?分享缩小pdf文件的简单方法

在我们的日常生活和工作中,往往需要处理大量的PDF文件,而很多时候这些文件的大小会成为传输和存储的难题。为了解决这个问题,下面我们将介绍三种方法来压缩PDF文件,一起来看看吧~ 一、嗨格式压缩大师 首先,最简单也是…

CSS 实现:常见布局

1 设备与视口 设备屏幕尺寸是指屏幕的对角线长度。像素是计算机屏幕能显示一种特定颜色的最小区域,分为设备像素和逻辑像素。 在 Apple 的视网膜屏(Retina)中,默认每 4 个设备像素为一组,渲染出普通屏幕中一个像素显示…

buuctf-[BSidesCF 2020]Had a bad day 文件包含

打开环境 就两个按钮,随便按按 url变了 还有 像文件包含,使用php伪协议读取一下,但是发现报错,而且有两个.php,可能是自己会加上php后缀 所以把后缀去掉 /index.php?categoryphp://filter/convert.base64-encode/resourcei…

【APP】上架指南:iOS App Store 首次上架被拒原因分析与解决方案

目录 一、前言 二、APP 审核备案新规 (1)iOS 上架审核申请被拒 (2)苹果应用商店重大调整 (3)首次备案流程 ① 阿里云备案 ② 华为云备案 ③ 腾讯云备案 三、iOS 首次上架拒审原因分析 &#…