Zynq系列FPGA实现SDI编解码转SFP光口传输(光端机),基于GTX高速接口,提供6套工程源码和技术支持

目录

Zynq系列FPGA实现SDI编解码转SFP光口传输(光端机),基于GTX高速接口,提供6套工程源码和技术支持

1、前言

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

工程概述

本设计基于Zynq系列的Zynq7100 FPGA开发板实现SDI视频编解码+SFP光口传输,也就是实现普通Sensor采集转SDI输出,但输出方式不是NBC座子,而是SFP光口,类似于市面上的光端机;理论上输入源可以是多种多样的,取决于你想做的产品,本博主手上只有OV5640摄像头,外加开发板自带了一路HDMI输入接口,所以本设计的Sensor为OV5640摄像头和HDMI,另外,为了照顾收手上没有Sensor或者不是本设计同款Sensor亦或是Sensor方案还未定的情况,本博主在工程中还设计了动态彩条模块,彩条由FPGA内部逻辑产生,且是动态移动的,完全可模拟Sensor,输入源选择Sensor还是彩条,通过Sensor模块的顶层参数配置,默认选择Sensor输入;

SDI视频转SFP光口发送流程如下:

FPGA采集到Sensor图像后,经过Xilinx官方的Video In To AXI4-Stream IP核实现Native视频到 AXI4-Stream视频流的转换,AXI4-Stream视频流是Xilinx推荐的图传数据流形式;然后调用Xilinx官方的VDMA实现图像缓存,缓存介质为PS端DDR3,为了降低延时,VDMA配置为缓存1帧;图像从DDR3中读出后送入ilinx官方的AXI4-Stream To Video Out IP核实现AXI4-Stream视频流到Native视频的转换,即输出带行同步、场同步等同步信号的RGB888视频;然后调用纯Verilog实现的RGB转BT1120模块实现RGB888视频到BT1120视频流的转换;然后调用Xilinx官方的SMPTE SD/HD/3G SDI IP核实现SDI视频编码操作,本工程有HD-SDI和3G-SDI两种编码;然后调用Xilinx官方的GTX高速资源(直接调用原语),实现并行数据到高速串行的转换,本博称之为串化,差分高速信号再进入板载的SFP光口输出,用光纤连接与其对接的接收设备;

SFP光口接收SDI视频输出流程如下:

FPGA开发板板载SFP光口接收SDI输入视频;差分SDI视频信号进入Xilinx官方的GTX高速资源(直接调用原语),实现数据高速串行到并行的转换,本博称之为解串;解串后的并行视频再送入Xilinx系列FPGA特有的SMPTE SD/HD/3G SDI IP核,进行SDI视频解码操作并输出BT1120视频,然后调用纯Verilog实现的BT1120转RGB模块实现BT1120视频流到RGB888视频的转换;再经过Xilinx官方的Video In To AXI4-Stream IP核实现Native视频到 AXI4-Stream视频流的转换,AXI4-Stream视频流是Xilinx推荐的图传数据流形式;然后调用Xilinx官方的VDMA实现图像缓存,缓存介质为PS端DDR3,为了降低延时,VDMA配置为缓存1帧;图像从DDR3中读出后送入ilinx官方的AXI4-Stream To Video Out IP核实现AXI4-Stream视频流到Native视频的转换,即输出带行同步、场同步等同步信号的RGB888视频;然后调用本博自研的纯Verilog实现GRB转HDMI模块实现RGB888视频流到HDMI视频转换;最后通过HDMI线连接至显示器显示即可;

本博客提供6套工程源码,具体如下:

现对上述6套工程源码做如下解释,方便读者理解:

工程源码1

开发板FPGA型号为Xilinx-->Xilinx-Zynq7100--xc7z100ffg900-2;输入源为OV5640摄像头或动态彩条,分辨率为1280x720@30Hz,可以通过Sensor模块的顶层参数配置,默认选择Sensor输入;FPGA纯verilog实现的i2c配置模块对摄像头进行初始化配置,并采集摄像头数据以RGB888输出,然后调用Xilinx官方的Video In To AXI4-Stream IP核实现Native视频到 AXI4-Stream视频流的转换;然后调用Xilinx官方的VDMA实现图像缓存,缓存介质为PS端DDR3;图像从DDR3中读出后送入ilinx官方的AXI4-Stream To Video Out IP核实现AXI4-Stream视频流到Native视频的转换;然后调用纯Verilog实现的RGB转BT1120模块实现RGB888视频到BT1120视频流的转换;然后调用Xilinx官方的SMPTE SD/HD/3G SDI IP核实现HD-SDI视频编码操作;然后调用Xilinx官方的GTX原语,实现并行数据到高速串行的转换,差分高速信号再进入板载的SFP光口输出,用光纤连接板载的SFP光口的TX和RX接口,形成单板的SFP光口回环;然后FPGA开发板板载SFP光口接收SDI输入视频;差分SDI视频信号进入Xilinx官方的GTX高速资源(直接调用原语),实现数据高速串行到并行的转换,本博称之为解串;解串后的并行视频再送入Xilinx系列FPGA特有的SMPTE SD/HD/3G SDI IP核,进行SDI视频解码操作并输出BT1120视频,然后调用纯Verilog实现的BT1120转RGB模块实现BT1120视频流到RGB888视频的转换;再经过Xilinx官方的Video In To AXI4-Stream IP核实现Native视频到 AXI4-Stream视频流的转换,AXI4-Stream视频流是Xilinx推荐的图传数据流形式;然后调用Xilinx官方的VDMA实现图像缓存,缓存介质为PS端DDR3,为了降低延时,VDMA配置为缓存1帧;图像从DDR3中读出后送入ilinx官方的AXI4-Stream To Video Out IP核实现AXI4-Stream视频流到Native视频的转换,即输出带行同步、场同步等同步信号的RGB888视频;然后调用本博自研的纯Verilog实现GRB转HDMI模块实现RGB888视频流到HDMI视频转换;最后通过HDMI线连接至显示器显示即可;本工程需要运行Zynq软核;是单板的SFP光口数据回环,即一套工程同时实现了SDI视频转SFP光口发送+SFP光口接收SDI视频输出的完整功能,用于验证该方案的可行性;适用于SDI视频转SFP光口传输场景;

工程源码2

开发板FPGA型号为Xilinx-->Xilinx-Zynq7100--xc7z100ffg900-2;输入源为OV5640摄像头或动态彩条,分辨率为1280x720@30Hz,可以通过Sensor模块的顶层参数配置,默认选择Sensor输入;FPGA纯verilog实现的i2c配置模块对摄像头进行初始化配置,并采集摄像头数据以RGB888输出,然后调用Xilinx官方的Video In To AXI4-Stream IP核实现Native视频到 AXI4-Stream视频流的转换;然后调用Xilinx官方的VDMA实现图像缓存,缓存介质为PS端DDR3;图像从DDR3中读出后送入ilinx官方的AXI4-Stream To Video Out IP核实现AXI4-Stream视频流到Native视频的转换;然后调用纯Verilog实现的RGB转BT1120模块实现RGB888视频到BT1120视频流的转换;然后调用Xilinx官方的SMPTE SD/HD/3G SDI IP核实现HD-SDI视频编码操作;然后调用Xilinx官方的GTX原语,实现并行数据到高速串行的转换,差分高速信号再进入板载的SFP光口输出;本工程需要运行Zynq软核;是单板的SFP光口数据发送功能,适用于SDI视频转SFP光口输出场景,比如市面上的光端机;

工程源码3

FPGA开发板板载SFP光口接收SDI输入视频;差分SDI视频信号进入Xilinx官方的GTX高速资源(直接调用原语),实现数据高速串行到并行的转换,本博称之为解串;解串后的并行视频再送入Xilinx系列FPGA特有的SMPTE SD/HD/3G SDI IP核,进行SDI视频解码操作并输出BT1120视频,然后调用纯Verilog实现的BT1120转RGB模块实现BT1120视频流到RGB888视频的转换;再经过Xilinx官方的Video In To AXI4-Stream IP核实现Native视频到 AXI4-Stream视频流的转换,AXI4-Stream视频流是Xilinx推荐的图传数据流形式;然后调用Xilinx官方的VDMA实现图像缓存,缓存介质为PS端DDR3,为了降低延时,VDMA配置为缓存1帧;图像从DDR3中读出后送入ilinx官方的AXI4-Stream To Video Out IP核实现AXI4-Stream视频流到Native视频的转换,即输出带行同步、场同步等同步信号的RGB888视频;然后调用本博自研的纯Verilog实现GRB转HDMI模块实现RGB888视频流到HDMI视频转换;最后通过HDMI线连接至显示器显示,输出分辨率为1280x720@60Hz;本工程需要运行Zynq软核;是单板的SFP光口数据接收功能,适用于SFP光口接收SDI视频输出场景;

工程源码4

开发板FPGA型号为Xilinx-->Xilinx-Zynq7100--xc7z100ffg900-2;输入源为板载的HDMI输入接口或动态彩条,分辨率为1920x1080@60Hz,使用笔记本电脑接入HDMI输入接口,以模拟输入Sensor;可以通过Sensor模块的顶层参数配置,默认选择Sensor输入;FPGA纯verilog实现的i2c配置模块完成HDMI RX的DDC接口配置,EDID配置为1920x1080@60Hz,使用纯VDHL代码实现的HDMI转RGB模块实现输入HDMI视频解码操作,并输出Native的RGB888视频流;然后调用Xilinx官方的Video In To AXI4-Stream IP核实现Native视频到 AXI4-Stream视频流的转换;然后调用Xilinx官方的VDMA实现图像缓存,缓存介质为PS端DDR3;图像从DDR3中读出后送入ilinx官方的AXI4-Stream To Video Out IP核实现AXI4-Stream视频流到Native视频的转换;然后调用纯Verilog实现的RGB转BT1120模块实现RGB888视频到BT1120视频流的转换;然后调用Xilinx官方的SMPTE SD/HD/3G SDI IP核实现3G-SDI视频编码操作;然后调用Xilinx官方的GTX原语,实现并行数据到高速串行的转换,差分高速信号再进入板载的SFP光口输出,用光纤连接板载的SFP光口的TX和RX接口,形成单板的SFP光口回环;然后FPGA开发板板载SFP光口接收SDI输入视频;差分SDI视频信号进入Xilinx官方的GTX高速资源(直接调用原语),实现数据高速串行到并行的转换,本博称之为解串;解串后的并行视频再送入Xilinx系列FPGA特有的SMPTE SD/HD/3G SDI IP核,进行SDI视频解码操作并输出BT1120视频,然后调用纯Verilog实现的BT1120转RGB模块实现BT1120视频流到RGB888视频的转换;再经过Xilinx官方的Video In To AXI4-Stream IP核实现Native视频到 AXI4-Stream视频流的转换,AXI4-Stream视频流是Xilinx推荐的图传数据流形式;然后调用Xilinx官方的VDMA实现图像缓存,缓存介质为PS端DDR3,为了降低延时,VDMA配置为缓存1帧;图像从DDR3中读出后送入ilinx官方的AXI4-Stream To Video Out IP核实现AXI4-Stream视频流到Native视频的转换,即输出带行同步、场同步等同步信号的RGB888视频;然后调用本博自研的纯Verilog实现GRB转HDMI模块实现RGB888视频流到HDMI视频转换;最后通过HDMI线连接至显示器显示即可;本工程需要运行Zynq软核;是单板的SFP光口数据回环,即一套工程同时实现了SDI视频转SFP光口发送+SFP光口接收SDI视频输出的完整功能,用于验证该方案的可行性;适用于SDI视频转SFP光口传输场景;

工程源码5

开发板FPGA型号为Xilinx-->Xilinx-Zynq7100--xc7z100ffg900-2;输入源为板载的HDMI输入接口或动态彩条,分辨率为1920x1080@60Hz,使用笔记本电脑接入HDMI输入接口,以模拟输入Sensor;可以通过Sensor模块的顶层参数配置,默认选择Sensor输入;FPGA纯verilog实现的i2c配置模块完成HDMI RX的DDC接口配置,EDID配置为1920x1080@60Hz,使用纯VDHL代码实现的HDMI转RGB模块实现输入HDMI视频解码操作,并输出Native的RGB888视频流;然后调用Xilinx官方的Video In To AXI4-Stream IP核实现Native视频到 AXI4-Stream视频流的转换;然后调用Xilinx官方的VDMA实现图像缓存,缓存介质为PS端DDR3;图像从DDR3中读出后送入ilinx官方的AXI4-Stream To Video Out IP核实现AXI4-Stream视频流到Native视频的转换;然后调用纯Verilog实现的RGB转BT1120模块实现RGB888视频到BT1120视频流的转换;然后调用Xilinx官方的SMPTE SD/HD/3G SDI IP核实现HD-SDI视频编码操作;然后调用Xilinx官方的GTX原语,实现并行数据到高速串行的转换,差分高速信号再进入板载的SFP光口输出;本工程需要运行Zynq软核;是单板的SFP光口数据发送功能,适用于SDI视频转SFP光口输出场景,比如市面上的光端机;

工程源码6

FPGA开发板板载SFP光口接收SDI输入视频;差分SDI视频信号进入Xilinx官方的GTX高速资源(直接调用原语),实现数据高速串行到并行的转换,本博称之为解串;解串后的并行视频再送入Xilinx系列FPGA特有的SMPTE SD/HD/3G SDI IP核,进行SDI视频解码操作并输出BT1120视频,然后调用纯Verilog实现的BT1120转RGB模块实现BT1120视频流到RGB888视频的转换;再经过Xilinx官方的Video In To AXI4-Stream IP核实现Native视频到 AXI4-Stream视频流的转换,AXI4-Stream视频流是Xilinx推荐的图传数据流形式;然后调用Xilinx官方的VDMA实现图像缓存,缓存介质为PS端DDR3,为了降低延时,VDMA配置为缓存1帧;图像从DDR3中读出后送入ilinx官方的AXI4-Stream To Video Out IP核实现AXI4-Stream视频流到Native视频的转换,即输出带行同步、场同步等同步信号的RGB888视频;然后调用本博自研的纯Verilog实现GRB转HDMI模块实现RGB888视频流到HDMI视频转换;最后通过HDMI线连接至显示器显示,输出分辨率为1920x1080@60Hz;本工程需要运行Zynq软核;是单板的SFP光口数据接收功能,适用于SFP光口接收SDI视频输出场景;

免责声明

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

2、相关方案推荐

本博已有的 SDI 编解码方案

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

本方案在Xilinx-Kintex7上的应用

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

3、详细设计方案

设计原理框图

设计原理框图如下:

输入Sensor之-->OV5640摄像头

在SDI视频转SFP光口发送工程中,输入Sensor是本工程的输入设备,其一为OV5640摄像头,此外本博主在工程中还设计了动态彩条模块,彩条由FPGA内部逻辑产生,且是动态移动的,完全可模拟Sensor,输入源选择Sensor还是彩条,通过Sensor模块的顶层参数配置,默认选择Sensor输入;Sensor模块如下:

SENSOR_TYPE=0;则输出OV5640摄像头采集的视频;

SENSOR_TYPE=1;则输出动态彩条的视频;

OV5640摄像头需要i2c初始化配置,本设计配置为1280x720@30Hz分辨率,本设计提供纯verilog代码实现的i2c模块实现配置功能;此外,OV5640摄像头还需要图像采集模块实现两个时钟输出一个RGB565的视频转换为一个时钟输出一个RGB888视频,本设计提供纯verilog代码实现的图像采集模块实现配置功能;动态彩条则由FPGA内部逻辑实现,由纯verilog代码编写;将OV5640摄像头配置采集和动态彩条进行代码封装,形成helai_OVsensor.v的顶层模块,整个模块代码架构如下:

输入Sensor之-->HDMI

在SDI视频转SFP光口发送工程中,输入Sensor是本工程的输入设备,其二为板载的HDMI输入接口,使用笔记本电脑接入HDMI输入接口,以模拟输入Sensor;为了支持1080P@60Hz的输入视频,在硬件设计上需要加上驱动芯片,本设计采用TMDS141RHAR,也可采用其他型号,参考原理图如下:

此外本博主在工程中还设计了动态彩条模块,彩条由FPGA内部逻辑产生,且是动态移动的,完全可模拟Sensor,输入源选择Sensor还是彩条,通过Sensor模块的顶层参数配置,默认选择Sensor输入;Sensor模块如下:

SENSOR_TYPE=0;则输出HDMI接口采集的视频;

SENSOR_TYPE=1;则输出动态彩条的视频;

HDMI输入接口逻辑设计,必须要考虑DDC通信,即通过i2c总线与输入设备协商分辨率,即EDID配置;本设计提供纯verilog代码实现的i2c模块实现EDID配置;此外,TMDS差分视频进入FPGA IO后,需要将其解码为RGB视频,使用纯VDHL代码实现的HDMI转RGB模块实现输入HDMI视频解码操作,并输出Native的RGB888视频流,本博主已将该代码封装为了自定义IP,可在vivado中直接调用,如下:

将HDMI转RGB模块和动态彩条进行代码封装,形成helai_OVsensor.v的顶层模块,整个模块代码架构如下:

VDMA图像缓存

本设计的视频缓存方案采用Xilinx官方的的VDMA图像缓存架构;缓存介质为PS端DDR3;VDMA使用Xilinx vivado的Block Design设计,以工程源码1为例,如下图:

为了降低延时,VDMA设置为缓存1帧,如下:

RGB转BT1120

在SDI视频转SFP光口发送工程中,SDI视频输出架构首先要实现VDMA读出的AXI4-Stream到Native格式的转换,得到RGB888视频后再通过RGB转BT1120实现到BT1120视频的转换,其架构如下:

在SDI输出方式下VGA时序模块的像素时钟由SMPTE SD/HD/3G SDI IP核的发送用户时钟提供,在不同的SDI模式下像素时钟不同,比如在3G-SDI模式下像素时钟为148.5M,在HD-SDI的720P@60Hz模式下像素时钟为74.25M;

在SDI输出方式下需要使用RGB转BT1120模块;RGB转BT1200模块的作用是将用户侧的RGB视频转换为BT1200视频输出给SMPTE SD/HD/3G SDI IP核;RGB转BT1120模块由RGB888转YUV444模块、YUV444转YUV422模块、SDI视频编码模块、数据嵌入模块组成,该方案参考了Xilinx官方的设计;BT1120转RGB模块代码架构如下:

GTX 解串与串化

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

SMPTE SD/HD/3G SDI IP核

SMPTE SD/HD/3G SDI IP核是Xilinx系列FPGA特有的用于SDI视频编解码的IP,该IP配置使用非常简单,vivado的UI界面如下:

SMPTE SD/HD/3G SDI IP核必须与GTX配合才能使用,对于SDI视频接收而言,该IP接收来自于GTX的数据,然后将SDI视频解码为BT1120视频输出,对于SDI视频发送而言,该IP接收来自于用户侧的的BT1120视频数据,然后将BT1120视频编码为SDI视频输出;该方案参考了Xilinx官方的设计;SMPTE SD/HD/3G SDI IP核代码架构如下:

BT1120转RGB

在SFP光口接收SDI视频并输出的工程中,BT1120转RGB模块的作用是将SMPTE SD/HD/3G SDI IP核解码输出的BT1120视频转换为RGB888视频,它由BT1120转CEA861模块、YUV422转YUV444模块、YUV444转RGB888三个模块组成,该方案参考了Xilinx官方的设计;BT1120转RGB模块代码架构如下:

HDMI输出

在SFP光口接收SDI视频并输出的工程中,使用HDMI输出模块将RGB视频编码为HDMI差分信号,HDMI输出模块采用verilog代码手写,可以用于FPGA的HDMI发送应用,代码如下:

关于这个模块,请参考我之前的博客,博客地址:点击直接前往

工程源码架构之-->逻辑设计

本博客提供6套工程源码,以工程源码1为例,该工程同时实现了SDI视频转SFP光口发送+SFP光口接收SDI视频输出的完整功能,vivado Block Design设计如下,其他工程与之类似,Block Design设计为图像缓存架构的部分:

以工程源码1为例,该工程同时实现了SDI视频转SFP光口发送+SFP光口接收SDI视频输出的完整功能,工程源码架构如下,其他工程与之类似:

工程源码架构之-->SDK软件设计

工程源码PL端时钟由Zynq软核提供,所以需要运行运行SDK以启动Zynq,此外,VDMA等IP核都需要运行软件驱动才能正常工作,SDK软件代码架构如下:

4、工程源码1详解-->OV5640摄像头输入转HD-SDI+SFP光口回环

开发板FPGA型号:Xilinx-Zynq7100--xc7z100ffg900-2;

开发环境:Vivado2019.1;

输入:OV5640摄像头或动态彩条,分辨率1280x720@30Hz;

最终视频输出:HDMI,分辨率1280x720@60Hz;

缓存方案:Xilinx官方VDMA方案;

缓存介质:PS端DDR3;

SFP光口连接方案:单板SFP光口TX+RX回环;

工程作用:此工程目的是让读者掌握Zynq系列FPGA实现Sensor转SDI+SFP光口传输的设计能力,以便能够移植和设计自己的项目;

工程Block Design和工程代码架构请参考第3章节的《工程源码架构》小节内容;

工程的资源消耗和功耗如下:

5、工程源码2详解-->OV5640摄像头输入转HD-SDI+SFP光口发送

开发板FPGA型号:Xilinx-Zynq7100--xc7z100ffg900-2;

开发环境:Vivado2019.1;

输入:OV5640摄像头或动态彩条,分辨率1280x720@30Hz;

最终视频输出:SFP光口,分辨率1280x720@60Hz;

缓存方案:Xilinx官方VDMA方案;

缓存介质:PS端DDR3;

SFP光口连接方案:单板SFP光口TX发送;

工程作用:此工程目的是让读者掌握Zynq系列FPGA实现Sensor转SDI+SFP光口传输的设计能力,以便能够移植和设计自己的项目;

工程Block Design和工程代码架构请参考第3章节的《工程源码架构》小节内容;

工程的资源消耗和功耗如下:

6、工程源码3详解-->SFP光口接收HD-SDI视频转HDMI输出

开发板FPGA型号:Xilinx-Zynq7100--xc7z100ffg900-2;

开发环境:Vivado2019.1;

输入:SFP光口,分辨率1280x720@60Hz;

最终视频输出:HDMI,分辨率1280x720@60Hz;

缓存方案:Xilinx官方VDMA方案;

缓存介质:PS端DDR3;

SFP光口连接方案:单板SFP光口RX接收;

工程作用:此工程目的是让读者掌握Zynq系列FPGA实现SFP光口接收SDI输出的设计能力,以便能够移植和设计自己的项目;

工程Block Design和工程代码架构请参考第3章节的《工程源码架构》小节内容;

工程的资源消耗和功耗如下:

7、工程源码4详解-->HDMI输入转3G-SDI+SFP光口回环

开发板FPGA型号:Xilinx-Zynq7100--xc7z100ffg900-2;

开发环境:Vivado2019.1;

输入:HDMI(笔记本输入模拟Sensor)或动态彩条,分辨率1920x1080@60Hz;

最终视频输出:HDMI,分辨率1920x1080@60Hz;

缓存方案:Xilinx官方VDMA方案;

缓存介质:PS端DDR3;

SFP光口连接方案:单板SFP光口TX+RX回环;

工程作用:此工程目的是让读者掌握Zynq系列FPGA实现Sensor转SDI+SFP光口传输的设计能力,以便能够移植和设计自己的项目;

工程Block Design和工程代码架构请参考第3章节的《工程源码架构》小节内容;

工程的资源消耗和功耗如下:

8、工程源码5详解-->HDMI输入转3G-SDI+SFP光口发送

开发板FPGA型号:Xilinx-Zynq7100--xc7z100ffg900-2;

开发环境:Vivado2019.1;

输入:HDMI(笔记本输入模拟Sensor)或动态彩条,分辨率1920x1080@60Hz;

最终视频输出:SFP光口,分辨率1920x1080@60Hz;

缓存方案:Xilinx官方VDMA方案;

缓存介质:PS端DDR3;

SFP光口连接方案:单板SFP光口TX发送;

工程作用:此工程目的是让读者掌握Zynq系列FPGA实现Sensor转SDI+SFP光口传输的设计能力,以便能够移植和设计自己的项目;

工程Block Design和工程代码架构请参考第3章节的《工程源码架构》小节内容;

工程的资源消耗和功耗如下:

9、工程源码6详解-->SFP光口接收3G-SDI视频转HDMI输出

开发板FPGA型号:Xilinx-Zynq7100--xc7z100ffg900-2;

开发环境:Vivado2019.1;

输入:SFP光口,分辨率1920x1080@60Hz;

最终视频输出:HDMI,分辨率1920x1080@60Hz;

缓存方案:Xilinx官方VDMA方案;

缓存介质:PS端DDR3;

SFP光口连接方案:单板SFP光口RX接收;

工程作用:此工程目的是让读者掌握Zynq系列FPGA实现SFP光口接收SDI输出的设计能力,以便能够移植和设计自己的项目;

工程Block Design和工程代码架构请参考第3章节的《工程源码架构》小节内容;

工程的资源消耗和功耗如下:

10、工程移植说明

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软核;

11、上板调试验证

准备工作

需要准备的器材如下:

FPGA开发板;

笔记本电脑;

OV5640摄像头或者HDMI输入或者动态彩条;

SFP光模块;

光纤;

HDMI显示器;

我的开发板了连接如下:

输出视频演示

以工程源码1为例,输出如下:

Zynq-SDI-SFP-视频收发

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

福利:工程代码的获取

代码太大,无法邮箱发送,以某度网盘链接方式发送,

资料获取方式:私,或者文章末尾的V名片。

网盘资料如下:

此外,有很多朋友给本博主提了很多意见和建议,希望能丰富服务内容和选项,因为不同朋友的需求不一样,所以本博主还提供以下服务:

相关推荐
仲南音15 小时前
Xilinx FPGA——时钟IP核MMCM、PLL
fpga开发
I'm a winner1 天前
基于Xilinx FPGA的LVDS高速串行通信系统(三)--数据训练及握手机制【文末源码】
fpga开发
upper20201 天前
coremark移植坑之-nostartfiles -nostdlib参数
学习·fpga开发·coremark移植·riscv设计
Eloudy2 天前
Vivado 纯命令行构建 FPGA 项目教程
fpga开发
Rambo.xia2 天前
AXI跨时钟域与数据一致性——CDC FIFO深度不够、写后读冒险、多Master仲裁、乱序返回,出了Bug根本查不出来
fpga开发·bug
upper20202 天前
FPGA部署卷积神经网络识别MINST图片
fpga开发·卷积神经网络·minst·minst识别·部署神经网络·神经网络识别图片
你是我的解忧王子2 天前
嵌入式 ADC采样 原始数据分析上层(平均值 波动率 正态分布 线性补偿 系统误差)
fpga开发·数据挖掘·数据分析
9527华安3 天前
FPGA纯verilog代码ISP图像处理培训教程,基于IMX214,提供工程源码+视频教程+FPGA开发板
图像处理·fpga开发·isp·imx214·mipi
千寻xun3 天前
二、实战篇-NVME SSD控制之ZYNQ实现(六)-读写NVME SSD硬盘数据
fpga开发·nvme·nvme ssd
千寻xun3 天前
二、实战篇-NVME SSD控制之ZYNQ实现(三)
fpga开发·nvme ssd·nvme协议