FPGA实现SDI视频编解码 SDI接收发送,提供2套工程源码和技术支持
目录
- 1、前言
- 2、设计思路和框架
- SDI接收
- SDI缓存写方式处理
- SDI缓存读方式处理
- SDI缓存的目的
- SDI发送
- 3、工程1详解
- 4、工程2详解
- 5、上板调试验证并演示
- 6、福利:工程代码的获取
1、前言
FPGA实现SDI视频编解码目前有两种方案:
一是使用专用编解码芯片,比如典型的接收器GS2971,发送器GS2972,优点是简单,比如GS2971接收器直接将SDI解码为并行的YCRCB,GS2972发送器直接将并行的YCRCB编码为SDI视频,缺点是成本较高,可以百度一下GS2971和GS2972的价格;
另一种方案是使用FPGA实现编解码,利用FPGA的GTP/GTX资源实现解串,优点是合理利用了FPGA资源,GTP/GTX资源不用白不用,缺点是操作难度大一些,对FPGA水平要求较高。
本文详细描述了FPGA纯verilog编解码SDI视频的实现设计方案,工程代码编译通过后上板调试验证,文章末尾有演示视频,可直接项目移植,适用于在校学生、研究生项目开发,也适用于在职工程师做项目开发,可应用于医疗、军工等行业的数字成像和图像传输领域;
提供完整的、跑通的工程源码和技术支持;
工程源码和技术支持的获取方式放在了文章末尾,请耐心看到最后;
本设计提供两套vivado工程;
工程1:
SDI 1080P@30Hz帧视频输入解码后,经DDR3缓存,SDI发送1080P@30Hz帧输出;
工程2:
FPGA内部生成测试彩条视频,SDI发送出去,SDI接收后无缓存HDMI输出;
关于SDI的理论知识部分,可自行搜索一下,很多大佬讲得很详细,也可以参考我之前写的文章点击查看:SDI理论
2、设计思路和框架
设计思路和框架如下:
SDI经DDR3环出工程设计思路如下:

SDI接收
SDI解码部分之前写过一篇文章详细描述了,这里不再赘述,请参考我之前写的文章点击查看:SDI解码
这里重点将SDI图像缓存和发送部分:
SDI缓存写方式处理
SDI 接收解串后,把 20 位数据,异步 FIFO 方式,8 个数据一起打包成并行数据,送入 DDR3。通过 rx_usrclk 时钟送入 20 位到 FIFO,然后再用 DDR 的 ui_clk 时钟,把 8 个数据并行送入DDR3。每帧数据满了后,我们就把帧号加 1,即 ddr3_addr_bank_wr 变量加 1,这样使得我们在 DDR3 内存颗粒放置了3帧数据。
SDI缓存读方式处理
通过ui_clk,一个时钟读出 8 个 SDI 数据,送入 FIFO,通过异步方式,也就是通过 tx_usrclk时钟,读出 1 个 sdi 数据,也就是 20bit 的 sdi 数据。每读满一帧,我们就通过ddr3_addr_bank_rd <= ddr3_addr_bank_wr ‐2’b1;方式,让读帧号跟随着写帧号。
SDI缓存的目的
rx_usrclk 时钟是来自信号源,但是 SDI 发送必须要使用本地晶振,也就是硬件上连接到GTX 的参考时钟晶振。由于时钟的不同源,所以我们不能把接收的信号源直接送到 SDI 发送引擎上去,必须要经过 DDR 方式做帧处理才能做 SDI 环出。
SDI发送
SDI发送是SDI接收的逆过程,即使用SDI IP编码将视频数据编码为SDI格式,再使用GTX将并行SDI数据串化为高速串行数据通过GTX发送出去,经过GV8500增强驱动后给到SDI发送的BNC座子。
SDI发送接收彩条视频工程设计思路如下:

FPGA内部生成3G-SDI彩条视频,不缓存,直接经前文介绍的SDI发送通路发送出去,再经前文介绍的SDI接收通路后送HDMI输出显示。
3、工程1详解
开发板:Xilinx Kintex7开发板;
开发环境:Vivado2019.1;
输入:SDI摄像头,分辨率1080p@30帧;
输出:SDI,分辨率1080p@30帧;
工程代码架构如下:

资源消耗和功耗预估如下:

4、工程2详解
开发板:Xilinx Kintex7开发板;
开发环境:Vivado2019.1;
输入:FPGA内部生成彩条,分辨率1080p@30帧;
输出:HDMI,分辨率1080p@30帧;
工程代码架构如下:

资源消耗和功耗预估如下:

5、上板调试验证并演示

演示视频如下:
FPGA实现SDI视频解码SDI发送,提供2套工程源码和技术
6、福利:工程代码的获取
福利:工程代码的获取
代码太大,无法邮箱发送,以某度网盘链接方式发送,
资料获取方式:私,或者文章末尾的V名片。
网盘资料如下:

相关文章:
FPGA实现SDI视频编解码 SDI接收发送,提供2套工程源码和技术支持
目录1、前言2、设计思路和框架SDI接收SDI缓存写方式处理SDI缓存读方式处理SDI缓存的目的SDI发送3、工程1详解4、工程2详解5、上板调试验证并演示6、福利:工程代码的获取1、前言 FPGA实现SDI视频编解码目前有两种方案: 一是使用专用编解码芯片࿰…...
Android 基础知识4-3.5 RadioButton(单选按钮)Checkbox(复选框)详解
一、RadioButton(单选按钮) 1.1、简介 RadioButton表示单选按钮,是button的子类,每一个按钮都有选择和未选中两种状态,经常与RadioGroup一起使用,否则不能实现其单选功能。RadioGroup继承自LinearLayout&a…...
用代码实现解析解的方式求解_梯度下降法思路_导函数有什么用_接23节---人工智能工作笔记0026
这里24节,25节,介绍了一下人工智能高等数学要学习的一些内容,初步了解了一下,微积分中用到的知识~微分~以及导数这里... 然后接着23节,我们还是继续,走人工智能的主线,先把整体的人工智能的内容学习一遍,然后再去回去看数学知识更有目的性. 然后首先来回顾一下,这里机器学习,其…...
大数据ETL开发之图解Kettle工具
详细笔记参考:https://blog.csdn.net/yuan2019035055/article/details/120409547以下只是简单记录一下我学习过程中的心得3.1.5 JSON输入JSONPath 类似于 XPath 在 xml 文档中的定位,JsonPath 表达式通常是用来路径检索或设置Json的。其表达式可以接受“…...
docker-容器数据卷
Docker挂载主机目录访问如果出现cannot open directory.:Permission denied 解决办法:在挂载目录后多加一个--privileged=true参数即可; 一、介绍 卷就是目录或文件,存在于一个或多个容器中,由docker挂载到容器,但不属于联合文件系统,因此能绕过Union Fil…...
【C++】类和对象补充知识点
🏖️作者:malloc不出对象 ⛺专栏:C的学习之路 👦个人简介:一名双非本科院校大二在读的科班编程菜鸟,努力编程只为赶上各位大佬的步伐🙈🙈 目录前言一、再谈构造函数1.1 构造函数体赋…...
路径规划-人工势场法
一.基本思想 目标点对机器人产生吸引力,障碍物对机器人产生排斥力; 所有力的合成构成机器人的控制律 二. 主要步骤 1.构建人工势场 目标点:吸引势场 障碍物:排斥势场 2.根据人工势场计算力 对势场求偏导 3.计算合力 计…...
20230304学习笔记
1、Mybatis #{}和${}的区别是什么 a、#{}是预编辑处理、是占位符,${}是字符串拼接符。 b、#{}替换为?号,用PreparedStatement来赋值,${}直接替换变量的值,用Statement赋值。 c、#{}在DBMS中、自动加入单引号&#…...
[数据集][VOC][目标检测]河道垃圾水面漂浮物数据集目标检测可用yolo训练-1304张介绍
数据集格式:Pascal VOC格式(不包含分割路径的txt文件和yolo格式的txt文件,仅仅包含jpg图片和对应的xml) 图片数量(jpg文件个数):1304 标注数量(xml文件个数):1304 标注类别数:1 标注类别名称:["trash"] …...
JavaWeb--JSP案例
JSP案例8 案例8.1 环境准备8.1.1 创建工程8.1.2 创建包8.1.3 创建表8.1.4 创建实体类8.1.5 准备mybatis环境8.2 查询所有8.2.1 编写BrandMapper8.2.2 编写工具类8.2.3 编写BrandService8.2.4 编写Servlet8.2.5 编写brand.jsp页面8.2.6 测试8.3 添加8.3.1 编写BrandMapper方法8.…...
推荐系统1--Deepfm学习笔记
目录 1 keras实现Deepfm demo 2 deepctr模版 3 其他实现方式 ctr_Kera 模型 数据集 预处理 执行步骤 4何为focal loss 参考 1 keras实现Deepfm 假设我们有两种 field 的特征,连续型和离散型,连续型 field 一般不做处理沿用原值,离散型一…...
javaDoc生成方式
javaDoc生成方式 命令行生成 在cmd控制台窗口上找到需要生成文件的路径,然后执行命令。 # javadoc -encoding UTF-8 -charset UTF-8 文件名 javadoc -encoding UTF-8 -charset UTF-8 Doc.java这样就生成完成了。 测试Doc.java文件 package com.jiang.base;/***…...
Armv9 registers
A64指令集包括访问system registers编码空间的指令。这些指令有: Access to System registers, including the debug registers, that provide system control, and system status information.Access to Special-purpose registers such as SPSR_ELx, ELR_ELx, an…...
套接字实现TCP
套接字 套接字的意义就是客户端与服务器进行双向通信的端点,如果有不理解点上面套接字三字更近距离了解套接字。 网络套接字与客户连接的特定网络有关的服务端口号,这个端口号允许linux进入特定的端口号的连接转到正确的服务器进程。 套接字通信的建立过…...
MMSeg绘制模型指定层的Heatmap热力图
文章首发及后续更新:https://mwhls.top/4475.html,无图/无目录/格式错误/更多相关请至首发页查看。 新的更新内容请到mwhls.top查看。 欢迎提出任何疑问及批评,非常感谢! 摘要:绘制模型指定层的热力图 可视化环境安装 …...
关于Paul C.R. - Inductance_ Loop and partial-Wiley (2009)一书的概括
环感抗和部分感抗是两种不同的电路元件,它们通常用于描述不同类型的导体结构中的电流承载能力。 环感抗通常用于描述绕制在磁性芯上的线圈。当电流通过线圈时,它会在磁性芯中产生一个磁场,这个磁场又会对线圈产生一个磁通量。这个磁通量的大…...
基于支持向量机SVM的面部表情分类预测
目录 支持向量机SVM的详细原理 SVM的定义 SVM理论 Libsvm工具箱详解 简介 参数说明 易错及常见问题 SVM应用实例,基于SVM的面部表情分类预测 代码 结果分析 展望 支持向量机SVM的详细原理 SVM的定义 支持向量机(support vector machines, SVM)是一种二分类模型,它的基本…...
java内存模型的理解
java内存模型的理解并发问题产生的源头缓存导致的可见性问题线程切换导致的原子性问题编译优化带来的有序性问题小结Java内存模型: 解决可见性和有序性问题Java内存模型与JVM内存模型的区别volatile关键字Happens-Before规则小结思考题参考并发问题产生的源头 缓存导致的可见性…...
自己写一个简单的IOC
什么是SpringIOC? 答:IOC即控制反转,就是我们不在手动的去new一个对象,而是将创建对象的权力交给Spring去管理,我们想要一个User类型的对象,就只需要定义一个User类型的变量user1,然后让Spring去…...
用Python批量重命名文件
案例 今天,我们来整理文件夹中的文件,给某个文件夹下的所有文件重新命名。要求是给所有文件按照修改时间,按顺序在文件名前面加上编号。比如将文件资料.xlsx重命名为1. 资料.xlsx import osdef Get_modify_time(file):return os.path.getmtime(file) #获取文件修改时间path…...
终极指南:如何利用Storybook实现集中式日志组件管理
终极指南:如何利用Storybook实现集中式日志组件管理 【免费下载链接】storybook Storybook is the industry standard workshop for building, documenting, and testing UI components in isolation 项目地址: https://gitcode.com/GitHub_Trending/st/storybook…...
WebDataset数据压缩算法:Zstd、LZ4与Snappy性能对比
WebDataset数据压缩算法:Zstd、LZ4与Snappy性能对比 【免费下载链接】webdataset A high-performance Python-based I/O system for large (and small) deep learning problems, with strong support for PyTorch. 项目地址: https://gitcode.com/gh_mirrors/we/w…...
LiveSplit:速度跑计时领域的精准度革新与实践指南
LiveSplit:速度跑计时领域的精准度革新与实践指南 【免费下载链接】LiveSplit A sleek, highly customizable timer for speedrunners. 项目地址: https://gitcode.com/gh_mirrors/li/LiveSplit 在竞技游戏的毫秒级竞争中,计时工具的精准度直接决…...
R中提供了一系列as.*函数,用于将数据从一种类型转换为另一种类型
下面的内容摘录自《用R探索医药数据科学》专栏文章的部分内容(原文5220字)。 2篇2章8节:用R做数据重塑,行列命名和数据类型转换_r语言数据命名-CSDN博客 在R语言中,行列命名和数据类型转换是数据处理中的两个基础性操…...
如何快速评估网络性能:Windows平台iperf3完整指南
如何快速评估网络性能:Windows平台iperf3完整指南 【免费下载链接】iperf3-win-builds iperf3 binaries for Windows. Benchmark your network limits. 项目地址: https://gitcode.com/gh_mirrors/ip/iperf3-win-builds iperf3是一款专业的网络性能测试工具&…...
如何利用APOC插件提升Neo4J的数据处理能力?实战配置指南
如何利用APOC插件释放Neo4J的隐藏潜能?高阶实战手册 当你已经熟练使用Cypher进行常规图数据查询时,是否遇到过这些瓶颈?需要批量处理百万级节点关系却找不到高效方法;想实现复杂图算法但原生函数库不支持;数据导入导出…...
简单实用的Windows防休眠工具:MouseJiggler完整使用指南
简单实用的Windows防休眠工具:MouseJiggler完整使用指南 【免费下载链接】mousejiggler Mouse Jiggler is a very simple piece of software whose sole function is to "fake" mouse input to Windows, and jiggle the mouse pointer back and forth. …...
别再死记硬背了!用‘四体交叉’和‘双端口RAM’的实战题目,彻底搞懂计算机组成原理的存储器提速
从四体交叉到双端口RAM:用实战思维破解存储器提速难题 计算机组成原理中那些晦涩的存储器提速概念,是否总让你在题海中迷失方向?当"单体多字"、"多体并行"、"四体交叉"这些术语在教材里冰冷排列时,…...
百度网盘下载加速终极指南:3分钟学会高速下载技巧
百度网盘下载加速终极指南:3分钟学会高速下载技巧 【免费下载链接】baidu-wangpan-parse 获取百度网盘分享文件的下载地址 项目地址: https://gitcode.com/gh_mirrors/ba/baidu-wangpan-parse 还在为百度网盘的龟速下载而烦恼吗?每次下载大文件都…...
腾讯优图Youtu-VL-4B-Instruct应用案例:电商商品自动描述、教育图表解析实战
腾讯优图Youtu-VL-4B-Instruct应用案例:电商商品自动描述、教育图表解析实战 1. 引言:当AI学会"看图说话" 想象一下这样的场景:电商平台每天需要处理数百万张商品图片,运营团队不得不加班加点编写商品描述;…...
