FPGA高端项目:UltraScale GTH + SDI 视频解码,SDI转DP输出,提供2套工程源码和技术支持

目录

  • 1、前言
    • 免责声明
  • 2、相关方案推荐
    • 我这里已有的 GT 高速接口解决方案
    • 我目前已有的SDI编解码方案
  • 3、详细设计方案
    • 设计框图
    • 3G-SDI摄像头
    • LMH0384均衡EQ
    • UltraScale GTH 的SDI模式应用
      • UltraScale GTH 基本结构
      • 参考时钟的选择和分配
      • UltraScale GTH 发送和接收处理流程
      • UltraScale GTH 发送接口
      • UltraScale GTH 接收接口
      • UltraScale GTH IP核调用和使用
      • UltraScale GTH 控制说明
    • SMPTE UHD-SDI详解
      • SMPTE UHD-SDI 接收
      • SMPTE UHD-SDI 发送
      • SMPTE UHD-SDI IP核调用和使用
    • VGA时序恢复
    • 图像缓存
    • VTC模块(VGA时序)
    • YUV422转RGB888模块
    • DP输出
  • 4、vivado工程1:1路SDI视频解码--DP输出
    • PL端逻辑设计
    • PS端Vitis SDK 软件设计
  • 5、vivado工程2:4路SDI视频解码--DP输出
    • PL端逻辑设计
    • PS端Vitis SDK 软件设计
  • 6、工程移植说明
    • vivado版本不一致处理
    • FPGA型号不一致处理
    • 其他注意事项
  • 7、上板调试验证
    • 准备工作
    • 输出演示
  • 8、福利:工程代码的获取

FPGA高端项目:UltraScale GTH + SDI 视频解码,SDI转DP输出,提供2套工程源码和技术支持

1、前言

Xilinx系列FPGA实现SDI视频编解码目前有两种方案:
一是使用专用编解码芯片,比如典型的接收器GS2971,发送器GS2972,优点是简单,比如GS2971接收器直接将SDI解码为并行的YCRCB,GS2972发送器直接将并行的YCRCB编码为SDI视频,缺点是成本较高,可以百度一下GS2971和GS2972的价格;另一种方案是使用FPGA实现编解码,利用FPGA的GTP/GTX/GTH/UltraScale GTH等资源实现解串,优点是合理利用了FPGA资源,缺点是操作难度大一些,对FPGA水平要求较高;UltraScale GTH 适用于Xilinx UltraScale系列的FPGA上,包括Virtex UltraScale、Kintex UltraScale、Zynq® UltraScale等器件,在UltraScale系列之下只有GTH,而UltraScale GTH相比于GTH,线速率更高,支持协议类型更多,功耗更低,带宽更高;同样的,Xilinx也提供了SDI视频编解码的专用IP,比如SMPTE UHD-SDI,该IP支持3G-SDI、6G-SDI、12G-SDI等视频编解码;

本文使用Xilinx的Zynq UltraScale+MPSoCs–xczu7ev-ffvc1156-2-i 型号的FPGA实现UltraScale GTH + SDI 视频编解码;摄像头为标准的3G-SDI摄像头,开发板板载LMH0384芯片,SDI视频经过LMH0384起到均衡EQ的作用,也可以理解为单端转差分;然后调用Xilinx官方的UltraScale GTH IP核实现SDI视频的解串与串化,IP配置为GTH-3G-SDI模式,该模式专门用于SDI视频协议的解串与串化;然后调用Xilinx官方的SMPTE UHD-SDI IP核实现SDI视频解码与编码,该IP支持3G-SDI、6G-SDI、12G-SDI等视频编解码,本设计配置为3G-SDI模式;SDI视频接收流程至此已经由原始的同轴线传输的单端视频变为了并行的视频数据了,此时可以作为图像处理的输入源了,可以缓存、颜色转换、缩放等等操作;本设计采用DP+SDI同步输出方式;首先需要将图像缓存进DDR4中,所以需要用到VGA时序恢复模块,将SDI视频有效数据恢复为带有行同步信号(hs)、场同步信号(vs)、数据有效信号(de)、像素数据(data)的标准VGA时序;然后使用我常用的FDMA图像缓存架构将SDI视频写入DDR4再读出,图像在DDR4中做三帧缓存,如果你觉得延时太高,可以选择缓存2帧即可;使用VTC模块,即VGA时序生成模块,分辨率为1080P@60Hz,VTC模块控制DFMA模块从DDR4中把视频读出来;SDI视频从DDR4中读出来时为YUV422格式,需要使用YUV422转RGB888模块将SDI视频转换为24位的RGB888,此时的视频就是标准的VGA时序视频了;再调用Zynq软核,打开其DP接口的配置并引出DP输入时序信号,将VGA时序视频输入DP即可;DP的输出功能在Vitis SDK中以C语言软件方式实现,然后输出DP显示器即可;

注意!!
注意!!
注意!!
本工程和方案只适用于Xilinx UltraScale和UltraScale+系列FPGA器件,因为用到了UltraScale GTH IP核,其他系列FPFA不包含UltraScale GTH,诸如Xilinx 的A7、K7、V7、Zynq7000系列等均不可用,遑论其他公司的FPGA;缓存用的DDR4,用DDR3也是可以的;

提供2套vivado2022.2版本的FPGA工程源码,两套工程的区别在于SDI摄像头的路数,第一套工程只用到了1路SDI摄像头;第二套工程用到了4路SDI摄像头,解码4路SDI,但只选择第一路作为DP输出;详情如下:

vivado工程11路SDI输入,DDR4做三帧缓存后DP输出;
vivado工程24路SDI输入,DDR4做三帧缓存后DP输出;

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

免责声明

本工程及其源码即有自己写的一部分,也有网络公开渠道获取的一部分(包括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开发板搭建;以下是专栏地址:
点击直接前往

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

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

3、详细设计方案

本文使用Xilinx的Zynq UltraScale+MPSoCs–xczu7ev-ffvc1156-2-i 型号的FPGA实现UltraScale GTH + SDI 视频编解码;摄像头为标准的3G-SDI摄像头,开发板板载LMH0384芯片,SDI视频经过LMH0384起到均衡EQ的作用,也可以理解为单端转差分;然后调用Xilinx官方的UltraScale GTH IP核实现SDI视频的解串与串化,IP配置为GTH-3G-SDI模式,该模式专门用于SDI视频协议的解串与串化;然后调用Xilinx官方的SMPTE UHD-SDI IP核实现SDI视频解码与编码,该IP支持3G-SDI、6G-SDI、12G-SDI等视频编解码,本设计配置为3G-SDI模式;SDI视频接收流程至此已经由原始的同轴线传输的单端视频变为了并行的视频数据了,此时可以作为图像处理的输入源了,可以缓存、颜色转换、缩放等等操作;本设计采用DP+SDI同步输出方式;首先需要将图像缓存进DDR4中,所以需要用到VGA时序恢复模块,将SDI视频有效数据恢复为带有行同步信号(hs)、场同步信号(vs)、数据有效信号(de)、像素数据(data)的标准VGA时序;然后使用我常用的FDMA图像缓存架构将SDI视频写入DDR4再读出,图像在DDR4中做三帧缓存,如果你觉得延时太高,可以选择缓存2帧即可;使用VTC模块,即VGA时序生成模块,分辨率为1080P@60Hz,VTC模块控制DFMA模块从DDR4中把视频读出来;SDI视频从DDR4中读出来时为YUV422格式,需要使用YUV422转RGB888模块将SDI视频转换为24位的RGB888,此时的视频就是标准的VGA时序视频了;再调用Zynq软核,打开其DP接口的配置并引出DP输入时序信号,将VGA时序视频输入DP即可;DP的输出功能在Vitis SDK中以C语言软件方式实现,然后输出DP显示器即可;

提供2套vivado2022.2版本的FPGA工程源码,两套工程的区别在于SDI摄像头的路数,第一套工程只用到了1路SDI摄像头做回环;第二套工程用到了4路SDI摄像头做回环;详情如下:

vivado工程11路SDI输入,DDR4做三帧缓存后DP输出;
vivado工程24路SDI输入,DDR4做三帧缓存后DP输出;

设计框图

本设计参考了Xilinx官方设计文档,官方的参考设计框图如下:
在这里插入图片描述
具体到本工程详细设计方案框图如下:
在这里插入图片描述
框图解释:箭头表示数据流向,箭头内文字表示数据格式,箭头外数字表示数据流向的步骤;

3G-SDI摄像头

大体就是这种相机:
在这里插入图片描述
分辨率:1920x1080@60Hz;
视频格式:YUV422;
数据速率:2.97Gbps;
输出方式:BNC头同轴线输出;

LMH0384均衡EQ

开发板板载LMH0384芯片,SDI视频经过LMH0384起到均衡EQ的作用,也可以理解为单端转差分;原理图部分如下:
在这里插入图片描述

UltraScale GTH 的SDI模式应用

关于UltraScale GTH介绍最详细的肯定是Xilinx官方的《ug576-ultrascale-gth-transceivers》,我们以此来解读:
《ug576-ultrascale-gth-transceivers》的PDF文档我已放在了资料包里,文章末尾有获取方式;
我用到的开发板FPGA型号为Kirtex7-UltraScale-xcku060-ffva1156-2-i;UltraScale GTH的收发速度为 500 Mb/s 到 16.375 Gb/s 之间,比GTH高出3G;UltraScale GTH收发器支持不同的串行传输接口或协议,比如 PCIE 1.1/2.0 接口、万兆网 XUAI 接口、OC-48、串行 RapidIO 接口、 SATA(Serial ATA) 接口、数字分量串行接口(SDI)等等;
工程调用UltraScale GTH配置为GTH-3G-SDI模式,该模式专门用于SDI视频协议的解串与串化;代码位置如下:
在这里插入图片描述
UltraScale GTH基本配置如下:板载差分晶振148.5M,线速率配置为2.97G,协议类型配置为GTH-3G-SDI;
在这里插入图片描述
还有其他的配置选项,比如勾选DRP动态配置接口等,具体请参考工程;

UltraScale GTH 基本结构

Xilinx 以 Quad 来对串行高速收发器进行分组,四个串行高速收发器和一个 COMMOM(QPLL)组成一个 Quad,每一个串行高速收发器称为一个 Channel(通道),下图为UltraScale GTH 收发器在Kintex7 UltraScale FPGA 芯片中的示意图:《ug576-ultrascale-gth-transceivers》第19页;
在这里插入图片描述
在 Ultrascale/Ultrascale+架构系列的 FPGA 中,GTH 高速收发器通常使用 Quad 来划分,一个 Quad 由四个GTHE3/4_CHANNEL 原语和一个 GTHE3/4_COMMON 原语组成。每个GTHE3/4_COMMON 中包含两个 LC-tank pll(QPLL0 和 QPLL1)。只有在应用程序中使用 QPLL 时,才需要实例化 GTHE3/4_COMMON。每个 GTHE3/4_CHANNEL 由一个 channel PLL(CPLL)、一个 transmitter,和一个 receiver 组成。一个参考时钟可以直接连接到一个 GTHE3/4_CHANNEL 原语,而不需要实例化 GTHE3/4_COMMON;

Ultrascale GTH 收发器的发送端和接收端功能是相互独立,都是由 Physical Media Attachment(物理媒介适配层 PMA)和Physical Coding Sublayer(物理编码子层 PCS)组成。PMA 内部集成了串并转换(PISO)、预加重、接收均衡、时钟发生器和时钟恢复等;PCS 内部集成了GTH-3G-SDI、弹性缓冲区、通道绑定和时钟修正等,每个 GTHE3/4_CHANNEL源语的逻辑电路如下图所示:《ug576-ultrascale-gth-transceivers》第20页;
在这里插入图片描述
这里说多了意义不大,因为没有做过几个大的项目是不会理解这里面的东西的,对于初次使用或者想快速使用者而言,更多的精力应该关注IP核的调用和使用,后面我也会重点将到IP核的调用和使用;

参考时钟的选择和分配

UltraScale 器件中的 GTH 收发器提供了不同的参考时钟输入选项。参考时钟选择架构支持 QPLL0、QLPLL1 和CPLL。从架构上讲,每个 Quad 包含四个 GTHE3/4_CHANNEL 原语,一个 GTHE3/4_COMMON 原语,两个专用的外部参考时钟引脚对,以及专用的参考时钟路由。如果使用到了高性能 QPLL,则必须实例化 GTHE3/4_COMMON,如下面 GTHE3/4_COMMON 时钟多路复用器结构的详细视图所示,(《ug576-ultrascale-gth-transceivers》第33页)在一个 Quad 中有 6 个参考时钟引脚对,两个本地参考时钟引脚对:GTREFCLK0或GTREFCLK1,两个参考时钟引脚对来自上面的两个Quads:GTSOUTHREFCLK0或 GTSOUTHREFCLK1,两个参考时钟引脚对来自下面的两个 Quads: GTNORTHREFCLK0 或GTNORTHREFCLK1。
在这里插入图片描述
由下图可知,这个 GTHE3/4_COMMON 就是一个基准时钟选择器,用来选择不同来源的时钟作为收发器的基准时钟。GTHE3/4_COMMON 支持 7 种基准时钟源的选择。当然,一般来说,性能最好的基准时钟源就是最近的这个 Quad 自身的 refclk,也就是 GTREFCLK00 和 GTREFCLK10。在高清视频传输中,美国、加拿大等使用 NTSC 标准,基准时钟为 148.35MHZ、74.176MHZ。中国、德国等国家采用的 PAL 标准,基准时钟为 148.5MHZ 和 74.25MHZ。在高清视频领域,这两者的差别只在于基准时钟,而视频时序都是相同的。这也造成了在设备上我们经常看到两种帧率,如 60hz 和 59.94hz。所以本设计GTH的参考时钟为差分148.5M,原理图如下:
在这里插入图片描述

UltraScale GTH 发送和接收处理流程

首先用户逻辑数据经过GTH-3G-SDI后,进入一个发送缓存区(Phase Adjust FIFO),该缓冲区主要是 PMA 子层和 PCS 子层两个时钟域的时钟隔离,解决两者时钟速率匹配和相位差异的问题,最后经过高速 Serdes 进行并串转换(PISO),有必要的话,可以进行预加重(TX Pre-emphasis)、后加重。值得一提的是,如果在 PCB 设计时不慎将 TXP 和 TXN 差分引脚交叉连接,则可以通过极性控制(Polarity)来弥补这个设计错误。接收端和发送端过程相反,相似点较多,这里就不赘述了,需要注意的是 RX 接收端的弹性缓冲区,其具有时钟纠正和通道绑定功能。这里的每一个功能点都可以写一篇论文甚至是一本书,所以这里只需要知道个概念即可,在具体的项目中回具体用到,还是那句话:对于初次使用或者想快速使用者而言,更多的精力应该关注IP核的调用和使用。

UltraScale GTH 发送接口

《ug576-ultrascale-gth-transceivers》的第104到179页详细介绍了发送处理流程,其中大部分内容对于用户而言可以不去深究,因为手册讲的基本都是他自己的设计思想,留给用户可操作的接口并不多,基于此思路,我们重点讲讲UltraScale GTH例化时留给用户的发送部分需要用到的接口;
在这里插入图片描述
用户只需要关心发送接口的时钟和数据即可,UltraScale GTH例化模块的这部分接口如下:该文件名为例化GTH后官方生成的供例化的文件;
在这里插入图片描述

UltraScale GTH 接收接口

《ug576-ultrascale-gth-transceivers》的第181到314页详细介绍了发送处理流程,其中大部分内容对于用户而言可以不去深究,因为手册讲的基本都是他自己的设计思想,留给用户可操作的接口并不多,基于此思路,我们重点讲讲UltraScale GTH 例化时留给用户的发送部分需要用到的接口;
在这里插入图片描述
用户只需要关心接收接口的时钟和数据即可,UltraScale GTH例化模块的这部分接口如下:该文件名为例化GTH后官方生成的供例化的文件;
在这里插入图片描述

UltraScale GTH IP核调用和使用

在这里插入图片描述
UltraScale GTH基本配置如下:板载差分晶振148.5M,线速率配置为2.97G,协议类型配置为GTH-3G-SDI;
在这里插入图片描述
为了适应三种SD-SDI、HD-SDI 和 3G-SDI 不同模式,需要对GTH做变速和复位操作,所以需要打开DRP接口,如下:
在这里插入图片描述
更多GTH配置细节请参考vivado工程;

UltraScale GTH 控制说明

为了适应三种SD-SDI、HD-SDI 和 3G-SDI 不同模式,需要对GTH做变速和复位操作,主要通过DRP接口完成,为此,使用了Xilinx官方的参考代码,UltraScale GTH 控制部分代码如下:
在这里插入图片描述
UltraScale GTH 控制模块包含以下几种功能:1、用于控制 GTH 收发器的复位逻辑;2、允许 RX 和 TX 串行分频器进行动态切换,以支持 SD-SDI、HD-SDI 和 3G-SDI 不同模式;3、TX 参考时钟的动态切换,用以支持 HD-SDI和 3G-SDI 标准中的两种不同比特率: HD-SDI 模式下的 1.485 Gb/s 和 1.485/1.001 Gb/s 比特率、3G-SDI 模式下的2.97 Gb/s 和 2.97/1.001 Gb/s 比特率;4、数据恢复单元,用于以 SD-SDI 模式下恢复数据;5、RX 比特率检测,以确定接收器正在接收整数帧速率信号还是分数帧速率信号。
详细请参考代码;

SMPTE UHD-SDI详解

调用Xilinx官方的SMPTE UHD-SDI IP核实现SDI视频解码与编码,该IP支持3G-SDI、6G-SDI、12G-SDI等视频编解码,本设计配置为3G-SDI模式;根据官方手册,SMPTE UHD-SDI数据收发架构如下:
在这里插入图片描述

SMPTE UHD-SDI 接收

SMPTE UHD-SDI 接收端的框图如下:
在这里插入图片描述
来自串行收发器 RX 的数据通过 rx_data_in 端口进入 SMPTE UHD-SDI接收器,对于 SD、HD 和 3G 模式,每个时钟周期 20 位;对于 6G 和 12G 模式,每个时钟周期 40 位。在 SD 模式下,rx_data_in 上的 20 位数据转到 DRU (data recovery unit), DRU 从 11 倍过采样数据中恢复 10 位数据。数据由 SDI解扰器解扰,然后由 SDI 成帧器进行字对齐。之后就是同步位恢复功能。 此功能可还原由变送器修改的 3FF 和 000值,以减少 6G 和 12G-SDI 模式下的运行长度。这三个模块以全 rx_clk 速度运行,并根据 SDI 模式在每个时钟周期处理 40、20 或 10 位数据。 数据进入 stream demux,该 demux 确定有多少数据流交织在一起,然后在单独的数据路径上分离每个数据流,最多支持 16 个数据流。每路数据流进入一个处理单元,该单元进行 CRC 错误检查、行号捕获和 ST 352 包捕获。还可以从 stream demux 中
提取视频时序并产生 rx_eav,rx_sav 和 rx_trs 时序信号。这些时序信号由 SDI 模式检测并给传输检测模块使用。

SMPTE UHD-SDI 发送

SMPTE UHD-SDI 发射端的框图如下:
在这里插入图片描述
SMPTE UHD-SDI最多可以支持 16 路 SDI 数据流,数据流首先通过 ST 352 插入模块,可以有选择地插入 ST 352 有效负载 ID 数据包,从 ST 352 插入模块输出的数据流称为 tx_ds1_st352_out 至tx_ds16_st352_out。输出这些流可以方便用户在 ST 352 数据包后插入辅助数据。 发送器的其余部分可以直接使用ST 352 数据包插入模块输出的流,也可以使用 16 个 tx_ds1_anc_in 到 tx_ds16_anc_in 数据流。请注意,如果使用tx_dsn_anc_in 数据流,则它们必须是完整的 SDI 数据流,而不仅仅是辅助数据。通常情况下,每个 Y/C 数据流对的 Y 数据流中只插入 ST 352 包。而在 3G-SDI level A mode-only 模式下,数据流 1 和数据流 2 都必须插入 ST 352 报文。然后每对 Y / C 数据流经过一个数据流处理模块,该模块可以进行进行行号插入和 CRC 生成及插入。在流处理之后,数据流被 MUX 交织,形成 40、20 或 10 位宽的多路复用 SDI 数据流。然后,由 SDI 加扰器对多路复用的数据流进行加扰。最后,数据在 tx_txdata 端口上输出到对应的串行收发器。

SMPTE UHD-SDI IP核调用和使用

SMPTE UHD-SDI配置界面很简单,本设计配置为3G-SDI模式,如下:
在这里插入图片描述
SMPTE UHD-SDI的使用请参考工程代码,因为接口很多,这里写不下;

VGA时序恢复

本设计采用缓存回环方式,所以需要用到VGA时序恢复模块,将SDI视频有效数据恢复为带有行同步信号(hs)、场同步信号(vs)、数据有效信号(de)、像素数据(data)的标准VGA时序;代码位置如下:
在这里插入图片描述
VGA时序恢复模块顶层接口如下:
在这里插入图片描述
VGA时序恢复模块的输入来自于SMPTE UHD-SDI IP核的输出,该IP的输出提供了 rx_eav、rx_sav、rx_trs 这些表示同步字信息的信号,这些信号的时序关系如下图:
在这里插入图片描述
从上图可以看到,rx_trs 与四个同步字同步,rx_eav 在XYZ(嵌入式同步字第四个字)拉高一个时钟周期表示为有效像素结束。rx_sav 在上图中并没有表示出来,但是类似的,rx_sav 在XYZ(嵌入式同步字第四个字)拉高一个时钟周期表示为有效像素开始。在模块 embedded_synchronous 中就是根据这几个信号提取图像区域的。对于数据流,我们前面也已经提及过,SDI 信号使用20bits 表示一个像素点,分为 10bits 亮度数据Y,10bits 色度数据 C。在接收部分,对应的是 rx_ds1a、rx_ds2a,我们将两个 10bits 数据拼接为一个 20bits 数据。 由于我们已经有了时序同步信号,不需要再数据口中做序列检测提取同步字。我们只需要在 rx_trs 信号到来时, 同步获取对应的控制字即可,从而解出对应的 H、V 、F 标志位。通过这些标志信号提取 de_p 有效像素区域。 有了这些信号后,我们就可以按照我们熟悉的行场同步的方式来处理图像数据了。

图像缓存

经常看我博客的老粉应该都知道,我做图像缓存的套路是FDMA,他的作用是将图像送入DDR中做3帧缓存再读出显示,目的是匹配输入输出的时钟差和提高输出视频质量,关于FDMA,请参考我之前的博客,博客地址:点击直接前往

VTC模块(VGA时序)

使用VTC模块,即VGA时序生成模块,分辨率为1080P@60Hz,VTC模块控制DFMA模块从DDR4中把视频读出来;该模块很简单,不需要过多描述,代码位置如下:
在这里插入图片描述

YUV422转RGB888模块

SDI视频从DDR4中读出来时为YUV422格式,需要使用YUV422转RGB888模块将SDI视频转换为24位的RGB888,此时的视频就是标准的VGA时序视频了;代码位置如下:
在这里插入图片描述
由上图可知,YUV422转RGB888模块由YUV422转YUV444模块和YUV444转RGB888模块两个模块组成,两者流水线操作;

DP输出

调用Zynq,配置DP接口,如下:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
将VGA时序视频输入DP即可;DP的输出功能在Vitis SDK中以C语言软件方式实现,然后输出DP显示器即可;

4、vivado工程1:1路SDI视频解码–DP输出

PL端逻辑设计

开发板FPGA型号:Xilinx–Zynq UltraScale+MPSoCs–xczu7ev-ffvc1156-2-i;
开发环境:Vivado2022.2;
输入:1路3G-SDI摄像头,分辨率1920x1080@60Hz;
输出:DP;分辨率1920x1080@60Hz;
应用:FPGA高端项目:FPGA高端项目:UltraScale GTH + SDI 视频解码,SDI转DP输出;
Block Design如下:
在这里插入图片描述
工程代码架构如下:
在这里插入图片描述
综合编译完成后的FPGA资源消耗和功耗预估如下:
在这里插入图片描述

PS端Vitis SDK 软件设计

PS端Vitis SDK 软件采用C语言设计,调用Xilinx提供的DP驱动API实现DP输出,代码架构如下:
在这里插入图片描述
主函数很简单,源码如下:

int main(){Xil_DCacheDisable();Xil_ICacheDisable();init_intr_sys();xil_printf("DPDMA Generic Video Example Test \r\n");while(1);return XST_SUCCESS;
}

加载SDK的方法如下:
在这里插入图片描述

5、vivado工程2:4路SDI视频解码–DP输出

PL端逻辑设计

开发板FPGA型号:Xilinx–Zynq UltraScale+MPSoCs–xczu7ev-ffvc1156-2-i;
开发环境:Vivado2022.2;
输入:4路3G-SDI摄像头,分辨率1920x1080@60Hz;
输出:DP;分辨率1920x1080@60Hz;
应用:FPGA高端项目:FPGA高端项目:UltraScale GTH + SDI 视频解码,SDI转DP输出;
Block Design如下:
在这里插入图片描述
工程代码架构如下:
在这里插入图片描述
综合编译完成后的FPGA资源消耗和功耗预估如下:
在这里插入图片描述

PS端Vitis SDK 软件设计

PS端Vitis SDK 软件采用C语言设计,调用Xilinx提供的DP驱动API实现DP输出,代码架构如下:
在这里插入图片描述
主函数很简单,源码如下:

int main(){Xil_DCacheDisable();Xil_ICacheDisable();init_intr_sys();xil_printf("DPDMA Generic Video Example Test \r\n");while(1);return XST_SUCCESS;
}

加载SDK的方法如下:
在这里插入图片描述

6、工程移植说明

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软核;

7、上板调试验证

准备工作

FPGA开发板;
3G-SDI相机;
BNC转SMA同轴线;
SDI转HDMI盒子;
显示器,需要支持1080P;

输出演示

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

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

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

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

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

相关文章

『Redis』在Docker中快速部署Redis并进行数据持久化挂载

📣读完这篇文章里你能收获到 在Docke中快速部署Redis如何将Redis的数据进行持久化 文章目录 一、拉取镜像二、创建挂载目录1 宿主机与容器挂载映射2 挂载命令执行 三、创建容器—运行Redis四、查看运行情况 一、拉取镜像 版本号根据需要自己选择,这里以…

AI 种菜革命:农业科学家们的探索/《流浪地球》导演感受到AI的威胁,《浪球3》也遇灵感洗礼 | 魔法半周报

我有魔法✨为你劈开信息大海❗ 高效获取AIGC的热门事件🔥,更新AIGC的最新动态,生成相应的魔法简报,节省阅读时间👻 🔥 资讯预览 AI 种菜革命:农业科学家们的探索 《流浪地球》导演感受到AI的威…

外贸:这些你可能并不知道

昨天我打开平台,然后发现有一个产品被限流了,限流的原因是有客户投诉产品的价格和实际销售的价格不符,然后查看产品,发现是之前很久发布的一款产品,于是赶紧删除了。 以往,我们在平台上发布产品的时候为了…

STM32超声波——HC_SR04

文章目录 一.超声波图片二.时序图三.超声波流程四.单位换算五.取余计算六.换算距离七.超声波代码 一.超声波图片 测量距离:2cm——400cm 二.时序图 (1).以下时序图要先提供一个至少10us的脉冲触发信号,告诉单片机我准备好了,然后该超声波…

电脑连接了wifi但是没有网络

电脑连接了WiFi但是网络不可用 问题场景:问题描述解决方案: 问题场景: 搬砖搬的好好的,电脑的WiFi突然就断开了,这时候还没意识到问题的严重性,直接就去重新连WiFi,能连上,但是没有…

医院HIS系统慢和卡顿网络流量分析

分析背景 近期医院的医生使用HIS系统的时候,经常出现系统慢和卡顿现象。经过交流得知医生在点击一个页面,需要等很久才能加载出来,且对于开药这种的操作,医生需要点每个大类去找到对应的药,每点一次都需要等一会儿才能…

灰度图存储 - 华为OD统一考试(C卷)

OD统一考试(C卷) 分值: 100分 题解: Java / Python / C++ 题目描述 黑白图像常采用灰度图的方式存储,即图像的每个像素填充一个灰色阶段值,256节阶灰图是一个灰阶值取值范围为0-255的灰阶矩阵,0表示全黑,255表示全白,范围内的其他值表示不同的灰度。 但在计算机中实…

杰发科技AC7840——CAN通信简介(1)

简介 7840支持4路CAN-FD Demo调试 官网下载demo,烧录,打开串口发现打印如下。原因是没有连接CAN盒子,总线错误。 CAN收发器端波形 CAN_L有信号,CAN_H没有 波形放大 GPIO端波形 有持续波形输出 波形放大查看,有50U…

【尘缘送书第六期】2023年度学习:AIGC、AGI、GhatGPT、人工智能大模型实现必读书单

【文末送书】今天推荐几本AIGC、AGI、GhatGPT、人工智能大模型领域优质书籍。 目录 前言1 《ChatGPT 驱动软件开发》2 《ChatGPT原理与实战》3 《神经网络与深度学习》4 《AIGC重塑教育》5 《通用人工智能》6 文末送书 前言 2023年是人工智能大语言模型大爆发的一年&#xff0…

IJCAI 2024 International Joint Conference on Artificial Intelligence

目录 1、 重要1.1 官网:1.2 提交网址:1.3 模板 (latex & word) 2、 Call for Papers2.1 Important Dates2.2 Details 3、 注意事项4 New in 20245 Simplified procedure for resubmission information6、 Submission Process …

电脑出现错误0x80004005怎么解决,解决0x80004005的问题

当电脑出现0x80004005错误时,通常是由于系统或应用程序之间的通信问题或文件系统损坏引起的。该错误代码表示未指定错误,在Windows系统中较为常见。 一.解决0x80004005错误的步骤 重新启动电脑 有时候,错误只是一个暂时的问题,重…

【操作系统和计网从入门到深入】(二)进程

前言 这个专栏其实是博主在复习操作系统和计算机网络时候的笔记,所以如果是博主比较熟悉的知识点,博主可能就直接跳过了,但是所有重要的知识点,在这个专栏里面都会提到!而且我也一定会保证这个专栏知识点的完整性&…

高通平台开发系列讲解(USB篇)MBIM协议详解

文章目录 一、MBIM协议二、MBIM 消息类型三、基本控制消息构成3.1、MBIM OPEN MSG FORMAT3.2、MBIM CLOSE MSG FORMAT3.3、MBIM_COMMAND_MSG3.4、MBIM_COMMAND_DONE3.5、MBIM_INDICATE_STATUS_MSG四、MBIM Message(UUID+CID)4.1、UUID_BASIC_CONNECT

频率、概率

频率 在相同的条件下进行试验,假设试验进行了次,其中随机事件A发生了次,那么就称为随机事件A发生的频率。 概率 假设随机试验E的样本空间是S,对于其中每个随机事件,都对应了一个实数,把这个实数称为随机…

网络游戏APP备案|游戏

网络游戏APP备案|游戏 网络游戏备案分析需要备案原因(个人看法)对小公司对大公司 总结 网络游戏备案分析 相信做网络游戏的伙伴们在23年都收到了各个平台的公告,网络游戏需要进行APP的备案。也就是说网路游戏现在安卓平台也不是你想上架测试…

a1随笔小思--家书

师夷长技以自强 不应该只学西方的技术,更应该传承我们中华的五千年的先人智慧。 修心养性 藏器于身 子曰:“可与言而不与之言,失人;不可与言而与之言,失言。知者不失人,亦不失言。” 孔子说:“可以跟他交谈&#xf…

051:vue项目webpack打包后查看各个文件大小

第050个 查看专栏目录: VUE ------ element UI 专栏目标 在vue和element UI联合技术栈的操控下,本专栏提供行之有效的源代码示例和信息点介绍,做到灵活运用。 (1)提供vue2的一些基本操作:安装、引用,模板使…

git强制回滚,远程强制更新,git pull强制更新

注意:这里是强制回滚,回滚后,之后历史的就没有了,慎用。 本地强制回滚 强制回滚到上一个版本 git reset --hard HEAD^强制回滚上上个版本 git reset --hard HEAD^^git log查看版本 git log --prettyonelinegit log --prettyf…

高通平台开发系列讲解(USB篇)MBIM驱动详解

文章目录 一、数据结构二、源码分析三、adroid_mbim创建四、读写 /dev/adroid_mbim4.1、读gsi_ctrl_dev_read4.2、写gsi_ctrl_dev_write沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本文主要介绍高通平台USB网卡MBIM驱动。 一、数据结构 目录:drivers/usb/gadget/…

【cocotb】【达坦科技DatenLord】Cocotb Workshop分享

https://www.bilibili.com/video/BV19e4y1k7EE/?spm_id_from333.337.search-card.all.click&vd_sourcefd0f4be6d0a5aaa0a79d89604df3154a 方便RFM实现 cocotb_test 替代makefile , 类似python 函数执行