FPGA纯verilog编解码SDI实现流程

时间:2025-11-01  作者: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做了小幅改动,目的是为了实现动态分辨率的配置。。。

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

猜您喜欢

在柔和的灯光下,阅读、工作更显舒适。我们的台灯,采用高品质LED光源,光线均匀柔和,有效减少眼睛疲劳。其可调节的灯臂和灯头,适应各种阅读角度,让您随心所欲调整至...
2013-12-17 00:00:00

螺距规是用于测量螺纹间距的重要工具,但市面上的螺距规种类繁多,各具特色。螺距规根据用途可分为公制和英制两种。公制螺距规主要用于测量毫米单位的螺纹,而英制螺距规则...
2008-12-11 00:00:00

现代电子产品的设计与制造中,DIP(双列直插封装)元件因其稳定性和易于焊接的特性而广受欢迎。DIP8_9.27X6.35MM则是其中一种常见的封装规格,广泛应用...
2025-02-24 09:37:32

熔断器作为重要的保护元件,能够有效防止电路过载和短路现象,保障用电安全。宾雅熔断器作为市场上较为知名的品牌,其产品以优良的性能和可靠的质量受到认可。本文将围绕“...
2021-08-31 10:49:30

电阻器作为基础且重要的元件,其性能直接影响到整个电路的稳定性和可靠性。长电极电阻因其独特的结构设计和应用优势,应用于高精度测量、功率控制等领域。冠佐(SUSCO...
2024-08-13 06:04:48

精密电阻作为电子元器件中的关键组成部分,其性能直接影响着电子设备的稳定性和准确性。Viking(光颉)作为国内知名的精密电阻品牌,凭借其很好的产品质量和技术创新...
2013-01-24 06:35:29

贴片电阻30d指的是尺寸为3.2mm x 1.6mm的贴片电阻,而最好的阻值取决于具体的应用场景。30d电阻常用阻值范围很广,从几欧姆到几兆欧姆都有。没有一个 ...
2024-11-29 10:26:10

扁平柔性电缆(FFC, FPC)是应用于电子设备中的连接线,其参数直接影响着性能与可靠性。导体材料是关键因素,一般采用铜或镀金材料,以确保良好的导电性和抗氧化性...
2018-06-09 00:00:00

0.模块级的注释每个模块开始要注明文件名、功能描述、引用模块、设计者、设计时间及版权信息等。/* ========================File...
2018-07-10 10:48:00

现代工业和电子设备中,连接器和终端元件的选择非常重要。TERMINAL_35.5X12MM_TM作为一种高性能的连接终端,因其优越的技术参数和广泛的应用领域而受...
2025-03-05 03:53:19