FPGA实现GTH Transceivers Wizard传输2路视频,基于aurora 8b10b编解码架构,提供4套工程源码和技术支持

目录

FPGA实现GTH Transceivers Wizard传输2路视频,基于aurora 8b10b编解码架构,提供4套工程源码和技术支持

视频-图传

1、前言

创作背景

FPGA实现SFP光口视频编解码现状;

目前基于Xilinx系列FPGA的SFP光口视频编解码主要有以下几种,Artix7系列的GTP、Kintex7系列的GTX、更高端FPGA器件的GTH、GTY、GTV、GTM等,线速率越来越高,应用场景也越来越高端;编码方式也是多种多样,有8b/10b编解码、64b/66b编解码、HDMI编解码、SDI编解码等等;

从Xilinx官方IP核的选择来看,有Transceivers Wizard物理层IP核、Aurora8b10b协议层IP核可选,Transceivers Wizard更为底层,从PMA、PCS到用户接口,将更多底层接口开放给用户使用,便于灵活设计和自定义修改,但设计难度更大,需要用户自行设计接收端数据对齐逻辑,Transceivers Wizard本身不做对齐处理;而Aurora8b10b IP核是封装了完整协议层,并将接口转换为了AXI4-Stream流接口,用户无需关心数据对齐逻辑,而只需将自己的设计与AXI4-Stream流接口对接即可,使用和设计难度大为降低,但设计的灵活性也随之降低,由于Aurora8b10b IP核不开放底层接口,更难以做到自定义协议和设计;Transceivers Wizard IP核与Aurora8b10b IP核各有千秋,革命分工,没有优劣之分。

本设计采用Xilinx V7和UltraScale系列的GTH作为高速收发器,使用Transceivers Wizard物理层IP核,aurora 8b10b编解码的方式实现高速收发器2路视频传输;

工程概述

本设计使用Xilinx V7和UltraScale系列FPGA为平台,实现基于GTH Transceivers Wizard aurora 8b10b编解码2路视频传输;视频输入源有多种,一种是板载的HDMI输入接口,另一种是传统摄像头,包括OV7725、OV5640和AR0135;如果你的FPGA开发板没有视频输入接口,或者你的手里没有摄像头时,可以使用FPGA逻辑实现的动态彩条模拟输入视频,代码里通过parametr参数选择视频源,默认不使用动态彩条;FPGA首先使用纯veriolog代码实现的i2c配置模块的对摄像头进行初始化配置,并采集摄像头视频;然后将采集输入视频复制1份,以模拟2路视频源;然后2路视频送入纯veriolog代码实现的2路视频组包模块,将视频的每一行打上包头包尾标记以包的形式输出,以便接收方进行有效识别;让后调用Xilinx官方的GTH Transceivers Wizard IP核实现视频aurora 8b10b编码和数据串化,将并行数据串化为高速串行差分信号,线速率设置为5Gbps,编码后的视频通过板载的SFP光口的光纤输出;然后用板载的SFP光口的光纤接收视频,然后送入Xilinx官方的GTH Transceivers Wizard IP核实现视频aurora 8b10b解码和数据解串,将差分高速串行信号解为并行数据;然后数据送入纯veriolog代码实现的数据对齐模块,实现错位数据对齐;然后数据送入2路纯veriolog代码实现的视频解包模块,实现每一行的视频包头包尾拆解,并生成对应的场同步信号和数据有效信号输出;然后使用纯veriolog代码实现的图像缓存架构对采集视频做图像3帧缓存,缓存介质为板载DDR3;然后Native视频时序控制FDMA从DDR3中读取视频并同步输出RGB888视频流;然后使用RGB转HDMI模块或者专用芯片实现RGB视频流转HDMI差分视频信号;最后用显示器显示视频即可;针对市场主流需求,本博客设计并提供4套工程源码,具体如下:

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

工程源码1

开发板FPGA型号为Xilinx-->Virtex7--690T--xc7vx690tffg1761-3;

输入视频为HDMI视频,用笔记本电脑模拟,笔记本电脑通过HDMI线连接FPGA开发板的HDMI输入接口,板载的silicom9011芯片实现HDMI视频解码,FPGA使用纯Verilog实现的i2c总线对silicom9011进行初始化配置,分辨率配置为1920x1080@60Hz,输出RGB888视频给FPGA;然后将采集输入视频复制1份,以模拟2路视频源;然后2路视频送入纯veriolog代码实现的2路视频组包模块,将视频的每一行打上包头包尾标记以包的形式输出,以便接收方进行有效识别;让后调用Xilinx官方的GTH Transceivers Wizard IP核实现视频aurora 8b10b编码和数据串化,将并行数据串化为高速串行差分信号,线速率设置为5Gbps,编码后的视频通过板载的SFP光口的光纤输出;GTH Transceivers Wizard的低16bit数据位宽传输第1路视频,高16bit数据位宽传输第2路视频,2路视频平均占用GTH Transceivers Wizard的全部带宽,且各自独立传输,这就保证了2路视频无论是否同源,均不影响同时传输;然后用板载的SFP光口的光纤接收视频,然后送入Xilinx官方的GTH Transceivers Wizard IP核实现视频aurora 8b10b解码和数据解串,将差分高速串行信号解为并行数据;然后数据送入纯veriolog代码实现的数据对齐模块,实现错位数据对齐;然后数据送入2路纯veriolog代码实现的视频解包模块,实现每一行的视频包头包尾拆解,并生成对应的场同步信号和数据有效信号输出;然后使用纯veriolog代码实现的图像缓存架构对采集视频做图像3帧缓存,缓存介质为板载DDR3;然后Native视频时序控制FDMA从DDR3中读取视频并同步输出RGB888视频流;然后使用RGB转HDMI模块实现RGB视频流转HDMI差分视频信号,输出分辨率为1920x1080@60Hz;最后用显示器显示视频即可;

由此形成多路Sensor+高速收发器+光编码+HDMI的高端架构;该工程适用于SFP光口的视频采集卡(光端机)应用;

工程源码2

开发板FPGA型号为Xilinx--Kintex UltraScale--xcku060-ffva1156-2-i;

输入视频为OV5640摄像头或者动态彩条,默认使用OV5640;FPGA首先使用纯veriolog代码实现的i2c配置模块的对摄像头进行初始化配置,并采集摄像头视频;分辨率配置为1280x720@30Hz,颜色空间配置为RGB565;然后采集输入视频,将输入的两个时钟传输一个RGB565像素的视频采集为一个时钟传输一个RGB565像素的视频;然后将采集输入视频复制1份,以模拟2路视频源;然后2路视频送入纯veriolog代码实现的2路视频组包模块,将视频的每一行打上包头包尾标记以包的形式输出,以便接收方进行有效识别;让后调用Xilinx官方的GTH Transceivers Wizard IP核实现视频aurora 8b10b编码和数据串化,将并行数据串化为高速串行差分信号,线速率设置为5Gbps,编码后的视频通过板载的SFP光口的光纤输出;GTH Transceivers Wizard的低16bit数据位宽传输第1路视频,高16bit数据位宽传输第2路视频,2路视频平均占用GTH Transceivers Wizard的全部带宽,且各自独立传输,这就保证了2路视频无论是否同源,均不影响同时传输;然后用板载的SFP光口的光纤接收视频,然后送入Xilinx官方的GTH Transceivers Wizard IP核实现视频aurora 8b10b解码和数据解串,将差分高速串行信号解为并行数据;然后数据送入纯veriolog代码实现的数据对齐模块,实现错位数据对齐;然后数据送入2路纯veriolog代码实现的视频解包模块,实现每一行的视频包头包尾拆解,并生成对应的场同步信号和数据有效信号输出;然后使用纯veriolog代码实现的图像缓存架构对采集视频做图像3帧缓存,缓存介质为板载DDR4;然后Native视频时序控制FDMA从DDR4中读取视频并同步输出RGB888视频流;然后使用RGB转HDMI模块实现RGB视频流转HDMI差分视频信号,输出分辨率为1280x720@60Hz;最后用显示器显示视频即可;

由此形成多路Sensor+高速收发器+光编码+HDMI的高端架构;该工程适用于SFP光口的视频采集卡(光端机)应用;

工程源码3

开发板FPGA型号为Xilinx--Kintex UltraScale--xcku060-ffva1156-2-i;

输入视频为HDMI视频,用笔记本电脑模拟,笔记本电脑通过HDMI线连接FPGA开发板的HDMI输入接口,板载的ADV7611芯片实现HDMI视频解码,FPGA使用纯Verilog实现的i2c总线对ADV7611进行初始化配置,分辨率配置为1920x1080@60Hz,输出RGB888视频给FPGA;然后将采集输入视频复制1份,以模拟2路视频源;然后2路视频送入纯veriolog代码实现的2路视频组包模块,将视频的每一行打上包头包尾标记以包的形式输出,以便接收方进行有效识别;让后调用Xilinx官方的GTH Transceivers Wizard IP核实现视频aurora 8b10b编码和数据串化,将并行数据串化为高速串行差分信号,线速率设置为5Gbps,编码后的视频通过板载的SFP光口的光纤输出;GTH Transceivers Wizard的低16bit数据位宽传输第1路视频,高16bit数据位宽传输第2路视频,2路视频平均占用GTH Transceivers Wizard的全部带宽,且各自独立传输,这就保证了2路视频无论是否同源,均不影响同时传输;然后用板载的SFP光口的光纤接收视频,然后送入Xilinx官方的GTH Transceivers Wizard IP核实现视频aurora 8b10b解码和数据解串,将差分高速串行信号解为并行数据;然后数据送入纯veriolog代码实现的数据对齐模块,实现错位数据对齐;然后数据送入2路纯veriolog代码实现的视频解包模块,实现每一行的视频包头包尾拆解,并生成对应的场同步信号和数据有效信号输出;然后使用纯veriolog代码实现的图像缓存架构对采集视频做图像3帧缓存,缓存介质为板载DDR4;然后Native视频时序控制FDMA从DDR4中读取视频并同步输出RGB888视频流;然后使用RGB转HDMI模块实现RGB视频流转HDMI差分视频信号,输出分辨率为1920x1080@60Hz;最后用显示器显示视频即可;

由此形成多路Sensor+高速收发器+光编码+HDMI的高端架构;该工程适用于SFP光口的视频采集卡(光端机)应用;

工程源码4

开发板FPGA型号为Xilinx-->Zynq UltraScale--xczu4ev-sfvc784-1-i;

输入视频为HDMI视频,用笔记本电脑模拟,笔记本电脑通过HDMI线连接FPGA开发板的HDMI输入接口,板载的ADV7611芯片实现HDMI视频解码,FPGA使用纯Verilog实现的i2c总线对ADV7611进行初始化配置,分辨率配置为1920x1080@60Hz,输出RGB888视频给FPGA;然后将采集输入视频复制1份,以模拟2路视频源;然后2路视频送入纯veriolog代码实现的2路视频组包模块,将视频的每一行打上包头包尾标记以包的形式输出,以便接收方进行有效识别;让后调用Xilinx官方的GTH Transceivers Wizard IP核实现视频aurora 8b10b编码和数据串化,将并行数据串化为高速串行差分信号,线速率设置为5Gbps,编码后的视频通过板载的SFP光口的光纤输出;GTH Transceivers Wizard的低16bit数据位宽传输第1路视频,高16bit数据位宽传输第2路视频,2路视频平均占用GTH Transceivers Wizard的全部带宽,且各自独立传输,这就保证了2路视频无论是否同源,均不影响同时传输;然后用板载的SFP光口的光纤接收视频,然后送入Xilinx官方的GTH Transceivers Wizard IP核实现视频aurora 8b10b解码和数据解串,将差分高速串行信号解为并行数据;然后数据送入纯veriolog代码实现的数据对齐模块,实现错位数据对齐;然后数据送入2路纯veriolog代码实现的视频解包模块,实现每一行的视频包头包尾拆解,并生成对应的场同步信号和数据有效信号输出;然后使用纯veriolog代码实现的图像缓存架构对采集视频做图像3帧缓存,缓存介质为板载DDR4;然后Native视频时序控制FDMA从DDR4中读取视频并同步输出RGB888视频流;然后使用RGB转HDMI模块实现RGB视频流转HDMI差分视频信号,输出分辨率为1920x1080@60Hz;最后用显示器显示视频即可;

由此形成多路Sensor+高速收发器+光编码+HDMI的高端架构;该工程适用于SFP光口的视频采集卡(光端机)应用;

本博客详细描述了FPGA基于Aurora 8b/10b编解码架构实现GTH光口视频传输的设计方案,工程代码可综合编译上板调试,可直接项目移植,适用于在校学生、研究生项目开发,也适用于在职工程师做学习提升,可应用于医疗、军工等行业的高速接口或图像处理领域;

提供完整的、跑通的工程源码和技术支持;

工程源码和技术支持的获取方式放在了文章末尾,请耐心看到最后;

免责声明

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

2、相关方案推荐

我已有的所有工程源码总目录----方便你快速找到自己喜欢的项目

其实一直有朋友反馈,说我的博客文章太多了,乱花渐欲迷人,自己看得一头雾水,不方便快速定位找到自己想要的项目,所以本博文置顶,列出我目前已有的所有项目,并给出总目录,每个项目的文章链接,当然,本博文实时更新。。。以下是博客地址:

点击直接前往

我这里已有的 GT 高速接口解决方案

我的主页有FPGA GT 高速接口专栏,该专栏有 GTP 、 GTX 、 GTH 、 GTY 等GT 资源的视频传输例程和PCIE传输例程,其中 GTP基于A7系列FPGA开发板搭建,GTX基于K7或者ZYNQ系列FPGA开发板搭建,GTH基于KU或者V7系列FPGA开发板搭建,GTY基于KU+系列FPGA开发板搭建;以下是专栏地址:

点击直接前往

GTH Transceivers Wizard 的单路视频传输示例

本设计是使用GTH Transceivers Wizard的单Lane 32bit数据位宽传输2路非同源视频案例,之前博主写过一篇基于GTH Transceivers Wizard的单Lane 32bit数据位宽传输1路视频的案例,感兴趣的可以去之前的博客看看,以下是博客链接:

点击直接前往

点击直接前往

Aurora8B10B IP核的单路视频传输示例

本设计是使用GTH Transceivers Wizard的单Lane 32bit数据位宽传输2路非同源视频案例,之前博主写过一篇基于Aurora8B10B IP核的单Lane 16bit数据位宽传输1路视频的案例,感兴趣的可以去之前的博客看看,以下是博客链接:

点击直接前往

3、工程详细设计方案

工程设计原理框图

工程设计原理框图如下:

输入Sensor之-->OV5640摄像头

本设计输入2路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

本设计输入2路HDMI视频;输入源为板载的HDMI输入接口或动态彩条,分辨率为1920x1080@60Hz,使用笔记本电脑接入HDMI输入接口,以模拟输入Sensor;HDMI解码方案为芯片解码,保活ADV7611、IT6802\Silcom9011等芯片,以IT6802为例,可将输入的HDMI视频解码为RGB888视频;FPGA纯verilog实现的i2c配置模块完成对IT6802芯片的配置,分辨率配置为1920x1080@60Hz;可以通过Sensor模块的顶层参数配置,默认选择Sensor输入;Sensor模块如下:

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

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

整个模块代码架构如下:

输入Sensor之-->RTL解码的HDMI

本设计输入2路HDMI视频;输入源为板载的HDMI输入接口或动态彩条,分辨率为1920x1080@60Hz,使用笔记本电脑接入HDMI输入接口,以模拟输入Sensor;HDMI解码方案为纯VHDL解码;HDMI输入接口逻辑设计,必须要考虑DDC通信,即通过i2c总线与输入设备协商分辨率,即EDID配置;本设计提供纯VHDL代码实现的i2c模块实现EDID配置;此外,TMDS差分视频进入FPGA IO后,需要将其解码为RGB视频,使用纯VDHL代码实现的HDMI转RGB模块实现输入HDMI视频解码操作,并输出Native的RGB888视频流,本博主已将该代码封装为了自定义IP,可在vivado中直接调用,如下:

HDMI转RGB模块代码架构如下:

为了支持1080P@60Hz的输入视频,在硬件设计上需要加上驱动芯片,本设计采用TMDS141RHAR,也可采用其他型号,参考原理图如下:

可以通过Sensor模块的顶层参数配置,默认选择Sensor输入;Sensor模块如下:

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

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

整个模块代码架构如下:

视频数据组包发送模块

视频数据组包发送模块由纯verilog代码实现;由于视频需要在GTX Transceivers Wizard IP核中通过aurora 8b10b协议收发,所以数据必须进行组包,以适应aurora 8b10b协议标准;视频数据组包模块代码位置如下:

首先,我们将16bit的视频存入FIFO中,存满一行时就从FIFO读出送入GTX Transceivers Wizard IP核发送;在此之前,需要对一帧视频进行编号,也叫作指令,组包时根据固定的指令进行数据发送,解包时根据固定的指令恢复视频的场同步信号和视频有效信号;当一帧视频的场同步信号上升沿到来时,发送一帧视频开始指令 0,当一帧视频的场同步信号下降沿到来时,发送一帧视频开始指令 1,视频消隐期间发送无效数据 0 和无效数据 1,当视频有效信号到来时将每一行视频进行编号,先发送一行视频开始指令,在发送当前的视频行号,当一行视频发送完成后再发送一行视频结束指令,一帧视频发送完成后,先发送一帧视频结束指令 0,再发送一帧视频结束指令 1;至此,一帧视频则发送完成,这个模块不太好理解,所以我在代码里进行了详细的中文注释,需要注意的是,为了防止中文注释的乱序显示,请用notepad++编辑器打开代码;指令定义如下:

注意!!!指令可以任意更改,但最低字节必须为bc;

基于GTH Transceivers Wizard高速收发器的视频传输架构

本设计使用GTH Transceivers Wizard高速接口传输视频,使用8b/10b编解码协议,搭建基于GTH Transceivers Wizard高速接口的视频传输架构,包括视频数据组包模块、GTH Transceivers Wizard IP核配置调用、接收数据对齐模块、视频数据解包模块等部分,总体代码架构如下:

基于GTH Transceivers Wizard高速接口的视频传输架构顶层接口核参数配置如下:

GTH Transceivers Wizard IP核简介

关于GTH Transceivers Wizard介绍最详细的肯定是Xilinx官方的《ug576-ultrascale-gth-transceivers》,我们以此来解读:《ug576-ultrascale-gth-transceivers》的PDF文档我已放在了资料包里;我用到的开发板FPGA型号为Kirtex7-UltraScale-xcku060-ffva1156-2-i;带有28路GTH Transceivers Wizard资源,其中2路连接到了板载2个SFP光口,每通道的收发速度为 500 Mb/s 到 16.375 Gb/s 之间。GTH 收发器支持不同的串行传输接口或协议,比如8b/10b编解码、PCIE /2.0/3.0 接口、万兆网 XUAI 接口、OC-48、串行 RapidIO 接口、 SATA(Serial ATA) 接口、数字分量串行接口(SDI)等等;

GTH Transceivers Wizard 基本结构

GTH Transceivers Wizard 基本结构如下:

Xilinx 以 Quad 来对串行高速收发器进行分组,四个串行高速收发器和一个 COMMOM(QPLL)组成一个 Quad,每一个串行高速收发器称为一个 Channel(通道),下图为UltraScale GTH 收发器在Kintex7 UltraScale FPGA 芯片中的示意图:《ug576-ultrascale-gth-transceivers》第19页;

在 Ultrascale/Ultrascale+架构系列的 FPGA 中,GTH 高速收发器通常使用 Quad 来划分,一个 Quad 由四个GTHE3/4_CHANNEL 原语和一个 GTHE3/4_COMMON 原语组成。每个GTHE3/4_COMMON 中包含两个 LC-tank pll(QPLL0 和 QPLL1)。只有在应用程序中使用 QPLL 时,才需要实例化 GTHE3/4_COMMON。每个 GTHE3/4_CHANNEL 由一个 channel PLL(CPLL)、一个 transmitter,和一个 receiver 组成。一个参考时钟可以直接连接到一个 GTHE3/4_CHANNEL 原语,而不需要实例化 GTHE3/4_COMMON;

Ultrascale GTH 收发器的发送端和接收端功能是相互独立,都是由 Physical Media Attachment(物理媒介适配层 PMA)和Physical Coding Sublayer(物理编码子层 PCS)组成。PMA 内部集成了串并转换(PISO)、预加重、接收均衡、时钟发生器和时钟恢复等;PCS 内部集成了 8b/10b 编解码、弹性缓冲区、通道绑定和时钟修正等,每个 GTHE3/4_CHANNEL源语的逻辑电路见《ug576-ultrascale-gth-transceivers》第20页;

GTH Transceivers Wizard 参考时钟

UltraScale 器件中的 GTH 收发器提供了不同的参考时钟输入选项。参考时钟选择架构支持 QPLL0、QLPLL1 和CPLL。从架构上讲,每个 Quad 包含四个 GTHE3/4_CHANNEL 原语,一个 GTHE3/4_COMMON 原语,两个专用的外部参考时钟引脚对,以及专用的参考时钟路由。如果使用到了高性能 QPLL,则必须实例化 GTHE3/4_COMMON,如下面 GTHE3/4_COMMON 时钟多路复用器结构的详细视图所示,(《ug576-ultrascale-gth-transceivers》第33页)在一个 Quad 中有 6 个参考时钟引脚对,两个本地参考时钟引脚对:GTREFCLK0或GTREFCLK1,两个参考时钟引脚对来自上面的两个Quads:GTSOUTHREFCLK0或 GTSOUTHREFCLK1,两个参考时钟引脚对来自下面的两个 Quads: GTNORTHREFCLK0 或GTNORTHREFCLK1。

GTH Transceivers Wizard 发送和接收处理流程

首先用户逻辑数据经过 8B/10B 编码后,进入一个发送缓存区(Phase Adjust FIFO),该缓冲区主要是 PMA 子层和 PCS 子层两个时钟域的时钟隔离,解决两者时钟速率匹配和相位差异的问题,最后经过高速 Serdes 进行并串转换(PISO),有必要的话,可以进行预加重(TX Pre-emphasis)、后加重。值得一提的是,如果在 PCB 设计时不慎将 TXP 和 TXN 差分引脚交叉连接,则可以通过极性控制(Polarity)来弥补这个设计错误。接收端和发送端过程相反,相似点较多,这里就不赘述了,需要注意的是 RX 接收端的弹性缓冲区,其具有时钟纠正和通道绑定功能。这里的每一个功能点都可以写一篇论文甚至是一本书,所以这里只需要知道个概念即可,在具体的项目中回具体用到,还是那句话:对于初次使用或者想快速使用者而言,更多的精力应该关注IP核的调用和使用。

GTH Transceivers Wizard 发送接口

《ug576-ultrascale-gth-transceivers》的第104到179页详细介绍了发送处理流程,其中大部分内容对于用户而言可以不去深究,因为手册讲的基本都是他自己的设计思想,留给用户可操作的接口并不多,基于此思路,我们重点讲讲UltraScale GTH例化时留给用户的发送部分需要用到的接口;用户只需要关心发送接口的时钟和数据即可,以例化2路UltraScale GTH 为例,经本博主优化,用户只需要关心如下UltraScale GTH 发送接口即可快速使用UltraScale GTH ;

GTH Transceivers Wizard 接收接口

《ug576-ultrascale-gth-transceivers》的第181到314页详细介绍了发送处理流程,其中大部分内容对于用户而言可以不去深究,因为手册讲的基本都是他自己的设计思想,留给用户可操作的接口并不多,基于此思路,我们重点讲讲UltraScale GTH 例化时留给用户的发送部分需要用到的接口;用户只需要关心接收接口的时钟和数据即可,以例化2路UltraScale GTH 为例,经本博主优化,用户只需要关心如下UltraScale GTH 接收接口即可快速使用UltraScale GTH ;

GTH Transceivers Wizard IP核调用和使用

GTH Transceivers Wizard IP核配置调用在工程种位置如下:

GTH Transceivers Wizard IP核调用和使用很简单,通过vivado的UI界面即可完成,如下:

GTH Transceivers Wizard基本配置如下:板载差分晶振125M,线速率配置为5G,协议类型被指为aurora 8b/10b;如下:

相较于Xilinx 7系列FPGA的GT高速接口,UltraScale系列FPGA在物理约束页也有较大改进,已不需要用户再去查看官方数据手册找到原理图所在的FPGA内部位置,而是直接给出了详细PIN脚,只要在这里选对了位置,GT高速接口的时钟和数据引脚在XDC中已不再需要约束,如下:

此外,有别于Xilinx 7系列FPGA的GT高速接口;UltraScale 系列FPGA的GT高速接口在控制引脚方面更加细节,用户可以选择具体哪些控制引脚被使用,当然,这需要开发人员对SERDES技术有较高的认知,在此基础上,可使我们的设计更加便捷,对于8B/10编解码协议而言,开发者可能只需关注并使用极性反转控制,如果需要动态变速,可能还需要使用DRP接口,其余功能性接口其实不必太过关注;如下:

GTH Transceivers Wizard 接收数据对齐模块

由于GT资源的aurora 8b/10b数据收发天然有着数据错位的情况,所以需要对接受到的解码数据进行数据对齐处理,数据对齐模块代码位置如下:

我定义的 K 码控制字符格式为:XX_XX_XX_BC,所以用一个rx_ctrl 指示数据是否为 K 码 的 COM 符号;

rx_ctrl = 4'b0000 表示 4 字节的数据没有 COM 码;

rx_ctrl = 4'b0001 表示 4 字节的数据中 7: 0 为 COM 码;

rx_ctrl = 4'b0010 表示 4 字节的数据中15: 8 为 COM 码;

rx_ctrl = 4'b0100 表示 4 字节的数据中23:16 为 COM 码;

rx_ctrl = 4'b1000 表示 4 字节的数据中31:24 为 COM 码;

基于此,当接收到有K码时就对数据进行对齐处理,也就是将数据打一拍,和新进来的数据进行错位组合,这是FPGA的基础操作,这里不再赘述;数据对齐模块顶层接口如下:

视频数据接收解包模块

数据解包是数据组包的逆过程,代码位置如下:

GTX Transceivers Wizard解包时根据固定的指令恢复视频的场同步信号和视频有效信号;这些信号是作为后面图像缓存的重要信号;由于数据解包是数据组包的逆过程,所以这里不再过多赘述,视频数据解包模块顶层接口如下:

图像缓存架构

图像缓存方案采用纯verilog实现,缓存介质为DDR3/4;

图像缓存架构实现的功能是将输入视频缓存到板载DDR中再读出送后续模块,目的是实现视频同步输出,实现输入视频到输出视频的跨时钟域问题,更好的呈现显示效果;由于调用了Xilinx官方的MIG作为DDR控制器,所以FDMA图像缓存架构就是实现用户数据到MIG的桥接作用;架构如下:

图像缓存架构代码如下:

图像缓存架构由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帧缓存;

图像缓存使用Xilinx vivado的Block Design设计,如下图:

关于FDMA更详细的介绍,请参考我之前的博客,博文链接如下:

点击直接前往

HDMI视频输出架构

缓存图像从DDR3读出后经过Native时序生成模块输出标准的VGA时序视频,然后经过纯verilog显示的RGB转HDMI模块输出HDMI差分视频;最后送显示器显示即可;代码例化如下:

工程源码架构

提供4套工程源码,以工程源码1为例,工程Block Design设计如下:

提供4套工程源码,以工程源码2为例,综合后的工程源码架构如下:

工程编译后资源消耗低、功耗低、时序收敛,符合工程项目应用要求,如下:

上图只是举例,资源消耗并非本工程的实际消耗,实际消耗请看下文的《工程代码详解》;

4、vivado工程源码1详解-->Virtex7--690T,2路HDMI视频-SFP光口回环版本

开发板FPGA型号:Virtex7--690T--xc7vx690tffg1761-3;

FPGA开发环境:Vivado2019.1;

输入:2路HDMI或者FPGA内部动态彩条,silicom9011芯片解码方案,分辨率1920x1080@60Hz,笔记本电脑模拟输入源;

输出:HDMI,silicom9134芯片编码方案,分辨率1920x1080@60Hz;

回环光口类型:SFP光口;

高速收发器类型:Xilinx-GTH-Transceivers Wizard,单 Lane-线速率5Gbps;

高速收发器编解码协议:aurora 8b10b编解码;

图像缓存方案:纯verilog图像缓存+DDR3颗粒+3帧缓存;

工程作用:让读者掌握FPGA实现多路视频高速收发器传输的设计能力,以便能够移植和设计自己的项目;

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

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

5、vivado工程源码2详解-->KU060,2路OV5640视频-SFP光口回环版本

开发板FPGA型号:Xilinx--Kintex UltraScale--xcku060-ffva1156-2-i;

FPGA开发环境:Vivado2019.1;

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

输出:HDMI,RTL逻辑编码方案,分辨率1280x720@60Hz;

回环光口类型:SFP光口;

高速收发器类型:Xilinx-GTH-Transceivers Wizard,单 Lane-线速率5Gbps;

高速收发器编解码协议:aurora 8b10b编解码;

图像缓存方案:纯verilog图像缓存+DDR4颗粒+3帧缓存;

工程作用:让读者掌握FPGA实现多路视频高速收发器传输的设计能力,以便能够移植和设计自己的项目;

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

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

6、vivado工程源码3详解-->KU060,2路HDMI视频-SFP光口回环版本

开发板FPGA型号:Xilinx--Kintex UltraScale--xcku060-ffva1156-2-i;

FPGA开发环境:Vivado2019.1;

输入:2路HDMI或者FPGA内部动态彩条,ADV7611芯片解码方案,分辨率1920x1080@60Hz,笔记本电脑模拟输入源;

输出:HDMI,RTL逻辑编码方案,分辨率1920x1080@60Hz;

回环光口类型:SFP光口;

高速收发器类型:Xilinx-GTH-Transceivers Wizard,单 Lane-线速率5Gbps;

高速收发器编解码协议:aurora 8b10b编解码;

图像缓存方案:纯verilog图像缓存+PS端DDR4颗粒+3帧缓存;

工程作用:让读者掌握FPGA实现多路视频高速收发器传输的设计能力,以便能够移植和设计自己的项目;

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

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

7、vivado工程源码4详解-->ZU4EV路HDMI视频-SFP光口回环版本

开发板FPGA型号:Xilinx-->Zynq UltraScale--xczu4ev-sfvc784-1-i;

FPGA开发环境:Vivado2019.1;

输入:2路HDMI或者FPGA内部动态彩条,ADV7611芯片解码方案,分辨率1920x1080@60Hz,笔记本电脑模拟输入源;

输出:HDMI,RTL逻辑编码方案,分辨率1920x1080@60Hz;

回环光口类型:SFP光口;

高速收发器类型:Xilinx-GTH-Transceivers Wizard,单 Lane-线速率5Gbps;

高速收发器编解码协议:aurora 8b10b编解码;

图像缓存方案:纯verilog图像缓存+DDR3颗粒+3帧缓存;

工程作用:让读者掌握FPGA实现多路视频高速收发器传输的设计能力,以便能够移植和设计自己的项目;

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

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

8、工程移植说明

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

9、上板调试验证

准备工作

需要准备的器材如下:

OV5640摄像头或者笔记本电脑,没有则请使用FPGA内部生成的彩条;

FPGA开发板,没有开发板可以找本博提供;

SFP光模块和光纤;

我的开发板了连接如下:

GTH Transceivers Wizard 光口视频传输效果演示

GTH Transceivers Wizard 光口视频传输效果演示如下:

视频-图传

10、工程代码的获取

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

资料获取方式:文章末尾名片。

网盘资料如下:

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

相关推荐
FPGA小徐1 天前
FPGA 数字信号处理(二):并行 FIR 滤波器的 Verilog 全流程设计与实现
fpga开发
国科安芯1 天前
基于AS32S601ZIT2型抗辐照MCU的商业航天卫星姿态确定与控制系统研究
单片机·嵌入式硬件·安全·fpga开发·架构·risc-v
ALINX技术博客1 天前
【黑金云课堂】FPGA技术教程FPGA基础:I2C 总线通信技术
fpga开发·i2c
Hello-FPGA1 天前
Xilinx KU040 FPGA Camera Link 图像采集
c++·fpga开发
明德扬1 天前
AD采集卡应用示例交流:从传感器采集到高速信号验证
fpga开发
傻童:CPU1 天前
PS与PL之间的交互
fpga开发
神奇元创2 天前
商用级光路加速卡:大模型推理的极速落地方案
python·神经网络·fpga开发·dsp开发
FPGA小徐2 天前
深度神经网络FPGA设计进展、实现与展望
fpga开发
FPGA小徐2 天前
FPGA数字信号处理(一)数字混频实现详解|NCO/DDS原理、有符号数避坑、直流滤除工程实战
fpga开发