FPGA基于GS2971/GS2972实现SDI视频收发 提供工程源码和技术支持

news2024/12/23 0:20:35

目录

  • 1、前言
  • 2、我目前已有的SDI编解码方案
  • 3、GS2971/GS2972芯片解读
    • GS2971解读
    • GS2972解读
  • 4、详细设计方案
  • 5、vivado工程1解读
    • 硬件逻辑工程
    • 软件SDK工程
  • 6、vivado工程2解读
    • 硬件逻辑工程
    • 软件SDK工程
  • 7、上板调试验证
  • 8、福利:工程代码的获取

1、前言

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

本文详细描述了FPGA基于GS2971/GS2972收发SDI视频的实现设计方案,工程代码编译通过后上板调试验证,文章末尾有演示视频,可直接项目移植,适用于在校学生做毕业设计、研究生项目开发,也适用于在职工程师做项目开发,可应用于医疗、军工等行业的数字成像和图像传输领域;
提供完整的、跑通的工程源码和技术支持;
工程源码和技术支持的获取方式放在了文章末尾,请耐心看到最后;

本设计提供两套vivado工程;
一是GS2971解码SDI视频,经DDR图像缓存后由HDMI输出;SDI 1080P@30Hz帧视频输入;1080P@60Hz帧输出;
二是GS2971解码SDI视频,经DDR图像缓存后由GS2972编码SDI输出;SDI 1080P@30Hz帧视频输入;SDI 1080P@30Hz帧输出;

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

我的博客主页开设有SDI视频专栏,里面全是FPGA编解码SDI的工程源码及博客介绍;既有基于GS2971/GS2972的SDI编解码,也有基于GTP/GTX资源的SDI编解码;专栏地址链接:https://blog.csdn.net/qq_41667729/category_12243350.html?spm=1001.2014.3001.5482

3、GS2971/GS2972芯片解读

GS2971解读

GS2971是SDI解码芯片,将输入的SDI视频解码为yuv422视频输出;GS2971数据手册框图如下:
在这里插入图片描述
GS2971数据手册共152页,但作为一名FPGA开发者而言,大多数都是废话,我们只需关心视频的输入与输出格式即可;
由上图可知,GS2971输入为SDI视频,输出为yuv422视频流;中间的解码和转换过程我们无需关心,这就是数字IC的魅力,将复杂的电路封装为专用IC,用户仅需读读手册即可傻瓜式使用;
输出yuv422视频流属于VGA视频格式,有像素时钟PCLK,行同步信号HS,场同步信号VS,数据有效信号DE,20位像素数据DOUT;GS2971输出视频直接与输入的SDI视频速率关联,以3G-SDI为例,输入3G-SDI,输出视频像素时钟则为148.5M,具体见手册截图:
在这里插入图片描述
另外,GS2971不需要软件配置,电阻上下拉即可完成配置,这部分是画原理图的硬件工程师关心的事,不再多说;

GS2972解读

GS2972的作用正好与GS2971相反,是SDI编码芯片,将输入的yuv422视频编码为SDI视频输出;芯片一样不需要软件配置,所以这里就不多说了;

4、详细设计方案

本设计提供了两套工程;
工程1:SDI输入,经GS2971解码后缓存DDR3,最后由HDMI输出;
工程2:SDI输入,经GS2971解码后缓存DDR3,最后由GS2971编码后SDI输出;
设计框图如下:两个工程一同画在框图中;
在这里插入图片描述

5、vivado工程1解读

硬件逻辑工程

开发板FPGA型号:Xilinx–xc7k325tffg676-2;
开发环境:Vivado2019.1;
输入:3G-SDI视频;
输出:HDMI,1080P;

工程Block Design如下:
在这里插入图片描述
工程代码架构如下:
在这里插入图片描述
资源消耗和功耗预估如下:
在这里插入图片描述

软件SDK工程

软件SDK工程如下:只做了VDMA的配置;
在这里插入图片描述
主函数如下:

#include <stdio.h>
#include "xgpio.h"
#include "unistd.h"
#include "helai_vdma.h"

XGpio_Config *XGpioCfg;
XGpio led_gpio;
#define	AXI_GPIO_DEVICE_ID	XPAR_GPIO_0_DEVICE_ID

int main(){
	XGpioCfg = XGpio_LookupConfig(AXI_GPIO_DEVICE_ID);
	XGpio_CfgInitialize(&led_gpio, XGpioCfg, XGpioCfg->BaseAddress);
	XGpio_SetDataDirection(&led_gpio, 1, 0);	//output
	XGpio_DiscreteWrite(&led_gpio, 1, 0);
	helai_vdma();
	while(1){
		usleep(500000);
		XGpio_DiscreteWrite(&led_gpio, 1, 1);
		usleep(500000);
		XGpio_DiscreteWrite(&led_gpio, 1, 0);
	}
}

6、vivado工程2解读

硬件逻辑工程

开发板FPGA型号:Xilinx–xc7k325tffg676-2;
开发环境:Vivado2019.1;
输入:3G-SDI视频;
输出:3G-SDI视频;

工程Block Design如下:
在这里插入图片描述
工程代码架构如下:
在这里插入图片描述
资源消耗和功耗预估如下:
在这里插入图片描述

软件SDK工程

软件SDK工程如下:只做了VDMA的配置;
在这里插入图片描述
主函数如下:

#include <stdio.h>
#include "xgpio.h"
#include "unistd.h"
#include "helai_vdma.h"

XGpio_Config *XGpioCfg;
XGpio led_gpio;
#define	AXI_GPIO_DEVICE_ID	XPAR_GPIO_0_DEVICE_ID

int main(){
	XGpioCfg = XGpio_LookupConfig(AXI_GPIO_DEVICE_ID);
	XGpio_CfgInitialize(&led_gpio, XGpioCfg, XGpioCfg->BaseAddress);
	XGpio_SetDataDirection(&led_gpio, 1, 0);	//output
	XGpio_DiscreteWrite(&led_gpio, 1, 0);
	helai_vdma();
	while(1){
		usleep(500000);
		XGpio_DiscreteWrite(&led_gpio, 1, 1);
		usleep(500000);
		XGpio_DiscreteWrite(&led_gpio, 1, 0);
	}
}

7、上板调试验证

以工程1为例,SDI进,HDMI输出效果如下:
在这里插入图片描述

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

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

多尺度深度特征(上):多尺度特征学习才是目标检测精髓(干货满满,建议收藏)...

计算机视觉研究院专栏 作者&#xff1a;Edison_G 深度特征学习方案将重点从具有细节的具体特征转移到具有语义信息的抽象特征。它通过构建多尺度深度特征学习网络 (MDFN) 不仅考虑单个对象和局部上下文&#xff0c;还考虑它们之间的关系。 公众号ID&#xff5c;ComputerVisionG…

零售行业公有云信息安全探讨

新钛云服已累计为您分享744篇技术干货 ⚠️公有云安全事件⚠️ 最近小半年接连处理了几起零售行业公有云安全事件&#xff0c;都是因为某种原因造成的数据泄露。有防护措施不当的&#xff0c;也有因为应用漏洞泄露被黑的&#xff0c;也有内部人员不慎造成的。 事后总结发现主要…

第一章 IRIS 基础知识:使用互操作性制作连接系统

文章目录 第一章 IRIS 基础知识&#xff1a;使用互操作性制作连接系统为什么要连接系统&#xff1f;介绍Productions 第一章 IRIS 基础知识&#xff1a;使用互操作性制作连接系统 本文介绍了如何将系统与 IRIS 数据平台互操作性产品连接在一起。 为什么要连接系统&#xff1f…

Golang每日一练(leetDay0063) 最大数、重复的DNA序列

目录 179. 最大数 Largest Number &#x1f31f;&#x1f31f; 187. 重复的DNA序列 Repeated DNA Sequences &#x1f31f;&#x1f31f; &#x1f31f; 每日一练刷题专栏 &#x1f31f; Golang每日一练 专栏 Python每日一练 专栏 C/C每日一练 专栏 Java每日一练 专栏…

博客管理系统--博客列表页

准备工作设计数据库封装数据库操作创建实体类数据库增删查改操作&#xff08;写法几乎很相似&#xff09;前后端交互 准备工作 博客管理系统前端部分在学习前端、css、js部分实现&#xff1b;现在我们将完成后端工作;并且部署云服务上&#xff1b;使其能让所有联网的人使用。 …

【代码】一个LVQ神经网络的详解实例

本站原创文章&#xff0c;转载请说明来自《老饼讲解-BP神经网络》bp.bbbdata.com LVQ神经网络是用于样本分类的一个常用算法&#xff0c;本文先简单回顾LVQ神经网络是什么&#xff0c;然后展示如何用matlab工具箱来训练一个LVQ神经网络 目录 一. LVQ神经网络简介 1.1 LVQ神经…

“首次公开一年连升两级的晋升大法”!

见字如面&#xff0c;我是军哥&#xff01; 今天把江湖上失传已久的技术人晋升大法分享给各位&#xff0c;据说当年雷jun总就是用了此法三年就干到了技术高管&#xff0c;请各位务必做好学习和分享动作。 说真的&#xff0c;用好这三个办法&#xff0c;就算在 IT 大厂一年都可以…

脑挫裂伤是什么?脑挫裂伤的4大症状要警惕!

脑挫裂伤是头部遭受暴力而引起的原发性脑器质性损伤。脑挫裂伤既可发生于着力点的脑组织&#xff0c;也可发生于对冲部位。脑挫裂伤病人的临床表现可以由于损伤部位&#xff0c;范围&#xff0c;程度的不同而有差异。受伤较轻的可以只有轻微的症状而受伤&#xff0c;较重的可以…

这玩意真的有用吗?对,是的!Kotlin 的 Nothing 详解

视频先行 下面是视频内容的脚本文案原稿分享。 文案原稿 Kotlin 的 Nothing 类&#xff0c;无法创建出任何实例&#xff1a; public class Nothing private constructor() 所以所有 Nothing 类型的变量或者函数&#xff0c;都找不到可用的值&#xff1a; val nothing: Nothing …

电脑视频录屏软件哪个好用 电脑视频录屏怎么录屏

录屏是我们的工作和生活中非常大的一个需求&#xff0c;尤其对于专业的视频制作者来说&#xff0c;经常需要录制屏幕和编辑视频&#xff0c;因此找到便捷好用的录屏软件非常重要。今天就来分享一下电脑视频录屏软件哪个好用&#xff0c;电脑视频录屏怎么录屏。 一、电脑视频录…

2023 年第八届数维杯大学生数学建模挑战赛 B 题 节能列车运行控制优化策略

在城市交通电气化进程快速推进的同时&#xff0c;与之相应的能耗增长和负面效应也 在迅速增加。城市轨道交通中的快速增长的能耗给城轨交通的可持续性发展带来 负担。2018 年&#xff0c;北京、上海、广州地铁负荷占全市总负荷的 1.5%-2.5%,成为了 城市电网的最大单体负荷[1]。…

软考A计划-真题-分类精讲汇总-第一章(计算机组成原理与体系结构)

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例 &#x1f449;关于作者 专注于Android/Unity和各种游戏开发技巧&#xff0c;以及各种资源分享&am…

Java每日一练(20230512) 最大间距、串联子串、最长回文子串

目录 1. 最大间距 &#x1f31f;&#x1f31f;&#x1f31f; 2. 串联所有单词的子串 &#x1f31f;&#x1f31f;&#x1f31f; 3. 最长回文子串 &#x1f31f;&#x1f31f; &#x1f31f; 每日一练刷题专栏 &#x1f31f; Golang每日一练 专栏 Python每日一练 专栏 …

c++ 11标准模板(STL) std::vector<bool> (二)

定义于头文件 <vector> template<class Allocator> class vector<bool, Allocator>; std::vector<bool> 是 std::vector 对类型 bool 为空间提效的特化。 std::vector<bool> 中对空间提效的行为&#xff08;以及它是否有优化&#xff09;是实现…

使用ChatGPT完成部门和个人季度工作总结

“疫后元年“2023年的第一季度即将过去&#xff0c;相信各位社会人们都过得比往年更加紧张充实吧&#xff1f;转眼又到了完成季度工作总结的时间&#xff0c;完成本职工作之余还要抽出专门的时间完成优秀的工作总结报告&#xff0c;又更让大家本不富裕的休息时间雪上加霜。那么…

SCS【24】单细胞数据量化代谢的计算方法 (scMetabolism)

桓峰基因公众号推出单细胞生信分析教程并配有视频在线教程&#xff0c;目前整理出来的相关教程目录如下&#xff1a; Topic 6. 克隆进化之 Canopy Topic 7. 克隆进化之 Cardelino Topic 8. 克隆进化之 RobustClone SCS【1】今天开启单细胞之旅&#xff0c;述说单细胞测序的前世…

Oracle Cloud和足球

Oracle除了我们熟知的数据库产品&#xff0c;它还有很多技术和产品栈&#xff0c;而且在实践层面&#xff0c;已经有了很多可借鉴的案例&#xff0c;如果了解英超的朋友&#xff0c;可以发现最近几个赛季&#xff0c;英超的转播画面图标中&#xff0c;会出现Oracle Cloud&#…

操作系统的最强入门科普(Unix/Linux篇)

大家好&#xff0c;我是小枣君。 今天这篇文章&#xff0c;我们来聊聊操作系统&#xff08;Operating System&#xff09;。 说到操作系统&#xff0c;大家都不会陌生。我们天天都在接触操作系统——用台式机或笔记本电脑&#xff0c;使用的是windows和macOS系统&#xff1b;用…

为什么拿低绩效的人从来不反思自己的原因?连公司的前90%都挤不进去,还好意思找别人的理由?...

绩效是关乎打工人切身利益的大事&#xff0c;拿了高绩效欢天喜地&#xff0c;拿了低绩效垂头丧气&#xff0c;这是人之常情&#xff0c;但最近一位字节跳动的程序员却怒斥那些拿低绩效的人&#xff1a; 为什么拿m-&#xff08;低绩效&#xff09;的人从来不反思自己垫底的原因&…

C++三部曲|C++核心思想

| 导语 C 的起源可以追溯到 40 年前&#xff0c;但它仍然是当今使用最广泛的编程语言之一&#xff0c;C发明人Bjarne Stroustrup 一开始没想到 C 会获得如此大的成功&#xff0c;他说&#xff1a;“C 的成功显然令人惊讶。我认为它的成功取决于其最初的设计目标&#xff0c;就是…