FPGA实现Aurora8B10B视频转UVC传输,基于GTP高速收发器+FT602芯片架构,提供4套工程源码和技术支持

目录

FPGA实现Aurora8B10B视频转UVC传输,基于GTP高速收发器+FT602芯片架构,提供4套工程源码和技术支持

FPGA基于FT602实现USB3.0 UVC 视频传输

1、前言

创作背景

Aurora 8B10B是啥?

Aurora 8B10B 是由Xilinx(现AMD)开发的轻量级链路层协议,用于FPGA间的高速点对点串行通信。它基于8B/10B编码方案,提供简化的数据封装和流控制机制,主要应用于需要低延迟、高可靠性传输的场景;
Aurora 8B10B核心作用如下:

1、高速数据传输:通过SerDes收发器实现Gbps级数据传输

2、简化通信协议:仅需基本流控制,无需复杂协议栈

3、可靠传输:内置CRC校验和错误检测机制

4、灵活扩展:支持通道绑定(多通道聚合)
Aurora 8B10B主要工程应用如下:

博主之前用Xilinx GTP收发器实现过Aurora 8B10B编解码,本博客用的则是Xilinx的标准集成Aurora 8B10B IP核,这两种方法都能实现Aurora 8B10B编解码,区别如下:
Xilinx GTP收发器 vs 标准集成Aurora 8B10B IP核对比如下:

1、用户数据接口不同;

GTP收发器实现过Aurora 8B10B用户数据接口为并行数据;

标准集成Aurora 8B10B IP核用户数据接口为AXI4-Stream流数据;

2、数据对齐不同

GTP收发器实现过Aurora 8B10B输出的数据没有对齐,需要用户自己写逻辑电路对齐;

标准集成Aurora 8B10B IP核输出的数据是经过内部处理后的对齐数据,用户无需自己写逻辑电路对齐;

3、设计难度不同

GTP收发器实现过Aurora 8B10B设计难度较大,需要对GTP高速收发器链路层和物理层有深刻理解,比如PCS和PMA;GTP预留的很多接口直接和底层协议挂钩,无论是配置难度还是使用难度都很大,对设计者技术要求较高;

标准集成Aurora 8B10B IP核则简单很多,无需理解高速收发器链路层和物理层,无论是配置难度还是使用难度都很小,对设计者技术要求较低;

什么是UVC

UVC全称为USB Video Class,即USB 视频类,是一种为 USB 视频捕获设备定义的协议标准。

USB视频设备类(USB Video Class, UVC)是由USB Implementers Forum(USB-IF)制定并维护的通用协议规范,旨在为基于USB接口的视频采集设备确立统一的通信标准。该标准定义了视频数据流、控制命令及 payload 格式,使符合规范的摄像头、摄像机等设备能够实现真正的"即插即用"(Plug-and-Play)。

其主要技术特性与优势包括:

系统无关的兼容性:完全支持UVC 1.1或更高版本的设备,可在Windows、Linux、macOS等主流操作系统中直接识别并使用,无需安装厂商专属驱动,显著降低了部署与维护的复杂性。

标准化的数据与控制接口:规范明确定义了视频流传输格式(如未压缩的YUY2/MJPEG/H.264)及设备控制单元(如亮度、对比度、对焦),确保了跨厂商设备的功能一致性与可互换性。

优化的工业应用适配:凭借其即插即用、稳定可靠及易于集成的特点,UVC摄像头广泛应用于机器视觉、视频会议、自助服务终端、嵌入式系统、物流分拣及轻型自动化产线等场景,成为工业图像采集领域中高性价比的标准化解决方案。

FPGA实现UVC现状

FPGA实现UVC,一般方案为外挂PHY芯片实现UVC物理层,FPGA内部逻辑实现UVC协议层,由于UVC具有系统无关的兼容性,所以无需驱动和额外QT上位机。目前主流的PHY芯片有CYUSB3014和FT602,二者各有千秋,就价格、功耗、设计难以程度而言,FT602略胜于CYUSB3014。

本设计使用FT602芯片实现UVC物理层,FPGA内部逻辑实现UVC协议层。

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

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

本设计采用7系列的Aurora8B10B IP核实现SFP光口视频编解码;

工程概述

本设计使用FPGA基于GTP高速收发器+FT602芯片架构实现Aurora8B10B视频转UVC传输,创新性的将光电编码领域的Aurora8B10B协议与视频传输领域的UVC协议融合,赋能光电图传技术拓展和技术转化。

视频输入源有多种,一种是板载的HDMI输入接口,另一种是传统摄像头,包括OV7725、OV5640和AR0135;如果你的FPGA开发板没有视频输入接口,或者你的手里没有摄像头时,可以使用FPGA逻辑实现的动态彩条模拟输入视频,代码里通过parametr参数选择视频源,默认不使用动态彩条;FPGA首先对摄像头进行i2c初始化配置,然后采集摄像头视频;然后采集视频送入Xilinx官方的Video In To AXI4-Stream IP核实现Native视频转换到AXI4-Stream视频流;然后AXI4-Stream视频流再送入纯verilog代码实现的AXIS视频流重组模块实现信号重组,因为Aurora 8B10B发送接口不带tuser信号,所以需要将tuser嵌入到数据流中传输;然后视频流送入Xilinx官方的Aurora 8B10B IP核实现8B10B数据编码,数据以高速差分信号输出,经板载的SFP光口进行回环传输;经SFP-RX接口输入高速差分信号再进入Xilinx官方的Aurora 8B10B IP核实现8B10B数据解码,输出AXI4-Stream视频流;AXI4-Stream视频流再送入纯verilog代码实现的AXIS视频流重组模块实现信号恢复,因为Aurora 8B10B接收接口不带tuser信号,所以需要在嵌入数据中的tuser恢复出来;然后AXI4-Stream视频流送入本博主自研的纯verilog实现的、AXI4-Stream接口的图像写缓存模块,实现视频写入DDR缓存操作;然后使用本博主自研的纯verilog实现的、AXI4-Stream接口的图像读缓存模块,实现视频从DDR读出操作;然后读出的视频送入纯verilog实现的Native视频时序模块实现视频同步;然后RGB视频送入纯verilog实现RGB888转YUV422实现视频格式转换;同时FPGA逻辑对FT602做接口匹配对接工作,以保证FT602正常工作;然后YUV422送入纯verilog实现UVC图像处理模块,实现图像缓冲、数据接口转换和时序同步等处理,完成UVC协议层,并以标准的FT602用户IO读写时序输出;然后UVC视频送入FT602芯片完成UVC物理层;用USB3.0线缆连接开发板至笔记本电脑USB3.0接口;无需安装驱动,直接打开Win10自带的相机软件,即可看到FPGA采集发来的图像。针对市场主流需求,本博客设计并提供4套工程源码,具体如下:

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

工程源码1

开发板FPGA型号为Xilinx-->Artix7--xc7a35tfgg484-2;

视频输入源为OV5640摄像头,如果你的FPGA开发板没有视频输入接口,或者你的手里没有摄像头时,可以使用FPGA逻辑实现的动态彩条模拟输入视频,代码里通过parametr参数选择视频源,默认不使用动态彩条;FPGA首先使用纯Verilog实现的i2c总线对摄像头进行初始化配置,分辨率配置为1280x720@30Hz;然后采集视频送入Xilinx官方的Video In To AXI4-Stream IP核实现Native视频转换到AXI4-Stream视频流;然后AXI4-Stream视频流再送入纯verilog代码实现的AXIS视频流重组模块实现信号重组,因为Aurora 8B10B发送接口不带tuser信号,所以需要将tuser嵌入到数据流中传输;然后视频流送入Xilinx官方的Aurora 8B10B IP核实现8B10B数据编码,数据以高速差分信号输出,经板载的SFP光口进行回环传输;经SFP-RX接口输入高速差分信号再进入Xilinx官方的Aurora 8B10B IP核实现8B10B数据解码,输出AXI4-Stream视频流;AXI4-Stream视频流再送入纯verilog代码实现的AXIS视频流重组模块实现信号恢复,因为Aurora 8B10B接收接口不带tuser信号,所以需要在嵌入数据中的tuser恢复出来;然后AXI4-Stream视频流送入本博主自研的纯verilog实现的、AXI4-Stream接口的图像写缓存模块,实现视频写入DDR缓存操作;然后使用本博主自研的纯verilog实现的、AXI4-Stream接口的图像读缓存模块,实现视频从DDR读出操作;然后读出的视频送入纯verilog实现的Native视频时序模块实现视频同步;然后RGB视频送入纯verilog实现RGB888转YUV422实现视频格式转换;同时FPGA逻辑对FT602做接口匹配对接工作,以保证FT602正常工作;然后YUV422送入纯verilog实现UVC图像处理模块,实现图像缓冲、数据接口转换和时序同步等处理,完成UVC协议层,并以标准的FT602用户IO读写时序输出,输出分辨率为1280x720@60Hz;然后UVC视频送入FT602芯片完成UVC物理层;用USB3.0线缆连接开发板至笔记本电脑USB3.0接口;无需安装驱动,直接打开Win10自带的相机软件,即可看到FPGA采集发来的图像。

此工程适用于Xilinx-Artix7系列FPGA移植修改以及后续二次开发。

工程源码2

开发板FPGA型号为Xilinx-->Artix7--xc7a35tfgg484-2;

输入视频源为HDMI视频,用笔记本电脑模拟,笔记本电脑通过HDMI线连接FPGA开发板的HDMI输入接口,板载的ADV7611芯片实现HDMI视频解码,FPGA使用纯Verilog实现的i2c总线对ADV7611进行初始化配置,分辨率配置为1920x1080@60Hz,输出RGB888视频给FPGA;然后采集视频送入Xilinx官方的Video In To AXI4-Stream IP核实现Native视频转换到AXI4-Stream视频流;然后AXI4-Stream视频流再送入纯verilog代码实现的AXIS视频流重组模块实现信号重组,因为Aurora 8B10B发送接口不带tuser信号,所以需要将tuser嵌入到数据流中传输;然后视频流送入Xilinx官方的Aurora 8B10B IP核实现8B10B数据编码,数据以高速差分信号输出,经板载的SFP光口进行回环传输;经SFP-RX接口输入高速差分信号再进入Xilinx官方的Aurora 8B10B IP核实现8B10B数据解码,输出AXI4-Stream视频流;AXI4-Stream视频流再送入纯verilog代码实现的AXIS视频流重组模块实现信号恢复,因为Aurora 8B10B接收接口不带tuser信号,所以需要在嵌入数据中的tuser恢复出来;然后AXI4-Stream视频流送入本博主自研的纯verilog实现的、AXI4-Stream接口的图像写缓存模块,实现视频写入DDR缓存操作;然后使用本博主自研的纯verilog实现的、AXI4-Stream接口的图像读缓存模块,实现视频从DDR读出操作;然后读出的视频送入纯verilog实现的Native视频时序模块实现视频同步;然后RGB视频送入纯verilog实现RGB888转YUV422实现视频格式转换;同时FPGA逻辑对FT602做接口匹配对接工作,以保证FT602正常工作;然后YUV422送入纯verilog实现UVC图像处理模块,实现图像缓冲、数据接口转换和时序同步等处理,完成UVC协议层,并以标准的FT602用户IO读写时序输出,输出分辨率为1920x1080@60Hz;然后UVC视频送入FT602芯片完成UVC物理层;用USB3.0线缆连接开发板至笔记本电脑USB3.0接口;无需安装驱动,直接打开Win10自带的相机软件,即可看到FPGA采集发来的图像。

此工程适用于Xilinx-Artix7系列FPGA移植修改以及后续二次开发。

工程源码3

开发板FPGA型号为Xilinx-->Artix7--xc7a100tfgg484-2;

视频输入源为OV5640摄像头,如果你的FPGA开发板没有视频输入接口,或者你的手里没有摄像头时,可以使用FPGA逻辑实现的动态彩条模拟输入视频,代码里通过parametr参数选择视频源,默认不使用动态彩条;FPGA首先使用纯Verilog实现的i2c总线对摄像头进行初始化配置,分辨率配置为1280x720@30Hz;然后采集视频送入Xilinx官方的Video In To AXI4-Stream IP核实现Native视频转换到AXI4-Stream视频流;然后AXI4-Stream视频流再送入纯verilog代码实现的AXIS视频流重组模块实现信号重组,因为Aurora 8B10B发送接口不带tuser信号,所以需要将tuser嵌入到数据流中传输;然后视频流送入Xilinx官方的Aurora 8B10B IP核实现8B10B数据编码,数据以高速差分信号输出,经板载的SFP光口进行回环传输;经SFP-RX接口输入高速差分信号再进入Xilinx官方的Aurora 8B10B IP核实现8B10B数据解码,输出AXI4-Stream视频流;AXI4-Stream视频流再送入纯verilog代码实现的AXIS视频流重组模块实现信号恢复,因为Aurora 8B10B接收接口不带tuser信号,所以需要在嵌入数据中的tuser恢复出来;然后AXI4-Stream视频流送入本博主自研的纯verilog实现的、AXI4-Stream接口的图像写缓存模块,实现视频写入DDR缓存操作;然后使用本博主自研的纯verilog实现的、AXI4-Stream接口的图像读缓存模块,实现视频从DDR读出操作;然后读出的视频送入纯verilog实现的Native视频时序模块实现视频同步;然后RGB视频送入纯verilog实现RGB888转YUV422实现视频格式转换;同时FPGA逻辑对FT602做接口匹配对接工作,以保证FT602正常工作;然后YUV422送入纯verilog实现UVC图像处理模块,实现图像缓冲、数据接口转换和时序同步等处理,完成UVC协议层,并以标准的FT602用户IO读写时序输出,输出分辨率为1280x720@60Hz;然后UVC视频送入FT602芯片完成UVC物理层;用USB3.0线缆连接开发板至笔记本电脑USB3.0接口;无需安装驱动,直接打开Win10自带的相机软件,即可看到FPGA采集发来的图像。

此工程适用于Xilinx-Artix7系列FPGA移植修改以及后续二次开发。

工程源码4

开发板FPGA型号为Xilinx-->Artix7--xc7a100tfgg484-2;

输入视频源为HDMI视频,用笔记本电脑模拟,笔记本电脑通过HDMI线连接FPGA开发板的HDMI输入接口,板载的ADV7611芯片实现HDMI视频解码,FPGA使用纯Verilog实现的i2c总线对ADV7611进行初始化配置,分辨率配置为1920x1080@60Hz,输出RGB888视频给FPGA;然后采集视频送入Xilinx官方的Video In To AXI4-Stream IP核实现Native视频转换到AXI4-Stream视频流;然后AXI4-Stream视频流再送入纯verilog代码实现的AXIS视频流重组模块实现信号重组,因为Aurora 8B10B发送接口不带tuser信号,所以需要将tuser嵌入到数据流中传输;然后视频流送入Xilinx官方的Aurora 8B10B IP核实现8B10B数据编码,数据以高速差分信号输出,经板载的SFP光口进行回环传输;经SFP-RX接口输入高速差分信号再进入Xilinx官方的Aurora 8B10B IP核实现8B10B数据解码,输出AXI4-Stream视频流;AXI4-Stream视频流再送入纯verilog代码实现的AXIS视频流重组模块实现信号恢复,因为Aurora 8B10B接收接口不带tuser信号,所以需要在嵌入数据中的tuser恢复出来;然后AXI4-Stream视频流送入本博主自研的纯verilog实现的、AXI4-Stream接口的图像写缓存模块,实现视频写入DDR缓存操作;然后使用本博主自研的纯verilog实现的、AXI4-Stream接口的图像读缓存模块,实现视频从DDR读出操作;然后读出的视频送入纯verilog实现的Native视频时序模块实现视频同步;然后RGB视频送入纯verilog实现RGB888转YUV422实现视频格式转换;同时FPGA逻辑对FT602做接口匹配对接工作,以保证FT602正常工作;然后YUV422送入纯verilog实现UVC图像处理模块,实现图像缓冲、数据接口转换和时序同步等处理,完成UVC协议层,并以标准的FT602用户IO读写时序输出,输出分辨率为1920x1080@60Hz;然后UVC视频送入FT602芯片完成UVC物理层;用USB3.0线缆连接开发板至笔记本电脑USB3.0接口;无需安装驱动,直接打开Win10自带的相机软件,即可看到FPGA采集发来的图像。

此工程适用于Xilinx-Artix7系列FPGA移植修改以及后续二次开发。

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

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

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

免责声明

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

2、相关方案推荐

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

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

本博已有的FPGA驱动USB通信方案

我的博客主页开设有FPGA驱动USB通信专栏,里面全是FPGA驱动USB通信的工程源码及博客介绍;既有基于USB2.0也有USB3.0方案;包括USB2.0/3.0测速试验、USB2.0/3.0视频采集传输试验、USB2.0/3.0视频采集+图像处理后传输试验等等;所有工方案均包括FPGA工程和QT上位机源码;专栏地址链接如下:
点击直接前往

本博已有的FPGA实现UVC图传方案

我的博客主页开设有FPGA实现UVC图传专栏,里面全是FFPGA实现UVC图传的工程源码及博客介绍;既有基于USB2.0 UVC,也有USB3.0 UVC方案;既有基于CYUSB3014的UVC物理层方案,也有基于FT602的UVC物理层方案;专栏地址链接如下:
点击直接前往

本博已有的 GT 高速接口解决方案

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

本设计的GTP高速收发器配置Aurora 8B10B方案

使用GTP高速收发器配置为Aurora 8B10B模式也可以实现和本设计类似的效果,只不过该方案设计难度更大,需要自己设计数据对齐电路,想挑战自我的读者,可以参考我之前发布的博客,链接如下:
点击直接前往

3、详细设计方案

设计原理框图

设计原理框图如下:

输入Sensor之-->OV5640摄像头

输入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之-->ADV7611芯片解码的HDMI

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

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

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

整个模块代码架构如下:

Native视频转AXIS流

然后采集视频送入Xilinx官方的Video In To AXI4-Stream IP核实现Native视频转换到AXI4-Stream视频流;如下:

AXIS视频流重组

然后AXI4-Stream视频流再送入纯verilog代码实现的AXIS视频流重组模块实现信号重组,因为Aurora 8B10B发送接口不带tuser信号,所以需要将tuser嵌入到数据流中传输;将AXIS视频流重组模块直接拖入Block Design中,如下:

Aurora8B10B视频传输传输架构

然后视频流送入Xilinx官方的Aurora 8B10B IP核实现8B10B数据编码,数据以高速差分信号输出,经板载的SFP光口进行回环传输;经SFP-RX接口输入高速差分信号再进入Xilinx官方的Aurora 8B10B IP核实现8B10B数据解码,输出AXI4-Stream视频流;本设计基于GTP高速收发器实现Aurora 8B10B图像视频传输,Aurora 8B10B在Block Design中如下:

Aurora 8B10B图像视频传输架构的核心是Aurora 8B10B IP核的例化和使用,所以本章节我们重点讲解这个IP;

Aurora8B10B IP核简介

关于Aurora 8B10B IP核介绍最详细的肯定是Xilinx官方的《pg046_Aurora 8B/10B LogiCORE IP Product Guide》,我们以此来解读,《pg046》PDF文档我已放在了资料包里;我用到的开发板FPGA型号为Xilinx--Artix7系列FPGA;带有4路GTP资源,每通道的收发速度为500 Mb/s到6.6 Gb/s之间。本设计使用的Aurora 8B10B IP核基于GTP高速收发器实现物理层和数据链路层;

Aurora 8B10B 基本结构

根据《pg046_Aurora 8B/10B LogiCORE IP Product Guide》,Aurora 8B10B 基本结构如下:

由上图可知,Aurora 8B10B IP核由四个核心模块构成,协同实现链路初始化、数据编解码及流控制:

通道逻辑(Lane Logic)

功能:驱动每个GT收发器(GTP/GTX/GTH),初始化收发器硬件,处理8B/10B编解码、错误检测(如CRC校验)

关键操作:检测控制字符(如空闲符、时钟补偿符),确保数据对齐

全局逻辑(Global Logic)

功能:管理多通道绑定(Lane Bonding),验证通道同步状态,生成随机空闲字符维持链路活性,监控所有通道的错误(如hard_err硬件错误、soft_err位错误)

错误处理:检测到严重错误时自动复位并重新初始化通道

发送用户接口(TX User Interface)

接口类型:支持AXI4-Stream帧接口(带tlast/tkeep)或流接口(简化无帧控制)

功能:将应用层数据封装为Aurora帧(添加SCP/ECP控制符),插入时钟补偿序列(每10,000字节插入12字节开销)

接收用户接口(RX User Interface)

功能:解析输入数据流,剥离SCP/ECP控制符,恢复原始数据帧并通过AXI4-Stream输出;支持流量控制(如UFC/NFC)

特点:无弹性缓冲,依赖实时流控避免溢出

用户数据接口对比

Aurora 8B10B支持帧接口 (Framing) 流接口 (Streaming),对比如下:

Aurora8B10B 发送流程

Aurora 8B10B用户发送数据使用帧接口(AXI4-Stream),包括以下流程:

用户发起传输

应用层置位s_axi_tx_tvalid并输出数据至s_axi_tx_tdata,同时用s_axi_tx_tlast标识帧结束,s_axi_tx_tkeep标记末尾有效字节

IP核组帧

当s_axi_tx_tready与s_axi_tx_tvalid同时有效时,IP核采样数据

组帧规则:

帧首添加2字节SCP(Start Channel Protocol)

帧尾添加2字节ECP(End Channel Protocol)

若数据字节数为奇数,末尾补PAD字符

插入控制序列

在数据间隙插入空闲字符或时钟补偿序列(CC),优先级高于数据传输

发送过程中可通过拉低s_axi_tx_tvalid暂停传输(流控)

串行化输出

数据经GT收发器进行8B/10B编码,转为串行信号通过物理链路发送

使用总结

以上流程为Aurora 8B10B IP核内部实现,开发者只需了解即可,无需关心起具体实现细节,开发者只需把发送数据转换为AXI4-Stream数据流送入Aurora 8B10B用户发送接口即可;

Aurora 8B10B 接收流程

数据解析

GT收发器接收串行数据,进行字对齐和8B/10B解码

通道逻辑检测并剥离SCP、ECP、PAD及空闲字符,提取有效负载

帧恢复与输出

恢复的数据通过AXI4-Stream接口输出:

m_axi_rx_tvalid标识有效数据

m_axi_rx_tlast标识帧结束

m_axi_rx_tkeep标记帧末有效字节(仅当tlast有效时)

无流控信号:接收端无tready,需应用层实时消费数据

错误检测

实时监测编解码错误(置位soft_err)或帧结构错误(如连续SCP,置位frame_err)

使用总结

以上流程为Aurora 8B10B IP核内部实现,开发者只需了解即可,无需关心起具体实现细节,开发者只需把Aurora 8B10B IP核输出的AXI4-Stream数据流送入自己的接收模块即可进行具体分析和处理;

Aurora8B10B 时钟架构

Aurora 8B10B IP核涉及多时钟域协同,关键时钟信号如下:

时钟交互要点:

跨时钟域同步:INIT_CLK用于复位逻辑(gt_reset需同步至该时钟域),避免亚稳态

用户时钟生成:USER_CLK由GT收发器的CDR(时钟数据恢复)电路产生,确保与输入数据同步

抖动要求:参考时钟(GT_REFCLK)需满足严格抖动限制(通常<1 ps RMS),否则高线速下链路失锁

Aurora8B10B IP核调用和使用

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

然后配置如下:

具体配置要根据自己的项目需求而定,上图只是博主的配置,仅供参考;

AXIS视频流恢复

AXI4-Stream视频流再送入纯verilog代码实现的AXIS视频流重组模块实现信号恢复,因为Aurora 8B10B接收接口不带tuser信号,所以需要在嵌入数据中的tuser恢复出来;将AXIS视频流恢复模块直接拖入Block Design中,如下:

AXIS视频流写缓存

然后AXI4-Stream视频流送入本博主自研的纯verilog实现的、AXI4-Stream接口的图像写缓存模块,实现视频写入DDR缓存操作;AXIS视频流写缓存模块代码架构如下:

AXIS视频流写缓存模块配置项如下:

AXIS视频流写缓存模块配置在Block Design中如下:

AXIS视频流读缓存

然后使用本博主自研的纯verilog实现的、AXI4-Stream接口的图像读缓存模块,实现视频从DDR读出操作;AXIS视频流写缓存模块代码架构如下:

AXIS视频流读缓存模块配置项如下:

AXIS视频流读缓存模块配置在Block Design中如下:

视频读取控制

图像缓存架构使用VGA时序模块完成视频读取控制,VGA时序模块负责产生VGA时序,他有两个作用,一是控制FDMA控制器从DDR3中读出缓存的视频,二是将同步后的VGA视频送入下一级的UVC图像处理模块,VGA时序模块代码架构如下:

RGB888转YUV422

根据UVC协议,UVC传输视频格式为YUV422,所以需将RGB888转为YUV422。本设计提供纯verilog实现的RGB888转YUV422模块,如下:

UVC图像处理

UVC图像处理模块主要实现图像缓冲、数据接口转换和时序同步等处理,完成UVC协议层,并以标准的FT602用户IO读写时序输出;模块代码架构如下:

UVC图像处理模块顶层接口如下:

FT602芯片

FT602 是 USB-to-FIFO 接口 SuperSpeed USB(USB 3.1 Gen 1)USB 视频类(UVC)桥接芯片具有以下特点:

1:支持 USB 3.1 GEN 1 超高速:(5Gbps)/ USB 2.0 高速(480Mbps);

2:支持 USB 传输类型:控制/散装/中断;

3:支持 UVC 1.1 版:支持最多 4 个视频输入通道;

4:FIFO 总线:支持 2 个并行从 FIFO 总线协议,245 FIFO 和多通道 FIFO 模式,数据突发速率高达 400MB / s,32 位并行接口;

5:内置 16kB FIFO 数据缓冲 RAM;

6:用于视频设备的内置 I2C 主接口;

7:组态:

7.1:支持多电压 I / O:1.8V,2.5V 和 3.3V;

7.2:内部 LDO 1.0V 稳压器;

7.3:集成的上电复位电路;

7.4:用户可编程 USB 和 UVC 描述符;

7.5:工业工作温度范围:-40 至 85⁰C;

7.6:符合 RoHS 标准的紧凑型无铅 QFN-76 封装;

芯片框图如下:

参考电路如下:

UVC接收显示

UVC视频送入FT602芯片完成UVC物理层;用USB3.0线缆连接开发板至笔记本电脑USB3.0接口;无需安装驱动,直接打开Win10自带的相机软件,即可看到FPGA采集发来的图像。如下:

工程源码架构

本博客提供4套工程源码,以工程源码1为例,vivado Block Design设计如下,其他工程与之类似:

本博客提供4套工程源码,以工程源码1为例,使工程源码架构如下,其他工程与之类似:

4、vivado工程源码1详解-->Artix7-35T,OV5640输入Aurora8B10B转UVC

开发板FPGA型号:Xilinx--Artix7--xc7a35tfgg484-2;

FPGA开发环境:Vivado2019.1;

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

输出:USB3.0 UVC,分辨率1280x720@60Hz;

光口回环方式:单路SFP光口回环,或上路回环,或板间点对点回环;

光编解码协议:Aurora8B10B编解码;

高速收发器类型:Xilinx--GTP高速收发器,线速率5Gbps;

图像缓存方案:纯verilog方案,DDR3做介质,图像3帧缓存;

USB3.0 UVC协议层方案:纯逻辑实现;

USB3.0 UVC物理层方案:FT602芯片;

工程作用:让读者掌握FPGAFPGA实现GTP光口视频转USB3.0 UVC输的设计能力,以便能够移植和设计自己的项目;

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

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

5、vivado工程源码2详解-->Artix7-35T,HDMI输入Aurora8B10B转UVC

开发板FPGA型号:Xilinx--Artix7--xc7a35tfgg484-2;

FPGA开发环境:Vivado2019.1;

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

输出:USB3.0 UVC,分辨率1920x1080@60Hz;

光口回环方式:单路SFP光口回环,或上路回环,或板间点对点回环;

光编解码协议:Aurora8B10B编解码;

高速收发器类型:Xilinx--GTP高速收发器,线速率5Gbps;

图像缓存方案:纯verilog方案,DDR3做介质,图像3帧缓存;

USB3.0 UVC协议层方案:纯逻辑实现;

USB3.0 UVC物理层方案:FT602芯片;

工程作用:让读者掌握FPGA实现Aurora 8B10B视频转UVC传输的设计能力,以便能够移植和设计自己的项目;

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

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

6、vivado工程源码3详解-->Artix7-100T,OV5640输入Aurora8B10B转UVC

开发板FPGA型号:Xilinx--Artix7--xc7a100tfgg484-2;

FPGA开发环境:Vivado2019.1;

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

输出:USB3.0 UVC,分辨率1280x720@60Hz;

光口回环方式:单路SFP光口回环,或上路回环,或板间点对点回环;

光编解码协议:Aurora8B10B编解码;

高速收发器类型:Xilinx--GTP高速收发器,线速率5Gbps;

图像缓存方案:纯verilog方案,DDR3做介质,图像3帧缓存;

USB3.0 UVC协议层方案:纯逻辑实现;

USB3.0 UVC物理层方案:FT602芯片;

工程作用:让读者掌握FPGAFPGA实现GTP光口视频转USB3.0 UVC输的设计能力,以便能够移植和设计自己的项目;

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

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

7、vivado工程源码2详解-->Artix7-100T,HDMI输入Aurora8B10B转UVC

开发板FPGA型号:Xilinx--Artix7--xc7a100tfgg484-2;

FPGA开发环境:Vivado2019.1;

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

输出:USB3.0 UVC,分辨率1920x1080@60Hz;

光口回环方式:单路SFP光口回环,或上路回环,或板间点对点回环;

光编解码协议:Aurora8B10B编解码;

高速收发器类型:Xilinx--GTP高速收发器,线速率5Gbps;

图像缓存方案:纯verilog方案,DDR3做介质,图像3帧缓存;

USB3.0 UVC协议层方案:纯逻辑实现;

USB3.0 UVC物理层方案:FT602芯片;

工程作用:让读者掌握FPGA实现Aurora 8B10B视频转UVC传输的设计能力,以便能够移植和设计自己的项目;

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

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

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、上板调试验证

准备工作

需要准备的器材如下:

FPGA开发板;

OV5640摄像头或ADV7611转接板:

FT602转接板(FPGA开发板板载FT602芯片的除外);

笔记本电脑或者PC主机;

USB3.0数据线;

SFP光模块和光纤;

我的开发板连接如下:

UVC详细测试步骤

第1步:

用USB3.0线缆连接FPGA开发板至PC端电脑的USB3.0接口;

!!!注意!!!注意!!!注意

USB线一定要是3.0的,区别方法是USB口内部的塑料件是蓝色的,对应的,电脑的USB口也必须是3.0的;

USB线与电脑连接,一定要是直连,不能有转接的HUB,也就是开发板与电脑USB口直连;

第2步:

下载工程的bit文件至FPGA开发板,如下:

第3步:

打开我的电脑-->管理-->设备管理器-->. 照相机,可以看到FT602的UVC设备,如下:

第4步:

打开Win10自带的相机APP,如下:

此时,我们并不能看到图像,需要设置一下相机默认的分辨率,如下:

如果我们下载的是OV5640摄像头转UVC的工程bit,那么UVC分辨率就是1280x720@60Hz,此时UVC分辨率设置如下:

如果我们下载的是HDMI摄像头转UVC的工程bit,那么UVC分辨率就是1920x1080@60Hz,此时UVC分辨率设置如下:

以下载彩条视频工程为例,此时我们可以看到图像,如下:

以下载OV5640摄像头工程为例,此时我们可以看到图像,如下:

以下载HDMI输入工程为例,此时我们可以看到图像,如下:

UVC视频录制本地保存

基于Win10自带APP的强大功能,我们还可以用相机的录制功能,将采集到的视频保存到本地,点击录制,如下:

录制完成后,系统自动保存视频,点击如下位置查看:

并可点击播放录制的视频,如下:

Win10自带APP功能强大,除了录制外,还有拍照等其他功能,期待你的进一步应用开发。

USB3.0 UVC 视频传输效果演示

USB3.0 UVC 视频传输效果演示如下:

FPGA基于FT602实现USB3.0 UVC 视频传输

10、工程代码的获取

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

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

网盘资料如下:

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

相关推荐
hahaha601614 小时前
3NRD降噪算法FPGA实现8并行度设计
fpga开发
松小白song15 小时前
一次“载电流显示为 0“的排查经历:负值钳位引发的踩坑
fpga开发
yingheceping18 小时前
复旦微FPGA开发板厂商TOP5甄选榜:2026选型参考
fpga开发·fpga
NamoAmitabha12820 小时前
PL 端的 GPIO IP(AXI GPIO)---PS控制----deepseek
fpga开发·zynq--ps
hahaha60161 天前
3D降噪算法YUV降噪FPGA实现
fpga开发
Hello-FPGA2 天前
基于RFSOC FPGA ZCU216 的CoaXPress 采集demo
fpga开发
9527华安2 天前
FPGA基于ADV7182解码PAL视频,Video Processing Subsystem去隔行,提供6套工程源码和技术支持
fpga开发·音视频·pal·adv7182
hahaha60162 天前
数字图像时域滤波或者3D降噪算法FPGA实现
算法·计算机视觉·fpga开发
GateWorld2 天前
Xilinx 7系列FPGA时钟网络详解
fpga开发·时钟网络·xilinx 7系列
szxinmai主板定制专家2 天前
X86 工控机 vs RK3588 异构主控:AMR 控制器 BOM、散热、长期运维对比
运维·stm32·单片机·嵌入式硬件·fpga开发·am62x