首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐
2025年6月28日 星期六 3:23am

UltraScale系列FPGA实现SDI视频编解码+UDP以太网传输,基于UltraScale GTH高速接口,提供2套工程源码和技术支持

  • 25-03-04 14:21
  • 2469
  • 7203
blog.csdn.net

目录

  • 1、前言
    • 工程概述
    • 免责声明
  • 2、相关方案推荐
    • 本博已有的 SDI 编解码方案
    • 本博已有的以太网方案
    • 本方案在Xilinx--Artix7系列FPGA上的应用
    • 本方案在Xilinx--Kintex7系列FPGA上的应用
    • 本方案在Xilinx--Zynq7000系列FPGA上的应用
  • 3、详细设计方案
    • 设计原理框图
    • SDI 输入设备
    • LMH1219RTWR 均衡器
    • UltraScale GTH 高速接口-->解串与串化
    • SMPTE UDH-SDI IP核
    • BT1120转RGB
    • 纯Verilog图像缩放模块详解
    • 纯Verilog图像缩放模块使用(重点阅读)
    • FDMA 图像缓存
    • UDP视频组包发送
    • UDP协议栈
    • MAC数据缓冲FIFO组
    • Tri Mode Ethernet MAC 使用教程
    • PHY芯片
    • AXI 1G/2.5G Ethernet Subsystem 简介
    • AXI 1G/2.5G Ethernet Subsystem 配置
    • 多个 AXI 1G/2.5G Ethernet Subsystem 主从级联使用
    • SFP光口转RJ45电口
    • IP地址、端口号的修改
    • UDP视频接收QT上位机
    • 工程源码架构
  • 4、工程源码1详解-->KU040,RTL8211F做以太网物理层方案
  • 5、工程源码2详解-->KU040,1G/2.5G Ethernet 做以太网物理层方案
  • 6、工程移植说明
    • vivado版本不一致处理
    • FPGA型号不一致处理
    • 其他注意事项
  • 7、上板调试验证
    • 准备工作
    • ping测试
    • ARP测试
    • QT上位机配置
    • FPGA实时SDI视频采集转UDP网络视频流输出演示
  • 8、福利:工程代码的获取

UltraScale系列FPGA实现SDI视频编解码+UDP以太网传输,基于UltraScale GTH高速接口,提供2套工程源码和技术支持

1、前言

目前FPGA实现SDI视频编解码有两种方案:一是使用专用编解码芯片,比如典型的接收器GS2971,发送器GS2972,优点是简单,比如GS2971接收器直接将SDI解码为并行的YCrCb422,GS2972发送器直接将并行的YCrCb422编码为SDI视频,缺点是成本较高,可以百度一下GS2971和GS2972的价格;另一种方案是使用FPGA逻辑资源部实现SDI编解码,利用Xilinx系列FPGA的GTP/GTX/GTH/GTY等资源实现解串,利用Xilinx系列FPGA的SMPTE UHD-SDI资源实现SDI编解码,优点是合理利用了FPGA资源,GT高速接口资源不用白不用,缺点是操作难度大一些,对FPGA开发者的技术水平要求较高。有意思的是,这两种方案在本博这里都有对应的解决方案,包括硬件的FPGA开发板、工程源码等等。本设计使用UltraScale GTH高速接口资源;

工程概述

本设计基于Xilinx的UltraScale系列FPGA开发板实现SDI视频编解码,输入源为一个3G-SDI相机或者HDMI转3G-SDI盒子,也可以使用HD-SDI或者SD-SDI相机,因为本设计是三种SDI视频自适应的;同轴的SDI视频通过同轴线连接到FPGA开发板的BNC座子,然后同轴视频经过板载的LMH1219RTWR芯片实现单端转差分和均衡EQ的功能;然后差分SDI视频信号进入FPGA内部的UltraScale GTH高速资源,实现数据高速串行到并行的转换,本博称之为解串;解串后的并行视频再送入Xilinx系列FPGA特有的SMPTE UHD-SDI IP核进行SDI视频解码操作,并输出BT1120视频,至此,SDI视频解码操作已经完成,可以进行常规的图像处理操作了;

本设计的目的是做图像缩放后再以UDP以太网输出解码的SDI视频,针对目前市面上的主流项目需求,本博设计了两种以太网物理层实现方式,一种是FPGA挂载PHY芯片(RTL8211F)方式,另一种FPGA内部GT高速接口实现以太网物理层方式;这两种方式都需要先对解码BT1120视频进行转RGB、图像缩放、图像缓存操作;解码后的SDI视频送入BT1120转RGB模块实现视频格式转换,输出RGB888视频;然后使用自研的、纯verilog实现的、支持任意比例缩放的图像缩放模块实现对输入视频的图像缩放操作,将原始的1920x1080分辨率的SDI视频缩小为1280x720,当然,读者也可以缩放为其他分辨率;然后本博常用的FDMA图像缓存架构实现图像3帧缓存,缓存介质为板载的DDR4;从DDR4读出的视频然后送入UDP视频组包发送模块,将视频加上包头和其他控制信息;然后组包的视频送入UDP协议栈进行以太网帧组帧;UDP协议栈输出的MAC数据经过FIFO组进行数据缓冲;MAC数据再送入Xilinx官方的Tri Mode Ethernet MAC IP核实现AXIS数据到RGMII数据转换;再经过板载的PHY网络芯片实现物理层功能,将RGMII数据转换为差分数据;再经过板载的RJ45网口,用网线传输到电脑端;电脑端使用QT上位机接收UDP网络视频并显示出来;这是FPGA挂载PHY芯片(RTL8211F)方式;或者MAC数据送入Xilinx官方的AXI 1G/2.5G Ethernet Subsystem IP核实现以太网物理层,并输出差分信号,再通过SFP光口转RJ45电口实现光电转换,用网线传输到电脑端;电脑端使用QT上位机接收UDP网络视频并显示出来;这是FPGA内部GT高速接口实现以太网物理层方式;本博客提供2套工程源码,具体如下:
在这里插入图片描述
现对上述2套工程源码做如下解释,方便读者理解:

工程源码1

开发板FPGA型号为Xilinx–>Kintex UltraScale–xcku040-ffva1156-2-i;输入视频为3G-SDI相机或者HDMI转3G-SDI盒子,输入分辨率为1920x1080@60Hz,输入视频经过板载的LMH1219RTWR芯片实现单端转差分和均衡EQ后送入FPGA;再经过UltraScale GTH将SDI视频解串为并行数据;再经过SMPTE UHD-SDI IP核将SDI解码BT1120数据;再经过BT1120转RGB模块将BT1120转换为RGB888视频;再经过自研的、纯verilog实现的、支持任意比例缩放的图像缩放模块实现对输入视频的图像缩放操作,将原始的1920x1080分辨率的SDI视频缩小为1280x720;再经过本博主常用的FDMA图像缓存方案将视频写入DDR4做三帧缓存;从DDR4读出的视频然后送入UDP视频组包发送模块,将视频加上包头和其他控制信息;然后组包的视频送入UDP协议栈进行以太网帧组帧;UDP协议栈输出的MAC数据经过FIFO组进行数据缓冲;MAC数据再送入Xilinx官方的Tri Mode Ethernet MAC IP核实现AXIS数据到RGMII数据转换;再经过板载的RTL8211FD网络芯片实现物理层功能,将RGMII数据转换为差分数据,RTL8211FD工作于延时模式,接口为RGMII;再经过板载的RJ45网口,用网线传输到电脑端,输出分辨率为1280x720@60Hz;电脑端使用QT上位机接收UDP网络视频并显示出来;该工程适用于Xilinx的UltraScale高端系列FPGA实现SDI转UDP以太网传输场景,需要FPGA板子有板载PHY芯片;

工程源码2

开发板FPGA型号为Xilinx–>Kintex UltraScale–xcku040-ffva1156-2-i;输入视频为3G-SDI相机或者HDMI转3G-SDI盒子,输入分辨率为1920x1080@60Hz,输入视频经过板载的LMH1219RTWR芯片实现单端转差分和均衡EQ后送入FPGA;再经过UltraScale GTH将SDI视频解串为并行数据;再经过SMPTE UHD-SDI IP核将SDI解码BT1120数据;再经过BT1120转RGB模块将BT1120转换为RGB888视频;再经过自研的、纯verilog实现的、支持任意比例缩放的图像缩放模块实现对输入视频的图像缩放操作,将原始的1920x1080分辨率的SDI视频缩小为1280x720;再经过本博主常用的FDMA图像缓存方案将视频写入DDR4做三帧缓存;从DDR4读出的视频然后送入UDP视频组包发送模块,将视频加上包头和其他控制信息;然后组包的视频送入UDP协议栈进行以太网帧组帧;UDP协议栈输出的MAC数据经过FIFO组进行数据缓冲;MAC数据再送入Xilinx官方的AXI 1G/2.5G Ethernet Subsystem IP核实现以太网物理层,并输出差分信号,再通过SFP光口转RJ45电口实现光电转换,用网线传输到电脑端,输出分辨率为1280x720@60Hz;电脑端使用QT上位机接收UDP网络视频并显示出来;该工程适用于Xilinx的UltraScale高端系列FPGA实现SDI转UDP以太网传输场景,需要FPGA板子有板载SFP光口;

本博客详细描述了UltraScale系列FPGA实现SDI视频编解码+UDP以太网传输的设计方案,工程代码可综合编译上板调试,可直接项目移植,适用于在校学生、研究生项目开发,也适用于在职工程师做学习提升,可应用于医疗、军工等行业的高速接口或图像处理领域;
提供完整的、跑通的工程源码和技术支持;
工程源码和技术支持的获取方式放在了文章末尾,请耐心看到最后;

免责声明

本工程及其源码即有自己写的一部分,也有网络公开渠道获取的一部分(包括CSDN、Xilinx官网、Altera官网等等),若大佬们觉得有所冒犯,请私信批评教育;基于此,本工程及其源码仅限于读者或粉丝个人学习和研究,禁止用于商业用途,若由于读者或粉丝自身原因用于商业用途所导致的法律问题,与本博客及博主无关,请谨慎使用。。。

2、相关方案推荐

本博已有的 SDI 编解码方案

我的博客主页开设有SDI视频专栏,里面全是FPGA编解码SDI的工程源码及博客介绍;既有基于GS2971/GS2972的SDI编解码,也有基于GTP/GTX资源的SDI编解码;既有HD-SDI、3G-SDI,也有6G-SDI、12G-SDI等;专栏地址链接如下:
点击直接前往

本博已有的以太网方案

目前我这里有大量UDP协议的工程源码,包括UDP数据回环,视频传输,AD采集传输等,也有TCP协议的工程,对网络通信有需求的兄弟可以去看看,以下是专栏地址:
直接点击前往

本方案在Xilinx–Artix7系列FPGA上的应用

本方案在Xilinx–Artix7系列FPGA上的也有应用,之前专门写过一篇博客,博客地址链接如下:
点击直接前往

本方案在Xilinx–Kintex7系列FPGA上的应用

本方案在Xilinx–Kintex7系列FPGA上的也有应用,之前专门写过一篇博客,博客地址链接如下:
点击直接前往

本方案在Xilinx–Zynq7000系列FPGA上的应用

本方案在Xilinx–Zynq7000系列FPGA上的也有应用,之前专门写过一篇博客,博客地址链接如下:
点击直接前往

3、详细设计方案

设计原理框图

设计原理框图如下:
在这里插入图片描述
注意!!!!
注意!!!!
紫色箭头:PHY做以太网物理层方案
绿色箭头:FPGA内部高速接口做以太网物理层方案

本设计参考了Xilinx官方设计文档,官方的参考设计框图如下:
在这里插入图片描述

SDI 输入设备

SDI 输入设备可以是SDI相机,代码兼容HD/SD/3G-SDI三种模式;SDI相机相对比较贵,预算有限的朋友可以考虑用HDMI转SDI盒子模拟SDI相机,这种盒子某宝一百块左右;当使用HDMI转SDI盒子时,输入源可以用笔记本电脑,即用笔记本电脑通过HDMI线连接到HDMI转SDI盒子的HDMI输入接口,再用SDI线连接HDMI转SDI盒子的SDI输出接口到FPGA开发板,如下:
在这里插入图片描述

LMH1219RTWR 均衡器

LMH1219RTWR芯片实现单端转差分和均衡EQ的功能,这里选用LMH1219RTWR是因为借鉴了了Xilinx官方的方案,当然也可以用其他型号器件。LMH1219RTWR均衡器原理图如下:
在这里插入图片描述

UltraScale GTH 高速接口–>解串与串化

本设计使用Xilinx特有的UltraScale GTH高速信号处理资源实现SDI差分视频信号的解串与串化,对于SDI视频接收而言,UltraScale GTH起到解串的作用,即将输入的高速串行的差分信号解为并行的数字信号;对于SDI视频发送而言,UltraScale GTH起到串化的作用,即将输入的并行的数字信号串化为高速串行的差分信号;UltraScale GTH的使用一般需要例化IP核,通过vivado的UI界面进行配置,但本设计需要对SD-SDI、HD-SDI、3G-SDI视频进行自动识别和自适应处理,所以需要使得UltraScale GTH具有动态改变线速率的功能,该功能可通过DRP接口配置,也可通过UltraScale GTH的rate接口配置此外,为了动态配置UltraScale GTH线速率,还需要UltraScale GTH控制模块,该模块参考了Xilinx的官方设计方案,具有动态监测SDI模式,动态配置DRP等功能;该方案参考了Xilinx官方的设计;UltraScale GTH 解串与串化模块代码架构如下:
在这里插入图片描述
UltraScale GTH IP核配置如下:
在这里插入图片描述

SMPTE UDH-SDI IP核

SMPTE UDH-SDI IP核是Xilinx系列FPGA特有的用于SDI视频编解码的IP,该IP配置使用非常简单,vivado的UI界面如下:
在这里插入图片描述
SMPTE UDH-SDI IP核必须与UltraScale GTH配合才能使用,对于SDI视频接收而言,该IP接收来自于UltraScale GTH的数据,然后将SDI视频解码为BT1120视频输出,对于SDI视频发送而言,该IP接收来自于用户侧的的BT1120视频数据,然后将BT1120视频编码为SDI视频输出;该方案参考了Xilinx官方的设计;SMPTE UDH-SDI IP IP核代码架构如下:
在这里插入图片描述

BT1120转RGB

BT1120转RGB模块的作用是将SMPTE UDH-SDI IP核解码输出的BT1120视频转换为RGB888视频,它由BT1120转CEA861模块、YUV422转YUV444模块、YUV444转RGB888三个模块组成,该方案参考了Xilinx官方的设计;BT1120转RGB模块代码架构如下:
在这里插入图片描述

纯Verilog图像缩放模块详解

本设计的图像缩放模块使用纯Verilog方案,功能框图如下,由跨时钟FIFO、插值+RAM阵列构成,跨时钟FIFO的目的是解决跨时钟域的问题,比如从低分辨率视频放大到高分辨率视频时,像素时钟必然需要变大,这是就需要异步FIFO了,插值算法和RAM阵列具体负责图像缩放算法层面的实现;
在这里插入图片描述
插值算法和RAM阵列以ram和fifo为核心进行数据缓存和插值实现,设计架构如下:
在这里插入图片描述
依据上图,图像缩放模块内部核心是例化了4个双口RAM,作用是缓存4行图像,以得到4个临近的像素,以此为基础做线性插值;如果是做图像放大操作,就以这4个临近的像素为基准,以线性插值为算法,在原图像中插入更多的像素点来扩大分辨率;如果是做图像缩小操作,就以这4个临近的像素为基准,以线性插值为算法,在原图像中删除更多的像素点来缩小分辨率;此外,前面描述的工作是实时的、整幅图像全部扫描式的进行,所以需要对RAM的读写操作进行精准控制;

图像缩放模块代码架构如下:模块的例化请参考工程源码的顶层代码;
在这里插入图片描述
图像缩放模块FIFO的选择可以调用工程对应的vivado工具自带的FIFO IP核,也可以使用纯verilog实现的FIFO,可通过接口参数选择,图像缩放模块顶层接口如下:
在这里插入图片描述
FIFO_TYPE选择原则如下:
1:总体原则,选择"xilinx"好处大于选择"verilog";
2:当你的FPGA逻辑资源不足时,请选"xilinx";
3:当你图像缩放的视频分辨率较大时,请选"xilinx";
4:当你的FPGA没有FIFO IP或者FIFO IP快用完了,请选"verilog";
5:当你向自学一下异步FIFO时,,请选"verilog";
6:不同FPGA型号对应的工程FIFO_TYPE参数不一样,但选择原则一样,具体参考代码;

2种插值算法的整合与选择
本设计将常用的双线性插值和邻域插值算法融合为一个代码中,通过输入参数选择某一种算法;
具体选择参数如下:

input  wire i_scaler_type //0-->bilinear;1-->neighbor
  • 1

通过输入i_scaler_type 的值即可选择;

输入0选择双线性插值算法;
输入1选择邻域插值算法;

代码里的配置如下:
在这里插入图片描述

纯Verilog图像缩放模块使用(重点阅读)

图像缩放模块使用非常简单,顶层代码里设置了四个参数,举例如下:
在这里插入图片描述
上图是将输入视频分辨率从1280x720缩放为1920x1080;
如果你想将输入视频分辨率从1280x720缩放为640x480;
则只需修改为如下:
在这里插入图片描述
再比如你想将输入视频分辨率从1280x720缩放为960x540;
则只需修改为如下:
在这里插入图片描述
当然,需要修改的不仅仅这一个地方,FDMA的配置也需要相应修改,详情请参考代码,但我想要证明的是,图像缩放模块使用非常简单,你都不需要知道它内部具体怎么实现的,上手就能用;

在本博主这里,想要实现图像缩放,操作就是这么无脑简单,就该两个参数就能搞定貌似高大上的双线性插值图像缩放,这种设计、这种操作、这种工程源码,你还喜欢吗?

FDMA 图像缓存

FDMA图像缓存架构实现的功能是将输入视频缓存到板载DDR中再读出送后续模块,目的是实现视频同步输出,实现输入视频到输出视频的跨时钟域问题,更好的呈现显示效果;由于调用了Xilinx官方的MIG作为DDR控制器,所以FDMA图像缓存架构就是实现用户数据到MIG的桥接作用;架构如下:
在这里插入图片描述
FDMA图像缓存架构由FDMA控制器+FDMA组成;FDMA实际上就是一个AXI4-FULL总线主设备,与MIG对接,MIG配置为AXI4-FULL接口;FDMA控制器实际上就是一个视频读写逻辑,以写视频为例,假设一帧图像的大小为M×N,其中M代表图像宽度,N代表图像高度;FDMA控制器每次写入一行视频数据,即每次向DDR中写入M个像素,写N次即可完成1帧图像的缓存,读视频与之一样;同时调用两个FIFO实现输入输出视频的跨时钟域处理,使得用户可以AXI4内部代码,以简单地像使用FIFO那样操作AXI总线,从而达到读写DDR的目的,进而实现视频缓存;本设计图像缓存方式为3帧缓存;FDMA图像缓存使用Xilinx vivado的Block Design设计,如下图:
在这里插入图片描述

UDP视频组包发送

UDP视频组包发送实现视频数据的组包并通过UDP协议栈发送出去,视频数据发送必须与QT上位机的接受程序一致,上位机定义的UDP帧格式包括帧头个UDP数据,QT上位机接收代码数据帧头定义如下:
在这里插入图片描述
FPGA端的UDP数据组包代码必须与上图的数据帧格式对应,否则QT无法解析,代码中定义了数据组包状态机以及数据帧,如下:
在这里插入图片描述
另外,由于UDP发送是64位数据位宽,而图像像素数据是24bit位宽,所以必须将UDP数据重新组合,以保证像素数据的对齐,这部分是整个工程的难点,也是所有FPGA做UDP数据传输的难点;UDP视频组包发送代码架构如下:
在这里插入图片描述

UDP协议栈

本UDP协议栈使用UDP协议栈网表文件,该协议栈目前并不开源,只提供网表文件,虽看不见源码但可正常实现UDP通信,但不影响使用,该协议栈带有用户接口,使得用户无需关心复杂的UDP协议而只需关心简单的用户接口时序即可操作UDP收发,非常简单;协议栈架构如下:
在这里插入图片描述
协议栈性能表现如下:
1:支持 UDP 接收校验和检验功能,暂不支持 UDP 发送校验和生成;
2:支持 IP 首部校验和的生成和校验,同时支持 ICMP 协议中的 PING 功能,可接收并响应同一个子网内部设备的 PING 请求;
3:可自动发起或响应同一个子网内设备的 ARP 请求,ARP 收发完全自适应。ARP 表可保存同一个子网内部256 个 IP 和 MAC 地址对;
4:支持 ARP 超时机制,可检测所需发送数据包的目的 IP 地址是否可达;
5:协议栈发送带宽利用率可达 93%,高发送带宽下,内部仲裁机制保证 PING 和 ARP 功能不受任何影响;
6:发送过程不会造成丢包;
7:提供64bit位宽AXI4-Stream形式的MAC接口,可与Xilinx官方的千兆以太网IP核Tri Mode Ethernet MAC,以及万兆以太网 IP 核 10 Gigabit Ethernet Subsystem、10 Gigabit Ethernet MAC 配合使用;
有了此协议栈,我们无需关心复杂的UDP协议的实现了,直接调用接口即可使用。。。
本UDP协议栈用户接口发送时序如下:
在这里插入图片描述
本UDP协议栈用户接口接收时序如下:
在这里插入图片描述

MAC数据缓冲FIFO组

这里对代码中用到的数据缓冲FIFO组做如下解释:
由于 UDP IP 协议栈的 AXI-Stream 数据接口位宽为 64bit,而 Tri Mode Ethernet MAC 的 AXI-Stream数据接口位宽为 8bit。因此,要将 UDP IP 协议栈与 Tri Mode Ethernet MAC 之间通过 AXI-Stream 接口互联,需要进行时钟域和数据位宽的转换。实现方案如下图所示:
在这里插入图片描述
收发路径(本设计只用到了发送)都使用了2个AXI-Stream DATA FIFO,通过其中1个FIFO实现异步时钟域的转换,1个FIFO实
现数据缓冲和同步Packet mode功能;由于千兆速率下Tri Mode Ethernet MAC的AXI-Stream数据接口同步时钟信号为125MHz,此时,UDP协议栈64bit的AXI-Stream数据接口同步时钟信号应该为125MHz/(64/8)=15.625MHz,因此,异步
AXI-Stream DATA FIFO两端的时钟分别为125MHz(8bit),15.625MHz(64bit);UDP IP协议栈的AXI-Stream接口经过FIFO时钟域转换后,还需要进行数据数据位宽转换,数据位宽的转换通过AXI4-Stream Data Width Converter完成,在接收路径中,进行 8bit 到 64bit 的转换;在发送路径中,进行 64bit 到 8bit 的转换;MAC数据缓冲FIFO组代码架构如下:
在这里插入图片描述

Tri Mode Ethernet MAC 使用教程

工程源码1使用Xilinx官方的Tri Mode Ethernet MAC IP核实现以太网物理层的数据接口转换;所以重点讲讲Tri Mode Ethernet MAC这个IP,IP调用如下:
在这里插入图片描述
Tri Mode Ethernet MAC并不能直接使用,而是需要配合对应的PHY芯片的RGMII时序图做针对性修改,需要修改IP内部源码,这部分操作比较复杂,我专门写了《Tri Mode Ethernet MAC移植使用教程》文档,并放在了资料包中;

此外,Tri Mode Ethernet MAC还需要AXI4-Lite接口的配置才能工作,工程中如下:
在这里插入图片描述

PHY芯片

工程源码1使用PHY芯片实现以太网物理层,用到了RTL8211F,通过这个型号PHY的使用,你将能学会其他型号PHY的使用,因为很多都是兼容的,比如RTL8211兼容YT8531,B50610兼容88E1518等;此外,还提供了PHY的参考原理图,一并放在了资料包中;

AXI 1G/2.5G Ethernet Subsystem 简介

工程源码2使用Xilinx官方的AXI 1G/2.5G Ethernet Subsystem实现以太网物理层;AXI 1G/2.5G Ethernet Subsystem的权威官方手册为《pg138-axi-ethernet》,请自行下载阅读,该IP是Xilinx官方将1G/2.5G Ethernet PCS/PMA or SGMII和Tri Mode Ethernet MAC封装在一起组成的全新IP,目的是简化FPGA实现以太网物理层的设计难度,直接调用这一个IP即可使用,该IP展开后如下:
在这里插入图片描述
接收端:
数据首先经过1G/2.5G Ethernet PCS/PMA or SGMII解串,将串行数据解为并行数据;然后经过弹性Buffer做数据缓冲处理,主要是为了去频偏,使板与板之间的数据稳定,然后进行8b/10b解码,恢复正常数据;然后经过PCS接收同步器,对数据进行跨时钟处理,同步到GMII时序下然后输出给Tri Mode Ethernet MAC进行数据合适转换,最后以AXI4-Stream输出;

发送端:
发送端则简单得多,用户侧UDP MAC数据首先给到Tri Mode Ethernet MAC进行数据合适转换,以GMII数据输出给1G/2.5G Ethernet PCS/PMA or SGMII,后者进行以太网物理层处理,以差分信号输出;

AXI 1G/2.5G Ethernet Subsystem 配置

AXI 1G/2.5G Ethernet Subsystem配置为1G,如下:
在这里插入图片描述
AXI 1G/2.5G Ethernet Subsystem可运行于1G和2.5G线速率,对GT时钟有严格研究,按照官方数据手册,运行1G线速率时,GT差分时钟必须为125M,运行2.5G线速率时,GT差分时钟必须为312.5M,如下:
在这里插入图片描述

多个 AXI 1G/2.5G Ethernet Subsystem 主从级联使用

多个AXI 1G/2.5G Ethernet Subsystem 的主从搭配使用的应用场景是FPGA开发板充当多光口的网卡使用,即一个FPGA挂载多个光口,每一个光口相当于一个独立的网卡,有独立的IP地址和MAC地址,类似于交换机;主从搭配使用框架如下:
在这里插入图片描述
AXI 1G/2.5G Ethernet Subsystem可单独使用,当单独使用时,一个AXI 1G/2.5G Ethernet Subsystem单独占用一个GT高速接口资源,单独占用一对差分时钟资源;此时的IP配置如下:
在这里插入图片描述
AXI 1G/2.5G Ethernet Subsystem也可多个级联主从搭配使用,主从搭配使用时,一个AXI 1G/2.5G Ethernet Subsystem当做主IP,占用一个GT高速接口资源,单独占用一对差分时钟资源;其他AXI 1G/2.5G Ethernet Subsystem当做从IP,占用一个GT高速接口资源,但不占用差分时钟资源,而是使用主IP提供的参考时钟;此时的从IP配置如下:
在这里插入图片描述

SFP光口转RJ45电口

工程源码2需要准备满足千兆传输要求的SFP光口转RJ45电口,某宝二三十块钱很便宜,大概长这样:
在这里插入图片描述

IP地址、端口号的修改

UDP协议栈留出了IP地址、端口号的修改端口供用户自由修改,位置在顶层模块如下:
在这里插入图片描述

UDP视频接收QT上位机

仅提供Win10版本的QT上位机,位置如下:
在这里插入图片描述
以Win10版本为例,源码位置如下:
在这里插入图片描述
以Win10版本下,可以点击已经编译好的QT软件直接运行,位置如下:
在这里插入图片描述
QT上位机运行效果如下:
在这里插入图片描述
我们的QT目前仅支持1280x720分辨率的视频抓图显示,但同时预留了1080P接口,对QT开发感兴趣的朋友可以尝试修改代码以适应1080P,因为QT在这里只是验证工具,不是本工程的重点,所以不再过多赘述;

工程源码架构

本博客提供2套工程源码,以工程源码1为例,vivado Block Design设计如下,其他工程与之类似,Block Design设计为图像缓存架构的部分:
在这里插入图片描述
本博客提供2套工程源码,以工程源码1为例,工程源码架构如下,此为PHY芯片实现以太网物理层方案:
在这里插入图片描述
本博客提供2套工程源码,以工程源码2为例,工程源码架构如下,此为Xilinx官方的AXI 1G/2.5G Ethernet Subsystem IP核实现以太网物理层方案:
在这里插入图片描述

4、工程源码1详解–>KU040,RTL8211F做以太网物理层方案

开发板FPGA型号:Xilinx-Kintex-UltraScale–xcku040-ffva1156-2-i;
开发环境:Vivado2019.1;
输入:3G-SDI相机或HDMI转SDI盒子,分辨率1920x1080@60Hz;
输出:RJ45-UDP网络视频,分辨率1280x720@60Hz;
SDI视频解串方案:Xilinx–UltraScale GTH高速接口解串;
SDI视频解码方案:Xilinx–SMPTE UHD-SDI 解码;
图像缩放方案:纯verilog代码实现、任意比例缩放的图像缩放模块;
图像缩放用例:1920x1080缩放到1280x720;
缓存方案:FDMA图像缓存+DDR4方案;
以太网物理层方案:RTL8211F芯片,延时模式,RGMII接口;
FPGA端MAC方案:Xilinx官方Tri Mode Ethernet MAC IP核,固定千兆模式;
以太网传输层协议:UDP协议,千兆速率;
实现功能:UltraScale系列FPGA实现SDI视频编解码+UDP以太网传输;
工程作用:此工程目的是让读者掌握Xilinx UltraScale系列FPGA实现SDI视频编解码+UDP以太网传输的设计能力,以便能够移植和设计自己的项目;
工程Block Design和工程代码架构请参考第3章节的《工程源码架构》小节内容;
工程的资源消耗和功耗如下:
在这里插入图片描述

5、工程源码2详解–>KU040,1G/2.5G Ethernet 做以太网物理层方案

开发板FPGA型号:Xilinx-Kintex-UltraScale–xcku040-ffva1156-2-i;
开发环境:Vivado2019.1;
输入:3G-SDI相机或HDMI转SDI盒子,分辨率1920x1080@60Hz;
输出:RJ45-UDP网络视频,分辨率1280x720@60Hz;
SDI视频解串方案:Xilinx–UltraScale GTH高速接口解串;
SDI视频解码方案:Xilinx–SMPTE UHD-SDI 解码;
图像缩放方案:纯verilog代码实现、任意比例缩放的图像缩放模块;
图像缩放用例:1920x1080缩放到1280x720;
缓存方案:FDMA图像缓存+DDR4方案;
以太网物理层方案:Xilinx官方的AXI 1G/2.5G Ethernet Subsystem IP核,固定千兆模式;
以太网传输层协议:UDP协议,千兆速率;
实现功能:UltraScale系列FPGA实现SDI视频编解码+UDP以太网传输;
工程作用:此工程目的是让读者掌握Xilinx UltraScale系列FPGA实现SDI视频编解码+UDP以太网传输的设计能力,以便能够移植和设计自己的项目;
工程Block Design和工程代码架构请参考第3章节的《工程源码架构》小节内容;
工程的资源消耗和功耗如下:
在这里插入图片描述

6、工程移植说明

vivado版本不一致处理

1:如果你的vivado版本与本工程vivado版本一致,则直接打开工程;
2:如果你的vivado版本低于本工程vivado版本,则需要打开工程后,点击文件–>另存为;但此方法并不保险,最保险的方法是将你的vivado版本升级到本工程vivado的版本或者更高版本;
在这里插入图片描述
3:如果你的vivado版本高于本工程vivado版本,解决如下:
在这里插入图片描述
打开工程后会发现IP都被锁住了,如下:
在这里插入图片描述
此时需要升级IP,操作如下:
在这里插入图片描述
在这里插入图片描述

FPGA型号不一致处理

如果你的FPGA型号与我的不一致,则需要更改FPGA型号,操作如下:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
更改FPGA型号后还需要升级IP,升级IP的方法前面已经讲述了;

其他注意事项

1:由于每个板子的DDR不一定完全一样,所以MIG IP需要根据你自己的原理图进行配置,甚至可以直接删掉我这里原工程的MIG并重新添加IP,重新配置;
2:根据你自己的原理图修改引脚约束,在xdc文件中修改即可;
3:纯FPGA移植到Zynq需要在工程中添加zynq软核;

7、上板调试验证

准备工作

需要准备的器材如下:
FPGA开发板;
SDI摄像头或HDMI转SDI盒子;
网线;
我的开发板了连接如下:
在这里插入图片描述
然后将电脑端IP地址设置为如下:
在这里插入图片描述
然后下载bit或者固化bin文件,即可开始测试;

ping测试

打开电脑CMD,输入ping指令;
单次ping测试如下:
在这里插入图片描述
连续ping测试如下:
在这里插入图片描述

ARP测试

打开电脑CMD,输入ARP指令;如下:
在这里插入图片描述

QT上位机配置

打开QT上位机配置如下,然后可以采集显示视频;
在这里插入图片描述

FPGA实时SDI视频采集转UDP网络视频流输出演示

FPGA实时SDI视频采集转UDP网络视频流输出演示如下:

SDI-UDP

8、福利:工程代码的获取

福利:工程代码的获取
代码太大,无法邮箱发送,以某度网盘链接方式发送,
资料获取方式:私,或者文章末尾的V名片。
网盘资料如下:
在这里插入图片描述
此外,有很多朋友给本博主提了很多意见和建议,希望能丰富服务内容和选项,因为不同朋友的需求不一样,所以本博主还提供以下服务:
在这里插入图片描述

源码技术支持加我微信哦
微信名片
注:本文转载自blog.csdn.net的9527华安的文章"https://blog.csdn.net/qq_41667729/article/details/134918026"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
推荐如何高效学习一门技术:从知到行的飞轮效应

如何高效学习一门技术:从知到行的飞轮效应

如何高效学习一门技术:从知到行的飞轮效应在快速变化的信息社会,学习新技术的需求从未如此迫切。无论是应对职场挑战,还是追求个人成长,掌握新技能都是通往机会的钥匙。然而,学习不仅是为了获取知识,更是为了将知识转化为行动,影响生活。正如哈佛幸福课...
2025-04-25 2299 7286
推荐

Apifox 4月更新|Apifox在线文档支持LLMs.txt、评论支持使用@提及成员、支持为团队配置「IP 允许访问名单」

Apifox 新版本上线啦!看看本次版本更新主要涵盖的重点内容,有没有你所关注的功能特性:Apifox 在线文档支持 LLMs.txt评论支持使用 @ 提及成员支持为团队配置「IP 允许访问名单」鉴权组件支持迭代分支、版本分支、修改历史记录...
2025-04-25 3784 5609
推荐

直观讲解生成对抗网络背后的数学原理

作者:Ameh Emmanuel Sunday简单的前馈神经网络这篇文章讲的是一个非常独特的深度学习框架——生成对抗网络(GANs),我觉得它特别有意思,不仅因为它的工作原理,还因为它正在彻底改变流体力学领域中,尤其是在降阶建模和动力系统这...
2025-04-25 2661 9140
推荐搭建公司前端脚手架

搭建公司前端脚手架

前言公司的项目使用的都是 react + ts + mobx + antd 的技术栈,每次搞新组件或者重构组件的时候都要重复新建文件夹,比较麻烦,而且每个人的代码风格、习惯也有差异。所以搭建一个快速创建业务组件的脚手架方便开发。初始化项目根...
2025-04-25 2851 11000
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2492) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

  • 1

    如何高效学习一门技术:从知到行的飞轮效应

  • 2

    Apifox 4月更新|Apifox在线文档支持LLMs.txt、评论支持使用@提及成员、支持为团队配置「IP 允许访问名单」

  • 3

    直观讲解生成对抗网络背后的数学原理

  • 4

    搭建公司前端脚手架

  • 5

    利用Nginx实现高性能的前端打点采集服务(支持GET和POST)

  • 6

    Andorid平台实现高性能低延迟的多路RTSP播放器

  • 7

    使用AndroidStudio阅读源码

  • 8

    【SHA-2系列】SHA256 前端安全算法 技术实践

  • 9

    Cursor + MiniMax MCP 搞一个今日 AI 热点播报站

  • 10

    狂收 33k+ star!全网精选的 MCP 一网打尽!!

101
推荐
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2025 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top