首页 > 技术 > 内容

FPGA纯verilog编解码SDI实现流程

时间:2025-12-08  作者:Diven  阅读:0

前言

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-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做了小幅改动,目的是为了实现动态分辨率的配置。。。

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

猜您喜欢


贴片电阻上的「102」并不是直接表示102欧姆或102千欧姆。它实际上是一种编码方式,表示电阻的阻值。 「102」代表的是10乘以10的2次方,单位是欧姆。 因...
2024-11-26 11:29:44
止回阀是重要的流体控制设备,应用于各类管道系统中。主要作用是防止流体倒流,确保流体在管道中单向流动,从而保护设备和系统的正常运行。止回阀的工作原理简单有效,当流...
2010-09-20 00:00:00
一、概述在大规模ASIC或FPGA设计中,多时钟系统往往是不可避免的,这样就产生了不同时钟域数据传输的问题,其中一个比较好的解决方案就是使用异步FIFO来作不...
2020-07-17 09:38:00
特殊功能放大器因其独特的设计和功能,应用于各个领域,带来了显著的优势。特殊功能放大器能够有效提升信号的质量和强度,确保在长距离传输过程中信号不失真。这对于音频和...
2008-01-24 00:00:00
0 引 言由于数字逻辑系统功能复杂化的需求,单片系统的芯片正朝着超大规模、高密度的方向发展。对于一个大规模的数字系统而言,系统规模是基于各种逻辑功能模块的组合...
2019-01-02 15:10:00
排阻作为电阻器中的重要类型,应用于各种电子设备和电路设计中。作为国内领先的电子元件制造商,风华高科(FH)在排阻领域拥有丰富的产品线和多样的品牌系列,满足不同客...
2020-02-26 02:27:38
汽车保险丝作为保护汽车电路安全的重要元件,其性能和参数成为消费者和维修人员关注的焦点。ZOYI LIGHTING作为知名的汽车照明及电子配件品牌,其汽车保险丝凭...
2023-12-14 00:43:30
PTC热敏电阻因其独特的温度保护性能被应用于家电、汽车电子、电源和通信设备等领域。作为这一领域的知名品牌,正邦(JPCON)推出了多款高性能PTC热敏电阻产品,...
2023-07-01 23:08:59
标签纸在日常生活和商业运用中是重要配件,但之间存在一些明显的区别。材质上,标签纸主要分为纸质和合成材料两种。纸质标签通常用于室内环境,适合短期使用,而合成材料标...
2010-06-05 00:00:00