FPGA纯verilog编解码SDI实现流程

时间:2025-05-02  作者:Diven  阅读:0

前言

FPGA实现SDI视频编解码目前有两种方案:

FPGA纯verilog编解码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-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图像缓存实现拼接

多路视频的拼接显示原理如下:以把 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工程详解

开发板:Xilinx Kintex7开发板

开发环境:vivado2019.1;

输入:3G-SDI摄像头,分辨率1920x1080@30Hz;

输出:HDMI,分辨率1920x1080@60Hz,4路960X540视频拼接显示;

工程Block Design部分如下:Block Design部分只做到了FDMA图像缓存部分,本设计的FDMA较之前的FDMA做了小幅改动,目的是为了实现动态分辨率的配置。。。

综合后的工程代码架构如下:资源消耗和功耗预估如下:

猜您喜欢


计算器是应用于日常生活和工作中的电子设备,旨在帮助用户快速、高效地进行数学运算。无论是简单的加减乘除,还是复杂的科学计算,计算器都能轻松应对。现代计算器种类繁多...
2012-04-03 00:00:00

1.引言随着互联网的广泛应用,网络信息安全已成为人们越来越关注的问题。但是目前国内外采用最普遍的网络安全措施防火墙类软件存在如下缺陷:第一防火墙隔离的网络还是...
2020-08-10 18:04:00

大功率贴片电阻因其体积小、功率大、耐高温等特性,广泛应用于电源管理、汽车电子、LED照明等领域。选择合适的封装尺寸对于电路设计至关重要。下表列出了常用大功率贴片...
2025-04-14 15:03:28


0402贴片电阻,指的是尺寸为0.4mm x 0.2mm的矩形片状电阻器。它以其极小的体积,广泛应用于各种电子产品中,从智能手机、平板电脑到笔记本电脑、可穿戴设...
2025-04-14 15:02:21

现代电子设备中,连接器的选择非常重要。TERMINAL_19.85X12.5MM作为高性能连接器,独特的设计和很好的性能,成为电子行业中不可少的部分。本文将深入...
2025-04-22 21:01:47


真空打包机是高效实用的食品保存工具,其主要优势体现在以下几个方面。能有效延长食品的保鲜期。通过抽走包装内的空气,真空打包机能够减缓氧化和细菌滋生,从而保持食物的...
2014-10-28 00:00:00

内六角圆柱头平弹垫三组合是常见的机械连接件,应用于多个领域。在汽车制造行业,这种组合件被用于连接和固定各类部件,确保车辆的稳定性和安全性。在电子设备中,内六角圆...
2024-01-09 00:00:00