- 1、前言
- 2、总体方案
- 3、GTX的使用
- 4、SDI IP的使用
- 5、工程架构
- 7、板级调试
- 8、福利:工程代码的获取
前言:SDI视频编解码目前有两种方案,一是使用专用编解码芯片,比如典型的接收器GS2971,发送器GS2972,优点是简单,比如GS2971直接将SDI解码为并行的YCRCB,缺点是成本较高,可以百度一下GS2971的价格;另一种方案是使用FPGA实现编解码,利用FPGA的GTP/GTX资源实现解串,优点是合理利用了FPGA资源,GTP/GTX资源不用白不用,缺点是操作难度大一些,对FPGA水平要求较高。
开发板:Kintex7板子; 开发环境:vivado2019.1; 输入:sdi摄像头; 输出:hdmi;
2、总体方案SDI摄像头输入视频为1080P@30Hz,经过Gv8601a单端转差分后进入FPGA的GTX,GTX负责解串,将原始SDI视频解为20位的并行数据,再送入Xilinx的SDI IP核进行解码,解出行场和控制信号以及像素数据,此时的数据是YCrCb格式,还需要转为RGB格式,然后用FDMA架构进行三帧缓存输出,FDMA三帧架构是一种经典的图像缓存架构,不懂的可以看我前面关于FDMA图像缓存的文章。
3、GTX的使用我用的开发板是K7,所以使用GTX,不用调用IP,直接使用GTX的源语,我们知道,一个GTX的 Quad由四个GTXE2_CHANNEL源语和一个GTXE2_COMMON源语组成,所以在调用GTX时可直接使用源语,如下:
根据Xilinx的参考设计文档,解码SDI时,GTX需要两个差分时钟,148.5M和148.35M,如下:
其他的建议参考我的代码,这里写不完;
直接调用Xilinx的官方IP,如下图: SDI IP解码出SDI的控制信号和视频信号,然后根据这些信号还原出视频的vs、hs、de和ycrcb。 然后是ycrcb转rgb,很简单,这里不多阐述; 最后是送ddr三帧缓存,由于前面的文章讲了很多,这里也不再阐述;
BD工程如下:主要是FDMA的三帧缓存,关于FDMA三帧缓存,请参考我之前写的文章点击查看:FDMA三帧缓存方案 工程代码架构如下:
硬件连接如下: 输出结果如下:
代码太大,无法邮箱发送,以某度网盘链接方式发送, 资料获取方式1:文章末尾的V名片。 资料获取方式2:文章末尾的XX号,回复 001000 网盘资料如下: