陕西中洋建设工程有限公司网站,国内较好的网站开发商城,wordpress文件架构,wordpress 列表页面目录 1、前言工程概述免责声明 2、相关方案推荐本博已有的 SDI 编解码方案本博已有的FPGA图像缩放方案本博已有的已有的FPGA视频拼接叠加融合方案本方案的无缩放应用本方案在Xilinx--Kintex系列FPGA上的应用本方案在Xilinx--Zynq系列FPGA上的应用 3、详细设计方案设计原理框图S… 目录 1、前言工程概述免责声明 2、相关方案推荐本博已有的 SDI 编解码方案本博已有的FPGA图像缩放方案本博已有的已有的FPGA视频拼接叠加融合方案本方案的无缩放应用本方案在Xilinx--Kintex系列FPGA上的应用本方案在Xilinx--Zynq系列FPGA上的应用 3、详细设计方案设计原理框图SDI 输入设备Gv8601a 均衡器GTP 高速接口--解串与串化SMPTE SD/HD/3G SDI IP核BT1120转RGB纯Verilog图像缩放模块详解纯Verilog图像缩放模块使用FDMA多路视频拼接算法FDMA图像缓存视频读取控制HDMI输出RGB转BT1120Gv8500 驱动器SDI转HDMI盒子工程源码架构 4、工程源码1详解--2路视频缩放拼接HDMI输出版本5、工程源码2详解--4路视频缩放拼接HDMI输出版本6、工程源码3详解--2路视频缩放拼接3G-SDI输出版本7、工程源码4详解--4路视频缩放拼接3G-SDI输出版本8、工程移植说明vivado版本不一致处理FPGA型号不一致处理其他注意事项 9、上板调试验证准备工作2路SDI视频缩放拼接--输出视频演示4路SDI视频缩放拼接--输出视频演示 10、福利工程代码的获取 Artix7系列FPGA实现SDI视频编解码图像缩放多路视频拼接基于GTP高速接口提供4套工程源码和技术支持 1、前言
目前FPGA实现SDI视频编解码有两种方案一是使用专用编解码芯片比如典型的接收器GS2971发送器GS2972优点是简单比如GS2971接收器直接将SDI解码为并行的YCrCb422GS2972发送器直接将并行的YCrCb422编码为SDI视频缺点是成本较高可以百度一下GS2971和GS2972的价格另一种方案是使用FPGA逻辑资源部实现SDI编解码利用Xilinx系列FPGA的GTP/GTX资源实现解串利用Xilinx系列FPGA的SMPTE SDI资源实现SDI编解码优点是合理利用了FPGA资源GTP/GTX资源不用白不用缺点是操作难度大一些对FPGA开发者的技术水平要求较高。有意思的是这两种方案在本博这里都有对应的解决方案包括硬件的FPGA开发板、工程源码等等。
工程概述
本设计基于Xilinx的Artix7系列FPGA开发板实现SDI视频编解码输入源为一个3G-SDI相机或者HDMI转3G-SDI盒子也可以使用HD-SDI或者SD-SDI相机因为本设计是三种SDI视频自适应的同轴的SDI视频通过同轴线连接到FPGA开发板的BNC座子然后同轴视频经过板载的Gv8601a芯片实现单端转差分和均衡EQ的功能然后差分SDI视频信号进入FPGA内部的GTP高速资源实现数据高速串行到并行的转换本博称之为解串解串后的并行视频再送入Xilinx系列FPGA特有的SMPTE SD/HD/3G SDI IP核进行SDI视频解码操作并输出BT1120视频至此SDI视频解码操作已经完成可以进行常规的图像处理操作了
本设计的目的是做图像缩放后输出解码的SDI视频针对目前市面上的主流项目需求本博设计了两种输出方式一种是HDMI输出另一种是3G-SDI输出这两种方式都需要对解码BT1120视频进行转RGB和图像缓存操作和图像缩放操作图像缩放方案采用纯verilog方案本设计使用BT1120转RGB模块实现视频格式转换图像缩放采用纯verilog代码实现的图像缩放架构实现SDI的图像缩放操作将原始的1920x1080分辨率的SDI视频缩小为960x540当然读者也可以缩放为其他分辨率纯verilog多路视频拼接图像缓存使用FDMA架构该架构简单灵活输入接口为VGA视频时序即用VS、DE、RGB数据将不同的视频写入不同的内存地址再统一读出来以达到拼接效果FDMA架构的视频既可以缓存介质为DDR3图像从DDR3读出后进入HDMI发送模块输出HDMI显示器这是HDMI输出方式或者经过RGB转BT1120模块实现视频格式转换然后视频进入SMPTE SD/HD/3G SDI IP核进行SDI视频编码操作并输出SDI视频再经过FPGA内部的GTP高速资源实现并行数据到高速串行的转换本博称之为串化差分高速信号再进入板载的Gv8500芯片实现差分转单端和驱动增强的功能SDI视频通过FPGA开发板的BNC座子输出通过同轴线连接到SDI转HDMI盒子连接到HDMI显示器这是SDI输出方式本博客提供4套工程源码具体如下 现对上述4套工程源码做如下解释方便读者理解
工程源码1
开发板FPGA型号为Xilinx–Xilinx-Artix7-100T–xc7a100tfgg484-2输入源有两个一个是3G-SDI相机分辨率为1920x108060Hz另一个HDMI转3G-SDI盒子盒子外接笔记本电脑以模拟SDI相机分辨率为1920x108060Hz两路输入视频经过板载的2个Gv8601a芯片实现单端转差分和均衡EQ后送入FPGA再经过2路GTP将SDI视频解串为并行数据再经过2路SMPTE SDI IP核将SDI解码为2路BT1120数据再经过2路BT1120转RGB模块将BT1120转换为RGB888视频再经过2路自研的纯verilog实现的、支持任意比例缩放的图像缩放模块将输入视频由1920x1080缩放为960x540再经过自研的2路FPGA图像缓存方案将视频写入DDR3其中一路FDMA配置为读写另一路FDMA配置为单写将不同的视频写入不同的内存地址再统一读出来以达到拼接效果然后将拼接视频送入RGB转HDMI模块将RGB888视频转换为HDMI视频输出分辨率为1920x108060Hz背景下叠加显示2路960x540的有效图像即2分屏详细显示效果请看文章末尾的输出演示视频最后通过HDMI显示器显示图像该工程需要缓存适用于Xilinx的Artix7低端系列FPGA实现SDI转HDMI场景
工程源码2
开发板FPGA型号为Xilinx–Xilinx-Artix7-100T–xc7a100tfgg484-2输入源有两个一个是3G-SDI相机分辨率为1920x108060Hz另一个HDMI转3G-SDI盒子盒子外接笔记本电脑以模拟SDI相机分辨率为1920x108060Hz两路输入视频经过板载的2个Gv8601a芯片实现单端转差分和均衡EQ后送入FPGA再经过2路GTP将SDI视频解串为并行数据再经过2路SMPTE SDI IP核将SDI解码为2路BT1120数据再经过2路BT1120转RGB模块将BT1120转换为RGB888视频然后将2路视频分别复制1份得到4路视频以模拟4路输入如果你的开发板有4路输入则无需此操作再经过4路自研的纯verilog实现的、支持任意比例缩放的图像缩放模块将输入视频由1920x1080缩放为960x540再经过自研的4路FPGA图像缓存方案将视频写入DDR3其中三路FDMA配置为读写另一路FDMA配置为单写将不同的视频写入不同的内存地址再统一读出来以达到拼接效果然后将拼接视频送入RGB转HDMI模块将RGB888视频转换为HDMI视频输出分辨率为1920x108060Hz背景下叠加显示4路960x540的有效图像即4分屏详细显示效果请看文章末尾的输出演示视频最后通过HDMI显示器显示图像该工程需要缓存适用于Xilinx的Artix7低端系列FPGA实现SDI转HDMI场景
工程源码3
开发板FPGA型号为Xilinx–Xilinx-Artix7-100T–xc7a100tfgg484-2输入源有两个一个是3G-SDI相机分辨率为1920x108060Hz另一个HDMI转3G-SDI盒子盒子外接笔记本电脑以模拟SDI相机分辨率为1920x108060Hz两路输入视频经过板载的2个Gv8601a芯片实现单端转差分和均衡EQ后送入FPGA再经过2路GTP将SDI视频解串为并行数据再经过2路SMPTE SDI IP核将SDI解码为2路BT1120数据再经过2路BT1120转RGB模块将BT1120转换为RGB888视频再经过2路自研的纯verilog实现的、支持任意比例缩放的图像缩放模块将输入视频由1920x1080缩放为960x540再经过自研的2路FPGA图像缓存方案将视频写入DDR3其中一路FDMA配置为读写另一路FDMA配置为单写将不同的视频写入不同的内存地址再统一读出来以达到拼接效果然后将视频送RGB转BT1120模块将RGB888视频转换为BT1120视频再经过SMPTE SD/HD/3G SDI IP核将BT1120视频编码为SDI视频再经过FPGA内部的GTP高速资源将SDI并行数据转换为高速串行信号再经过板载的Gv8500芯片实现差分转单端和驱动增强后输出输出分辨率为1920x108060Hz背景下叠加显示2路960x540的有效图像即2分屏最后使用SDI转HDMI盒子连接到HDMI显示器显示详细显示效果请看文章末尾的输出演示视频该工程需要缓存适用于Xilinx的Artix7低端系列FPGA实现SDI转SDI场景
工程源码4
开发板FPGA型号为Xilinx–Xilinx-Artix7-100T–xc7a100tfgg484-2输入源有两个一个是3G-SDI相机分辨率为1920x108060Hz另一个HDMI转3G-SDI盒子盒子外接笔记本电脑以模拟SDI相机分辨率为1920x108060Hz两路输入视频经过板载的2个Gv8601a芯片实现单端转差分和均衡EQ后送入FPGA再经过2路GTP将SDI视频解串为并行数据再经过2路SMPTE SDI IP核将SDI解码为2路BT1120数据再经过2路BT1120转RGB模块将BT1120转换为RGB888视频然后将2路视频分别复制1份得到4路视频以模拟4路输入如果你的开发板有4路输入则无需此操作再经过4路自研的纯verilog实现的、支持任意比例缩放的图像缩放模块将输入视频由1920x1080缩放为960x540再经过自研的4路FPGA图像缓存方案将视频写入DDR3其中三路FDMA配置为读写另一路FDMA配置为单写将不同的视频写入不同的内存地址再统一读出来以达到拼接效果然后将视频送RGB转BT1120模块将RGB888视频转换为BT1120视频再经过SMPTE SD/HD/3G SDI IP核将BT1120视频编码为SDI视频再经过FPGA内部的GTP高速资源将SDI并行数据转换为高速串行信号再经过板载的Gv8500芯片实现差分转单端和驱动增强后输出输出分辨率为1920x108060Hz背景下叠加显示4路960x540的有效图像即4分屏最后使用SDI转HDMI盒子连接到HDMI显示器显示详细显示效果请看文章末尾的输出演示视频该工程需要缓存适用于Xilinx的Artix7低端系列FPGA实现SDI转SDI场景
免责声明
本工程及其源码即有自己写的一部分也有网络公开渠道获取的一部分(包括CSDN、Xilinx官网、Altera官网等等)若大佬们觉得有所冒犯请私信批评教育基于此本工程及其源码仅限于读者或粉丝个人学习和研究禁止用于商业用途若由于读者或粉丝自身原因用于商业用途所导致的法律问题与本博客及博主无关请谨慎使用。。。
2、相关方案推荐
本博已有的 SDI 编解码方案
我的博客主页开设有SDI视频专栏里面全是FPGA编解码SDI的工程源码及博客介绍既有基于GS2971/GS2972的SDI编解码也有基于GTP/GTX资源的SDI编解码既有HD-SDI、3G-SDI也有6G-SDI、12G-SDI等专栏地址链接如下 点击直接前往
本博已有的FPGA图像缩放方案
我的主页目前有FPGA图像缩放专栏改专栏收录了我目前手里已有的FPGA图像缩放方案从实现方式分类有基于HSL实现的图像缩放、基于纯verilog代码实现的图像缩放从应用上分为单路视频图像缩放、多路视频图像缩放、多路视频图像缩放拼接从输入视频分类可分为OV5640摄像头视频缩放、SDI视频缩放、MIPI视频缩放等等以下是专栏地址 点击直接前往
本博已有的已有的FPGA视频拼接叠加融合方案
我的主页目前有FPGA视频拼接叠加融合专栏改专栏收录了我目前手里已有的FPGA视频拼接叠加融合方案从实现方式分类有基于HSL实现的视频拼接、基于纯verilog代码实现的视频拼接从应用上分为单路、2路、3路、4路、8路、16路视频拼接视频缩放拼接视频融合叠加从输入视频分类可分为OV5640摄像头视频拼接、SDI视频拼接、CameraLink视频拼接等等以下是专栏地址 点击直接前往
本方案的无缩放应用
本方案有无缩放版本的应用只做SDI视频编解码之前专门写过一篇博客博客地址链接如下 点击直接前往
本方案在Xilinx–Kintex系列FPGA上的应用
本方案在Xilinx–Kintex系列FPGA上的也有应用之前专门写过一篇博客博客地址链接如下 点击直接前往
本方案在Xilinx–Zynq系列FPGA上的应用
本方案在Xilinx–Zynq系列FPGA上的也有应用之前专门写过一篇博客博客地址链接如下 点击直接前往
3、详细设计方案
设计原理框图
设计原理框图如下 注意 注意 紫色箭头3G-SDI输出路径 红色箭头HDMI输出路径
SDI 输入设备
SDI 输入设备有两个分别接入FPGA开发板的2路SDI视频输入接口一个是3G-SDI相机分辨率为1920x108060Hz也可以使用HD-SDI或者SD-SDI相机因为本设计是三种SDI视频自适应的另一个HDMI转3G-SDI盒子盒子外接笔记本电脑以模拟SDI相机SDI相机相对比较贵预算有限的朋友可以考虑用HDMI转SDI盒子模拟SDI相机这种盒子某宝一百块左右当使用HDMI转SDI盒子时输入源可以用笔记本电脑即用笔记本电脑通过HDMI线连接到HDMI转SDI盒子的HDMI输入接口再用SDI线连接HDMI转SDI盒子的SDI输出接口到FPGA开发板如下
Gv8601a 均衡器
Gv8601a芯片实现单端转差分和均衡EQ的功能这里选用Gv8601a是因为借鉴了了Xilinx官方的方案当然也可以用其他型号器件。Gv8601a均衡器原理图如下
GTP 高速接口–解串与串化
本设计使用Xilinx特有的GTP高速信号处理资源实现SDI差分视频信号的解串与串化对于SDI视频接收而言GTP起到解串的作用即将输入的高速串行的差分信号解为并行的数字信号对于SDI视频发送而言GTP起到串化的作用即将输入的并行的数字信号串化为高速串行的差分信号GTP的使用一般需要例化GTP IP核通过vivado的UI界面进行配置但本设计需要对SD-SDI、HD-SDI、3G-SDI视频进行自动识别和自适应处理所以需要使得GTP具有动态改变线速率的功能该功能可通过DRP接口配置也可通过GTP的rate接口配置所以不能使用vivado的UI界面进行配置而是直接例化GTP的GTPE2_CHANNEL和GTPE2_COMMON源语直接使用GTP资源此外为了动态配置GTP线速率还需要GTP控制模块该模块参考了Xilinx的官方设计方案具有动态监测SDI模式动态配置DRP等功能该方案参考了Xilinx官方的设计GTP 解串与串化模块代码架构如下
SMPTE SD/HD/3G SDI IP核
SMPTE SD/HD/3G SDI IP核是Xilinx系列FPGA特有的用于SDI视频编解码的IP该IP配置使用非常简单vivado的UI界面如下 SMPTE SD/HD/3G SDI IP核必须与GTP配合才能使用对于SDI视频接收而言该IP接收来自于GTP的数据然后将SDI视频解码为BT1120视频输出对于SDI视频发送而言该IP接收来自于用户侧的的BT1120视频数据然后将BT1120视频编码为SDI视频输出该方案参考了Xilinx官方的设计SMPTE SD/HD/3G SDI IP核代码架构如下
BT1120转RGB
BT1120转RGB模块的作用是将SMPTE SD/HD/3G SDI IP核解码输出的BT1120视频转换为RGB888视频它由BT1120转CEA861模块、YUV422转YUV444模块、YUV444转RGB888三个模块组成该方案参考了Xilinx官方的设计BT1120转RGB模块代码架构如下
纯Verilog图像缩放模块详解
工程源码1、2的图像缩放模块使用纯Verilog方案功能框图如下由跨时钟FIFO、插值RAM阵列构成跨时钟FIFO的目的是解决跨时钟域的问题比如从低分辨率视频放大到高分辨率视频时像素时钟必然需要变大这是就需要异步FIFO了插值算法和RAM阵列具体负责图像缩放算法层面的实现 插值算法和RAM阵列以ram和fifo为核心进行数据缓存和插值实现设计架构如下 图像缩放模块代码架构如下模块的例化请参考工程源码的顶层代码 图像缩放模块FIFO的选择可以调用工程对应的vivado工具自带的FIFO IP核也可以使用纯verilog实现的FIFO可通过接口参数选择图像缩放模块顶层接口如下
module helai_video_scale #(//---------------------------Parameters----------------------------------------parameter FIFO_TYPE xilinx, // xilinx for xilinx-fifo ; verilog for verilog-fifoparameter DATA_WIDTH 8 , //Width of input/output dataparameter CHANNELS 1 , //Number of channels of DATA_WIDTH, for color imagesparameter INPUT_X_RES_WIDTH 11 //Widths of input/output resolution control signals
)(input i_reset_n , // 输入--低电平复位信号input [INPUT_X_RES_WIDTH-1:0] i_src_video_width , // 输入视频--即缩放前视频的宽度input [INPUT_X_RES_WIDTH-1:0] i_src_video_height, // 输入视频--即缩放前视频的高度input [INPUT_X_RES_WIDTH-1:0] i_des_video_width , // 输出视频--即缩后前视频的宽度input [INPUT_X_RES_WIDTH-1:0] i_des_video_height, // 输出视频--即缩后前视频的高度input i_src_video_pclk , // 输入视频--即缩前视频的像素时钟input i_src_video_vs , // 输入视频--即缩前视频的场同步信号,必须为高电平有效input i_src_video_de , // 输入视频--即缩前视频的数据有效信号,必须为高电平有效input [DATA_WIDTH*CHANNELS-1:0] i_src_video_pixel , // 输入视频--即缩前视频的像素数据input i_des_video_pclk , // 输出视频--即缩后视频的像素时钟,一般为写入DDR缓存的时钟output o_des_video_vs , // 输出视频--即缩后视频的场同步信号,高电平有效output o_des_video_de , // 输出视频--即缩后视频的数据有效信号,高电平有效output [DATA_WIDTH*CHANNELS-1:0] o_des_video_pixel // 输出视频--即缩后视频的像素数据
);FIFO_TYPE选择原则如下 1总体原则选择xilinx好处大于选择verilog 2当你的FPGA逻辑资源不足时请选xilinx 3当你图像缩放的视频分辨率较大时请选xilinx 4当你的FPGA没有FIFO IP或者FIFO IP快用完了请选verilog 5当你向自学一下异步FIFO时请选verilog 6不同FPGA型号对应的工程FIFO_TYPE参数不一样但选择原则一样具体参考代码
2种插值算法的整合与选择 本设计将常用的双线性插值和邻域插值算法融合为一个代码中通过输入参数选择某一种算法 具体选择参数如下
input wire i_scaler_type //0--bilinear;1--neighbor通过输入i_scaler_type 的值即可选择 输入0选择双线性插值算法 输入1选择邻域插值算法 代码里的配置如下
纯Verilog图像缩放模块使用
图像缩放模块使用非常简单顶层代码里设置了四个参数举例如下 上图视频通过图像缩放模块但不进行缩放操作旨在掌握图像缩放模块的用法如果需要将图像放大到1080P则修改为如下 当然需要修改的不仅仅这一个地方FDMA的配置也需要相应修改详情请参考代码但我想要证明的是图像缩放模块使用非常简单你都不需要知道它内部具体怎么实现的上手就能用
FDMA多路视频拼接算法
纯verilog多路视频拼接方案如下以4路视频拼接为例 输出屏幕分辨率为1920X1080 需要拼接的4路视频分辨率为960X540 4路输入刚好可以占满整个屏幕 多路视频的拼接显示原理如下 以把 2 个摄像头 CAM0 和 CAM1 输出到同一个显示器上为列为了把 2 个图像显示到 1 个显示器首先得搞清楚以下关系 hsize每 1 行图像实际在内存中占用的有效空间以 32bit 表示一个像素的时候占用内存大小为 hsize X 4 hstride用于设置每行图像第一个像素的地址,以 32bit 表示一个像素的时候 v_cnt X hstride X 4 vsize有效的行 因此很容易得出 cam0 的每行第一个像素的地址也是 v_cnt X hstride X 4 同理如果我们需要把 cam1 在 hsize 和 vsize 空间的任何位置显示我们只要关心 cam1 每一行图像第一个像素的地址可以用以下公式 v_cnt X hstride X 4 offset uifdma_dbuf 支持 stride 参数设置stride 参数可以设置输入数据 X(hsize)方向每一行数据的第一个像素到下一个起始像素的间隔地址利用 stride 参数可以非常方便地摆放输入视频到内存中的排列方式。 关于uifdma_dbuf可以参考我之前写的文章点击查看FDMA实现视频数据三帧缓存 根据以上铺垫每路摄像头缓存的基地址如下 CAM0ADDR_BASE0x80000000 CAM1ADDR_BASE0x80000000(1920-960)X4 CAM2ADDR_BASE0x80000000(1080-540)X1920X4 CAM3ADDR_BASE0x80000000(1080-540)X1920X4(1920-960)X4 地址设置完毕后基本就完事儿了
FDMA图像缓存
使用本博常用的FDMA图像缓存架构实现图像3帧缓存缓存介质为板载的DDR3FDMA图像缓存架构由FDMA、FDMA控制器、缓存帧选择器构成、Xilinx MIG IP核构成图像缓存使用Xilinx vivado的Block Design设计他的作用是将图像送入DDR中做3帧缓存再读出显示目的是匹配输入输出的时钟差和提高输出视频质量关于FDMA请参考我之前的博客博客地址点击直接前往 FDMA图像缓存架构如下图所示截图为4路视频拼接其他多路视频拼接与之类似 这里多路视频拼接时调用多路FDMA进行缓存具体讲就是每一路视频调用1路FDMA以4路视频拼接为例 调用4路FDMA其中三路配置为写模式因为这三路视频在这里只需要写入DDR3读出是由另一个FDMA完成配置如下 另外1路FDMA配置为读写模式因为4路视频需要同时一并读出配置如下 视频拼接的关键点在于4路视频在DDR3中缓存地址的不同还是以4路视频拼接为例4路FDMA的写地址以此为 第一路视频缓存写基地址0x80000000 第二路视频缓存写基地址0x80000f00 第三路视频缓存写基地址0x803f4800 第四路视频缓存写基地址0x803f5700 视频缓存读基地址0x80000000
视频读取控制
FDMA图像缓存架构使用VGA时序模块完成视频读取控制VGA时序模块负责产生VGA时序他有两个作用一是控制FDMA控制器从DDR3中读出缓存的视频二是将同步后的VGA视频送入下一级模块在HDMI输出方式下VGA时序模块的像素时钟由用户提供在SDI输出方式下VGA时序模块的像素时钟由SMPTE SD/HD/3G SDI IP核的发送用户时钟提供在不同的SDI模式下像素时钟不同比如在3G-SDI模式下像素时钟为148.5M在HD-SDI的720P60Hz模式下像素时钟为74.25MHDMI输出方式下的VGA时序模块代码架构如下 SDI输出方式下的VGA时序模块代码架构如下
HDMI输出
在HDMI输出方式下使用HDMI输出模块将RGB视频编码为HDMI差分信号HDMI输出模块采用verilog代码手写可以用于FPGA的HDMI发送应用代码如下 关于这个模块请参考我之前的博客博客地址点击直接前往
RGB转BT1120
在SDI输出方式下需要使用该模块RGB转BT1200模块的作用是将用户侧的RGB视频转换为BT1200视频输出给SMPTE SD/HD/3G SDI IP核RGB转BT1120模块由RGB888转YUV444模块、YUV444转YUV422模块、SDI视频编码模块、数据嵌入模块组成该方案参考了Xilinx官方的设计BT1120转RGB模块代码架构如下
Gv8500 驱动器
Gv8500芯片实现差分转单端和增强驱动的功能这里选用Gv8500是因为借鉴了了Xilinx官方的方案当然也可以用其他型号器件。Gv8500驱动器原理图如下
SDI转HDMI盒子
在SDI输出方式下需要使用到SDI转HDMI盒子因为我手里的显示器没有SDI接口只有HDMI接口为了显示SDI视频只能这么做当然如果你的显示器有SDI接口则可直接连接显示我的SDI转HDMI盒子在某宝购买不到100块
工程源码架构
本博客提供4套工程源码以工程源码1为例vivado Block Design设计如下其他工程与之类似Block Design设计为图像缓存架构的部分 以工程源码1为例使工程源码架构如下其他工程与之类似
4、工程源码1详解–2路视频缩放拼接HDMI输出版本
开发板FPGA型号Xilinx-Artix7-100T–xc7a100tfgg484-2 开发环境Vivado2019.1 输入13G-SDI相机分辨率1920x108060Hz 输入2HDMI转SDI盒子外接笔记本电脑分辨率1920x108060Hz 输出HDMI 1920x108060Hz背景下叠加显示2路拼接的960x540的有效图像 SDI视频解串方案Xilinx–GTP高速接口解串 SDI视频解码方案Xilinx–SMPTE SD/HD/3G SDI解码 图像缩放方案自研纯Verilog图像缩放 图像缩放实例1920x1080缩放到960x540 图像缓存方案自研FDMA方案 图像缓存介质DDR3 视频拼接方案自研FDMA方案 视频拼接应用2路视频拼接 工程作用此工程目的是让读者掌握Xilinx–Artix7低端系列FPGA实现SDI转HDMI的设计能力以便能够移植和设计自己的项目 工程Block Design和工程代码架构请参考第3章节的《工程源码架构》小节内容 工程的资源消耗和功耗如下
5、工程源码2详解–4路视频缩放拼接HDMI输出版本
开发板FPGA型号Xilinx-Artix7-100T–xc7a100tfgg484-2 开发环境Vivado2019.1 输入13G-SDI相机分辨率1920x108060Hz 输入2HDMI转SDI盒子外接笔记本电脑分辨率1920x108060Hz 输出HDMI 1920x108060Hz背景下叠加显示4路拼接的960x540的有效图像 SDI视频解串方案Xilinx–GTP高速接口解串 SDI视频解码方案Xilinx–SMPTE SD/HD/3G SDI解码 图像缩放方案自研纯Verilog图像缩放 图像缩放实例1920x1080缩放到960x540 图像缓存方案自研FDMA方案 图像缓存介质DDR3 视频拼接方案自研FDMA方案 视频拼接应用4路视频拼接 工程作用此工程目的是让读者掌握Xilinx–Artix7低端系列FPGA实现SDI转HDMI的设计能力以便能够移植和设计自己的项目 工程Block Design和工程代码架构请参考第3章节的《工程源码架构》小节内容 工程的资源消耗和功耗如下
6、工程源码3详解–2路视频缩放拼接3G-SDI输出版本
开发板FPGA型号Xilinx-Artix7-100T–xc7a100tfgg484-2 开发环境Vivado2019.1 输入13G-SDI相机分辨率1920x108060Hz 输入2HDMI转SDI盒子外接笔记本电脑分辨率1920x108060Hz 输出3G-SDI1920x108060Hz背景下叠加显示2路拼接的960x540的有效图像 SDI视频解串方案Xilinx–GTP高速接口解串 SDI视频解码方案Xilinx–SMPTE SD/HD/3G SDI解码 图像缩放方案自研纯Verilog图像缩放 图像缩放实例1920x1080缩放到960x540 图像缓存方案自研FDMA方案 图像缓存介质DDR3 视频拼接方案自研FDMA方案 视频拼接应用2路视频拼接 工程作用此工程目的是让读者掌握Xilinx–Artix7低端系列FPGA实现SDI转3G-SDI的设计能力以便能够移植和设计自己的项目 工程Block Design和工程代码架构请参考第3章节的《工程源码架构》小节内容 工程的资源消耗和功耗如下
7、工程源码4详解–4路视频缩放拼接3G-SDI输出版本
开发板FPGA型号Xilinx-Artix7-100T–xc7a100tfgg484-2 开发环境Vivado2019.1 输入13G-SDI相机分辨率1920x108060Hz 输入2HDMI转SDI盒子外接笔记本电脑分辨率1920x108060Hz 输出3G-SDI1920x108060Hz背景下叠加显示4路拼接的960x540的有效图像 SDI视频解串方案Xilinx–GTP高速接口解串 SDI视频解码方案Xilinx–SMPTE SD/HD/3G SDI解码 图像缩放方案自研纯Verilog图像缩放 图像缩放实例1920x1080缩放到960x540 图像缓存方案自研FDMA方案 图像缓存介质DDR3 视频拼接方案自研FDMA方案 视频拼接应用4路视频拼接 工程作用此工程目的是让读者掌握Xilinx–Artix7低端系列FPGA实现SDI转3G-SDI的设计能力以便能够移植和设计自己的项目 工程Block Design和工程代码架构请参考第3章节的《工程源码架构》小节内容 工程的资源消耗和功耗如下
8、工程移植说明
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软核
9、上板调试验证
准备工作
需要准备的器材如下 FPGA开发板 SDI摄像头或HDMI转SDI盒子 SDI转HDMI盒子 HDMI显示器 我的开发板了连接如下
2路SDI视频缩放拼接–输出视频演示
2路SDI视频缩放拼接输出如下 Zynq-SDI-2路视频拼接 4路SDI视频缩放拼接–输出视频演示
4路SDI视频缩放拼接输出如下 Zynq-SDI-4路视频拼接 10、福利工程代码的获取
福利工程代码的获取 代码太大无法邮箱发送以某度网盘链接方式发送 资料获取方式私或者文章末尾的V名片。 网盘资料如下 此外有很多朋友给本博主提了很多意见和建议希望能丰富服务内容和选项因为不同朋友的需求不一样所以本博主还提供以下服务