目录
- 1、前言
- 2、相关方案推荐
- 3、FT601芯片解读和时序分析
- 4、详细设计方案
- 5、工程源码1详解-->Artix7-35T,2路OV5640拼接版本
- 6、工程源码2详解-->Artix7-35T,4路OV5640拼接版本
- 7、工程源码3详解-->Artix7-100T,2路OV5640拼接版本
- 8、工程源码4详解-->Artix7-100T,4路OV5640拼接版本
- 9、工程源码5详解-->Kintex7--35T,2路OV5640拼接版本
- 10、工程源码6详解-->Kintex7--35T,4路OV5640拼接版本
- 11、工程源码7详解-->Kintex7--35T,2路HDMI拼接版本
- 12、工程源码8详解-->Kintex7--35T,4路HDMI拼接版本
- 13、工程源码9详解-->Zynq7020,2路OV5640拼接版本
- 14、工程源码10详解-->Zynq7020,4路OV5640拼接版本
- 15、工程源码11详解-->Zynq7100,2路OV5640拼接版本
- 16、工程源码12详解-->Zynq7100,4路OV5640拼接版本
- 17、工程源码13详解-->Zynq7100,2路HDMI拼接版本
- 18、工程源码14详解-->Zynq7100,4路HDMI拼接版本
- 19、工程源码15详解-->KU040,2路OV5640拼接版本
- 20、工程源码16详解-->KU040,4路OV5640拼接版本
- 21、工程源码17详解-->KU040,2路HDMI拼接版本
- 22、工程源码18详解-->KU040,4路HDMI拼接版本
- 23、工程源码19详解-->KU060,2路OV5640拼接版本
- 24、工程源码20详解-->KU060,4路OV5640拼接版本
- 25、工程源码21详解-->KU060,2路HDMI拼接版本
- 26、工程源码22详解-->KU060,4路HDMI拼接版本
- 27、工程移植说明
- 28、上板调试验证
- 29、福利:工程代码的获取
FPGA基于FT601实现USB3.0视频缩放拼接传输,提供22套工程源码和QT上位机源码
1、前言
目前USB3.0的实现方案很多,但就简单好用的角度而言,FT601应该是最佳方案,因为它电路设计简单,操作时序简单,软件驱动简单,官方甚至提供了包括FPGA驱动在内的丰富的驱动源码和测试软件;本设计旨在普及传播FT601芯片在FPGA领域实现USB3.0通信应用,包括FT601芯片解读、FT601芯片读写时序分析、FT601芯片硬件电路参考设计、FT601与PC端的QT上位机通信,包括FT601测速试验、FT601视频采集传输试验、FT601视频采集+图像处理后传输试验等等;
工程概述
本设计使用FPGA驱动FT601芯片实现USB3.0视频传输应用;理论上视频输入源可以是多种多样的,取决于你想做的产品,本博主手上只有OV5640摄像头,外加开发板自带了一路HDMI输入接口,所以本设计的Sensor为OV5640摄像头或者HDMI,另外,为了照顾收手上没有Sensor或者不是本设计同款Sensor亦或是Sensor方案还未定的情况,本博主在工程中还设计了动态彩条模块,彩条由FPGA内部逻辑产生,且是动态移动的,完全可模拟Sensor,输入源选择Sensor还是彩条,通过Sensor模块的顶层参数配置,默认选择Sensor输入;
FPGA采集到Sensor图像后,使用本博自研、纯verilog实现的、支持任意比例缩放的图像缩放模块对输入视频进行缩放操作,将原始分辨率视频缩小为960x540,当然,读者也可以缩放为其他分辨率;然后使用本博常用的FDMA图像缓存架构实现图像缓存+多路视频拼接,该架构简单灵活,将不同的视频写入不同的内存地址再统一读出来,以达到拼接效果,FDMA缓存介质为板载的DDR3/4;然后由FT601读写逻辑控制视频从DDR3/4中读出;FT601使用同步FIFO-245模式,工作模式通过GPIO0/GPIO1引脚配置;根据FT601读写时序设计了读写状态机;在PC端QT上位机控制下,FT601读写逻辑产生从DDR3/4中读取视频的控制信号,并将读出的视频通过FT601写数据总线发送到板载的FT601芯片;FPGA开发板通过USB3.0数据线连接至PC端主机;PC端的QT上位机调用FT601驱动的API实现图像读取并显示视频;由此形成外接Sensor+FPGA+FT601+QT上位机的珠联璧合;针对市面上主流的FPGA,本博客提供22套工程源码,具体如下:
现对上述22套工程源码做如下解释,方便读者理解:
工程源码1
开发板FPGA型号为Xilinx–>Artix7–xc7a35tfgg484-2;输入源为OV5640摄像头或动态彩条,分辨率为1280x720@30Hz,可以通过Sensor模块的顶层参数配置,默认选择Sensor输入;FPGA纯verilog实现的i2c配置模块对摄像头进行初始化配置,并采集摄像头数据以RGB888输出;再经过自研的纯verilog实现的、支持任意比例缩放的图像缩放模块,将输入视频由1280x720缩小为960x540;缩放后的视频复制为2份,以模拟2路视频;然后调用2路本博常用的FDMA图像缓存方案将视频写入DDR3,其中1路FDMA配置为读写,另1路FDMA配置为单写,2路视频缓存地址不一样;然后由FT601读写逻辑控制视频从DDR3中读出,即将2路缓存地址不一样的视频从内存中一次性读出来,以达到拼接效果;FT601使用同步FIFO-245模式;根据FT601读写时序设计了读写状态机;在PC端QT上位机控制下,FT601读写逻辑产生从DDR3中读取视频的控制信号,并将读出的视频通过FT601写数据总线发送到板载的FT601芯片,输出分辨率为1920x1080@60Hz背景下叠加显示2路960x540的有效图像,即2分屏,详细显示效果请看文章末尾的输出演示视频;FPGA开发板通过USB3.0数据线连接至PC端主机;PC端的QT上位机调用FT601驱动的API实现图像读取并显示视频;由此形成外接OV5640摄像头+FPGA+FT601+QT上位机的珠联璧合;Vivado工程和QT工程均提供源码;本工程适用于FPGA基于FT601实现USB3.0视频传输;
工程源码2
开发板FPGA型号为Xilinx–>Artix7–xc7a35tfgg484-2;输入源为OV5640摄像头或动态彩条,分辨率为1280x720@30Hz,可以通过Sensor模块的顶层参数配置,默认选择Sensor输入;FPGA纯verilog实现的i2c配置模块对摄像头进行初始化配置,并采集摄像头数据以RGB888输出;再经过自研的纯verilog实现的、支持任意比例缩放的图像缩放模块,将输入视频由1280x720缩小为960x540;缩放后的视频复制为4份,以模拟4路视频;然后调用4路本博常用的FDMA图像缓存方案将视频写入DDR3,其中1路FDMA配置为读写,另3路FDMA配置为单写,4路视频缓存地址不一样;然后由FT601读写逻辑控制视频从DDR3中读出,即将4路缓存地址不一样的视频从内存中一次性读出来,以达到拼接效果;FT601使用同步FIFO-245模式;根据FT601读写时序设计了读写状态机;在PC端QT上位机控制下,FT601读写逻辑产生从DDR3中读取视频的控制信号,并将读出的视频通过FT601写数据总线发送到板载的FT601芯片,输出分辨率为1920x1080@60Hz背景下叠加显示4路960x540的有效图像,即4分屏,详细显示效果请看文章末尾的输出演示视频;FPGA开发板通过USB3.0数据线连接至PC端主机;PC端的QT上位机调用FT601驱动的API实现图像读取并显示视频;由此形成外接OV5640摄像头+FPGA+FT601+QT上位机的珠联璧合;Vivado工程和QT工程均提供源码;本工程适用于FPGA基于FT601实现USB3.0视频传输;
工程源码3
开发板FPGA型号为Xilinx–>Artix7-100T–xc7a100tfgg484-2;输入源为OV5640摄像头或动态彩条,分辨率为1280x720@30Hz,可以通过Sensor模块的顶层参数配置,默认选择Sensor输入;FPGA纯verilog实现的i2c配置模块对摄像头进行初始化配置,并采集摄像头数据以RGB888输出;再经过自研的纯verilog实现的、支持任意比例缩放的图像缩放模块,将输入视频由1280x720缩小为960x540;缩放后的视频复制为2份,以模拟2路视频;然后调用2路本博常用的FDMA图像缓存方案将视频写入DDR3,其中1路FDMA配置为读写,另1路FDMA配置为单写,2路视频缓存地址不一样;然后由FT601读写逻辑控制视频从DDR3中读出,即将2路缓存地址不一样的视频从内存中一次性读出来,以达到拼接效果;FT601使用同步FIFO-245模式;根据FT601读写时序设计了读写状态机;在PC端QT上位机控制下,FT601读写逻辑产生从DDR3中读取视频的控制信号,并将读出的视频通过FT601写数据总线发送到板载的FT601芯片,输出分辨率为1920x1080@60Hz背景下叠加显示2路960x540的有效图像,即2分屏,详细显示效果请看文章末尾的输出演示视频;FPGA开发板通过USB3.0数据线连接至PC端主机;PC端的QT上位机调用FT601驱动的API实现图像读取并显示视频;由此形成外接OV5640摄像头+FPGA+FT601+QT上位机的珠联璧合;Vivado工程和QT工程均提供源码;本工程适用于FPGA基于FT601实现USB3.0视频传输;
工程源码4
开发板FPGA型号为Xilinx–>Artix7-100T–xc7a100tfgg484-2;输入源为OV5640摄像头或动态彩条,分辨率为1280x720@30Hz,可以通过Sensor模块的顶层参数配置,默认选择Sensor输入;FPGA纯verilog实现的i2c配置模块对摄像头进行初始化配置,并采集摄像头数据以RGB888输出;再经过自研的纯verilog实现的、支持任意比例缩放的图像缩放模块,将输入视频由1280x720缩小为960x540;缩放后的视频复制为4份,以模拟4路视频;然后调用4路本博常用的FDMA图像缓存方案将视频写入DDR3,其中1路FDMA配置为读写,另3路FDMA配置为单写,4路视频缓存地址不一样;然后由FT601读写逻辑控制视频从DDR3中读出,即将4路缓存地址不一样的视频从内存中一次性读出来,以达到拼接效果;FT601使用同步FIFO-245模式;根据FT601读写时序设计了读写状态机;在PC端QT上位机控制下,FT601读写逻辑产生从DDR3中读取视频的控制信号,并将读出的视频通过FT601写数据总线发送到板载的FT601芯片,输出分辨率为1920x1080@60Hz背景下叠加显示4路960x540的有效图像,即4分屏,详细显示效果请看文章末尾的输出演示视频;FPGA开发板通过USB3.0数据线连接至PC端主机;PC端的QT上位机调用FT601驱动的API实现图像读取并显示视频;由此形成外接OV5640摄像头+FPGA+FT601+QT上位机的珠联璧合;Vivado工程和QT工程均提供源码;本工程适用于FPGA基于FT601实现USB3.0视频传输;
工程源码5
开发板FPGA型号为Xilinx–>Kintex7–35T–xc7k325tffg900-2;输入源为OV5640摄像头或动态彩条,分辨率为1280x720@30Hz,可以通过Sensor模块的顶层参数配置,默认选择Sensor输入;FPGA纯verilog实现的i2c配置模块对摄像头进行初始化配置,并采集摄像头数据以RGB888输出;再经过自研的纯verilog实现的、支持任意比例缩放的图像缩放模块,将输入视频由1280x720缩小为960x540;缩放后的视频复制为2份,以模拟2路视频;然后调用2路本博常用的FDMA图像缓存方案将视频写入DDR3,其中1路FDMA配置为读写,另1路FDMA配置为单写,2路视频缓存地址不一样;然后由FT601读写逻辑控制视频从DDR3中读出,即将2路缓存地址不一样的视频从内存中一次性读出来,以达到拼接效果;FT601使用同步FIFO-245模式;根据FT601读写时序设计了读写状态机;在PC端QT上位机控制下,FT601读写逻辑产生从DDR3中读取视频的控制信号,并将读出的视频通过FT601写数据总线发送到板载的FT601芯片,输出分辨率为1920x1080@60Hz背景下叠加显示2路960x540的有效图像,即2分屏,详细显示效果请看文章末尾的输出演示视频;FPGA开发板通过USB3.0数据线连接至PC端主机;PC端的QT上位机调用FT601驱动的API实现图像读取并显示视频;由此形成外接OV5640摄像头+FPGA+FT601+QT上位机的珠联璧合;Vivado工程和QT工程均提供源码;本工程适用于FPGA基于FT601实现USB3.0视频传输;
工程源码6
开发板FPGA型号为Xilinx–>Kintex7–35T–xc7k325tffg900-2;输入源为OV5640摄像头或动态彩条,分辨率为1280x720@30Hz,可以通过Sensor模块的顶层参数配置,默认选择Sensor输入;FPGA纯verilog实现的i2c配置模块对摄像头进行初始化配置,并采集摄像头数据以RGB888输出;再经过自研的纯verilog实现的、支持任意比例缩放的图像缩放模块,将输入视频由1280x720缩小为960x540;缩放后的视频复制为4份,以模拟4路视频;然后调用4路本博常用的FDMA图像缓存方案将视频写入DDR3,其中1路FDMA配置为读写,另3路FDMA配置为单写,4路视频缓存地址不一样;然后由FT601读写逻辑控制视频从DDR3中读出,即将4路缓存地址不一样的视频从内存中一次性读出来,以达到拼接效果;FT601使用同步FIFO-245模式;根据FT601读写时序设计了读写状态机;在PC端QT上位机控制下,FT601读写逻辑产生从DDR3中读取视频的控制信号,并将读出的视频通过FT601写数据总线发送到板载的FT601芯片,输出分辨率为1920x1080@60Hz背景下叠加显示4路960x540的有效图像,即4分屏,详细显示效果请看文章末尾的输出演示视频;FPGA开发板通过USB3.0数据线连接至PC端主机;PC端的QT上位机调用FT601驱动的API实现图像读取并显示视频;由此形成外接OV5640摄像头+FPGA+FT601+QT上位机的珠联璧合;Vivado工程和QT工程均提供源码;本工程适用于FPGA基于FT601实现USB3.0视频传输;
工程源码7
开发板FPGA型号为Xilinx–>Kintex7–35T–xc7k325tffg900-2;输入源为板载的HDMI输入接口或动态彩条,分辨率为1920x1080@60Hz,使用笔记本电脑接入HDMI输入接口,以模拟输入Sensor;可以通过Sensor模块的顶层参数配置,默认选择Sensor输入;HDMI解码方案为ADV7611芯片,开发板板载ADV7611,可将输入的HDMI视频解码为RGB888视频;FPGA纯verilog实现的i2c配置模块完成对ADV7611芯片的配置,分辨率配置为1920x1080@60Hz;再经过自研的纯verilog实现的、支持任意比例缩放的图像缩放模块,将输入视频由1920x1080缩小为960x540;缩放后的视频复制为2份,以模拟2路视频;然后调用2路本博常用的FDMA图像缓存方案将视频写入DDR3,其中1路FDMA配置为读写,另1路FDMA配置为单写,2路视频缓存地址不一样;然后由FT601读写逻辑控制视频从DDR3中读出,即将2路缓存地址不一样的视频从内存中一次性读出来,以达到拼接效果;FT601使用同步FIFO-245模式;根据FT601读写时序设计了读写状态机;在PC端QT上位机控制下,FT601读写逻辑产生从DDR3中读取视频的控制信号,并将读出的视频通过FT601写数据总线发送到板载的FT601芯片,输出分辨率为1920x1080@60Hz背景下叠加显示2路960x540的有效图像,即2分屏,详细显示效果请看文章末尾的输出演示视频;FPGA开发板通过USB3.0数据线连接至PC端主机;PC端的QT上位机调用FT601驱动的API实现图像读取并显示视频;由此形成外接HDMI视频+FPGA+FT601+QT上位机的珠联璧合;Vivado工程和QT工程均提供源码;本工程适用于FPGA基于FT601实现USB3.0视频传输;
工程源码8
开发板FPGA型号为Xilinx–>Kintex7–35T–xc7k325tffg900-2;输入源为板载的HDMI输入接口或动态彩条,分辨率为1920x1080@60Hz,使用笔记本电脑接入HDMI输入接口,以模拟输入Sensor;可以通过Sensor模块的顶层参数配置,默认选择Sensor输入;HDMI解码方案为ADV7611芯片,开发板板载ADV7611,可将输入的HDMI视频解码为RGB888视频;FPGA纯verilog实现的i2c配置模块完成对ADV7611芯片的配置,分辨率配置为1920x1080@60Hz;再经过自研的纯verilog实现的、支持任意比例缩放的图像缩放模块,将输入视频由1920x1080缩小为960x540;缩放后的视频复制为4份,以模拟4路视频;然后调用4路本博常用的FDMA图像缓存方案将视频写入DDR3,其中1路FDMA配置为读写,另3路FDMA配置为单写,4路视频缓存地址不一样;然后由FT601读写逻辑控制视频从DDR3中读出,即将4路缓存地址不一样的视频从内存中一次性读出来,以达到拼接效果;FT601使用同步FIFO-245模式;根据FT601读写时序设计了读写状态机;在PC端QT上位机控制下,FT601读写逻辑产生从DDR3中读取视频的控制信号,并将读出的视频通过FT601写数据总线发送到板载的FT601芯片,输出分辨率为1920x1080@60Hz背景下叠加显示4路960x540的有效图像,即4分屏,详细显示效果请看文章末尾的输出演示视频;FPGA开发板通过USB3.0数据线连接至PC端主机;PC端的QT上位机调用FT601驱动的API实现图像读取并显示视频;由此形成外接HDMI视频+FPGA+FT601+QT上位机的珠联璧合;Vivado工程和QT工程均提供源码;本工程适用于FPGA基于FT601实现USB3.0视频传输;
工程源码9
开发板FPGA型号为Xilinx–>Zynq7020–xc7z020clg400-2;输入源为2路OV5640摄像头或动态彩条,分辨率为1280x720@30Hz,可以通过Sensor模块的顶层参数配置,默认选择Sensor输入;FPGA纯verilog实现的i2c配置模块对摄像头进行初始化配置,并采集摄像头数据以RGB888输出;再经过2路自研的纯verilog实现的、支持任意比例缩放的图像缩放模块,将输入视频由1280x720缩小为960x540;然后调用2路本博常用的FDMA图像缓存方案将视频写入DDR3,其中1路FDMA配置为读写,另1路FDMA配置为单写,2路视频缓存地址不一样;然后由FT601读写逻辑控制视频从DDR3中读出,即将2路缓存地址不一样的视频从内存中一次性读出来,以达到拼接效果;FT601使用同步FIFO-245模式;根据FT601读写时序设计了读写状态机;在PC端QT上位机控制下,FT601读写逻辑产生从DDR3中读取视频的控制信号,并将读出的视频通过FT601写数据总线发送到板载的FT601芯片,输出分辨率为1920x1080@60Hz背景下叠加显示2路960x540的有效图像,即2分屏,详细显示效果请看文章末尾的输出演示视频;FPGA开发板通过USB3.0数据线连接至PC端主机;PC端的QT上位机调用FT601驱动的API实现图像读取并显示视频;由此形成外接OV5640摄像头+FPGA+FT601+QT上位机的珠联璧合;Vivado工程和QT工程均提供源码;本工程适用于FPGA基于FT601实现USB3.0视频传输;
工程源码10
开发板FPGA型号为Xilinx–>Zynq7020–xc7z020clg400-2;输入源为2路OV5640摄像头或动态彩条,分辨率为1280x720@30Hz,可以通过Sensor模块的顶层参数配置,默认选择Sensor输入;FPGA纯verilog实现的i2c配置模块对摄像头进行初始化配置,并采集摄像头数据以RGB888输出;再经过2路自研的纯verilog实现的、支持任意比例缩放的图像缩放模块,将输入视频由1280x720缩小为960x540;缩放后的2路视频分别复制2份以模拟4路视频;然后调用4路本博常用的FDMA图像缓存方案将视频写入DDR3,其中1路FDMA配置为读写,另3路FDMA配置为单写,4路视频缓存地址不一样;然后由FT601读写逻辑控制视频从DDR3中读出,即将4路缓存地址不一样的视频从内存中一次性读出来,以达到拼接效果;FT601使用同步FIFO-245模式;根据FT601读写时序设计了读写状态机;在PC端QT上位机控制下,FT601读写逻辑产生从DDR3中读取视频的控制信号,并将读出的视频通过FT601写数据总线发送到板载的FT601芯片,输出分辨率为1920x1080@60Hz背景下叠加显示4路960x540的有效图像,即4分屏,详细显示效果请看文章末尾的输出演示视频;FPGA开发板通过USB3.0数据线连接至PC端主机;PC端的QT上位机调用FT601驱动的API实现图像读取并显示视频;由此形成外接OV5640摄像头+FPGA+FT601+QT上位机的珠联璧合;Vivado工程和QT工程均提供源码;本工程适用于FPGA基于FT601实现USB3.0视频传输;
工程源码11
开发板FPGA型号为Xilinx–>Zynq7100–xc7z100ffg900-2;输入源为2路OV5640摄像头或动态彩条,分辨率为1280x720@30Hz,可以通过Sensor模块的顶层参数配置,默认选择Sensor输入;FPGA纯verilog实现的i2c配置模块对摄像头进行初始化配置,并采集摄像头数据以RGB888输出;再经过2路自研的纯verilog实现的、支持任意比例缩放的图像缩放模块,将输入视频由1280x720缩小为960x540;然后调用2路本博常用的FDMA图像缓存方案将视频写入DDR3,其中1路FDMA配置为读写,另1路FDMA配置为单写,2路视频缓存地址不一样;然后由FT601读写逻辑控制视频从DDR3中读出,即将2路缓存地址不一样的视频从内存中一次性读出来,以达到拼接效果;FT601使用同步FIFO-245模式;根据FT601读写时序设计了读写状态机;在PC端QT上位机控制下,FT601读写逻辑产生从DDR3中读取视频的控制信号,并将读出的视频通过FT601写数据总线发送到板载的FT601芯片,输出分辨率为1920x1080@60Hz背景下叠加显示2路960x540的有效图像,即2分屏,详细显示效果请看文章末尾的输出演示视频;FPGA开发板通过USB3.0数据线连接至PC端主机;PC端的QT上位机调用FT601驱动的API实现图像读取并显示视频;由此形成外接OV5640摄像头+FPGA+FT601+QT上位机的珠联璧合;Vivado工程和QT工程均提供源码;本工程适用于FPGA基于FT601实现USB3.0视频传输;
工程源码12
开发板FPGA型号为Xilinx–>Zynq7100–xc7z100ffg900-2;输入源为2路OV5640摄像头或动态彩条,分辨率为1280x720@30Hz,可以通过Sensor模块的顶层参数配置,默认选择Sensor输入;FPGA纯verilog实现的i2c配置模块对摄像头进行初始化配置,并采集摄像头数据以RGB888输出;再经过2路自研的纯verilog实现的、支持任意比例缩放的图像缩放模块,将输入视频由1280x720缩小为960x540;缩放后的2路视频分别复制2份以模拟4路视频;然后调用4路本博常用的FDMA图像缓存方案将视频写入DDR3,其中1路FDMA配置为读写,另3路FDMA配置为单写,4路视频缓存地址不一样;然后由FT601读写逻辑控制视频从DDR3中读出,即将4路缓存地址不一样的视频从内存中一次性读出来,以达到拼接效果;FT601使用同步FIFO-245模式;根据FT601读写时序设计了读写状态机;在PC端QT上位机控制下,FT601读写逻辑产生从DDR3中读取视频的控制信号,并将读出的视频通过FT601写数据总线发送到板载的FT601芯片,输出分辨率为1920x1080@60Hz背景下叠加显示4路960x540的有效图像,即4分屏,详细显示效果请看文章末尾的输出演示视频;FPGA开发板通过USB3.0数据线连接至PC端主机;PC端的QT上位机调用FT601驱动的API实现图像读取并显示视频;由此形成外接OV5640摄像头+FPGA+FT601+QT上位机的珠联璧合;Vivado工程和QT工程均提供源码;本工程适用于FPGA基于FT601实现USB3.0视频传输;
工程源码13
开发板FPGA型号为Xilinx–>Zynq7100–xc7z100ffg900-2;输入源为板载的HDMI输入接口或动态彩条,分辨率为1920x1080@60Hz,使用笔记本电脑接入HDMI输入接口,以模拟输入Sensor;可以通过Sensor模块的顶层参数配置,默认选择Sensor输入;HDMI解码方案为ADV7611芯片,开发板板载ADV7611,可将输入的HDMI视频解码为RGB888视频;FPGA纯verilog实现的i2c配置模块完成对ADV7611芯片的配置,分辨率配置为1920x1080@60Hz;再经过自研的纯verilog实现的、支持任意比例缩放的图像缩放模块,将输入视频由1920x1080缩小为960x540;缩放后的视频复制为2份,以模拟2路视频;然后调用2路本博常用的FDMA图像缓存方案将视频写入DDR3,其中1路FDMA配置为读写,另1路FDMA配置为单写,2路视频缓存地址不一样;然后由FT601读写逻辑控制视频从DDR3中读出,即将2路缓存地址不一样的视频从内存中一次性读出来,以达到拼接效果;FT601使用同步FIFO-245模式;根据FT601读写时序设计了读写状态机;在PC端QT上位机控制下,FT601读写逻辑产生从DDR3中读取视频的控制信号,并将读出的视频通过FT601写数据总线发送到板载的FT601芯片,输出分辨率为1920x1080@60Hz背景下叠加显示2路960x540的有效图像,即2分屏,详细显示效果请看文章末尾的输出演示视频;FPGA开发板通过USB3.0数据线连接至PC端主机;PC端的QT上位机调用FT601驱动的API实现图像读取并显示视频;由此形成外接HDMI视频+FPGA+FT601+QT上位机的珠联璧合;Vivado工程和QT工程均提供源码;本工程适用于FPGA基于FT601实现USB3.0视频传输;
工程源码14
开发板FPGA型号为Xilinx–>Zynq7100–xc7z100ffg900-2;输入源为板载的HDMI输入接口或动态彩条,分辨率为1920x1080@60Hz,使用笔记本电脑接入HDMI输入接口,以模拟输入Sensor;可以通过Sensor模块的顶层参数配置,默认选择Sensor输入;HDMI解码方案为ADV7611芯片,开发板板载ADV7611,可将输入的HDMI视频解码为RGB888视频;FPGA纯verilog实现的i2c配置模块完成对ADV7611芯片的配置,分辨率配置为1920x1080@60Hz;再经过自研的纯verilog实现的、支持任意比例缩放的图像缩放模块,将输入视频由1920x1080缩小为960x540;缩放后的视频复制为4份,以模拟4路视频;然后调用4路本博常用的FDMA图像缓存方案将视频写入DDR3,其中1路FDMA配置为读写,另3路FDMA配置为单写,4路视频缓存地址不一样;然后由FT601读写逻辑控制视频从DDR3中读出,即将4路缓存地址不一样的视频从内存中一次性读出来,以达到拼接效果;FT601使用同步FIFO-245模式;根据FT601读写时序设计了读写状态机;在PC端QT上位机控制下,FT601读写逻辑产生从DDR3中读取视频的控制信号,并将读出的视频通过FT601写数据总线发送到板载的FT601芯片,输出分辨率为1920x1080@60Hz背景下叠加显示4路960x540的有效图像,即4分屏,详细显示效果请看文章末尾的输出演示视频;FPGA开发板通过USB3.0数据线连接至PC端主机;PC端的QT上位机调用FT601驱动的API实现图像读取并显示视频;由此形成外接HDMI视频+FPGA+FT601+QT上位机的珠联璧合;Vivado工程和QT工程均提供源码;本工程适用于FPGA基于FT601实现USB3.0视频传输;
工程源码15
开发板FPGA型号为Xilinx–>Kintex UltraScale–xcku040-ffva1156-2-i;输入源为OV5640摄像头或动态彩条,分辨率为1280x720@30Hz,可以通过Sensor模块的顶层参数配置,默认选择Sensor输入;FPGA纯verilog实现的i2c配置模块对摄像头进行初始化配置,并采集摄像头数据以RGB888输出;再经过自研的纯verilog实现的、支持任意比例缩放的图像缩放模块,将输入视频由1280x720缩小为960x540;缩放后的视频复制为2份,以模拟2路视频;然后调用2路本博常用的FDMA图像缓存方案将视频写入DDR3,其中1路FDMA配置为读写,另1路FDMA配置为单写,2路视频缓存地址不一样;然后由FT601读写逻辑控制视频从DDR3中读出,即将2路缓存地址不一样的视频从内存中一次性读出来,以达到拼接效果;FT601使用同步FIFO-245模式;根据FT601读写时序设计了读写状态机;在PC端QT上位机控制下,FT601读写逻辑产生从DDR3中读取视频的控制信号,并将读出的视频通过FT601写数据总线发送到板载的FT601芯片,输出分辨率为1920x1080@60Hz背景下叠加显示2路960x540的有效图像,即2分屏,详细显示效果请看文章末尾的输出演示视频;FPGA开发板通过USB3.0数据线连接至PC端主机;PC端的QT上位机调用FT601驱动的API实现图像读取并显示视频;由此形成外接OV5640摄像头+FPGA+FT601+QT上位机的珠联璧合;Vivado工程和QT工程均提供源码;本工程适用于FPGA基于FT601实现USB3.0视频传输;
工程源码16
开发板FPGA型号为Xilinx–>Kintex UltraScale–xcku040-ffva1156-2-i;输入源为OV5640摄像头或动态彩条,分辨率为1280x720@30Hz,可以通过Sensor模块的顶层参数配置,默认选择Sensor输入;FPGA纯verilog实现的i2c配置模块对摄像头进行初始化配置,并采集摄像头数据以RGB888输出;再经过自研的纯verilog实现的、支持任意比例缩放的图像缩放模块,将输入视频由1280x720缩小为960x540;缩放后的视频复制为4份,以模拟4路视频;然后调用4路本博常用的FDMA图像缓存方案将视频写入DDR3,其中1路FDMA配置为读写,另3路FDMA配置为单写,4路视频缓存地址不一样;然后由FT601读写逻辑控制视频从DDR3中读出,即将4路缓存地址不一样的视频从内存中一次性读出来,以达到拼接效果;FT601使用同步FIFO-245模式;根据FT601读写时序设计了读写状态机;在PC端QT上位机控制下,FT601读写逻辑产生从DDR3中读取视频的控制信号,并将读出的视频通过FT601写数据总线发送到板载的FT601芯片,输出分辨率为1920x1080@60Hz背景下叠加显示4路960x540的有效图像,即4分屏,详细显示效果请看文章末尾的输出演示视频;FPGA开发板通过USB3.0数据线连接至PC端主机;PC端的QT上位机调用FT601驱动的API实现图像读取并显示视频;由此形成外接OV5640摄像头+FPGA+FT601+QT上位机的珠联璧合;Vivado工程和QT工程均提供源码;本工程适用于FPGA基于FT601实现USB3.0视频传输;
工程源码17
开发板FPGA型号为Xilinx–>Kintex UltraScale–xcku040-ffva1156-2-i;输入源为板载的HDMI输入接口或动态彩条,分辨率为1920x1080@60Hz,使用笔记本电脑接入HDMI输入接口,以模拟输入Sensor;可以通过Sensor模块的顶层参数配置,默认选择Sensor输入;HDMI解码方案为ADV7611芯片,开发板板载ADV7611,可将输入的HDMI视频解码为RGB888视频;FPGA纯verilog实现的i2c配置模块完成对ADV7611芯片的配置,分辨率配置为1920x1080@60Hz;再经过自研的纯verilog实现的、支持任意比例缩放的图像缩放模块,将输入视频由1920x1080缩小为960x540;缩放后的视频复制为2份,以模拟2路视频;然后调用2路本博常用的FDMA图像缓存方案将视频写入DDR3,其中1路FDMA配置为读写,另1路FDMA配置为单写,2路视频缓存地址不一样;然后由FT601读写逻辑控制视频从DDR3中读出,即将2路缓存地址不一样的视频从内存中一次性读出来,以达到拼接效果;FT601使用同步FIFO-245模式;根据FT601读写时序设计了读写状态机;在PC端QT上位机控制下,FT601读写逻辑产生从DDR3中读取视频的控制信号,并将读出的视频通过FT601写数据总线发送到板载的FT601芯片,输出分辨率为1920x1080@60Hz背景下叠加显示2路960x540的有效图像,即2分屏,详细显示效果请看文章末尾的输出演示视频;FPGA开发板通过USB3.0数据线连接至PC端主机;PC端的QT上位机调用FT601驱动的API实现图像读取并显示视频;由此形成外接HDMI视频+FPGA+FT601+QT上位机的珠联璧合;Vivado工程和QT工程均提供源码;本工程适用于FPGA基于FT601实现USB3.0视频传输;
工程源码18
开发板FPGA型号为Xilinx–>Kintex UltraScale–xcku040-ffva1156-2-i;输入源为板载的HDMI输入接口或动态彩条,分辨率为1920x1080@60Hz,使用笔记本电脑接入HDMI输入接口,以模拟输入Sensor;可以通过Sensor模块的顶层参数配置,默认选择Sensor输入;HDMI解码方案为ADV7611芯片,开发板板载ADV7611,可将输入的HDMI视频解码为RGB888视频;FPGA纯verilog实现的i2c配置模块完成对ADV7611芯片的配置,分辨率配置为1920x1080@60Hz;再经过自研的纯verilog实现的、支持任意比例缩放的图像缩放模块,将输入视频由1920x1080缩小为960x540;缩放后的视频复制为4份,以模拟4路视频;然后调用4路本博常用的FDMA图像缓存方案将视频写入DDR3,其中1路FDMA配置为读写,另3路FDMA配置为单写,4路视频缓存地址不一样;然后由FT601读写逻辑控制视频从DDR3中读出,即将4路缓存地址不一样的视频从内存中一次性读出来,以达到拼接效果;FT601使用同步FIFO-245模式;根据FT601读写时序设计了读写状态机;在PC端QT上位机控制下,FT601读写逻辑产生从DDR3中读取视频的控制信号,并将读出的视频通过FT601写数据总线发送到板载的FT601芯片,输出分辨率为1920x1080@60Hz背景下叠加显示4路960x540的有效图像,即4分屏,详细显示效果请看文章末尾的输出演示视频;FPGA开发板通过USB3.0数据线连接至PC端主机;PC端的QT上位机调用FT601驱动的API实现图像读取并显示视频;由此形成外接HDMI视频+FPGA+FT601+QT上位机的珠联璧合;Vivado工程和QT工程均提供源码;本工程适用于FPGA基于FT601实现USB3.0视频传输;
工程源码19
开发板FPGA型号为Xilinx–>Kintex UltraScale–xcku060-ffva1156-2-i;输入源为OV5640摄像头或动态彩条,分辨率为1280x720@30Hz,可以通过Sensor模块的顶层参数配置,默认选择Sensor输入;FPGA纯verilog实现的i2c配置模块对摄像头进行初始化配置,并采集摄像头数据以RGB888输出;再经过自研的纯verilog实现的、支持任意比例缩放的图像缩放模块,将输入视频由1280x720缩小为960x540;缩放后的视频复制为2份,以模拟2路视频;然后调用2路本博常用的FDMA图像缓存方案将视频写入DDR3,其中1路FDMA配置为读写,另1路FDMA配置为单写,2路视频缓存地址不一样;然后由FT601读写逻辑控制视频从DDR3中读出,即将2路缓存地址不一样的视频从内存中一次性读出来,以达到拼接效果;FT601使用同步FIFO-245模式;根据FT601读写时序设计了读写状态机;在PC端QT上位机控制下,FT601读写逻辑产生从DDR3中读取视频的控制信号,并将读出的视频通过FT601写数据总线发送到板载的FT601芯片,输出分辨率为1920x1080@60Hz背景下叠加显示2路960x540的有效图像,即2分屏,详细显示效果请看文章末尾的输出演示视频;FPGA开发板通过USB3.0数据线连接至PC端主机;PC端的QT上位机调用FT601驱动的API实现图像读取并显示视频;由此形成外接OV5640摄像头+FPGA+FT601+QT上位机的珠联璧合;Vivado工程和QT工程均提供源码;本工程适用于FPGA基于FT601实现USB3.0视频传输;
工程源码20
开发板FPGA型号为Xilinx–>Kintex UltraScale–xcku060-ffva1156-2-i;输入源为OV5640摄像头或动态彩条,分辨率为1280x720@30Hz,可以通过Sensor模块的顶层参数配置,默认选择Sensor输入;FPGA纯verilog实现的i2c配置模块对摄像头进行初始化配置,并采集摄像头数据以RGB888输出;再经过自研的纯verilog实现的、支持任意比例缩放的图像缩放模块,将输入视频由1280x720缩小为960x540;缩放后的视频复制为4份,以模拟4路视频;然后调用4路本博常用的FDMA图像缓存方案将视频写入DDR3,其中1路FDMA配置为读写,另3路FDMA配置为单写,4路视频缓存地址不一样;然后由FT601读写逻辑控制视频从DDR3中读出,即将4路缓存地址不一样的视频从内存中一次性读出来,以达到拼接效果;FT601使用同步FIFO-245模式;根据FT601读写时序设计了读写状态机;在PC端QT上位机控制下,FT601读写逻辑产生从DDR3中读取视频的控制信号,并将读出的视频通过FT601写数据总线发送到板载的FT601芯片,输出分辨率为1920x1080@60Hz背景下叠加显示4路960x540的有效图像,即4分屏,详细显示效果请看文章末尾的输出演示视频;FPGA开发板通过USB3.0数据线连接至PC端主机;PC端的QT上位机调用FT601驱动的API实现图像读取并显示视频;由此形成外接OV5640摄像头+FPGA+FT601+QT上位机的珠联璧合;Vivado工程和QT工程均提供源码;本工程适用于FPGA基于FT601实现USB3.0视频传输;
工程源码21
开发板FPGA型号为Xilinx–>Kintex UltraScale–xcku060-ffva1156-2-i;输入源为板载的HDMI输入接口或动态彩条,分辨率为1920x1080@60Hz,使用笔记本电脑接入HDMI输入接口,以模拟输入Sensor;可以通过Sensor模块的顶层参数配置,默认选择Sensor输入;HDMI解码方案为ADV7611芯片,开发板板载ADV7611,可将输入的HDMI视频解码为RGB888视频;FPGA纯verilog实现的i2c配置模块完成对ADV7611芯片的配置,分辨率配置为1920x1080@60Hz;再经过自研的纯verilog实现的、支持任意比例缩放的图像缩放模块,将输入视频由1920x1080缩小为960x540;缩放后的视频复制为2份,以模拟2路视频;然后调用2路本博常用的FDMA图像缓存方案将视频写入DDR3,其中1路FDMA配置为读写,另1路FDMA配置为单写,2路视频缓存地址不一样;然后由FT601读写逻辑控制视频从DDR3中读出,即将2路缓存地址不一样的视频从内存中一次性读出来,以达到拼接效果;FT601使用同步FIFO-245模式;根据FT601读写时序设计了读写状态机;在PC端QT上位机控制下,FT601读写逻辑产生从DDR3中读取视频的控制信号,并将读出的视频通过FT601写数据总线发送到板载的FT601芯片,输出分辨率为1920x1080@60Hz背景下叠加显示2路960x540的有效图像,即2分屏,详细显示效果请看文章末尾的输出演示视频;FPGA开发板通过USB3.0数据线连接至PC端主机;PC端的QT上位机调用FT601驱动的API实现图像读取并显示视频;由此形成外接HDMI视频+FPGA+FT601+QT上位机的珠联璧合;Vivado工程和QT工程均提供源码;本工程适用于FPGA基于FT601实现USB3.0视频传输;
工程源码22
开发板FPGA型号为Xilinx–>Kintex UltraScale–xcku060-ffva1156-2-i;输入源为板载的HDMI输入接口或动态彩条,分辨率为1920x1080@60Hz,使用笔记本电脑接入HDMI输入接口,以模拟输入Sensor;可以通过Sensor模块的顶层参数配置,默认选择Sensor输入;HDMI解码方案为ADV7611芯片,开发板板载ADV7611,可将输入的HDMI视频解码为RGB888视频;FPGA纯verilog实现的i2c配置模块完成对ADV7611芯片的配置,分辨率配置为1920x1080@60Hz;再经过自研的纯verilog实现的、支持任意比例缩放的图像缩放模块,将输入视频由1920x1080缩小为960x540;缩放后的视频复制为4份,以模拟4路视频;然后调用4路本博常用的FDMA图像缓存方案将视频写入DDR3,其中1路FDMA配置为读写,另3路FDMA配置为单写,4路视频缓存地址不一样;然后由FT601读写逻辑控制视频从DDR3中读出,即将4路缓存地址不一样的视频从内存中一次性读出来,以达到拼接效果;FT601使用同步FIFO-245模式;根据FT601读写时序设计了读写状态机;在PC端QT上位机控制下,FT601读写逻辑产生从DDR3中读取视频的控制信号,并将读出的视频通过FT601写数据总线发送到板载的FT601芯片,输出分辨率为1920x1080@60Hz背景下叠加显示4路960x540的有效图像,即4分屏,详细显示效果请看文章末尾的输出演示视频;FPGA开发板通过USB3.0数据线连接至PC端主机;PC端的QT上位机调用FT601驱动的API实现图像读取并显示视频;由此形成外接HDMI视频+FPGA+FT601+QT上位机的珠联璧合;Vivado工程和QT工程均提供源码;本工程适用于FPGA基于FT601实现USB3.0视频传输;
免责声明
本工程及其源码即有自己写的一部分,也有网络公开渠道获取的一部分(包括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上位机源码;专栏地址链接如下:
点击直接前往
FT601数据读写和测速方案
提供更为简单的FT601数据读写和测速方案,之前出过一篇专门的博客,博客地址链接如下:
点击直接前往
FT601实现USB3.0视频传输方案
FT601实现USB3.0视频传输方案与本博客工程相比没有图像缩放,仅为简单的图像采集转USB3.0视频传输,之前出过一篇专门的博客,博客地址链接如下:
点击直接前往
FT601实现USB3.0视频缩放传输方案
FT601实现USB3.0视频传输方案与本博客工程相比没有图像拼接,仅为简单的图像采集缩放转USB3.0视频传输,之前出过一篇专门的博客,博客地址链接如下:
点击直接前往
3、FT601芯片解读和时序分析
FT601功能和硬件电路
FT600/601Q 的技术参数如下:
FT600&601Q 芯片是 FT 最新推出的 USB3.0 to FIFO interface IC,实现 USB3.0 与 16/32bit 并行 IO 接口之间的数据传输;整个 USB 通信协议全部由芯片驱动自行完成,开发者无须考虑 USB 底层固件的编程。
–>兼容支持 USB3.0(5Gbps),向下兼容 USB2.0(480Mbps and 12Mbps)传输;
–>高达 8 个可配置 Endpoint. >>支持 2 种 FIFO 传输协议,最大传输可达 400MB/s;
–>芯片内部有 16K 字节的缓冲区,可以进行数据的大吞吐量操作;
–>支持远程唤醒功能;
–>芯片支持多种 IO 电压:1.8V,2.5V.3.3V;
–>通过 16bit D[O:15]或 32bit D[0:31]并行数据线和读写状态/控制线 RXF、TXE、RD、WR,加上时钟 CLK,使能 OE 信号线就可实现与 CPU/FPGA 的数据交换;
–>该芯片内部集成 1.0V LDO,可提供给芯片核心部分使用;
–>工业级芯片,工作温度范围-40 to 85℃;
FT601芯片框架如下:
FT601外围电路设计参考如下:
FT601支持的多种传输模式,其中 245 Synchronous FIFO 模式和 Multi-Channel FIFO 模式是最常用的模式,本工程配置为 245 Synchronous FIFO 模式;传输模式通过GPIO引脚高低电平配置,配置真值表如下:
FT601读时序解读
FT601的245 Synchronous FIFO 模式读时序如下:
RXF_N为读数据状态信号,RXF_N为低电平期间FPGA可以读取FT601数据;
检测到RXF_N低电平后,拉低OE_N和RD_N,然后开始读数据;
检测到RXF_N高电平后,拉高OE_N和RD_N,然后退出读数据状态;
FT601写时序解读
FT601的245 Synchronous FIFO 模式写时序如下:
TXF_N为读数据状态信号,RXF_N为低电平期间FPGA向FT601写入数据;
检测到TXF_N低电平后,拉低WR_N,然后开始向FT601写入数据;
检测到TXF_N高电平后,拉高WR_N,然后退出写数据状态;
4、详细设计方案
设计原理框图
设计原理框图如下:
输入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之–>HDMI
输入Sensor是本工程的输入设备,其二为板载的HDMI输入接口;输入源为板载的HDMI输入接口或动态彩条,分辨率为1920x1080@60Hz,使用笔记本电脑接入HDMI输入接口,以模拟输入Sensor;HDMI解码方案为ADV7611芯片,开发板板载ADV7611,可将输入的HDMI视频解码为RGB888视频;FPGA纯verilog实现的i2c配置模块完成对ADV7611芯片的配置,分辨率配置为1920x1080@60Hz;可以通过Sensor模块的顶层参数配置,默认选择Sensor输入;Sensor模块如下:
SENSOR_TYPE=0;则输出HDMI接口采集的视频;
SENSOR_TYPE=1;则输出动态彩条的视频;
整个模块代码架构如下::
纯Verilog图像缩放模块详解
工程源码1、2的图像缩放模块使用纯Verilog方案,功能框图如下,由跨时钟FIFO、插值+RAM阵列构成,跨时钟FIFO的目的是解决跨时钟域的问题,比如从低分辨率视频放大到高分辨率视频时,像素时钟必然需要变大,这是就需要异步FIFO了,插值算法和RAM阵列具体负责图像缩放算法层面的实现;
插值算法和RAM阵列以ram和fifo为核心进行数据缓存和插值实现,设计架构如下:
图像缩放模块代码架构如下:模块的例化请参考工程源码的顶层代码;
图像缩放模块FIFO的选择可以调用工程对应的vivado工具自带的FIFO IP核,也可以使用纯verilog实现的FIFO,可通过接口参数选择,图像缩放模块顶层接口如下:
module helai_video_scale #(
//---------------------------Parameters----------------------------------------
parameter FIFO_TYPE = "xilinx", // "xilinx" for xilinx-fifo ; "verilog" for verilog-fifo
parameter DATA_WIDTH = 8 , //Width of input/output data
parameter CHANNELS = 1 , //Number of channels of DATA_WIDTH, for color images
parameter INPUT_X_RES_WIDTH = 11 //Widths of input/output resolution control signals
)(
input i_reset_n , // 输入--低电平复位信号
input [INPUT_X_RES_WIDTH-1:0] i_src_video_width , // 输入视频--即缩放前视频的宽度
input [INPUT_X_RES_WIDTH-1:0] i_src_video_height, // 输入视频--即缩放前视频的高度
input [INPUT_X_RES_WIDTH-1:0] i_des_video_width , // 输出视频--即缩后前视频的宽度
input [INPUT_X_RES_WIDTH-1:0] i_des_video_height, // 输出视频--即缩后前视频的高度
input i_src_video_pclk , // 输入视频--即缩前视频的像素时钟
input i_src_video_vs , // 输入视频--即缩前视频的场同步信号,必须为高电平有效
input i_src_video_de , // 输入视频--即缩前视频的数据有效信号,必须为高电平有效
input [DATA_WIDTH*CHANNELS-1:0] i_src_video_pixel , // 输入视频--即缩前视频的像素数据
input i_des_video_pclk , // 输出视频--即缩后视频的像素时钟,一般为写入DDR缓存的时钟
output o_des_video_vs , // 输出视频--即缩后视频的场同步信号,高电平有效
output o_des_video_de , // 输出视频--即缩后视频的数据有效信号,高电平有效
output [DATA_WIDTH*CHANNELS-1:0] o_des_video_pixel // 输出视频--即缩后视频的像素数据
);
FIFO_TYPE选择原则如下:
1:总体原则,选择"xilinx"好处大于选择"verilog";
2:当你的FPGA逻辑资源不足时,请选"xilinx";
3:当你图像缩放的视频分辨率较大时,请选"xilinx";
4:当你的FPGA没有FIFO IP或者FIFO IP快用完了,请选"verilog";
5:当你向自学一下异步FIFO时,,请选"verilog";
6:不同FPGA型号对应的工程FIFO_TYPE参数不一样,但选择原则一样,具体参考代码;
2种插值算法的整合与选择
本设计将常用的双线性插值和邻域插值算法融合为一个代码中,通过输入参数选择某一种算法;
具体选择参数如下:
input wire i_scaler_type //0-->bilinear;1-->neighbor
通过输入i_scaler_type 的值即可选择;
输入0选择双线性插值算法;
输入1选择邻域插值算法;
代码里的配置如下:
纯Verilog图像缩放模块使用
图像缩放模块使用非常简单,顶层代码里设置了四个参数,举例如下:
上图视频通过图像缩放模块但不进行缩放操作,旨在掌握图像缩放模块的用法;如果需要将图像放大到1080P,则修改为如下:
当然,需要修改的不仅仅这一个地方,FDMA的配置也需要相应修改,详情请参考代码,但我想要证明的是,图像缩放模块使用非常简单,你都不需要知道它内部具体怎么实现的,上手就能用;
FDMA多路视频拼接算法
纯verilog多路视频拼接方案如下:以4路视频拼接为例;
输出屏幕分辨率为1920X1080;
需要拼接的4路视频分辨率为960X540;
4路输入刚好可以占满整个屏幕;
多路视频的拼接显示原理如下:
以把 2 个摄像头 CAM0 和 CAM1 输出到同一个显示器上为列,为了把 2 个图像显示到 1 个显示器,首先得搞清楚以下关系:
hsize:每 1 行图像实际在内存中占用的有效空间,以 32bit 表示一个像素的时候占用内存大小为 hsize X 4;
hstride:用于设置每行图像第一个像素的地址,以 32bit 表示一个像素的时候 v_cnt X hstride X 4;
vsize:有效的行;
因此很容易得出 cam0 的每行第一个像素的地址也是 v_cnt X hstride X 4;
同理如果我们需要把 cam1 在 hsize 和 vsize 空间的任何位置显示,我们只要关心 cam1 每一行图像第一个像素的地址,可以用以下公式 v_cnt X hstride X 4 + offset;
uifdma_dbuf 支持 stride 参数设置,stride 参数可以设置输入数据 X(hsize)方向每一行数据的第一个像素到下一个起始像素的间隔地址,利用 stride 参数可以非常方便地摆放输入视频到内存中的排列方式。
关于uifdma_dbuf,可以参考我之前写的文章点击查看:FDMA实现视频数据三帧缓存
根据以上铺垫,每路摄像头缓存的基地址如下:
CAM0:ADDR_BASE=0x80000000;
CAM1:ADDR_BASE=0x80000000+(1920-960)X4;
CAM2:ADDR_BASE=0x80000000+(1080-540)X1920X4;
CAM3:ADDR_BASE=0x80000000+(1080-540)X1920X4+(1920-960)X4;
地址设置完毕后基本就完事儿了;
FDMA图像缓存
使用本博常用的FDMA图像缓存架构实现图像3帧缓存,缓存介质为板载的DDR3;FDMA图像缓存架构由FDMA、FDMA控制器、缓存帧选择器构成、Xilinx MIG IP核构成;图像缓存使用Xilinx vivado的Block Design设计,他的作用是将图像送入DDR中做3帧缓存再读出显示,目的是匹配输入输出的时钟差和提高输出视频质量,关于FDMA,请参考我之前的博客,博客地址:点击直接前往
FDMA图像缓存架构如下图所示:截图为4路视频拼接,其他多路视频拼接与之类似;
这里多路视频拼接时,调用多路FDMA进行缓存,具体讲就是每一路视频调用1路FDMA,以4路视频拼接为例:
调用4路FDMA,其中三路配置为写模式,因为这三路视频在这里只需要写入DDR3,读出是由另一个FDMA完成,配置如下:
另外1路FDMA配置为读写模式,因为4路视频需要同时一并读出,配置如下:
视频拼接的关键点在于4路视频在DDR3中缓存地址的不同,还是以4路视频拼接为例,4路FDMA的写地址以此为:
第一路视频缓存写基地址:0x80000000;
第二路视频缓存写基地址:0x80000f00;
第三路视频缓存写基地址:0x803f4800;
第四路视频缓存写基地址:0x803f5700;
视频缓存读基地址:0x80000000;
Verilog读写逻辑
根据FT601读写时序,设计了数据读写状态机,一共分为三个状态,分别为初始状态、读数据状态、写数据状态;状态机的触发由PC端的QT上位机开启;在PC端QT上位机控制下,FT601读写逻辑产生从DDR3中读取视频的控制信号,并将读出的视频通过FT601写数据总线发送到板载的FT601芯片;PC端的QT上位机调用FT601驱动的API实现图像读取并显示视频;顶层代码接口如下:
QT上位机
QT开发环境为QT上位机本方案使用 VS2015 + Qt 5.12.10;QT上位机实现发起FT601的读写操作,QT上位机调用FT601驱动的API实现图像读取并显示视频;QT上位机运行如下:
工程源码架构
本博客提供11套工程源码,以工程源码1为例,vivado Block Design设计如下,其他工程与之类似,Block Design设计为图像缓存架构的部分:
本博客提供11套Vivado工程源码,以工程源码1为例,综合后的代码架构如下,其他工程与之类似:
对于Zynq的工程,FDMA图像缓存架构虽然不需要SDK配置,但FDMA的AXI4接口时钟由Zynq提供,所以需要运行SDK程序才能启动Zynq,从而为PL端逻辑提供时钟;由于不需要SDK配置,所以SDK软件代码就变得极度简单,只需运行一个“Hello World”即可,如下:
QT代码如下:
5、工程源码1详解–>Artix7-35T,2路OV5640拼接版本
开发板FPGA型号:Xilinx–Artix7–xc7a35tfgg484-2;
FPGA开发环境:Vivado2019.1;
QT开发环境:VS2015 + Qt 5.12.10;
输入:OV5640摄像头或动态彩条,分辨率1280x720@30Hz;
输出:USB3.0,1920x1080@60Hz背景下叠加显示2路拼接的960x540的有效图像;
USB3.0方案:FT601芯片;
图像缩放方案:自研纯Verilog图像缩放;
图像缩放实例:1280x720缩放到960x540;
图像缓存方案:纯VerilogFDMA方案;
图像缓存介质:DDR3;
视频拼接方案:纯VerilogFDMA方案;
视频拼接应用:2路视频拼接;
实现功能:FPGA基于FT601实现USB3.0视频缩放拼接传输(2路OV5640摄像头);
工程作用:此工程目的是让读者掌握FPGA基于FT601实现USB3.0视频传输的设计能力,以便能够移植和设计自己的项目;
工程Block Design和工程代码架构请参考第4章节的《工程源码架构》小节内容;
工程的资源消耗和功耗如下:
6、工程源码2详解–>Artix7-35T,4路OV5640拼接版本
开发板FPGA型号:Xilinx–Artix7–xc7a35tfgg484-2;
FPGA开发环境:Vivado2019.1;
QT开发环境:VS2015 + Qt 5.12.10;
输入:OV5640摄像头或动态彩条,分辨率1280x720@30Hz;
输出:USB3.0,1920x1080@60Hz背景下叠加显示4路拼接的960x540的有效图像;
USB3.0方案:FT601芯片;
图像缩放方案:自研纯Verilog图像缩放;
图像缩放实例:1280x720缩放到960x540;
图像缓存方案:纯VerilogFDMA方案;
图像缓存介质:DDR3;
视频拼接方案:纯VerilogFDMA方案;
视频拼接应用:4路视频拼接;
实现功能:FPGA基于FT601实现USB3.0视频缩放拼接传输(4路OV5640摄像头);
工程作用:此工程目的是让读者掌握FPGA基于FT601实现USB3.0视频传输的设计能力,以便能够移植和设计自己的项目;
工程Block Design和工程代码架构请参考第4章节的《工程源码架构》小节内容;
工程的资源消耗和功耗如下:
7、工程源码3详解–>Artix7-100T,2路OV5640拼接版本
开发板FPGA型号:Xilinx–Artix7-100T–xc7a100tfgg484-2;
FPGA开发环境:Vivado2019.1;
QT开发环境:VS2015 + Qt 5.12.10;
输入:OV5640摄像头或动态彩条,分辨率1280x720@30Hz;
输出:USB3.0,1920x1080@60Hz背景下叠加显示2路拼接的960x540的有效图像;
USB3.0方案:FT601芯片;
图像缩放方案:自研纯Verilog图像缩放;
图像缩放实例:1280x720缩放到960x540;
图像缓存方案:纯VerilogFDMA方案;
图像缓存介质:DDR3;
视频拼接方案:纯VerilogFDMA方案;
视频拼接应用:2路视频拼接;
实现功能:FPGA基于FT601实现USB3.0视频缩放拼接传输(2路OV5640摄像头);
工程作用:此工程目的是让读者掌握FPGA基于FT601实现USB3.0视频传输的设计能力,以便能够移植和设计自己的项目;
工程Block Design和工程代码架构请参考第4章节的《工程源码架构》小节内容;
工程的资源消耗和功耗如下:
8、工程源码4详解–>Artix7-100T,4路OV5640拼接版本
开发板FPGA型号:Xilinx–Artix7-100T–xc7a100tfgg484-2;
FPGA开发环境:Vivado2019.1;
QT开发环境:VS2015 + Qt 5.12.10;
输入:OV5640摄像头或动态彩条,分辨率1280x720@30Hz;
输出:USB3.0,1920x1080@60Hz背景下叠加显示4路拼接的960x540的有效图像;
USB3.0方案:FT601芯片;
图像缩放方案:自研纯Verilog图像缩放;
图像缩放实例:1280x720缩放到960x540;
图像缓存方案:纯VerilogFDMA方案;
图像缓存介质:DDR3;
视频拼接方案:纯VerilogFDMA方案;
视频拼接应用:4路视频拼接;
实现功能:FPGA基于FT601实现USB3.0视频缩放拼接传输(4路OV5640摄像头);
工程作用:此工程目的是让读者掌握FPGA基于FT601实现USB3.0视频传输的设计能力,以便能够移植和设计自己的项目;
工程Block Design和工程代码架构请参考第4章节的《工程源码架构》小节内容;
工程的资源消耗和功耗如下:
9、工程源码5详解–>Kintex7–35T,2路OV5640拼接版本
开发板FPGA型号:Xilinx–Kintex7–35T–xc7k325tffg900-2;
FPGA开发环境:Vivado2019.1;
QT开发环境:VS2015 + Qt 5.12.10;
输入:OV5640摄像头或动态彩条,分辨率1280x720@30Hz;
输出:USB3.0,1920x1080@60Hz背景下叠加显示2路拼接的960x540的有效图像;
USB3.0方案:FT601芯片;
图像缩放方案:自研纯Verilog图像缩放;
图像缩放实例:1280x720缩放到960x540;
图像缓存方案:纯VerilogFDMA方案;
图像缓存介质:DDR3;
视频拼接方案:纯VerilogFDMA方案;
视频拼接应用:2路视频拼接;
实现功能:FPGA基于FT601实现USB3.0视频缩放拼接传输(2路OV5640摄像头);
工程作用:此工程目的是让读者掌握FPGA基于FT601实现USB3.0视频传输的设计能力,以便能够移植和设计自己的项目;
工程Block Design和工程代码架构请参考第4章节的《工程源码架构》小节内容;
工程的资源消耗和功耗如下:
10、工程源码6详解–>Kintex7–35T,4路OV5640拼接版本
开发板FPGA型号:Xilinx–Kintex7–35T–xc7k325tffg900-2;
FPGA开发环境:Vivado2019.1;
QT开发环境:VS2015 + Qt 5.12.10;
输入:OV5640摄像头或动态彩条,分辨率1280x720@30Hz;
输出:USB3.0,1920x1080@60Hz背景下叠加显示4路拼接的960x540的有效图像;
USB3.0方案:FT601芯片;
图像缩放方案:自研纯Verilog图像缩放;
图像缩放实例:1280x720缩放到960x540;
图像缓存方案:纯VerilogFDMA方案;
图像缓存介质:DDR3;
视频拼接方案:纯VerilogFDMA方案;
视频拼接应用:4路视频拼接;
实现功能:FPGA基于FT601实现USB3.0视频缩放拼接传输(4路OV5640摄像头);
工程作用:此工程目的是让读者掌握FPGA基于FT601实现USB3.0视频传输的设计能力,以便能够移植和设计自己的项目;
工程Block Design和工程代码架构请参考第4章节的《工程源码架构》小节内容;
工程的资源消耗和功耗如下:
11、工程源码7详解–>Kintex7–35T,2路HDMI拼接版本
开发板FPGA型号:Xilinx–Kintex7–35T–xc7k325tffg900-2;
FPGA开发环境:Vivado2019.1;
QT开发环境:VS2015 + Qt 5.12.10;
输入:HDMI(笔记本输入模拟Sensor)或动态彩条,分辨率1920x1080@60Hz;
HDMI解码方案:ADV7611芯片;
输出:USB3.0,1920x1080@60Hz背景下叠加显示2路拼接的960x540的有效图像;
USB3.0方案:FT601芯片;
图像缩放方案:自研纯Verilog图像缩放;
图像缩放实例:1920x1080缩放到960x540;
图像缓存方案:纯VerilogFDMA方案;
图像缓存介质:DDR3;
视频拼接方案:纯VerilogFDMA方案;
视频拼接应用:2路视频拼接;
实现功能:FPGA基于FT601实现USB3.0视频缩放拼接传输(2路HDMI);
工程作用:此工程目的是让读者掌握FPGA基于FT601实现USB3.0视频传输的设计能力,以便能够移植和设计自己的项目;
工程Block Design和工程代码架构请参考第4章节的《工程源码架构》小节内容;
工程的资源消耗和功耗如下:
12、工程源码8详解–>Kintex7–35T,4路HDMI拼接版本
开发板FPGA型号:Xilinx–Kintex7–35T–xc7k325tffg900-2;
FPGA开发环境:Vivado2019.1;
QT开发环境:VS2015 + Qt 5.12.10;
输入:HDMI(笔记本输入模拟Sensor)或动态彩条,分辨率1920x1080@60Hz;
HDMI解码方案:ADV7611芯片;
输出:USB3.0,1920x1080@60Hz背景下叠加显示4路拼接的960x540的有效图像;
USB3.0方案:FT601芯片;
图像缩放方案:自研纯Verilog图像缩放;
图像缩放实例:1920x1080缩放到960x540;
图像缓存方案:纯VerilogFDMA方案;
图像缓存介质:DDR3;
视频拼接方案:纯VerilogFDMA方案;
视频拼接应用:4路视频拼接;
实现功能:FPGA基于FT601实现USB3.0视频缩放拼接传输(4路HDMI);
工程作用:此工程目的是让读者掌握FPGA基于FT601实现USB3.0视频传输的设计能力,以便能够移植和设计自己的项目;
工程Block Design和工程代码架构请参考第4章节的《工程源码架构》小节内容;
工程的资源消耗和功耗如下:
13、工程源码9详解–>Zynq7020,2路OV5640拼接版本
开发板FPGA型号:Xilinx–Zynq7020–xc7z020clg400-2;
FPGA开发环境:Vivado2019.1;
QT开发环境:VS2015 + Qt 5.12.10;
输入:OV5640摄像头或动态彩条,分辨率1280x720@30Hz;
输出:USB3.0,1920x1080@60Hz背景下叠加显示2路拼接的960x540的有效图像;
USB3.0方案:FT601芯片;
图像缩放方案:自研纯Verilog图像缩放;
图像缩放实例:1280x720缩放到960x540;
图像缓存方案:纯VerilogFDMA方案;
图像缓存介质:DDR3;
视频拼接方案:纯VerilogFDMA方案;
视频拼接应用:2路视频拼接;
实现功能:FPGA基于FT601实现USB3.0视频缩放拼接传输(2路OV5640摄像头);
工程作用:此工程目的是让读者掌握FPGA基于FT601实现USB3.0视频传输的设计能力,以便能够移植和设计自己的项目;
工程Block Design和工程代码架构请参考第4章节的《工程源码架构》小节内容;
工程的资源消耗和功耗如下:
14、工程源码10详解–>Zynq7020,4路OV5640拼接版本
开发板FPGA型号:Xilinx–Zynq7020–xc7z020clg400-2;
FPGA开发环境:Vivado2019.1;
QT开发环境:VS2015 + Qt 5.12.10;
输入:OV5640摄像头或动态彩条,分辨率1280x720@30Hz;
输出:USB3.0,1920x1080@60Hz背景下叠加显示4路拼接的960x540的有效图像;
USB3.0方案:FT601芯片;
图像缩放方案:自研纯Verilog图像缩放;
图像缩放实例:1280x720缩放到960x540;
图像缓存方案:纯VerilogFDMA方案;
图像缓存介质:DDR3;
视频拼接方案:纯VerilogFDMA方案;
视频拼接应用:4路视频拼接;
实现功能:FPGA基于FT601实现USB3.0视频缩放拼接传输(4路OV5640摄像头);
工程作用:此工程目的是让读者掌握FPGA基于FT601实现USB3.0视频传输的设计能力,以便能够移植和设计自己的项目;
工程Block Design和工程代码架构请参考第4章节的《工程源码架构》小节内容;
工程的资源消耗和功耗如下:
15、工程源码11详解–>Zynq7100,2路OV5640拼接版本
开发板FPGA型号:Xilinx–Zynq7100–xc7z100ffg900-2;
FPGA开发环境:Vivado2019.1;
QT开发环境:VS2015 + Qt 5.12.10;
输入:OV5640摄像头或动态彩条,分辨率1280x720@30Hz;
输出:USB3.0,1920x1080@60Hz背景下叠加显示2路拼接的960x540的有效图像;
USB3.0方案:FT601芯片;
图像缩放方案:自研纯Verilog图像缩放;
图像缩放实例:1280x720缩放到960x540;
图像缓存方案:纯VerilogFDMA方案;
图像缓存介质:DDR3;
视频拼接方案:纯VerilogFDMA方案;
视频拼接应用:2路视频拼接;
实现功能:FPGA基于FT601实现USB3.0视频缩放拼接传输(2路OV5640摄像头);
工程作用:此工程目的是让读者掌握FPGA基于FT601实现USB3.0视频传输的设计能力,以便能够移植和设计自己的项目;
工程Block Design和工程代码架构请参考第4章节的《工程源码架构》小节内容;
工程的资源消耗和功耗如下:
16、工程源码12详解–>Zynq7100,4路OV5640拼接版本
开发板FPGA型号:Xilinx–Zynq7100–xc7z100ffg900-2;
FPGA开发环境:Vivado2019.1;
QT开发环境:VS2015 + Qt 5.12.10;
输入:OV5640摄像头或动态彩条,分辨率1280x720@30Hz;
输出:USB3.0,1920x1080@60Hz背景下叠加显示4路拼接的960x540的有效图像;
USB3.0方案:FT601芯片;
图像缩放方案:自研纯Verilog图像缩放;
图像缩放实例:1280x720缩放到960x540;
图像缓存方案:纯VerilogFDMA方案;
图像缓存介质:DDR3;
视频拼接方案:纯VerilogFDMA方案;
视频拼接应用:4路视频拼接;
实现功能:FPGA基于FT601实现USB3.0视频缩放拼接传输(4路OV5640摄像头);
工程作用:此工程目的是让读者掌握FPGA基于FT601实现USB3.0视频传输的设计能力,以便能够移植和设计自己的项目;
工程Block Design和工程代码架构请参考第4章节的《工程源码架构》小节内容;
工程的资源消耗和功耗如下:
17、工程源码13详解–>Zynq7100,2路HDMI拼接版本
开发板FPGA型号:Xilinx–Zynq7100–xc7z100ffg900-2;
FPGA开发环境:Vivado2019.1;
QT开发环境:VS2015 + Qt 5.12.10;
输入:HDMI(笔记本输入模拟Sensor)或动态彩条,分辨率1920x1080@60Hz;
HDMI解码方案:ADV7611芯片;
输出:USB3.0,1920x1080@60Hz背景下叠加显示2路拼接的960x540的有效图像;
USB3.0方案:FT601芯片;
图像缩放方案:自研纯Verilog图像缩放;
图像缩放实例:1920x1080缩放到960x540;
图像缓存方案:纯VerilogFDMA方案;
图像缓存介质:DDR3;
视频拼接方案:纯VerilogFDMA方案;
视频拼接应用:2路视频拼接;
实现功能:FPGA基于FT601实现USB3.0视频缩放拼接传输(2路HDMI);
工程作用:此工程目的是让读者掌握FPGA基于FT601实现USB3.0视频传输的设计能力,以便能够移植和设计自己的项目;
工程Block Design和工程代码架构请参考第4章节的《工程源码架构》小节内容;
工程的资源消耗和功耗如下:
18、工程源码14详解–>Zynq7100,4路HDMI拼接版本
开发板FPGA型号:Xilinx–Zynq7100–xc7z100ffg900-2;
FPGA开发环境:Vivado2019.1;
QT开发环境:VS2015 + Qt 5.12.10;
输入:HDMI(笔记本输入模拟Sensor)或动态彩条,分辨率1920x1080@60Hz;
HDMI解码方案:ADV7611芯片;
输出:USB3.0,1920x1080@60Hz背景下叠加显示4路拼接的960x540的有效图像;
USB3.0方案:FT601芯片;
图像缩放方案:自研纯Verilog图像缩放;
图像缩放实例:1920x1080缩放到960x540;
图像缓存方案:纯VerilogFDMA方案;
图像缓存介质:DDR3;
视频拼接方案:纯VerilogFDMA方案;
视频拼接应用:4路视频拼接;
实现功能:FPGA基于FT601实现USB3.0视频缩放拼接传输(4路HDMI);
工程作用:此工程目的是让读者掌握FPGA基于FT601实现USB3.0视频传输的设计能力,以便能够移植和设计自己的项目;
工程Block Design和工程代码架构请参考第4章节的《工程源码架构》小节内容;
工程的资源消耗和功耗如下:
19、工程源码15详解–>KU040,2路OV5640拼接版本
开发板FPGA型号:Xilinx–Kintex UltraScale–xcku040-ffva1156-2-i;
FPGA开发环境:Vivado2019.1;
QT开发环境:VS2015 + Qt 5.12.10;
输入:OV5640摄像头或动态彩条,分辨率1280x720@30Hz;
输出:USB3.0,1920x1080@60Hz背景下叠加显示2路拼接的960x540的有效图像;
USB3.0方案:FT601芯片;
图像缩放方案:自研纯Verilog图像缩放;
图像缩放实例:1280x720缩放到960x540;
图像缓存方案:纯VerilogFDMA方案;
图像缓存介质:DDR4;
视频拼接方案:纯VerilogFDMA方案;
视频拼接应用:2路视频拼接;
实现功能:FPGA基于FT601实现USB3.0视频缩放拼接传输(2路OV5640摄像头);
工程作用:此工程目的是让读者掌握FPGA基于FT601实现USB3.0视频传输的设计能力,以便能够移植和设计自己的项目;
工程Block Design和工程代码架构请参考第4章节的《工程源码架构》小节内容;
工程的资源消耗和功耗如下:
20、工程源码16详解–>KU040,4路OV5640拼接版本
开发板FPGA型号:Xilinx–Kintex UltraScale–xcku040-ffva1156-2-i;
FPGA开发环境:Vivado2019.1;
QT开发环境:VS2015 + Qt 5.12.10;
输入:OV5640摄像头或动态彩条,分辨率1280x720@30Hz;
输出:USB3.0,1920x1080@60Hz背景下叠加显示4路拼接的960x540的有效图像;
USB3.0方案:FT601芯片;
图像缩放方案:自研纯Verilog图像缩放;
图像缩放实例:1280x720缩放到960x540;
图像缓存方案:纯VerilogFDMA方案;
图像缓存介质:DDR4;
视频拼接方案:纯VerilogFDMA方案;
视频拼接应用:4路视频拼接;
实现功能:FPGA基于FT601实现USB3.0视频缩放拼接传输(4路OV5640摄像头);
工程作用:此工程目的是让读者掌握FPGA基于FT601实现USB3.0视频传输的设计能力,以便能够移植和设计自己的项目;
工程Block Design和工程代码架构请参考第4章节的《工程源码架构》小节内容;
工程的资源消耗和功耗如下:
21、工程源码17详解–>KU040,2路HDMI拼接版本
开发板FPGA型号:Xilinx–Kintex UltraScale–xcku040-ffva1156-2-i;
FPGA开发环境:Vivado2019.1;
QT开发环境:VS2015 + Qt 5.12.10;
输入:HDMI(笔记本输入模拟Sensor)或动态彩条,分辨率1920x1080@60Hz;
HDMI解码方案:ADV7611芯片;
输出:USB3.0,1920x1080@60Hz背景下叠加显示2路拼接的960x540的有效图像;
USB3.0方案:FT601芯片;
图像缩放方案:自研纯Verilog图像缩放;
图像缩放实例:1920x1080缩放到960x540;
图像缓存方案:纯VerilogFDMA方案;
图像缓存介质:DDR4;
视频拼接方案:纯VerilogFDMA方案;
视频拼接应用:2路视频拼接;
实现功能:FPGA基于FT601实现USB3.0视频缩放拼接传输(2路HDMI);
工程作用:此工程目的是让读者掌握FPGA基于FT601实现USB3.0视频传输的设计能力,以便能够移植和设计自己的项目;
工程Block Design和工程代码架构请参考第4章节的《工程源码架构》小节内容;
工程的资源消耗和功耗如下:
22、工程源码18详解–>KU040,4路HDMI拼接版本
开发板FPGA型号:Xilinx–Kintex UltraScale–xcku040-ffva1156-2-i;
FPGA开发环境:Vivado2019.1;
QT开发环境:VS2015 + Qt 5.12.10;
输入:HDMI(笔记本输入模拟Sensor)或动态彩条,分辨率1920x1080@60Hz;
HDMI解码方案:ADV7611芯片;
输出:USB3.0,1920x1080@60Hz背景下叠加显示4路拼接的960x540的有效图像;
USB3.0方案:FT601芯片;
图像缩放方案:自研纯Verilog图像缩放;
图像缩放实例:1920x1080缩放到960x540;
图像缓存方案:纯VerilogFDMA方案;
图像缓存介质:DDR4;
视频拼接方案:纯VerilogFDMA方案;
视频拼接应用:4路视频拼接;
实现功能:FPGA基于FT601实现USB3.0视频缩放拼接传输(4路HDMI);
工程作用:此工程目的是让读者掌握FPGA基于FT601实现USB3.0视频传输的设计能力,以便能够移植和设计自己的项目;
工程Block Design和工程代码架构请参考第4章节的《工程源码架构》小节内容;
工程的资源消耗和功耗如下:
23、工程源码19详解–>KU060,2路OV5640拼接版本
开发板FPGA型号:Xilinx–Kintex UltraScale–xcku060-ffva1156-2-i;
FPGA开发环境:Vivado2019.1;
QT开发环境:VS2015 + Qt 5.12.10;
输入:OV5640摄像头或动态彩条,分辨率1280x720@30Hz;
输出:USB3.0,1920x1080@60Hz背景下叠加显示2路拼接的960x540的有效图像;
USB3.0方案:FT601芯片;
图像缩放方案:自研纯Verilog图像缩放;
图像缩放实例:1280x720缩放到960x540;
图像缓存方案:纯VerilogFDMA方案;
图像缓存介质:DDR4;
视频拼接方案:纯VerilogFDMA方案;
视频拼接应用:2路视频拼接;
实现功能:FPGA基于FT601实现USB3.0视频缩放拼接传输(2路OV5640摄像头);
工程作用:此工程目的是让读者掌握FPGA基于FT601实现USB3.0视频传输的设计能力,以便能够移植和设计自己的项目;
工程Block Design和工程代码架构请参考第4章节的《工程源码架构》小节内容;
工程的资源消耗和功耗如下:
24、工程源码20详解–>KU060,4路OV5640拼接版本
开发板FPGA型号:Xilinx–Kintex UltraScale–xcku060-ffva1156-2-i;
FPGA开发环境:Vivado2019.1;
QT开发环境:VS2015 + Qt 5.12.10;
输入:OV5640摄像头或动态彩条,分辨率1280x720@30Hz;
输出:USB3.0,1920x1080@60Hz背景下叠加显示4路拼接的960x540的有效图像;
USB3.0方案:FT601芯片;
图像缩放方案:自研纯Verilog图像缩放;
图像缩放实例:1280x720缩放到960x540;
图像缓存方案:纯VerilogFDMA方案;
图像缓存介质:DDR4;
视频拼接方案:纯VerilogFDMA方案;
视频拼接应用:4路视频拼接;
实现功能:FPGA基于FT601实现USB3.0视频缩放拼接传输(4路OV5640摄像头);
工程作用:此工程目的是让读者掌握FPGA基于FT601实现USB3.0视频传输的设计能力,以便能够移植和设计自己的项目;
工程Block Design和工程代码架构请参考第4章节的《工程源码架构》小节内容;
工程的资源消耗和功耗如下:
25、工程源码21详解–>KU060,2路HDMI拼接版本
开发板FPGA型号:Xilinx–Kintex UltraScale–xcku060-ffva1156-2-i;
FPGA开发环境:Vivado2019.1;
QT开发环境:VS2015 + Qt 5.12.10;
输入:HDMI(笔记本输入模拟Sensor)或动态彩条,分辨率1920x1080@60Hz;
HDMI解码方案:ADV7611芯片;
输出:USB3.0,1920x1080@60Hz背景下叠加显示2路拼接的960x540的有效图像;
USB3.0方案:FT601芯片;
图像缩放方案:自研纯Verilog图像缩放;
图像缩放实例:1920x1080缩放到960x540;
图像缓存方案:纯VerilogFDMA方案;
图像缓存介质:DDR4;
视频拼接方案:纯VerilogFDMA方案;
视频拼接应用:2路视频拼接;
实现功能:FPGA基于FT601实现USB3.0视频缩放拼接传输(2路HDMI);
工程作用:此工程目的是让读者掌握FPGA基于FT601实现USB3.0视频传输的设计能力,以便能够移植和设计自己的项目;
工程Block Design和工程代码架构请参考第4章节的《工程源码架构》小节内容;
工程的资源消耗和功耗如下:
26、工程源码22详解–>KU060,4路HDMI拼接版本
开发板FPGA型号:Xilinx–Kintex UltraScale–xcku060-ffva1156-2-i;
FPGA开发环境:Vivado2019.1;
QT开发环境:VS2015 + Qt 5.12.10;
输入:HDMI(笔记本输入模拟Sensor)或动态彩条,分辨率1920x1080@60Hz;
HDMI解码方案:ADV7611芯片;
输出:USB3.0,1920x1080@60Hz背景下叠加显示4路拼接的960x540的有效图像;
USB3.0方案:FT601芯片;
图像缩放方案:自研纯Verilog图像缩放;
图像缩放实例:1920x1080缩放到960x540;
图像缓存方案:纯VerilogFDMA方案;
图像缓存介质:DDR4;
视频拼接方案:纯VerilogFDMA方案;
视频拼接应用:4路视频拼接;
实现功能:FPGA基于FT601实现USB3.0视频缩放拼接传输(4路HDMI);
工程作用:此工程目的是让读者掌握FPGA基于FT601实现USB3.0视频传输的设计能力,以便能够移植和设计自己的项目;
工程Block Design和工程代码架构请参考第4章节的《工程源码架构》小节内容;
工程的资源消耗和功耗如下:
27、工程移植说明
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软核;
28、上板调试验证
准备工作
需要准备的器材如下:
FPGA开发板;
OV5640摄像头或ADV7611转接板:
FT601转接板(FPGA开发板板载FT601除外);
笔记本电脑或者PC主机;
USB3.0数据线;
我的开发板连接如下:
FT601驱动安装
注意:驱动只需要安装一次即可;
首先下载bit到FPGA开发板,如下:
然后打开PC端–>我的电脑–>管理–>设备管理器,可以看到FT601设备已经识别,如下:
如果你已经下载了FT601驱动文件,但没有安装,则有的电脑会自动寻找驱动并自定安装,所以等待大约1分钟后,电脑自动帮我们装好了FT601驱动,如下:
如果你的电脑不能自动寻找驱动并安装,请手动安装驱动,如下:
输出视频演示
首先打开QT上位机,位置如下:
打开QT界面如下:
2路OV5640缩放拼接工程,动态输出如下:
FT601-OV5640X2
4路OV5640缩放拼接工程,动态输出如下:
FT601-OV5640X4
29、福利:工程代码的获取
福利:工程代码的获取
代码太大,无法邮箱发送,以某度网盘链接方式发送,
资料获取方式:私,或者文章末尾的V名片。
网盘资料如下:
此外,有很多朋友给本博主提了很多意见和建议,希望能丰富服务内容和选项,因为不同朋友的需求不一样,所以本博主还提供以下服务: