目录
- 1、创作背景
- 2、相关方案推荐
-
- 我已有的所有工程源码总目录----方便你快速找到自己喜欢的项目
- [我这里已有的 GT 高速接口解决方案](#我这里已有的 GT 高速接口解决方案)
- 3、工程详细设计方案
-
- 工程设计原理框图
- 输入Sensor之-->OV5640摄像头
- 输入Sensor之-->芯片解码的HDMI
- 输入Sensor之-->RTL解码的HDMI
- [ARINC818 视频编码模块](#ARINC818 视频编码模块)
- [GT Transceivers Wizard 高速收发器](#GT Transceivers Wizard 高速收发器)
-
- [GTX Transceivers Wizard IP 简介](#GTX Transceivers Wizard IP 简介)
- [GTX Transceivers Wizard 基本结构](#GTX Transceivers Wizard 基本结构)
- [GTX Transceivers Wizard 发送和接收处理流程](#GTX Transceivers Wizard 发送和接收处理流程)
- [GTX Transceivers Wizard 参考时钟](#GTX Transceivers Wizard 参考时钟)
- [GTX Transceivers Wizard 发送接口](#GTX Transceivers Wizard 发送接口)
- [GTX Transceivers Wizard 接收接口](#GTX Transceivers Wizard 接收接口)
- [GTX Transceivers Wizard IP核 调用和使用](#GTX Transceivers Wizard IP核 调用和使用)
- [ARINC818 视频解码模块](#ARINC818 视频解码模块)
- 图像缓存架构
- HDMI视频输出架构
- 工程源码架构
- 4、vivado工程源码1详解-->Artix7--35T,OV5640输入版本
- 5、vivado工程源码2详解-->Artix7--35T,HDMI输入版本
- 6、vivado工程源码3详解-->Kintex7--325T,OV5640输入版本
- 7、vivado工程源码4详解-->Kintex7--325T,HDMI输入版本
- 8、vivado工程源码5详解-->Zynq7100,OV5640输入版本
- 9、vivado工程源码6详解-->Zynq7100,HDMI输入版本
- 10、vivado工程源码7详解:Virtex7-690T,HDMI输入版本
- 11、工程移植说明
- 12、上板调试验证
-
- 准备工作
- [ARINC818 光口视频传输效果演示](#ARINC818 光口视频传输效果演示)
- 13、工程代码的获取
FPGA实现ARINC818总线协议,基于GT Transceivers Wizard高速收发器,提供7套工程源码和技术支持
ARINC
1、创作背景
ARINC818简介
ARINC = Aeronautical Radio, Incorporated,航空无线电公司
现在归属 RTCA(Radio Technical Commission for Aeronautics)体系,是民航、军机、航电领域最权威的行业标准制定组织。
1929 年成立,原本是航空公司联合成立,专门统一机载电子设备的通信、总线、接口规范。ARINC 不是协议,是标准体系。
ARINC标准分类如下

ARINC 是一整套航电规范家族;ARINC429 是老低速控制总线、AFDX 是航电以太网、ARINC818 是专门给图像视频走的高速串行总线。
前面水了这么久,才把ARINC818引出来,ARINC818具体介绍如下:
ARINC 818: Avionics Digital Video Bus,航电数字视频总线,简称 ADVB
发布时间:首版 ARINC818-1(2007),升级版本 ARINC818-2(2015) ,是当前主流版本;
底层物理层:基于 Fibre Channel(FC)的 8b/10b(老版本)/64b/66b(818-2 新增高速)串行 SerDes ;
核心定位:机载无压缩实时视频传输标准 ;
注意:ARINC818 不是 FC 协议!只是复用了 FC 的 SerDes 物理速率、编码方式,上层帧结构、控制字、同步机制完全重新定义,不能直接使用 FC IP 核收发。
ARINC818 又分为两个版本,如下:
ARINC818-1
编码:固定 8b/10b
线速率:FC 标准速率:1.0625 / 2.125 / 4.25 / 6.375 / 8.5 Gbps
用途:早期航电高清视频,1080P@60 主流使用 4.25G;
ARINC818-2(增强版)
新增 64b/66b 编码 (降低编码开销,8b10b 编码开销 20%,64b66b 仅 3.125%)
新增高速档位:14.025 / 21.0375 / 28.05 Gbps
支持 4K@60、多流视频复用、动态带宽、时间戳、链路诊断
本博客代码为ARINC818-1版本;
RINC818 核心优势
很多工程师疑惑:航空为什么不用 HDMI/SDI/CameraLink,专门用 ARINC818?
原生面向航空高可靠环境设计(DO-254/DO-178C 适配)
链路内置链路状态机、同步检测、链路故障上报、误码统计、热插拔检测,天生满足机载适航认证需求;SDI/HDMI 是消费级标准,没有定义故障管理机制,很难过航电认证。
光纤传输,抗干扰极强
默认推荐光纤介质,完全隔离地环路、抗 EMI/EMC、抗雷电干扰,军机、机载环境电磁环境极其恶劣,双绞线、铜缆视频接口极易受干扰。也支持电 SerDes 背板传输。
支持点对点高速无压缩实时视频,低延迟
无压缩,不需要编解码芯片,FPGA 直出 SerDes,端到端延迟仅为串行移位延迟,适合座舱显示器、光电吊舱、红外相机这类低延迟图像闭环场景 (光电跟踪、火控瞄准对延迟极其敏感)。
支持多通道视频复用、辅助通道并行传输
一条物理链路上,除主视频流之外,可以复用:辅助状态通道、元数据、IRIG-B 时间戳、传感器遥测数据,视频 + 控制 + 时标同缆传输,减少机载布线重量(减重对飞机至关重要)。
灵活速率可裁剪,向下兼容
从 1G 低速标清到 28G 超高清,同协议框架兼容,老设备和新显示器可以通过速率适配互联。
标准化接口,不同厂商设备互通
只要严格遵循 ARINC818 帧格式,A 家的光电相机可以直接对接 B 家座舱显示器,实现航电设备模块化、货架化采购。
RINC818 劣势
不是交换网络,点对点协议 ,原生不支持多节点交换组网(组网需要上层外接 AFDX 交换);
4.25G/8.5G 在老一代 FPGA(Kintex7)上存在 PLL 频段 Gap,硬件实现难度高;
商用 IP 少,大多需要自研帧处理逻辑,开发工作量高于 Aurora、10G Ethernet。
RINC818典型应用领域
民航客机座舱显示系统(CDS)
平视显示器 HUD、主飞行显示器 PFD、导航 MFD 多功能显示器、乘客娱乐视频。
军机光电载荷(最主流场景)
光电吊舱、红外热像仪、可见光相机、瞄准吊舱 → 向任务计算机、座舱显示器回传图像;
星载光学载荷
星上相机、光学载荷下传图像,航天领域经常直接复用 ARINC818 框架(航天会做额外的抗辐射加固版本);
直升机机载视频、无人机大型固定翼载荷视频链路;
地面测试:航电综合测试台、仿真系统、机载视频记录器(DVR)。
补充说明:民用工业视觉很少用 818,工业视觉优先 CameraLink、CoaXPress;ARINC818 是航空航天专属视频总线。
ARINC818协议
ARINC818协议大体做如下分层
物理层 → 编码层 → 链路层(帧层);
物理层 & 编码层
物理:差分 SerDes(Xilinx系列FPGA用 GT Transceivers Wizard IP核),光模块或者背板铜介质;
8b/10b:K 码(Comma 同步字符 K28.5)做链路同步、字对齐;
64b/66b:同步头 + 扰码,高速版本,818-2 新增。
链路层
ARINC818协议以帧为单位传输,最小传输单元是 ADVB 帧,一帧对应一张完整图像(和视频帧一一对应)
ADVB 帧结构如下:

一帧 ADVB 包含几个部分:
帧起始字 SOF(Start of Frame) :K 控制字,标记一帧图像开始
帧头 Header :包含:图像分辨率、像素格式、帧号、时间戳、链路状态、流 ID、辅助通道使能,支持像素格式:RGB、YCbCr、单色灰度红外图像等
图像有效载荷 Payload :像素数据流,无压缩原始像素 ,按行扫描顺序发送
辅助数据包 Auxiliary Data (可选):IRIG 时间码、传感器温度、陀螺姿态、状态遥测
帧结束字 EOF(End of Frame) :控制 K 字,标记图像帧结束
链路空闲字符 IDLE:没有图像传输时持续发送 Idle 序列,维持 SerDes CDR 锁定,链路不断训练
链路状态机
链路两端分为发送端 TX、接收端 RX,有一套标准状态流转:
Reset → Link Initialization → Comma字对齐 → 链路同步Locked → 正常视频传输 → 链路丢失/失锁 → 上报故障
接收端持续监控:字对齐、SOF/EOF 校验、帧长度校验、CRC 校验,一旦异常,向上层上报 LOS(Loss of Signal)故障信号。
同步与时序特点
两种同步模式:异步链路(最常用) :发送端和接收端独立参考时钟,依靠 SerDes CDR 恢复串行时钟;
也支持同步模式:收发同源参考时钟;
支持帧级时间戳,可以和机载 IRIG-B 1PPS 时标对齐,实现多相机图像时间统一,多源图像融合。
CRC 校验
每一个 ADVB 帧携带帧 CRC,接收端校验,用于判断图像帧是否在光纤传输中出现误码,故障统计上报。
ARINC818 和 Aurora 的区别
Aurora 是 Xilinx 私有 SerDes 链路协议,只做透明数据流通道,没有视频帧定义、没有 SOF/EOF、没有图像元数据、没有适航故障状态机 ;
ARINC818 是标准化视频协议,定义了图像语义,Aurora 只是裸通道。
工程概述
本设计使用Xilinx 系列FPGA为平台,实现基于GT Transceivers Wizard IP核的高速收发器为物理层,实现ARINC818总线协议的图像视频传输;
视频输入源有多种,一种是板载的HDMI输入接口,另一种是传统摄像头,包括OV7725、OV5640和AR0135;如果你的FPGA开发板没有视频输入接口,或者你的手里没有摄像头时,可以使用FPGA逻辑实现的动态彩条模拟输入视频,代码里通过parametr参数选择视频源,默认不使用动态彩条;FPGA首先使用纯veriolog代码实现的i2c配置模块的对摄像头进行初始化配置,并采集摄像头视频;然后将采集送入ARINC818视频编码模块,实现图像格式转换、ADVB帧配置、Object0帧编码、Object2帧编码、数据仲裁等操作;ARINC818编码后的视频流送入Xilinx官方的GT Transceivers Wizard IP核实现8b10b编码和数据串化,将并行数据串化为高速串行差分信号,线速率设置为4.25Gbps,编码后的视频通过板载的SFP光口的光纤输出;然后用板载的SFP光口的光纤接收视频,然后送入Xilinx官方的GT Transceivers Wizard IP核实现8b10b解码和数据解串,将差分高速串行信号解为并行数据;然后数据送入ARINC818视频解码模块,实现物理层数据
接收、object0帧解码、object2帧解码、数据重排、图像恢复等操作;并生成对应的场同步信号和数据有效信号输出;然后使用纯veriolog代码实现的图像缓存架构对采集视频做图像3帧缓存,缓存介质为板载DDR3;然后Native视频时序控制图像缓存架构从DDR3中读取视频并同步输出RGB888视频流;然后使用RGB转HDMI模块或者专用芯片实现RGB视频流转HDMI差分视频信号;最后用显示器显示视频即可;
针对市场主流需求,本博客设计并提供7套工程源码,具体如下:

现对上述7套工程源码做如下解释,方便读者理解:
工程源码1
开发板FPGA型号为Xilinx--Artix7--xc7a35tfgg484-2;
输入视频为OV5640摄像头或者动态彩条,默认使用OV5640;FPGA首先使用纯veriolog代码实现的i2c配置模块的对摄像头进行初始化配置,并采集摄像头视频;分辨率配置为1280x720@30Hz,颜色空间配置为RGB565;然后采集输入视频,将输入的两个时钟传输一个RGB565像素的视频采集为一个时钟传输一个RGB565像素的视频;然后将采集送入ARINC818视频编码模块,实现图像格式转换、ADVB帧配置、Object0帧编码、Object2帧编码、数据仲裁等操作;ARINC818编码后的视频流送入Xilinx官方的GTP Transceivers Wizard IP核实现8b10b编码和数据串化,将并行数据串化为高速串行差分信号,线速率设置为4.25Gbps,编码后的视频通过板载的SFP光口的光纤输出;然后用板载的SFP光口的光纤接收视频,然后送入Xilinx官方的GTP Transceivers Wizard IP核实现8b10b解码和数据解串,将差分高速串行信号解为并行数据;然后数据送入ARINC818视频解码模块,实现物理层数据接收、object0帧解码、object2帧解码、数据重排、图像恢复等操作;并生成对应的场同步信号和数据有效信号输出;然后使用纯veriolog代码实现的图像缓存架构对采集视频做图像3帧缓存,缓存介质为板载DDR3;然后Native视频时序控制图像缓存架构从DDR3中读取视频并同步输出RGB888视频流;然后使用RGB转HDMI模块或者专用芯片实现RGB视频流转HDMI差分视频信号,输出分辨率为1280x720@60Hz;最后用显示器显示视频即可;
该工程适用于SFP光口的ARINC818视频采集卡应用;
工程源码2
开发板FPGA型号为Xilinx--Artix7--xc7a35tfgg484-2;
输入视频为HDMI视频,用笔记本电脑模拟,笔记本电脑通过HDMI线连接FPGA开发板的HDMI输入接口,板载的IT6802芯片实现HDMI视频解码,FPGA使用纯Verilog实现的i2c总线对IT6802进行初始化配置,分辨率配置为1920x1080@60Hz,输出RGB888视频给FPGA;然后将采集送入ARINC818视频编码模块,实现图像格式转换、ADVB帧配置、Object0帧编码、Object2帧编码、数据仲裁等操作;ARINC818编码后的视频流送入Xilinx官方的GTP Transceivers Wizard IP核实现8b10b编码和数据串化,将并行数据串化为高速串行差分信号,线速率设置为4.25Gbps,编码后的视频通过板载的SFP光口的光纤输出;然后用板载的SFP光口的光纤接收视频,然后送入Xilinx官方的GTP Transceivers Wizard IP核实现8b10b解码和数据解串,将差分高速串行信号解为并行数据;然后数据送入ARINC818视频解码模块,实现物理层数据接收、object0帧解码、object2帧解码、数据重排、图像恢复等操作;并生成对应的场同步信号和数据有效信号输出;然后使用纯veriolog代码实现的图像缓存架构对采集视频做图像3帧缓存,缓存介质为板载DDR3;然后Native视频时序控制图像缓存架构从DDR3中读取视频并同步输出RGB888视频流;然后使用RGB转HDMI模块或者专用芯片实现RGB视频流转HDMI差分视频信号,输出分辨率为1920x1080@60Hz;最后用显示器显示视频即可;
该工程适用于SFP光口的ARINC818视频采集卡应用;
工程源码3
开发板FPGA型号为Xilinx--Kintex7--xc7k325tffg676-2;
输入视频为OV5640摄像头或者动态彩条,默认使用OV5640;FPGA首先使用纯veriolog代码实现的i2c配置模块的对摄像头进行初始化配置,并采集摄像头视频;分辨率配置为1280x720@30Hz,颜色空间配置为RGB565;然后采集输入视频,将输入的两个时钟传输一个RGB565像素的视频采集为一个时钟传输一个RGB565像素的视频;然后将采集送入ARINC818视频编码模块,实现图像格式转换、ADVB帧配置、Object0帧编码、Object2帧编码、数据仲裁等操作;ARINC818编码后的视频流送入Xilinx官方的GTX Transceivers Wizard IP核实现8b10b编码和数据串化,将并行数据串化为高速串行差分信号,线速率设置为4.25Gbps,编码后的视频通过板载的SFP光口的光纤输出;然后用板载的SFP光口的光纤接收视频,然后送入Xilinx官方的GTX Transceivers Wizard IP核实现8b10b解码和数据解串,将差分高速串行信号解为并行数据;然后数据送入ARINC818视频解码模块,实现物理层数据接收、object0帧解码、object2帧解码、数据重排、图像恢复等操作;并生成对应的场同步信号和数据有效信号输出;然后使用纯veriolog代码实现的图像缓存架构对采集视频做图像3帧缓存,缓存介质为板载DDR3;然后Native视频时序控制图像缓存架构从DDR3中读取视频并同步输出RGB888视频流;然后使用RGB转HDMI模块或者专用芯片实现RGB视频流转HDMI差分视频信号,输出分辨率为1280x720@60Hz;最后用显示器显示视频即可;
该工程适用于SFP光口的ARINC818视频采集卡应用;
工程源码4
开发板FPGA型号为Xilinx--Kintex7--xc7k325tffg676-2;
输入视频为HDMI视频,用笔记本电脑模拟,笔记本电脑通过HDMI线连接FPGA开发板的HDMI输入接口,板载的IT6802芯片实现HDMI视频解码,FPGA使用纯Verilog实现的i2c总线对IT6802进行初始化配置,分辨率配置为1920x1080@60Hz,输出RGB888视频给FPGA;然后将采集送入ARINC818视频编码模块,实现图像格式转换、ADVB帧配置、Object0帧编码、Object2帧编码、数据仲裁等操作;ARINC818编码后的视频流送入Xilinx官方的GTX Transceivers Wizard IP核实现8b10b编码和数据串化,将并行数据串化为高速串行差分信号,线速率设置为4.25Gbps,编码后的视频通过板载的SFP光口的光纤输出;然后用板载的SFP光口的光纤接收视频,然后送入Xilinx官方的GTX Transceivers Wizard IP核实现8b10b解码和数据解串,将差分高速串行信号解为并行数据;然后数据送入ARINC818视频解码模块,实现物理层数据接收、object0帧解码、object2帧解码、数据重排、图像恢复等操作;并生成对应的场同步信号和数据有效信号输出;然后使用纯veriolog代码实现的图像缓存架构对采集视频做图像3帧缓存,缓存介质为板载DDR3;然后Native视频时序控制图像缓存架构从DDR3中读取视频并同步输出RGB888视频流;然后使用RGB转HDMI模块或者专用芯片实现RGB视频流转HDMI差分视频信号,输出分辨率为1920x1080@60Hz;最后用显示器显示视频即可;
该工程适用于SFP光口的ARINC818视频采集卡应用;
工程源码5
开发板FPGA型号为Xilinx--Zynq7100--xc7z100ffg900-2;
输入视频为OV5640摄像头或者动态彩条,默认使用OV5640;FPGA首先使用纯veriolog代码实现的i2c配置模块的对摄像头进行初始化配置,并采集摄像头视频;分辨率配置为1280x720@30Hz,颜色空间配置为RGB565;然后采集输入视频,将输入的两个时钟传输一个RGB565像素的视频采集为一个时钟传输一个RGB565像素的视频;然后将采集送入ARINC818视频编码模块,实现图像格式转换、ADVB帧配置、Object0帧编码、Object2帧编码、数据仲裁等操作;ARINC818编码后的视频流送入Xilinx官方的GTX Transceivers Wizard IP核实现8b10b编码和数据串化,将并行数据串化为高速串行差分信号,线速率设置为4.25Gbps,编码后的视频通过板载的SFP光口的光纤输出;然后用板载的SFP光口的光纤接收视频,然后送入Xilinx官方的GTX Transceivers Wizard IP核实现8b10b解码和数据解串,将差分高速串行信号解为并行数据;然后数据送入ARINC818视频解码模块,实现物理层数据接收、object0帧解码、object2帧解码、数据重排、图像恢复等操作;并生成对应的场同步信号和数据有效信号输出;然后使用纯veriolog代码实现的图像缓存架构对采集视频做图像3帧缓存,缓存介质为板载PS端DDR3;然后Native视频时序控制图像缓存架构从DDR3中读取视频并同步输出RGB888视频流;然后使用RGB转HDMI模块或者专用芯片实现RGB视频流转HDMI差分视频信号,输出分辨率为1280x720@60Hz;最后用显示器显示视频即可;
该工程适用于SFP光口的ARINC818视频采集卡应用;
工程源码6
开发板FPGA型号为Xilinx--Zynq7100--xc7z100ffg900-2;
输入视频为板载的HDMI输入接口,使用笔记本电脑模拟HDMI输入设备连接到开发板HDMI输入接口;HDMI解码方式为纯VHDL代码方案;首先FPGA纯verilog实现的i2c配置模块完成HDMI RX的DDC接口配置,EDID配置为1920x1080@60Hz,使用纯VDHL代码实现的HDMI转RGB模块实现输入HDMI视频解码操作,并输出Native的RGB888视频流;为了支持1920x1080@60Hz,在硬件设计上需要加上驱动芯片,本设计采用TMDS141RHAR,也可采用其他型号;然后将采集送入ARINC818视频编码模块,实现图像格式转换、ADVB帧配置、Object0帧编码、Object2帧编码、数据仲裁等操作;ARINC818编码后的视频流送入Xilinx官方的GTX Transceivers Wizard IP核实现8b10b编码和数据串化,将并行数据串化为高速串行差分信号,线速率设置为4.25Gbps,编码后的视频通过板载的SFP光口的光纤输出;然后用板载的SFP光口的光纤接收视频,然后送入Xilinx官方的GTX Transceivers Wizard IP核实现8b10b解码和数据解串,将差分高速串行信号解为并行数据;然后数据送入ARINC818视频解码模块,实现物理层数据接收、object0帧解码、object2帧解码、数据重排、图像恢复等操作;并生成对应的场同步信号和数据有效信号输出;然后使用纯veriolog代码实现的图像缓存架构对采集视频做图像3帧缓存,缓存介质为板载PS端DDR3;然后Native视频时序控制图像缓存架构从DDR3中读取视频并同步输出RGB888视频流;然后使用RGB转HDMI模块或者专用芯片实现RGB视频流转HDMI差分视频信号,输出分辨率为1920x1080@60Hz;最后用显示器显示视频即可;
该工程适用于SFP光口的ARINC818视频采集卡应用;
工程源码7
开发板FPGA型号为Virtex7-690T--xc7vx690tffg1761-3;
输入视频为HDMI视频,用笔记本电脑模拟,笔记本电脑通过HDMI线连接FPGA开发板的HDMI输入接口,板载的silicon9011芯片实现HDMI视频解码,FPGA使用纯Verilog实现的i2c总线对silicon9011进行初始化配置,分辨率配置为1920x1080@60Hz,输出RGB888视频给FPGA;然后将采集送入ARINC818视频编码模块,实现图像格式转换、ADVB帧配置、Object0帧编码、Object2帧编码、数据仲裁等操作;ARINC818编码后的视频流送入Xilinx官方的GTX Transceivers Wizard IP核实现8b10b编码和数据串化,将并行数据串化为高速串行差分信号,线速率设置为4.25Gbps,编码后的视频通过板载的SFP光口的光纤输出;然后用板载的SFP光口的光纤接收视频,然后送入Xilinx官方的GTX Transceivers Wizard IP核实现8b10b解码和数据解串,将差分高速串行信号解为并行数据;然后数据送入ARINC818视频解码模块,实现物理层数据接收、object0帧解码、object2帧解码、数据重排、图像恢复等操作;并生成对应的场同步信号和数据有效信号输出;然后使用纯veriolog代码实现的图像缓存架构对采集视频做图像3帧缓存,缓存介质为板载DDR3;然后Native视频时序控制图像缓存架构从DDR3中读取视频并同步输出RGB888视频流;然后使用silicon9134专用芯片实现RGB视频流转HDMI差分视频信号,输出分辨率为1920x1080@60Hz;最后用显示器显示视频即可;
该工程适用于SFP光口的ARINC818视频采集卡应用;
本博客详细描述了FPGA实现ARINC818总线协议的设计方案,工程代码可综合编译上板调试,可直接项目移植,适用于在校学生、研究生项目开发,也适用于在职工程师做学习提升,可应用于医疗、军工等行业的高速接口或图像处理领域;
提供完整的、跑通的工程源码和技术支持;
工程源码和技术支持的获取方式放在了文章末尾,请耐心看到最后;
免责声明
本工程及其源码即有自己写的一部分,也有网络公开渠道获取的一部分(包括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开发板搭建;以下是专栏地址:
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;则输出动态彩条的视频;
整个模块代码架构如下:

ARINC818 视频编码模块
根据 ARINC818 官方协议文档,待传输的视频定义如下:

ARINC818 协议以帧为单位传输数据,最小传输单元是 ADVB 帧,一帧对应一张完整图像(与视频帧一一对应)。
ADVB 帧结构如下:

一帧图像按照 Object Container 机制进行组帧传输;
即 ARINC818 协议规定:一个 Container 对应一整幅图像,一个 Container 由 1 个 Object0 + N 个 Object2 帧组成。
具体如下:
Object0:容器描述帧(控制帧、元数据帧)
作用:描述本容器(即整幅图像)的全局信息,包括图像分辨率、像素格式、时间戳、容器序号 Container_cnt、ADVB 帧总数等。
Object2:图像载荷帧(像素帧)
作用:承载实际的图像像素数据。大分辨率图像像素过多,因此可以拆分为多个等长的 Object2 分片进行传输,每个 Object2 都是一个独立的 ADVB 帧。
ARINC818 视频编码模块实现了该协议,模块代码架构如下:

ARINC818 视频编码模块的接口说明如下:

ARINC818 视频编码模块的输入视频时序要求如下:

ikun_yuv444_rgb888.v 模块
实现 YUV444 到 RGB888 的转换。
当输入视频本身已是 RGB888 时,将 img_rgb_en 置 0,ikun_yuv444_rgb888.v 模块不工作。
当输入视频为 YUV444 时,将 img_rgb_en 置 1,ikun_yuv444_rgb888.v 模块开始工作。
YUV444 转 RGB888 的转换公式如下:
R = 1.164(Y - 16) + 1.793(CR - 128) = 1.164Y + 1.793CR - 248.128;
G = 1.164(Y - 16) - 0.534(CR - 128) - 0.213(CB - 128) = 1.164Y - 0.213CB - 0.534CR + 76.992;
B = 1.164(Y - 16) + 2.115(CB - 128) = 1.164Y + 2.115CB - 289.344;
ikun_arinc818_data_arbit.v 模块
ARINC818 数据仲裁模块。它根据输入的图像数据控制 Object0 和 Object2 帧的发送,并按照协议对 24 位图像数据进行排布。ARINC818 数据仲裁模块会根据单帧图像的总大小合理确定 Object2 帧的数量,并建立状态机,按照 ARINC818 总线协议发送 Container 数据。
ikun_arinc818_encoder_cfg.v 模块
负责填写帧头数据,配置容器参数、图像分辨率信息、像素格式等 ARINC818 编码所需的各项配置。
ikun_arinc818_object0_tx.v 模块
负责对 Object0 的帧头、数据(容器头)以及校验位进行组帧,并将组装好的数据输出给 GT Transceivers Wizard IP 核。该模块包含 CRC32 校验。
ikun_arinc818_object2_tx.v 模块
负责对 Object2 的帧头、数据(图像数据)以及校验位进行组帧,并将组装好的数据发送给 GT Transceivers Wizard IP 核。该模块内部包含一个 FIFO 用于缓存输入的图像数据,并包含 CRC32 校验。
GT Transceivers Wizard 高速收发器
本设计使用GT Transceivers Wizard IP核实现ARINC818协议的物理层,包括Serdes和8B10B编解码;总体代码架构如下:

ARINC818协议物理层顶层接口如下如下:

GTX Transceivers Wizard IP 简介
以Xilinx的GTX Transceivers Wizard IP核为例;关于GTX介绍最详细的肯定是Xilinx官方的《ug476_7Series_Transceivers》,我们以此来解读:《ug476_7Series_Transceivers》的PDF文档我已放在了资料包里,文章末尾有获取方式;我用到的开发板FPGA型号为Xilinx Zynq7100;带有8路GTX资源,其中2路连接到了2个SFP光口,每通道的收发速度为 500 Mb/s 到 10.3125 Gb/s 之间。GTX收发器支持不同的串行传输接口或协议,比如 PCIE 1.1/2.0 接口、万兆网 XUAI 接口、OC-48、串行 RapidIO 接口、 SATA(Serial ATA) 接口、数字分量串行接口(SDI)等等;
GTX Transceivers Wizard 基本结构
Xilinx 以 Quad 来对串行高速收发器进行分组,四个串行高速收发器和一个 COMMOM(QPLL)组成一个 Quad,每一个串行高速收发器称为一个 Channel(通道),下图为四路 GTX 收发器在Kintex7 FPGA 芯片中的示意图:《ug476_7Series_Transceivers》第24页;GTX 的具体内部逻辑框图如下所示,它由四个收发器通道 GTXE2_CHANNEL原语 和一个GTXE2_COMMON 原语组成。每路GTXE2_CHANNEL包含发送电路 TX 和接收电路 RX,GTXE2_CHANNEL的时钟可以来自于CPLL或者QPLL,可在IP配置界面里配置;《ug476_7Series_Transceivers》第25页;每个 GTXE2_CHANNEL 的逻辑电路如下图所示:《ug476_7Series_Transceivers》第26页;

GTXE2_CHANNEL的发送端和接收端功能是独立的,均由 PMA(Physical Media Attachment,物理媒介适配层)和 PCS(Physical Coding Sublayer,物理编码子层)两个子层组成。其中 PMA 子层包含高速串并转换(Serdes)、预/后加重、接收均衡、时钟发生器及时钟恢复等电路。PCS 子层包含8B/10B 编解码、缓冲区、通道绑定和时钟修正等电路。
这里说多了意义不大,因为没有做过几个大的项目是不会理解这里面的东西的,对于初次使用或者想快速使用者而言,更多的精力应该关注IP核的调用和使用,后面我也会重点将到IP核的调用和使用;
GTX Transceivers Wizard 发送和接收处理流程
首先用户逻辑数据经过 8B/10B 编码后,进入一个发送缓存区(Phase Adjust FIFO),该缓冲区主要是 PMA 子层和 PCS 子层两个时钟域的时钟隔离,解决两者时钟速率匹配和相位差异的问题,最后经过高速 Serdes 进行并串转换(PISO),有必要的话,可以进行预加重(TX Pre-emphasis)、后加重。值得一提的是,如果在 PCB 设计时不慎将 TXP 和 TXN 差分引脚交叉连接,则可以通过极性控制(Polarity)来弥补这个设计错误。接收端和发送端过程相反,相似点较多,这里就不赘述了,需要注意的是 RX 接收端的弹性缓冲区,其具有时钟纠正和通道绑定功能。这里的每一个功能点都可以写一篇论文甚至是一本书,所以这里只需要知道个概念即可,在具体的项目中回具体用到,还是那句话:对于初次使用或者想快速使用者而言,更多的精力应该关注IP核的调用和使用。
GTX Transceivers Wizard 参考时钟
GTX模块有两个差分参考时钟输入管脚(MGTREFCLK0P/N 和 MGTREFCLK1P/N),作为GTX模块的参考时钟源,用户可以自行选择。一般开发板上都有一路125或者156.25Mhz的GTX参考时钟连接到 MGTREFCLK0上,作为GTX的参考时钟。差分参考时钟通过IBUFDS 模块转换成单端时钟信号进入到 GTXE2_COMMOM 的QPLL或CPLL中,产生 TX 和 RX 电路中所需的时钟频率。TX 和 RX 收发器速度相同的话,TX 电路和 RX 电路可以使用同一个 PLL 产生的时钟,如果 TX 和 RX收发器速度不相同的话,需要使用不同的 PLL 时钟产生的时钟。参考时钟这里Xilinx给出的GT参考例程已经做得很好了,我们调用时其实不用修改;GTX的参考时钟结构图如下:《ug476_7Series_Transceivers》第31页;

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

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

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

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

有别于网上其他博主的教程,我个人喜欢用如下图的共享逻辑:这样选择的好处有两个,一是方便DRP变速,二是便于IP核的修改,修改完IP核后直接编译即可,不再需要打开example工程,再复制下面的一堆文件放到自己的工程什么的,玩儿个GTX需要那么复杂么?GTX协议层配置如下:

这里对上图的标号做解释:
1:线速率,根据自己的项目需求来,GTX的范围是0.5到6.25G,由于我的项目是视频传输,所以在GTX的速率范围内均可,为了通用性,我在vivado工程中配置为5G;
2:参考时钟,这个得根据你的原理图来,可以是80M、125M、148.5M、156.25M等等,我的开发板是156.25M;
4:GTX组的绑定,这个很重要,他的绑定参考依据有两个,已是你的开发板原理图,而是官方的参考资料《ug476_7Series_Transceivers》,官方根据BANK不同将GTX资源分成了多组,由于GT资源是Xilinx系列FPGA的专用资源,占用专用的Bnak,所以引脚也是专用的,那么这些GTX组和引脚是怎么对应的呢?《ug476_7Series_Transceivers》的说明如下:红框内为的我的开发板原理图对应的FPGA引脚;

我的板子原理图如下:

选择外部数据位宽32bit的8b/10b编解码,如下:

下面这里讲的是K码检测:

这里选择K28.5,也就是所谓的COM码,十六进制为bc,他的作用很多,可以表示空闲乱序符号,也可以表示数据错位标志,这里用来标志数据错位,8b/10b协议对K码的定义如下:

下面讲的是时钟矫正,也就是对应GTX内部PCS接收部分的弹性buffer;

这里有一个时钟频偏的概念,特别是收发双方时钟不同源时,这里设置的频偏为100ppm,规定每隔5000个数据包发送方发送一个4字节的序列,接收方的弹性buffer会根据这4字节的序列,以及数据在buffer中的位置来决定删除或者插入一个4字节的序列中的一个字节,目的是确保数据从发送端到接收端的稳定性,消除时钟频偏的影响;
ARINC818 视频解码模块
ARINC818 视频解码模块是视频编码的逆过程,代码架构如下:

顶层接口描述如下:

ARINC818 视频解码模块恢复输出的视频时序如下:

ikun_arinc818_rx.v模块
该模块主要负责接收来自GT Transceivers Wizard IP核的数据,区分帧格式,解析ARINC818数据内容,区分出Object0数据和Object2数据;
ikun_arinc818_object0_rx.v模块
负责Object0帧解码,解出图像信息;
ikun_arinc818_object2_rx.v模块
负责Object2帧解码,解出图像信息;
ikun_arinc818_video_arrange.v模块
实现数据位宽32bit转24bit,将图像数据正确排列;
ikun_arinc818_video_recover.v模块
将接收到的数据转换为行场标识信号输出,此时的行场信号均为高电平时表示图像数据有效,但是不满足HDMI所规定的时序,其行场消隐区时间不符合标准规定,使用时需注意。
图像缓存架构
图像缓存方案采用纯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套工程源码,以工程源码1为例,综合后的工程源码架构如下:

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

上图只是举例,资源消耗并非本工程的实际消耗,实际消耗请看下文的《工程代码详解》;
4、vivado工程源码1详解-->Artix7--35T,OV5640输入版本
开发板FPGA型号:Xilinx--Artix7--xc7a35tfgg484-2;
FPGA开发环境:Vivado2019.1;
输入:OV5640摄像头或动态彩条,分辨率1280x720@30Hz;
输出:HDMI,RTL逻辑编码方案,分辨率1280x720@60Hz;
回环光口类型:SFP光口;
ARINC818物理层方案:Xilinx-GTP-Transceivers Wizard,线速率4.25Gbps,8B10B编解码;
ARINC818链路层方案:纯verilog代码实现;
图像缓存方案:纯verilog图像缓存+DDR3颗粒+3帧缓存;
工程作用:让读者掌握FPGA实现ARINC818总线协议的设计能力,以便能够移植和设计自己的项目;
工程Block Design和工程代码架构请参考第3章节的《工程源码架构》小节内容;
工程的资源消耗和功耗如下:

5、vivado工程源码2详解-->Artix7--35T,HDMI输入版本
开发板FPGA型号:Xilinx--Artix7--xc7a35tfgg484-2;
FPGA开发环境:Vivado2019.1;
输入:HDMI或者FPGA内部动态彩条,纯VHDL解码方案,分辨率1920x1080@60Hz,笔记本电脑模拟输入源;
输出:HDMI,RTL纯逻辑编码方案,输出分辨率1280x720@60Hz;
回环光口类型:SFP光口;
ARINC818物理层方案:Xilinx-GTP-Transceivers Wizard,线速率4.25Gbps,8B10B编解码;
ARINC818链路层方案:纯verilog代码实现;
图像缓存方案:纯verilog图像缓存+DDR3颗粒+3帧缓存;
工程作用:让读者掌握FPGA实现ARINC818总线协议的设计能力,以便能够移植和设计自己的项目;
工程Block Design和工程代码架构请参考第3章节的《工程源码架构》小节内容;
工程的资源消耗和功耗如下:

6、vivado工程源码3详解-->Kintex7--325T,OV5640输入版本
开发板FPGA型号:Xilinx--Kintex7--xc7k325tffg676-2;
FPGA开发环境:Vivado2019.1;
输入:OV5640摄像头或动态彩条,分辨率1280x720@30Hz;
输出:HDMI,RTL逻辑编码方案,分辨率1280x720@60Hz;
回环光口类型:SFP光口;
ARINC818物理层方案:Xilinx-GTX-Transceivers Wizard,线速率4.25Gbps,8B10B编解码;
ARINC818链路层方案:纯verilog代码实现;
图像缓存方案:纯verilog图像缓存+DDR3颗粒+3帧缓存;
工程作用:让读者掌握FPGA实现ARINC818总线协议的设计能力,以便能够移植和设计自己的项目;
工程Block Design和工程代码架构请参考第3章节的《工程源码架构》小节内容;
工程的资源消耗和功耗如下:

7、vivado工程源码4详解-->Kintex7--325T,HDMI输入版本
开发板FPGA型号:Xilinx--Kintex7--xc7k325tffg676-2;
开发环境:Vivado2019.1;
输入:HDMI或者FPGA内部动态彩条,IT6802芯片解码方案,分辨率1920x1080@60Hz,笔记本电脑模拟输入源;
输出:HDMI,RTL纯逻辑编码方案,输出分辨率1280x720@60Hz;
回环光口类型:SFP光口;
ARINC818物理层方案:Xilinx-GTX-Transceivers Wizard,线速率4.25Gbps,8B10B编解码;
ARINC818链路层方案:纯verilog代码实现;
图像缓存方案:纯verilog图像缓存+DDR3颗粒+3帧缓存;
工程作用:让读者掌握FPGA实现ARINC818总线协议的设计能力,以便能够移植和设计自己的项目;
工程Block Design和工程代码架构请参考第3章节的《工程源码架构》小节内容;
工程的资源消耗和功耗如下:

8、vivado工程源码5详解-->Zynq7100,OV5640输入版本
开发板FPGA型号:Virtex7-Zynq7100--xc7z100ffg900-2;
FPGA开发环境:Vivado2019.1;
输入:OV5640摄像头或动态彩条,分辨率1280x720@30Hz;
输出:HDMI,RTL逻辑编码方案,分辨率1280x720@60Hz;
回环光口类型:SFP光口;
ARINC818物理层方案:Xilinx-GTX-Transceivers Wizard,线速率4.25Gbps,8B10B编解码;
ARINC818链路层方案:纯verilog代码实现;
图像缓存方案:纯verilog图像缓存+PS端DDR3颗粒+3帧缓存;
工程作用:让读者掌握FPGA实现ARINC818总线协议的设计能力,以便能够移植和设计自己的项目;
工程Block Design和工程代码架构请参考第3章节的《工程源码架构》小节内容;
工程的资源消耗和功耗如下:

9、vivado工程源码6详解-->Zynq7100,HDMI输入版本
开发板FPGA型号:Virtex7-Zynq7100--xc7z100ffg900-2;
FPGA开发环境:Vivado2019.1;
输入:HDMI或者FPGA内部动态彩条,IT6802芯片解码方案,分辨率1920x1080@60Hz,笔记本电脑模拟输入源;
输出:HDMI,RTL纯逻辑编码方案,输出分辨率1280x720@60Hz;
回环光口类型:SFP光口;
ARINC818物理层方案:Xilinx-GTX-Transceivers Wizard,线速率4.25Gbps,8B10B编解码;
ARINC818链路层方案:纯verilog代码实现;
图像缓存方案:纯verilog图像缓存+PS端DDR3颗粒+3帧缓存;
工程作用:让读者掌握FPGA实现ARINC818总线协议的设计能力,以便能够移植和设计自己的项目;
工程Block Design和工程代码架构请参考第3章节的《工程源码架构》小节内容;
工程的资源消耗和功耗如下:

10、vivado工程源码7详解:Virtex7-690T,HDMI输入版本
开发板FPGA型号:Virtex7-690T--xc7vx690tffg1761-3;
开发环境:Vivado2019.1;
输入:HDMI或者FPGA内部动态彩条,silicon9011芯片解码方案,分辨率1920x1080@60Hz,笔记本电脑模拟输入源;
输出:HDMI,silicon9134芯片编码方案,输出分辨率1920x1080@60Hz;
回环光口类型:SFP光口;
ARINC818物理层方案:Xilinx-GTH-Transceivers Wizard,线速率4.25Gbps,8B10B编解码;
ARINC818链路层方案:纯verilog代码实现;
图像缓存方案:纯verilog图像缓存+PS端DDR3颗粒+3帧缓存;
工程作用:让读者掌握FPGA实现ARINC818总线协议的设计能力,以便能够移植和设计自己的项目;
工程Block Design和工程代码架构请参考第3章节的《工程源码架构》小节内容;
工程的资源消耗和功耗如下:

11、工程移植说明
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软核;
12、上板调试验证
准备工作
需要准备的器材如下:
OV5640摄像头或者笔记本电脑,没有则请使用FPGA内部生成的彩条;
FPGA开发板,没有开发板可以找本博提供;
SFP光模块和光纤;
我的开发板了连接如下:
ARINC818 光口视频传输效果演示
ARINC818 光口视频传输效果演示如下:
ARINC
13、工程代码的获取
代码太大,无法邮箱发送,以某度网盘链接方式发送,
资料获取方式:文章末尾名片。
网盘资料如下:

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