content
本项目使用国产高云GW2A-LV18PG484C8/I7型号的Tang Primer 20K fpga实现光流计算。通过使用OV5640摄像头读取视频流,在fpga内部做缩放、光流计算、HDMI显示等操作。
视频源设置有两种,一种是使用OV5640摄像头,另一种是使用代码内部生成的动态彩条模拟摄像头视频。分别对应手上有摄像头和没有摄像头两种情况。
视频源的选择通过代码顶层的`define宏定义进行选择,上电默认选择OV5640摄像头作为输入源;FPGA首先使用纯verilog实现的i2c控制器配置ov5640摄像头,将其分辨率配置为640x480@60Hz,同时生成用纯verilog实现动态彩条,其分辨率为640x480@60Hz;FPGA采集到输入视频后,首先将图像送入缓冲FIFO中做跨时钟域处理,即用输出1280x720@60Hz的屏幕背景分辨率作为读FIFO的时钟,这样可以确保在各种分辨率的图像缩放操作中,送入图像缩放模块的时钟时钟足够大;随后将视频送入纯verilog实现的图像缩放模块做图像缩放操作;缩放后的视频,其原有的时序已经被完全打乱,此时调用高云官方的Video Frame Buffer IP核将视频送到外接DDR3中做三帧缓存;调用高云官方的DDR3 Memory Interface IP核实现图像数据到DDR3颗粒的搬运工作;
然后读出视频送VGA输出时序同步像素数据,VGA输出分辨率为1280x720@60Hz;缩放后的视频相当于叠加显示在1280x720的背景之上;最后调用高云官方的DVI TX IP核实现RGB视频到HDMI视频的转换,输出显示器显示;
所使用的工具链为Gowin_1-9.9教育版
打开gprj文件,分别执行synthesis和place&route,最后生成bit文件使用programmer下载到板子上即可。
连接显示器和摄像头后,上电即可看到显示器上有缩放后的视频流。注意在接摄像头时需要对照src/top.cst文件中对应的引脚来接