FPGA纯verilog编解码SDI实现流程_第1页
FPGA纯verilog编解码SDI实现流程_第2页
FPGA纯verilog编解码SDI实现流程_第3页
FPGA纯verilog编解码SDI实现流程_第4页
全文预览已结束

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

FPGA纯verilog编解码SDI实现流程前言FPGA实现SDI视频编解码目前有两种方案:一是使用专用编解码芯片,比如典型的接收器GS2971,发送器GS2972,优点是简单,比如GS2971接收器直接将SDI解码为并行的YCRCB,GS2972发送器直接将并行的YCRCB编码为SDI视频,缺点是成本较高,可以百度一下GS2971和GS2972的价格;另一种方案是使用FPGA实现编解码,利用FPGA的GTP/GTX资源实现解串,优点是合理利用了FPGA资源,GTP/GTX资源不用白不用,缺点是操作难度大一些,对FPGA水平要求较高。本文详细描述了FPGA纯verilog编解码SDI视频,然后任意尺寸缩放拼接输出的实现设计方案,工程代码编译通过后上板调试验证,文章末尾有演示视频,可直接项目移植,适用于在校学生、研究生项目开发,也适用于在职工程师做项目开发,可应用于医疗、军工等行业的数字成像和图像传输领域;设计思路和架构设计思路和架构如下:本设计的流程为:FPGA解码3G-SDI输入视频,输入分辨率为1920x1080@30Hz,经硬件解码后,将图像缩小到960X540,并复制为4路视频,模拟4路输入,送到DDR3缓存做视频拼接,最后4路视频拼接显示到1920X1080的显示屏上,具体请看文章末尾的演示视频。。。SDI摄像头我用到的SDI摄像头输出视频分辨率1080P@30Hz;根据不同相机有所区别;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-SDIIP核实现,GTX只是将高速串行数据解为了并行,但并没有解析SDI协议,SMPTE-SDIIP核则完成了SDI协议的解码,去掉了SDI协议中的数据包信息和控制信息,解析出有效的视频数据,详细的SMPTE-SDIIP核接口定义请参考官方的使用手册;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图像缓存实现拼接多路视频的拼接显示原理如下:以把2个摄像头CAM0和CAM1输出到同一个显示器上为列,为了把2个图像显示到1个显示器,首先得搞清楚以下关系:hsize:每1行图像实际在内存中占用的有效空间,以32bit表示一个像素的时候占用内存大小为hsize*4;hstride:用于设置每行图像第一个像素的地址,以32bit表示一个像素的时候v_cnt*hstride*4;vsize:有效的行;因此很容易得出cam0的每行第一个像素的地址也是v_cnt*hstride*4;同理如果我们需要把cam1在hsize和vsize空间的任何位置显示,我们只要关心cam1每一行图像第一个像素的地址,可以用以下公式v_cnt*hstride*4+offset;uifdma_dbuf支持stride参数设置,stride参数可以设置输入数据X(hsize)方向每一行数据的第一个像素到下一个起始像素的间隔地址,利用stride参数可以非常方便地摆放输入视频到内存中的排列方式。根据以上铺垫,每路摄像头缓存的基地址如下:CAM0:ADDR_BASE=0x80000000;CAM1:ADDR_BASE=0x80000000+(1920-960)X4;CAM2:ADDR_BASE=0x80000000+(1080-540)X1920X4;CAM3:ADDR_BASE=0x80000000+(1080-540)X1920X4+(1920-960)X4;地址设置完毕后基本就完事儿了;HDMI驱动4、vivado工程详解开发板:XilinxKintex7开发板;开发环境:vivado2019.1;输入:3G-SDI摄像头,分辨率1920x1080@30Hz;输出:HDMI,分辨率1920x1080@60Hz,4路960X54

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论