使用FPGA驱动GS2972(3G-SDI模式)外同步(HSYNC VSYNC DE)或内(BT1120)同步输出彩条调试

news/2025/1/9 1:18:45/

GS2972视频输出调试

  • 一、外同步模式
  • 1.1 GS2972的硬件初始化
  • 1.2 GS2972的驱动时序
  • 1.3 GS2972的驱动RTL代码
  • 1.4 GS2972输出彩条
  • 1.5 GS2972驱动易出bug
  • 二、数据内嵌同步模式
  • 2.1 GS2972的硬件初始化
  • 2.2 GS2972的驱动时序
  • 2.3 GS2972的驱动RTL代码
  • 2.4 GS2972输出彩条
  • 2.5 GS2972驱动易出bug

一、外同步模式

1.1 GS2972的硬件初始化

GS2972是HD-SDI/3G-SDI视频、音频串化器。其使用非常简单,但是要想把该芯片驱动起来,真心不容易。需要了解相关视频标准、传输标准、显示标准,协议较多,版本较多,彻底了解并非一件简单的事情。笔者经过大量阅读,将驱动GS2972过程总结如下。后续,作者会陆续记录视频相关标准的学习。

GS2972的使用简单地说就是FPGA向GS2972写入行同步、场同步、数据使能,并根据SMPTE292标准写入数据流即可。对就这么简单,说起来容易,可是真正要操作起来,并非简单事情。

GS2972初始化为SMPTE模式,在SMPTE模式下芯片有两种视频数据组织形式,一种是芯片根据所给的视频数据自动检测并生成行场同步信号,还有一种是需要将写好的行场同步信号传给芯片。当DETECT_TRS位为高电平时,芯片从视频数据中检测生成行同步信号,场同步信号和数据使能信号。当DETECT_TRS位为低电平时需要通过H/H_SYNC、V/V_SYNC、F/DE管脚给芯片提供这三个信号。

我们本次使用20bit非复用模式。硬件引脚上下拉如下图所示(下表第一行)
在这里插入图片描述
DETECT_TRS信号和TIM_861信号,笔者经过阅读数据手册,总结如下:
在这里插入图片描述
本次视频传输,我们使用CEA-861时序驱动VSYNC 、SYNC 、DE信号控制显示器显示,输出1920*1080@50Hz视频信号。

1.2 GS2972的驱动时序

在这里插入图片描述
读者需要对这个时序彻底理解,脑子里必须有下面这幅图,否则,是理解不了上述时序的。
在这里插入图片描述
1.结合上下时序图可知,line1-line41为场消隐,line1122-line1125为场消隐,共45行场消隐。
2.在消隐期间data_enable为低,在有效像素期间,data_enalbe为高。
3.此处的行场同步并非,我理解的在行同步时,行同步拉高,在场同步时场同步拉高。而是拉高固定的时钟周期。

1.3 GS2972的驱动RTL代码

在这里插入图片描述

1.4 GS2972输出彩条

在输出彩条时需要将RGB888信号转换为YUV信号,输出4:2:2视频格式。转换有xilinx的IP也可以自己书写代码。
xilinx IP:RGB to YCbCr color space
自己写转换代码如下:
在这里插入图片描述

1.5 GS2972驱动易出bug

  1. 笔者在第一次驱动GS2972时,一开始搞不懂CEA-861驱动时序,折腾了好几天,最后阅读大量文章后才理解了。
  2. 写错驱动时序后,由于SDI是YUV视频格式,笔者直接将相机进来的视频Y=3’hff,Cb=3’b000,Cr=3’b000,显示满屏绿色。抓取了CEA-861时序,确认与我书写时序一致,增加rgb2ycbcr转换模块。
  3. 笔者第一次写的rgb2ycbcr代码如下。
    assign img_y = de ? img_y1 : 8’d0;
    assign img_cb = de ? img_cb : 8’d0;
    assign img_cr = de ? img_cr : 8’d0;
    结果输出彩条闪一下就黑屏了。最后改为下面代码正常。
    assign img_y = img_y1 ;
    assign img_cb = img_cb ;
    assign img_cr = img_cr ;
    由此可以断定,无论是否数据有效,不能随意给YCbCr数据。正确的波形如下,即在DE为0期间,Y数据和CbCr数据依然有效,不能给0。
    在这里插入图片描述
    由此可以看到,在DE为低电平期间,YCbCr数据也不能随意给,笔者在DE为低电平期间给0,结果输出彩条时有时无。

二、数据内嵌同步模式

2.1 GS2972的硬件初始化

初始化硬件依然为20bit非复用模式,与外同步不同的是使用数据内嵌同步,将TIM_861设置为低电平。

2.2 GS2972的驱动时序

在这里插入图片描述

2.3 GS2972的驱动RTL代码

由接口代码可以看出,同步信号已经做到数据内部了。
在这里插入图片描述

2.4 GS2972输出彩条

在这里插入图片描述

2.5 GS2972驱动易出bug

笔者在第一次写代码的时候将消隐区的数据给0,导致输出彩条出现闪烁现象,即一会是黑屏一会是彩条,最后将消隐区的数据改为YCbCr数据后正确。


http://www.ppmy.cn/news/282249.html

相关文章

Simulink尝试双脉冲实验验证MOSFET二极管反向恢复的特性(附仿真模型)

目录 前言 双脉冲实验 Simulink仿真对比 总结 前言 最近在做交错串联的图腾柱单相PFC的项目,基于模型的开发,想要在仿真上实现过零点尖峰电流产生并通过软启动进行抑制,把整个过程都通过仿真实现出来,在这个过程中尝试了Simul…

oracle-缩小表空间

刚准备收拾东西准备下班,突然接一个帮忙的事情,11g rac环境数据磁盘组使用率100%了,业务无法使用了,重新开电脑速战速决。 直接登录环境中,计划立刻释放一点点空间出来让业务恢复使用,业务恢复了再考虑增加…

(五)CSharp-继承

一、继承概念 继承类型分为两种: 实现继承和接口继承。 多重继承: 一个类派生自多个类。 C# 不支持多重实现继承,但允许多重接口继承。 结构不支持继承: 结构不支持实现继承,但是可以支持接口继承。 结构总是派生…

【软件测试】软件测试的基本概念和开发模型

1. 前言 在进行软件测试的学习之前,我们要了解软件测试一些基本概念. 这些基本概念将帮助我们更加明确工作的目标以及软件测试到底要做什么. 2. 软件测试的基本概念 软件测试的基本概念有3个,分别是需求,测试用例和BUG. 2.1 需求 这里的需求还可以分为 用户需求和软件需求,用户…

electron探索

windows上使用electron-builder打包 网络问题参考:electron-builder打包过程中报错——网络下载篇_wincodesign-2.6.0.7z_程序边界的博客-CSDN博客 linux上使用electron-builder打包 1. 需要的包因为网络问题下不下来 遇到fpm1.9.3-2.3.1-linux-x86在github上下…

python 爬虫之数据清洗

Python爬虫是一项强大的工具,可用于获取大量数据并进行分析和处理。但是,爬取的数据在处理之前需要经过清洗,以消除无用或无效的信息,并确保数据可靠和可用。在本文中,我们将详细讨论Python爬虫数据清洗的过程和技巧&a…

【博客647】MetricsQL(VictoriaMetrics)和PromQL(Prometheus)的不同之处

MetricsQL(VictoriaMetrics)和PromQL(Prometheus)的不同之处 1、如果对PromSQL不熟悉可以先看以下链接 https://valyala.medium.com/promql-tutorial-for-beginners-9ab455142085 2、与PromQL相比,以下功能在MetricsQL中的实现方式不同,这也改善了用户…

python3语音控制电脑_利用智能音箱语音控制电脑开关机

完成下面这个有趣的实验,你所需要的东西有: 路由器(能够形成局域网,且电脑已用网线连接) 一个智能音箱(本教程使用的是亚马逊 Echo Dot 2) 主板支持wake on lan (大部分都支持) 一个树莓派 原理流程图如下: 接下里将按照这个流程图…