在实际项目中,经常会用到多路视频输入后选择其中一路作为输出的应用场景,如果你用的是FPGA,那么他的实现就不再像软件那么简单快捷,这里不仅是一个简单的切换问题,而是伴随着时序等复杂综合体的问题;本文使用Xilinx的Kintex-7 FPGA作为平台,该开发板板载1路ov5640摄像头输入接口,1路HDMI输入接口,1路HDMI输出接口;本设计采用项目中常用的低速总线串口作为控制手段,通过串口发送控制指令,控制2路输入视频的切换;本博客详细描述了该设计方案,工程代码可综合编译上板调试,可直接项目移植,适用于在校学生、研究生项目开发,也适用于在职工程师做学习提升,可应用于医疗、军工等行业的高速接口或图像处理领域;
提供完整的、跑通的工程源码和技术支持;
工程源码和技术支持的获取方式放在了文章末尾,请耐心看到最后;
本工程及其源码即有自己写的一部分,也有网络公开渠道获取的一部分(包括CSDN、Xilinx官网、Altera官网等等),若大佬们觉得有所冒犯,请私信批评教育;基于此,本工程及其源码仅限于读者或粉丝个人学习和研究,禁止用于商业用途,若由于读者或粉丝自身原因用于商业用途所导致的法律问题,与本博客及博主无关,请谨慎使用。。。
这个项目高度贴近现实项目,即FPGA接受串口协议帧,解析出有效数据,然后根据有效数据选择2路输入视频中的1路输出,框图如下:

原视频1:
OV5640摄像头720P输入,RGB888格式;
原视频2:
HDMI视频720P输入,RGB888格式,it6802采集;可以参考我之前的文章it6802采集HDMI视频
外部串口输入及解析:

关于串口指令协议部分,请参考我之前的文章点击直接前往
切换逻辑如下:
板子上电后默认为OV5640输入;
FPGA收到4个字节十六进制数据01020304时切换为OV5640输入;
FPGA收到4个字节十六进制数据04030201时切换为HDMI输入;
外部串口按照自定义的串口协议帧格式发送控制指令给FPGA,并去掉帧头、帧尾、和校验,提取出控制指令,这部分请参考我之前写的文章FPGA解析串口协议帧
视频选择切换逻辑:
FPGA根据解析出的串口控制指令选择1路视频给到FDMA缓存做三帧缓存,关于FDMA缓存请参考我之前写得文章FDMA图像三帧缓存方案
输出HDMI:
720P输出屏幕显示;
工程介绍:
开发板FPGA型号:Kintex7–xc7k325tffg676-2;
输入视频源1:OV5640摄像头720P;
输入视频源1:HDMI输入720P,it6802解码;
输出:HDMI输出720P;
工程BD如下:


工程代码架构如下:

视频切换部分核心代码如下:

上板连接如下:HDMI输入连接笔记本电脑;

打开串口调试工具,提前准备好串口指令如下:

点击指令发送后即可切换视频了,看看演示效果吧:
视频输入二选一
福利:工程代码的获取
代码太大,无法邮箱发送,以某度网盘链接方式发送,
资料获取方式:私,或者文章末尾的V名片。
网盘资料如下:
