程序员不是做网站的安卓应用开发教程
程序员不是做网站的,安卓应用开发教程,男女做那些事免费网站,网站设计能出来什么目录 1、前言免责声明 2、相关方案推荐我这里已有的 GT 高速接口解决方案我目前已有的SDI编解码方案 3、详细设计方案设计框图UltraScale GTH 的SDI模式应用UltraScale GTH 基本结构参考时钟的选择和分配UltraScale GTH 发送和接收处理流程UltraScale GTH 发送接口UltraScale G… 目录 1、前言免责声明 2、相关方案推荐我这里已有的 GT 高速接口解决方案我目前已有的SDI编解码方案 3、详细设计方案设计框图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核调用和使用 12G-SDI 接收数据处理发送数据彩条视频输出 4、vivado工程详解FPGA 逻辑设计Vitis SDK 软件设计 5、工程移植说明vivado版本不一致处理FPGA型号不一致处理其他注意事项 6、上板调试验证准备工作输出静态演示 7、福利工程代码的获取 FPGA高端项目12G-SDI 视频编解码提供工程源码和技术支持 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的7系列Kintex7 UltraScale xcku040-ffva1156-2-e型号的FPGA实现12G-SDI 视频编解码本设计分为12G-SDI 视频编码和12G-SDI 视频解码两部分即12G-SDI 视频发送和接收两个部分功能做在一个工程里12G-SDI 视频接收过程为输入摄像头为标准的12G-SDI摄像头然后接入专用的SDI转接板接口为FMC转接板插在FPGA开发板的FMC接口上然后调用Xilinx官方UltraScale GTH IP进行SDI视频解串将高速串行的SDI视频解为并行数据IP配置为GTH-12G_SDI模式该模式专门用于12G-SDI视频协议的解串与串化然后调用Xilinx官方的SMPTE UHD-SDI IP核实现SDI视频解码该IP在Kintex7 UltraScale器件上只支持3G-SDI、6G-SDI和12G-SDI的编解码本设计配置为12G-SDI-8DS模式到这里12G-SDI 视频解码工作就完成了解码后的视频为并行的TTL电平的数据此时的解码数据送入ILA中观察也可以供用户做后续处理比如缓存、颜色转换、缩放、图像识别等本设计不做处理只将数据留出来给开发者更多利用空间12G-SDI 视频发送过程为纯verilog实现的静态彩条作为视频源然后调用Xilinx官方的SMPTE UHD-SDI IP核实现SDI视频编码该IP在Kintex7 UltraScale器件上只支持3G-SDI、6G-SDI和12G-SDI的编解码本设计配置为12G-SDI-8DS模式这个过程是接收过程的逆过程然后调用Xilinx官方UltraScale GTH IP进行SDI视频串化将并行的SDI视频数据串化为高速串行数据IP配置为GTH-12G_SDI模式该模式专门用于12G-SDI视频协议的解串与串化这个过程是接收过程的逆过程然后将视频信号送入SDI转接板发送出去我手里有一个SDI转HDMI的盒子将输出的SDI视频接到盒子里然后输出显示器即可输出显示了本方案提供1套vivado2022.2版本的FPGA工程源码
本博客详细描述了Xilinx的7系列Kintex7 UltraScale xcku040-ffva1156-2-e型号的FPGA实现12G-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的7系列Kintex7 UltraScale xcku040-ffva1156-2-e型号的FPGA实现12G-SDI 视频编解码本设计分为12G-SDI 视频编码和12G-SDI 视频解码两部分即12G-SDI 视频发送和接收两个部分功能做在一个工程里12G-SDI 视频接收过程为输入摄像头为标准的12G-SDI摄像头然后接入专用的SDI转接板接口为FMC转接板插在FPGA开发板的FMC接口上然后调用Xilinx官方UltraScale GTH IP进行SDI视频解串将高速串行的SDI视频解为并行数据IP配置为GTH-12G_SDI模式该模式专门用于12G-SDI视频协议的解串与串化然后调用Xilinx官方的SMPTE UHD-SDI IP核实现SDI视频解码该IP在Kintex7 UltraScale器件上只支持3G-SDI、6G-SDI和12G-SDI的编解码本设计配置为12G-SDI-8DS模式到这里12G-SDI 视频解码工作就完成了解码后的视频为并行的TTL电平的数据此时的解码数据送入ILA中观察也可以供用户做后续处理比如缓存、颜色转换、缩放、图像识别等本设计不做处理只将数据留出来给开发者更多利用空间12G-SDI 视频发送过程为纯verilog实现的静态彩条作为视频源然后调用Xilinx官方的SMPTE UHD-SDI IP核实现SDI视频编码该IP在Kintex7 UltraScale器件上只支持3G-SDI、6G-SDI和12G-SDI的编解码本设计配置为12G-SDI-8DS模式这个过程是接收过程的逆过程然后调用Xilinx官方UltraScale GTH IP进行SDI视频串化将并行的SDI视频数据串化为高速串行数据IP配置为GTH-12G_SDI模式该模式专门用于12G-SDI视频协议的解串与串化这个过程是接收过程的逆过程然后将视频信号送入SDI转接板发送出去我手里有一个SDI转HDMI的盒子将输出的SDI视频接到盒子里然后输出显示器即可输出显示了本方案提供1套vivado2022.2版本的FPGA工程源码
设计框图
本设计参考了Xilinx官方设计文档官方的参考设计框图如下 具体到本工程详细设计方案框图如下
UltraScale GTH 的SDI模式应用
关于UltraScale GTH介绍最详细的肯定是Xilinx官方的《ug576-ultrascale-gth-transceivers》我们以此来解读《ug576-ultrascale-gth-transceivers》的PDF文档我已放在了资料包里文章末尾有获取方式我用到的开发板FPGA型号为Kintex7 UltraScale xcku040-ffva1156-2-eUltraScale 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-12G_SDI模式该模式专门用于12G-SDI视频协议的解串与串化代码位置如下 UltraScale GTH基本配置如下板载差分晶振148.5M线速率配置为11.88G协议类型配置为GTH-12G_SDI编解码模式为RAW内部数据位宽为40bit如下 还有其他的配置选项比如勾选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-12G_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线速率配置为11.88G协议类型配置为GTH-12G_SDI*编解码模式为RAW内部数据位宽为40bit如下 为了适应多种SD模式需要对GTH做变速和复位操作所以需要打开DRP接口如下 更多GTH配置细节请参考vivado工程
UltraScale GTH 控制说明
这是GTH-3G-SDI模式的UltraScale GTH才有的模块文件为了适应三种SD-SDI、HD-SDI 和 3G-SDI 不同模式需要对GTH做变速和复位操作主要通过DRP接口完成为此使用了Xilinx官方的参考代码UltraScale GTH 控制部分代码如下 UltraScale GTH 控制模块包含以下几种功能1、用于控制 GTH 收发器的复位逻辑2、允许 RX 和 TX 串行分频器进行动态切换以支持多种SDI模式3、TX 参考时钟的动态切换用以支持多种SDI的比特率4、数据恢复单元用于以 SD-SDI 模式下恢复数据5、RX 比特率检测以确定接收器正在接收整数帧速率信号还是分数帧速率信号。 详细请参考代码
SMPTE UHD-SDI详解
调用Xilinx官方的SMPTE UHD-SDI IP核实现SDI视频解码与编码该IP支持3G-SDI、6G-SDI、12G-SDI等视频编解码本设计配置为12G-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的使用请参考工程代码因为接口很多这里写不下
12G-SDI 接收数据处理
到这里12G-SDI 视频解码工作就完成了解码后的视频为并行的TTL电平的数据此时的解码数据送入ILA中观察也可以供用户做后续处理比如缓存、颜色转换、缩放、图像识别等本设计不做处理只将数据留出来给开发者更多利用空间开发者可以通过ILA观察SDI接收数据的正确性在此基础上可以做后续处理
发送数据彩条
发送数据彩条由纯verilog实现为静态彩条作为12G-SDI视频发送的数据源代码位置截图如下
视频输出
经过前面一顿操作SDI输入视频解码后再编码到这里又变成了高速差分视频利用一个SDI转HDMI盒子将输出的SDI视频转换为HDMI视频这样就可以输出显示器显示了SDI转HDMI盒子某宝有卖大概一两百的样子
4、vivado工程详解
FPGA 逻辑设计
开发板FPGA型号Xilinx–Kintex7 UltraScale xcku040-ffva1156-2-e 开发环境Vivado2022.2 输入12G-SDI摄像头 输出12G-SDI彩条 FPGA高端项目12G-SDI 视频编解码 Block Design设计如下 工程代码架构如下
综合编译完成后的FPGA资源消耗和功耗预估如下
Vitis SDK 软件设计
Vitis SDK 软件设计的作用是配置FMC转接板如果你的12G-SDI硬件方案没有转接板或者不需要配置相关芯片则不需要SDK软件的参与Vitis SDK 软件设计代码架构如下
5、工程移植说明
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软核
6、上板调试验证
准备工作
FPGA开发板 12G-SDI相机 BNC转SMA同轴线 SDI转HDMI盒子 HDMI显示器
输出静态演示
接收端12G-SDI 视频输入解码后 ILA 波形如下 发送端12G-SDI 静态彩条视频输出如下
7、福利工程代码的获取
福利工程代码的获取 代码太大无法邮箱发送以某度网盘链接方式发送 资料获取方式私或者文章末尾的V名片。 网盘资料如下
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/86996.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!