贵州省房屋和城市建设厅官方网站网站建设安全措施

当前位置: 首页 > news >正文

贵州省房屋和城市建设厅官方网站,网站建设安全措施,品质好价格低的广告词,建筑网建筑规范大全目录1、前言2、SDI理论练习3、设计思路和架构SDI摄像头Gv8601a单端转差GTX解串SDI解码VGA时序恢复YUV转RGB图像缩放FDMA图像缓存实现拼接HDMI驱动4、vivado工程详解5、上板调试验证并演示6、福利#xff1a;工程代码的获取1、前言 FPGA实现SDI视频编解码目前有两种方案#… 目录1、前言2、SDI理论练习3、设计思路和架构SDI摄像头Gv8601a单端转差GTX解串SDI解码VGA时序恢复YUV转RGB图像缩放FDMA图像缓存实现拼接HDMI驱动4、vivado工程详解5、上板调试验证并演示6、福利工程代码的获取1、前言 FPGA实现SDI视频编解码目前有两种方案 一是使用专用编解码芯片比如典型的接收器GS2971发送器GS2972优点是简单比如GS2971接收器直接将SDI解码为并行的YCRCBGS2972发送器直接将并行的YCRCB编码为SDI视频缺点是成本较高可以百度一下GS2971和GS2972的价格 另一种方案是使用FPGA实现编解码利用FPGA的GTP/GTX资源实现解串优点是合理利用了FPGA资源GTP/GTX资源不用白不用缺点是操作难度大一些对FPGA水平要求较高。 本文详细描述了FPGA纯verilog编解码SDI视频然后任意尺寸缩放拼接输出的实现设计方案工程代码编译通过后上板调试验证文章末尾有演示视频可直接项目移植适用于在校学生、研究生项目开发也适用于在职工程师做项目开发可应用于医疗、军工等行业的数字成像和图像传输领域 提供完整的、跑通的工程源码和技术支持 工程源码和技术支持的获取方式放在了文章末尾请耐心看到最后 2、SDI理论练习 SDI视频协议比较复杂我前面已经写过多篇文章建议先回头看看前面的文章再往下看有利于理解。 1、FPGA使用GTX解码SDI参考链接直接点击查看 2、FPGA使用GTH解码SDI参考链接直接点击查看 3、FPGA使用GTX实现SDI接收和发送参考链接直接点击查看 4、FPGA使用GTX实现SDI光口SFP收发参考链接直接点击查看 5、FPGA使用GTX实现SDI UDP网络发送参考链接直接点击查看 6、FPGA使用GTX实现SDI视频任意尺寸缩放参考链接直接点击查看 3、设计思路和架构 设计思路和架构如下 本设计的流程为 FPGA解码3G-SDI输入视频输入分辨率为1920x108030Hz经硬件解码后将图像缩小到960X540并复制为4路视频模拟4路输入送到DDR3缓存做视频拼接最后4路视频拼接显示到1920X1080的显示屏上具体请看文章末尾的演示视频。。。 SDI摄像头 我用到的SDI摄像头输出视频分辨率1080P30Hz根据不同相机有所区别 Gv8601a单端转差 Gv8601a起到均衡 EQ 功能这里选用Gv8601a是因为抄袭了Xilinx官方的板子当然也可以用其他型号器件。 GTX解串 GTX负责解串将原始SDI视频解为20位的并行数据我的板子是K7所以用GTX如果是A7的板子则用GTP这里使用GTX并没有调用IP而是直接调用GTXE2_CHANNEL和GTXE2_COMMON源语这一点可谓将Xilinx的GTX资源用到了极致水平值得好好品读其实调用IP无非也就是把调用源语变得界面化而已直接调用源语或许理解更为深刻这一点在市面上的所谓FPGA教程里都学不到。 SDI解码 调用SMPTE-SDI IP核实现GTX只是将高速串行数据解为了并行但并没有解析SDI协议SMPTE-SDI IP核则完成了SDI协议的解码去掉了SDI协议中的数据包信息和控制信息解析出有效的视频数据详细的SMPTE-SDI IP核接口定义请参考官方的使用手册; VGA时序恢复 此模块的作用就是解码恢复出hs、vs以及de信号即恢复正常的VGA视频时序 要恢复正常的VGA视频时序首先得看懂下面这张图 根据这张表即可恢复出图像时序具体看代码这里一两句话实在讲不清楚如果要完全讲明白写5本书都搓搓有余 YUV转RGB 这里就简单了YUV4:4:4转RGB8:8:8几条公式和几行代码的事儿属于低端操作 至此SDI解码过程就完成了接下来就是图像输出过程 图像缩放 图像缩放模块采用纯verilog代码实现没有任何IP可在包括国产FPGA在内的各种FPGA平台间任意移植支持任意比例、任意分辨率、任意尺寸图像缩放将临近插值和双线性插值两种算法合二为一通过输入信号高低电平选择其一本设计选择的双线性插值算法。关于图像缩放请参考我之前的文章直接点击查看 由于SDI摄像头输入是1920x1080我的显示器最高只支持1080P显示所以本设计只能做缩小不能做放大为了适应1080P屏幕的视频拼接效果所以将SDI图像缩小到960X540分辨率。 FDMA图像缓存实现拼接 我常用的FDMA数据缓存架构详情请参考我之前的文章直接点击查看 视频拼接方案如下 输出屏幕分辨率为1920X1080 输入摄像头分辨率为960X540 4路输入刚好可以占满整个屏幕 多路视频的拼接显示原理如下 以把 2 个摄像头 CAM0 和 CAM1 输出到同一个显示器上为列为了把 2 个图像显示到 1 个显示器首先得搞清楚以下关系 hsize每 1 行图像实际在内存中占用的有效空间以 32bit 表示一个像素的时候占用内存大小为 hsize4 hstride用于设置每行图像第一个像素的地址,以 32bit 表示一个像素的时候 v_cnt hstride4 vsize有效的行 因此很容易得出 cam0 的每行第一个像素的地址也是 v_cnt hstride4 同理如果我们需要把 cam1 在 hsize 和 vsize 空间的任何位置显示我们只要关心 cam1 每一行图像第一个像素的地址可以用以下公式 v_cnt hstride*4offset uifdma_dbuf 支持 stride 参数设置stride 参数可以设置输入数据 X(hsize)方向每一行数据的第一个像素到下一个起始像素的间隔地址利用 stride 参数可以非常方便地摆放输入视频到内存中的排列方式。 根据以上铺垫每路摄像头缓存的基地址如下 CAM0ADDR_BASE0x80000000 CAM1ADDR_BASE0x80000000(1920-960)X4 CAM2ADDR_BASE0x80000000(1080-540)X1920X4 CAM3ADDR_BASE0x80000000(1080-540)X1920X4(1920-960)X4 地址设置完毕后基本就完事儿了 关于视频拼接的详细设计方案请参考我之前写的文章直接点击查看 HDMI驱动 我常用的串口解析架构纯verilog代码实现HDMI发送详情请参考我之前的文章直接点击查看 4、vivado工程详解 开发板Xilinx Kintex7开发板 开发环境vivado2019.1 输入3G-SDI摄像头分辨率1920x108030Hz 输出HDMI分辨率1920x108060Hz,4路960X540视频拼接显示 工程Block Design部分如下 Block Design部分只做到了FDMA图像缓存部分本设计的FDMA较之前的FDMA做了小幅改动目的是为了实现动态分辨率的配置。。。 综合后的工程代码架构如下 资源消耗和功耗预估如下 5、上板调试验证并演示 直接看演示视频
SDI-缩放-拼接6、福利工程代码的获取 福利工程代码的获取 代码太大无法邮箱发送以某度网盘链接方式发送 资料获取方式私或者文章末尾的V名片。 网盘资料如下 自定义IP和源码在这个文件夹里