FPGA实现CameraLink视频解码,基于Xilinx ISERDES2原语,提供4套工程源码和技术支持

发布于:2025-06-30 ⋅ 阅读:(16) ⋅ 点赞:(0)


FPGA解码CameraLink视频,基于Xilinx ISERDES2原语,提供4套工程源码和技术支持

1、前言

FPGA实现CameraLink视频解码现状:

FPGA实现CameraLink视频解码目前有两种方案:
一是使用专用编芯片解码,比如典型的DS90CR287,优点是简单快捷,缺点是需要额外的芯片,导致PCB布线难度加大,系统成本上升;另一种方案是使用FPGA逻辑资源实现编解码,其中7系列FPGA使用ISERDES2原语实现解串,UltraScale系列FPGA使用ISERDES3原语实现解串,优点是充分利用了FPGA资源,系统设计简单,成本更低,缺点是实现难度大,对FPGA工程师水平要求较高;本设计使用7系列FPGA的ISERDES2原语实现CameraLink视频解码;

工程概述

本文详细描述了FPGA实现CameraLink视频解码的设计方案;输入视频为CameraLink相机,相机为Base模式;CameraLink相机LVDS视频对首先送入纯verilog代码实现的LVDS接收解码模块实现LVDS视频解码,输出并行视频数据,LVDS接收解码模块需要用到Xilinx ISERDES2原语;然后解码视频送入纯verilog代码实现的LVDS视频对齐模块实现视频时序恢复,根据CameraLink协议和相机数据手册将并行视频数据恢复为Native视频时序,提取出行同步信号、长同步信号、数据有效信号和视频像素数据;然后调用Xilinx官方的Video In To AXI4-Stream IP核将Native视频流转换为AXI4-Stream视频流;然后调用Xilinx官方的VDMA IP核视频图像缓存,缓存方案为3帧缓存,缓存介质为DDR3颗粒;然后缓存视频从DDR3中读出,调用Xilinx官方的AXI4-Stream To Video Out IP核将AXI4-Stream视频流转换为Native视频流;然后视频送入纯verilog代码实现的RGB转HDMI模块或使用板载的Sil9022专用芯片实现RGB转HDMI;最后将HDMI视频送显示器显示即可;整个工程需要用到MicroBlaze或Zynq软核做相关IP配置和相关IC配置;针对市场主流需求,本博客提供4套工程源码,具体如下:
在这里插入图片描述
现对上述2套工程源码做如下解释,方便读者理解:

工程源码1

开发板FPGA型号为Xilinx–Artix7-100T–xc7a100tfgg484-2;输入视频为CameraLink工业相机,相机为Base模式,输出分辨率为2448x2050@15Hz,输出灰度图,输出为1-Tap模式,即一个像素时钟输出1个像素,像素时钟频率80M Hz;CameraLink相机LVDS视频对首先送入纯verilog代码实现的LVDS接收解码模块实现LVDS视频解码,输出并行视频数据,LVDS接收解码模块需要用到Xilinx ISERDES2原语;然后解码视频送入纯verilog代码实现的LVDS视频对齐模块实现视频时序恢复,根据CameraLink协议和相机数据手册将并行视频数据恢复为Native视频时序,提取出行同步信号、长同步信号、数据有效信号和视频像素数据;然后调用Xilinx官方的Video In To AXI4-Stream IP核将Native视频流转换为AXI4-Stream视频流;然后调用Xilinx官方的VDMA IP核视频图像缓存,缓存方案为3帧缓存,缓存介质为DDR3颗粒;然后缓存视频从DDR3中读出,调用Xilinx官方的AXI4-Stream To Video Out IP核将AXI4-Stream视频流转换为Native视频流;然后视频送入纯verilog代码实现的RGB转HDMI模块或使用板载的Sil9022专用芯片实现RGB转HDMI,输出分辨率为1920x1080@60Hz;最后将HDMI视频送显示器显示即可;整个工程需要用到MicroBlaze软核做相关IP配置和相关IC配置;由此形成FPGA+CameraLink+HDMI的高端架构;该工程适用于CameraLink视频转换卡应用;

工程源码2

开发板FPGA型号为Xilinx–>Kintex7–325T–xc7k325tffg676-2;输入视频为CameraLink工业相机,相机为Base模式,输出分辨率为2448x2050@15Hz,输出灰度图,输出为1-Tap模式,即一个像素时钟输出1个像素,像素时钟频率80M Hz;CameraLink相机LVDS视频对首先送入纯verilog代码实现的LVDS接收解码模块实现LVDS视频解码,输出并行视频数据,LVDS接收解码模块需要用到Xilinx ISERDES2原语;然后解码视频送入纯verilog代码实现的LVDS视频对齐模块实现视频时序恢复,根据CameraLink协议和相机数据手册将并行视频数据恢复为Native视频时序,提取出行同步信号、长同步信号、数据有效信号和视频像素数据;然后调用Xilinx官方的Video In To AXI4-Stream IP核将Native视频流转换为AXI4-Stream视频流;然后调用Xilinx官方的VDMA IP核视频图像缓存,缓存方案为3帧缓存,缓存介质为DDR3颗粒;然后缓存视频从DDR3中读出,调用Xilinx官方的AXI4-Stream To Video Out IP核将AXI4-Stream视频流转换为Native视频流;然后视频送入纯verilog代码实现的RGB转HDMI模块或使用板载的Sil9022专用芯片实现RGB转HDMI,输出分辨率为1920x1080@60Hz;最后将HDMI视频送显示器显示即可;整个工程需要用到MicroBlaze软核做相关IP配置和相关IC配置;由此形成FPGA+CameraLink+HDMI的高端架构;该工程适用于CameraLink视频转换卡应用;

工程源码3

开发板FPGA型号为Xilinx–>Zynq7045–xc7z045ffg900-2;输入视频为CameraLink工业相机,相机为Base模式,输出分辨率为2448x2050@15Hz,输出灰度图,输出为1-Tap模式,即一个像素时钟输出1个像素,像素时钟频率80M Hz;CameraLink相机LVDS视频对首先送入纯verilog代码实现的LVDS接收解码模块实现LVDS视频解码,输出并行视频数据,LVDS接收解码模块需要用到Xilinx ISERDES2原语;然后解码视频送入纯verilog代码实现的LVDS视频对齐模块实现视频时序恢复,根据CameraLink协议和相机数据手册将并行视频数据恢复为Native视频时序,提取出行同步信号、长同步信号、数据有效信号和视频像素数据;然后调用Xilinx官方的Video In To AXI4-Stream IP核将Native视频流转换为AXI4-Stream视频流;然后调用Xilinx官方的VDMA IP核视频图像缓存,缓存方案为3帧缓存,缓存介质为DDR3颗粒;然后缓存视频从DDR3中读出,调用Xilinx官方的AXI4-Stream To Video Out IP核将AXI4-Stream视频流转换为Native视频流;然后视频送入纯verilog代码实现的RGB转HDMI模块或使用板载的Sil9022专用芯片实现RGB转HDMI,输出分辨率为1920x1080@60Hz;最后将HDMI视频送显示器显示即可;整个工程需要用到Zynq软核做相关IP配置和相关IC配置;由此形成FPGA+CameraLink+HDMI的高端架构;该工程适用于CameraLink视频转换卡应用;

工程源码4

开发板FPGA型号为Xilinx–>Zynq100–xc7z100ffg900-2;输入视频为CameraLink工业相机,相机为Base模式,输出分辨率为2448x2050@15Hz,输出灰度图,输出为1-Tap模式,即一个像素时钟输出1个像素,像素时钟频率80M Hz;CameraLink相机LVDS视频对首先送入纯verilog代码实现的LVDS接收解码模块实现LVDS视频解码,输出并行视频数据,LVDS接收解码模块需要用到Xilinx ISERDES2原语;然后解码视频送入纯verilog代码实现的LVDS视频对齐模块实现视频时序恢复,根据CameraLink协议和相机数据手册将并行视频数据恢复为Native视频时序,提取出行同步信号、长同步信号、数据有效信号和视频像素数据;然后调用Xilinx官方的Video In To AXI4-Stream IP核将Native视频流转换为AXI4-Stream视频流;然后调用Xilinx官方的VDMA IP核视频图像缓存,缓存方案为3帧缓存,缓存介质为DDR3颗粒;然后缓存视频从DDR3中读出,调用Xilinx官方的AXI4-Stream To Video Out IP核将AXI4-Stream视频流转换为Native视频流;然后视频送入纯verilog代码实现的RGB转HDMI模块或使用板载的Sil9022专用芯片实现RGB转HDMI,输出分辨率为1920x1080@60Hz;最后将HDMI视频送显示器显示即可;整个工程需要用到Zynq软核做相关IP配置和相关IC配置;由此形成FPGA+CameraLink+HDMI的高端架构;该工程适用于CameraLink视频转换卡应用;

本文详细描述了FPGA解码CameraLink视频转HDMI输出的设计方案,工程代码可综合编译上板调试,可直接项目移植,适用于在校学生、研究生项目开发,也适用于在职工程师做项目开发,可应用于医疗、军工等行业的高速接口领域;
提供完整的、跑通的工程源码和技术支持;
工程源码和技术支持的获取方式放在了文章末尾,请耐心看到最后;

免责声明

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

2、CameraLink协议理论学习

关于这部分,网上有很多博主解释过,我找了几篇推荐学习理论知识:
博客链接如下:
点击直接前往
你也可以去网上通过其他途径免费学习CameraLink协议,在学了CameraLink协议基础上看本工程源码能更快理解吸收;

3、相关方案推荐

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

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

FPGA实现CameraLink视频编解码方案

我的CameraLink视频专栏有很多FPGA的CaeraLink视频编解码方案,既有CaeraLink接收,也有CaeraLink发送,既有CaeraLink普通输出显示,也有CaeraLink视频拼接输出等等,专栏链接如下:欢迎前往查看:
点击直接前往

4、工程详细设计方案

工程设计原理框图

工程设计原理框图如下:
在这里插入图片描述

输入CameraLink相机

输入视频为CameraLink工业相机,相机为Base模式,输出分辨率为2448x2050@15Hz,输出灰度图,输出为1-Tap模式,即一个像素时钟输出1个像素,像素时钟频率80M Hz;CameraLink相机如下:
在这里插入图片描述

LVDS视频解码模块

本设计参考了Xilinx官方设计,基于ISERDES2原语实现的LVDS解码模块对输入的CameraLink视频进行解码;LVDS视频解码模块设计框图如下:
在这里插入图片描述
LVDS视频解码模块输入为随路差分时钟对和LVDS差分数据对;利用Xilinx官方IDELAY和ISERDES原语实现串并转换;模块总体代码架构如下:
在这里插入图片描述
IDELAY原语用于接收延时,保证接收端视频的稳定性;ISERDES2原语用于串并转换,将输入串行差分数据转换为并行数据;此外,LVDS解串视频还需要做对齐处理,随路时钟也需要通过MMCM输出同步处理;整个LVDS视频解码模块严格按照设计框图实现,解码模块顶层接口如下:
在这里插入图片描述
Block Design设计中,直接将LVDS视频解码模块顶层拖入Block Design中形成自定义IP,方便调用和使用,如下:
在这里插入图片描述
双击LVDS视频解码模块的自定义IP,可以看到配置参数如下:
在这里插入图片描述
这两个参数可自由配置,以适应CameraLink相机的不同模式;具体配置如下:
在这里插入图片描述

LVDS视频对齐

调用LVDS视频对齐模块,根据CameraLink视频协议提取出行同步信号、场同步信号、数据有效信号和像素数据;模块总体代码架构如下:
在这里插入图片描述
模块顶层接口如下:
在这里插入图片描述
Block Design设计中,直接将CameraLink视频恢复模块顶层拖入Block Design中形成自定义IP,方便调用和使用,如下:
在这里插入图片描述

Video In To AXI4-Stream

调用Xilinx官方的Video In To AXI4-Stream IP核将Bayer视频转换为 AXI4-Stream视频流;Block Design中如下:
在这里插入图片描述
需要注意的是,Base模式下,相机1个像素时钟输出2个像素;
需要注意的是,Full模式下,相机1个像素时钟输出8个像素;
在IP配置时需要针对性配置,具体请参考工程;

VDMA视频缓存

LVDS解码后的视频转为Xilinx的AXI4-Sream的视频流,经VDMA送入DDR3做4帧缓存,VDMA在Block Design中如下:
在这里插入图片描述
需要注意的是,输入VDMA的视频数据位宽只有8位,是Bayer格式图像,在IP配置时需要针对性配置,具体请参考工程;此外,VDMA需要调用MicroBlaze或Zynq软核运行SDK来配置;

HDMI视频输出

调用Xilinx官方的Video Timing Controller和AXI4-Stream To Video Out IP核将AXI4-Stream视频流转换为Native视频;然后Native视频送入纯verilog代码实现的RGB转HDMI模块或使用板载的Sil9022专用芯片实现RGB转HDMI;最后HDMI视频送显示器显示即可;Video Timing Controller配置为1080P时序,sil9022芯片用AXI-I2C配置,通过MicroBlaze驱动;Block Design中如下:
在这里插入图片描述
需要注意的是,上图中的sil9022_iic是专门用于sil9022芯片配置,需要调用MicroBlaze软核运行SDK来驱动;

工程源码架构

提供4套工程源码,以工程源码1为例,工程Block Design设计如下:
在这里插入图片描述
提供4套工程源码,以工程源码1为例,综合后的工程源码架构如下:
在这里插入图片描述
提供4套工程源码,以工程源码1为例,工程源码需要运行MicroBlaze软核,用于相关IP配置和相关IC配置;SDK工程架构如下:
在这里插入图片描述
需要注意的是,在SDK工程中,我们将所有子函数都放在了主函数里,并提供了详细的中文注释和使用方法注释,用户可根据注释快速理解和使用;不懂的可以问我;如果你打开后注释显示乱码,请将SDK字符设置为国标;

本博主发布的工程均已编译完成,且时序收敛,无时序违约,如下:
在这里插入图片描述

5、Vivado工程详解1详解:Artix7-100T版本

开发板FPGA型号:Xilinx–Artix7–xc7a100tfgg484-2;
FPGA开发环境:Vivado2019.1;
输入:CameraLink相机,Base模式,分辨率2448x2050@15Hz,输出灰度图;
输出:HDMI,RTL逻辑编码,分辨率为1920x1080@60Hz;
CameraLink视频解码方案:Xilinx官方ISERDES2原语LVDS解码方案;
LVDS差分对:4对差分数据+1对随路差分时钟;
图像缓存方案:Xilinx官方VDMA+DDR3颗粒,3帧缓存;
实现功能:FPGA解码CameraLink视频转HDMI输出;
工程作用:此工程目的是让读者掌握FPGA解码CameraLink视频转HDMI输出的设计能力,以便能够移植和设计自己的项目;
工程Block Design和工程代码架构请参考第4章节的《工程源码架构》小节内容;
工程的资源消耗和功耗如下:
在这里插入图片描述

6、Vivado工程详解2详解:Kintex7-325T版本

开发板FPGA型号:Xilinx–>Kintex7–325T–xc7k325tffg676-2;
FPGA开发环境:Vivado2019.1;
输入:CameraLink相机,Base模式,分辨率2448x2050@15Hz,输出灰度图;
输出:HDMI,RTL逻辑编码,分辨率为1920x1080@60Hz;
CameraLink视频解码方案:Xilinx官方ISERDES2原语LVDS解码方案;
LVDS差分对:4对差分数据+1对随路差分时钟;
图像缓存方案:Xilinx官方VDMA+DDR3颗粒,3帧缓存;
实现功能:FPGA解码CameraLink视频转HDMI输出;
工程作用:此工程目的是让读者掌握FPGA解码CameraLink视频转HDMI输出的设计能力,以便能够移植和设计自己的项目;
工程Block Design和工程代码架构请参考第4章节的《工程源码架构》小节内容;
工程的资源消耗和功耗如下:
在这里插入图片描述

7、Vivado工程详解3详解:Zynq7045版本

开发板FPGA型号:Xilinx–>Zynq7045–xc7z045ffg900-2;
FPGA开发环境:Vivado2019.1;
输入:CameraLink相机,Base模式,分辨率2448x2050@15Hz,输出灰度图;
输出:HDMI,Sil9022芯片编码,分辨率为1920x1080@60Hz;
CameraLink视频解码方案:Xilinx官方ISERDES2原语LVDS解码方案;
LVDS差分对:4对差分数据+1对随路差分时钟;
图像缓存方案:Xilinx官方VDMA+DDR3颗粒,3帧缓存;
实现功能:FPGA解码CameraLink视频转HDMI输出;
工程作用:此工程目的是让读者掌握FPGA解码CameraLink视频转HDMI输出的设计能力,以便能够移植和设计自己的项目;
工程Block Design和工程代码架构请参考第4章节的《工程源码架构》小节内容;
工程的资源消耗和功耗如下:
在这里插入图片描述

8、Vivado工程详解4详解:Zynq7100版本

开发板FPGA型号:Xilinx–>Zynq7100–xc7z100ffg900-2;
FPGA开发环境:Vivado2019.1;
输入:CameraLink相机,Base模式,分辨率2448x2050@15Hz,输出灰度图;
输出:HDMI,Sil9022芯片编码,分辨率为1920x1080@60Hz;
CameraLink视频解码方案:Xilinx官方ISERDES2原语LVDS解码方案;
LVDS差分对:4对差分数据+1对随路差分时钟;
图像缓存方案:Xilinx官方VDMA+DDR3颗粒,3帧缓存;
实现功能:FPGA解码CameraLink视频转HDMI输出;
工程作用:此工程目的是让读者掌握FPGA解码CameraLink视频转HDMI输出的设计能力,以便能够移植和设计自己的项目;
工程Block Design和工程代码架构请参考第4章节的《工程源码架构》小节内容;
工程的资源消耗和功耗如下:
在这里插入图片描述

9、工程移植说明

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

10、上板调试验证

准备工作

需要准备的器材如下:
CameraLink相机,可以找本博主提供;
CameraLink转接板,可以找本博主提供;
FPGA开发板,没有开发板可以找本博主提供;
HDMI显示器和HDMI线缆,这个很常见,自备即可;

FPGA解码CameraLink视频转HDMI输出效果演示

FPGA解码CameraLink视频转HDMI输出效果演示如下:

FPGA实现CameraLink视频解码,工程源码分享

11、工程代码获取

工程代码如下:
在这里插入图片描述


网站公告

今日签到

点亮在社区的每一天
去签到