中国建设银行贷款网站,网站设置首页连接分类页的视频教程,百度云虚拟主机上传wordpress,如何自己开发一个平台目录 1、前言免责声明 2、相关方案推荐我这里已有的 GT 高速接口解决方案我目前已有的SDI编解码方案 3、详细设计方案设计框图3G-SDI摄像头LMH0384均衡EQUltraScale GTH 的SDI模式应用UltraScale GTH 基本结构参考时钟的选择和分配UltraScale GTH 发送和接收处理流程UltraScale… 目录 1、前言免责声明 2、相关方案推荐我这里已有的 GT 高速接口解决方案我目前已有的SDI编解码方案 3、详细设计方案设计框图3G-SDI摄像头LMH0384均衡EQUltraScale 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核调用和使用 FIFO缓冲LMH0302SQ增强驱动视频输出 4、vivado工程11路SDI视频编解码5、vivado工程24路SDI视频编解码6、工程移植说明vivado版本不一致处理FPGA型号不一致处理其他注意事项 7、上板调试验证准备工作输出演示 8、福利工程代码的获取 FPGA高端项目UltraScale GTH SDI 视频编解码SDI无缓存回环输出提供2套工程源码和技术支持 1、前言
Xilinx系列FPGA实现SDI视频编解码目前有两种方案 一是使用专用编解码芯片比如典型的接收器GS2971发送器GS2972优点是简单比如GS2971接收器直接将SDI解码为并行的YCRCBGS2972发送器直接将并行的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 UltraScaleMPSoCs–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视频接收流程至此已经由原始的同轴线传输的单端视频变为了并行的视频数据了此时可以作为图像处理的输入源了可以缓存、颜色转换、缩放等等操作但本设计仅作回环操作所以调用一个Xilinx官方的FIFO作为视频缓冲然后再将视频送入SMPTE UHD-SDI做SDI视频编码再送入UltraScale GTH做SDI视频串化这个过程是接收过程的逆过程此时SDI视频又变为高速差分数据了开发板板载LMH0302SQ芯片高速差分的SDI视频经过LMH0302SQ起到增强驱动的作用也可以理解为差分转单端我手里有一个SDI转HDMI的盒子将输出的SDI视频接到盒子里然后输出显示器即可输出显示了 注意 注意 注意 本工程和方案只适用于Xilinx UltraScale和UltraScale系列FPGA器件因为用到了UltraScale GTH IP核其他系列FPFA不包含UltraScale GTH诸如Xilinx 的A7、K7、V7、Zynq7000系列等均不可用遑论其他公司的FPGA
提供2套vivado2022.2版本的FPGA工程源码两套工程的区别在于SDI摄像头的路数第一套工程只用到了1路SDI摄像头做回环第二套工程用到了4路SDI摄像头做回环详情如下
vivado工程11路SDI输入回环后1路SDI输出
vivado工程24路SDI输入回环后4路SDI输出本博客详细描述了Xilinx的Zynq UltraScaleMPSoCs–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 UltraScaleMPSoCs–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视频接收流程至此已经由原始的同轴线传输的单端视频变为了并行的视频数据了此时可以作为图像处理的输入源了可以缓存、颜色转换、缩放等等操作但本设计仅作回环操作所以调用一个Xilinx官方的FIFO作为视频缓冲然后再将视频送入SMPTE UHD-SDI做SDI视频编码再送入UltraScale GTH做SDI视频串化这个过程是接收过程的逆过程此时SDI视频又变为高速差分数据了开发板板载LMH0302SQ芯片高速差分的SDI视频经过LMH0302SQ起到增强驱动的作用也可以理解为差分转单端我手里有一个SDI转HDMI的盒子将输出的SDI视频接到盒子里然后输出显示器即可输出显示了
提供2套vivado2022.2版本的FPGA工程源码两套工程的区别在于SDI摄像头的路数第一套工程只用到了1路SDI摄像头做回环第二套工程用到了4路SDI摄像头做回环详情如下
vivado工程11路SDI输入回环后1路SDI输出
vivado工程24路SDI输入回环后4路SDI输出设计框图
本设计参考了Xilinx官方设计文档官方的参考设计框图如下 具体到本工程详细设计方案框图如下
3G-SDI摄像头
大体就是这种相机 分辨率1920x108060Hz 视频格式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-iUltraScale GTH的收发速度为 500 Mb/s 到 16.375 Gb/s 之间比GTH高出3GUltraScale 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 来对串行高速收发器进行分组四个串行高速收发器和一个 COMMOMQPLL组成一个 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 PLLCPLL、一个 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两个参考时钟引脚对来自上面的两个QuadsGTSOUTHREFCLK0或 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_eavrx_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的使用请参考工程代码因为接口很多这里写不下
FIFO缓冲
调用一个Xilinx官方的FIFO作为视频缓冲这个很简单不赘述FIFO具体配置请参考vivado工程
LMH0302SQ增强驱动
开发板板载LMH0302SQ芯片高速差分的SDI视频经过LMH0302SQ起到增强驱动的作用也可以理解为差分转单端LMH0302SQ原理图如下
视频输出
经过前面一顿操作SDI输入视频解码后再编码到这里又变成了高速差分视频利用一个SDI转HDMI盒子将输出的SDI视频转换为HDMI视频这样就可以输出显示器显示了SDI转HDMI盒子某宝有卖大概一两百的样子长这样子
4、vivado工程11路SDI视频编解码
开发板FPGA型号Xilinx–Zynq UltraScaleMPSoCs–xczu7ev-ffvc1156-2-i 开发环境Vivado2022.2 输入1路3G-SDI摄像头分辨率1920x108060Hz 输出SDI分辨率1920x108060Hz 应用FPGA高端项目UltraScale GTH SDI 视频编解码 工程代码架构如下 综合编译完成后的FPGA资源消耗和功耗预估如下
5、vivado工程24路SDI视频编解码
开发板FPGA型号Xilinx–Zynq UltraScaleMPSoCs–xczu7ev-ffvc1156-2-i 开发环境Vivado2022.2 输入4路3G-SDI摄像头分辨率1920x108060Hz 输出4路SDI分辨率1920x108060Hz 应用FPGA高端项目UltraScale GTH SDI 视频编解码 工程代码架构如下 综合编译完成后的FPGA资源消耗和功耗预估如下
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名片。 网盘资料如下