基于FPGA的门禁摄像采集与实时显示系统
2019-04-11崔旭晶崔秀艳吕梓豪
乔 威,崔旭晶,崔秀艳,吕梓豪
(1.沈阳理工大学 自动化与电气工程学院,沈阳 110159;2.河北软件职业技术学院,河北 保定 071000)
随着高新科技的迅速发展,人们对栖身环境的安全性、舒适性要求越来越高,造成家居智能化的需求持续增长,而门禁视频采集与实时显示系统是现代智能家居技术的一个热门领域,具有较大的研究价值和应用前景[1]。
对于处理视频信息这种控制复杂、数据量大的数据,传统单片机的低效率处理方式,在实时处理视频中的关键信息方面存在较大困难,而FPGA(现场可编程门阵列)技术具有并行、高速、精确的优点,在视频图像处理中具有较大优势[2-3]。
作为门禁系统的“眼睛”,系统应具备摄像头、显示屏、存储器等主要外围器件,本文采用FPGA芯片设计,高效利用其设计方法的多变性和可编程等优势,实现系统的视频采集、显示、硬件加速、图像处理等关键技术[4-7]。随着IP技术的不断成熟,FPGA具有灵活性、并行处理加速、现场可编程等优势。
1 系统总体设计与难点设计
本设计采用ov5640摄像头,像素500万,最高可输出2592×1944分辨率,15fps的视频流,可以满足普通用户的门禁系统对清晰度的要求。存储器采用SDRAM芯片,内存256M,每个bank为16M,其运行速度快,适合于跨时钟域的数据传输。LCD液晶屏选为7寸,采用简单方便的VGA控制,实用性很强。
1.1 系统总体框架图
系统总体框架图如图1所示。本设计按照电路功能,将FPGA芯片分为三个主要功能模块:(1)摄像头ov5640的驱动模块(ov5640_top),此模块用于实现对摄像头的上电控制、寄存器配置以及接收视频流数据等功能。(2)存储器SDRAM的驱动模块(sdram_2fifo_top),此模块用于实现视频流数据缓存以及跨时钟域信号传输功能。(3)LCD液晶屏的驱动模块(lcd_drive),此模块先从存储器SDRAM中读取数据,再以VGA格式显示于液晶屏上,实现视频监控功能。
图1 系统总体框架图
图1所示三个主要功能模块的子模块及其功能如下。
摄像头驱动模块ov5640_top,其工作时钟为24MHz,包括三个子模块:上电时序控制子模块power_ctrl、寄存器配置子模块ov5640_cfg、视频流捕获子模块ov5640_data。上电时序控制子模块通过计数器计数,完成26ms延时并产生上电时序;寄存器配置子模块通过下级子模块ov5640_iic与摄像头进行双向通信,完成分辨率、数据格式、色温色差等配置;视频流捕获子模块是数据接收模块,用于将接收的8bitRGB数据合并为16bit,并舍弃前10帧图像。
存储器驱动模块sdram_2fifo_top,包括三个子模块:通用控制器子模块sdram_top、异步fifo控制子模块dcfifo_ctrl、bank乒乓选择子模块sdbank_switch。通用控制器子模块包含对存储器的读、写、自动刷新控制;异步fifo控制子模块通过调用IP核来产生两个异步fifo,并控制其完成对存储器数据的自动写入或读出;bank乒乓选择子模块是对bank进行选择,选中的bank将输入或读取一帧图像。
液晶屏驱动模块lcd_driver,可以模拟出LCD液晶屏所需的VGA时序,并与读fifo联合读取存储器中的数据。此模块通过定义分辨率参数的方式,能够方便地移植并完成不同分辨率的显示功能。
1.2 跨时钟域的数据同步
为了同步实现摄像头的视频图像采集到LCD液晶屏显示,需要将捕获后的数据作为输入存入SDRAM存储器中,并通过LCD液晶屏驱动读取出来。本视频图像采集系统包含多个时钟域,分别用于不同器件的控制,PLL为锁相环,时钟域分布图如图2所示。
图2 时钟域分布图
1.3 乒乓操作的帧图像读写
在VGA显示中,理想状态下同一时刻只显示一个完整的帧,而不会出现前后两帧交错现象,但是在实际帧存与VGA扫描中,由于输入视频流不一定与VGA相匹配,并且在读写中由于时序差异很难保证两者进程一致,所以前后帧交错出现的情况100%会出现。采用乒乓操作可以避免这一情况,首先将4个bank分两组,每组两个bank,其中一组为bank 0+1,另一组为bank 2+3,在SDRAM上电初期,SDRAM会被初始化,此时乒乓为0,从bank 2+3中读出数据,bank 0+1中写入数据,直到一帧数据写完并且一帧数据读完,乒乓跳变为1,这时数据从bank 0+1读取,从bank 2+3输入,直到另一帧数据读写完,切换乒乓值,依次反复。乒乓操作流程图如图3所示。
图3 乒乓操作流程图
2 模块设计
2.1 ov5640驱动模块设计
ov5640摄像头支持SCCB协议,其内部几百个寄存器是用SCCB协议进行配置的。SCCB就是常用的IIC通信总线,其时序和IIC总线一致。数据接口中信号传递有串行和并行两种,IIC控制总线通过串行方式发送数据,数据格式以MSB为先,LSB为后的形式发送,每次发送8bit数据,发送完8位数据后,通过所选器件返回的信号完成一次数据传输。ov5640数据接收模块每接收两个8bit的像素数据,便输出一个完整的像素点数据,模块框图如图4所示。
图4 ov5640数据接收模块框图
Vsync是场同步信号,当检测到Vsync上升沿时,可以判断一帧图像传输完成,如果传输图像累加到10帧,并且即将输出下一帧时,就可以输出wfifo_en。ov5640输出的8bit数据再经过两次移位后,组合成完整像素点数据,与wfifo_en一起以固定格式输出,同时作为SDRAM控制模块写fifo的输出,wfifo_en是写fifo的写使能。
2.2 SDRAM驱动模块设计
SDRAM芯片为H57V2562GTR系列的256M内存芯片,适用于需要大内存密度和高带宽的内存应用设计。它由四个bank组成,每个bank有8192(行地址数)×512(列地址数)个内存单元,每个单元可存放16bit数据。对SDRAM内存寻址是先指定bank地址,再指定行地址,最后指定列地址,确定寻址单元,并进行读写操作。
SDRAM芯片的行地址宽度13bit,列地址宽度9bit,数据宽度16bit,bank宽度2bit。上电初始化时间需要至少100μs,为了保证稳定,定为200μs。自动刷新时间跟行地址有关,定为7.8125μs。图5是移植完成的SDRAM通用控制器模块框图。
图5 SDRAM通用控制器模块框图
2.3 LCD驱动模块设计
LCD显示屏是英伟达7寸TFT LCD液晶屏,型号为A070VW05V2。它由TFT液晶屏和驱动板组成,内部嵌入了一块数模转换器,可以将数字信号转换成模拟信号,同时集成了VGA接口来支持更多设备。
VGA驱动通过计数器产生行、列同步信号,并在规定时间内将RGB信号发送给显示器,就可以完成显示功能,其中为了便于移植,设计的所有LCD参数都以宏定义的方式存于lcd_para.v文件中,具体模块图如图6所示。
图6 LCD驱动模块图
3 仿真与实物验证
3.1 模块仿真
3.1.1 ov5640数据接收模块仿真
ov5640功能是接收ov5640摄像头传输的数据并进行简单处理,通过研究所接收数据的时序可以判断出ov5640驱动的正确性。在模拟出ov5640摄像头的输出时序后,就可以对摄像头进行仿真了[8],如图7所示。
图7 数据接收仿真图
从图7中可以看出,行、场信号时序都正确,RGB565数据输出正常,同时数据输出的clk内使能数据也有效。
3.1.2 VGA驱动模块仿真
通过设计一个LCD数据产生模块,输出与VGA协议相同的数据,作为LCD屏驱动输出,通过判断输出时序是否正确,可以判断模块设计的正确与否,如图8所示。
图8 VGA仿真图
图8中的仿真正确生成了LCD的像素时钟、行同步信号、场同步信号、RGB信号。在场同步信号完成之后,行同步信号随之而来,在之后的时间正确输入RGB信号,完成VGA模块仿真,验证VGA模块功能正确。
3.2实物验证
图9 ov5640摄像图片显示
FPGA芯片型号为EP4CE6F17C8N。在通过了VerilogHDL语言编程及模块设计、ModelSim 10.1d仿真后,在Quartus II 13.0中进行管脚绑定、逻辑综合,最后生成.sof目标文件并下载到FPGA芯片中,最终在LCD显示屏上成功显示图像[9],下载到开发板验证结果如图9所示。
4 结束语
本设计应用Verilog HDL硬件描述语言、Modelsim仿真软件、Quartus II综合开发工具和FPGA芯片,采用自上向下的设计方法,完成了智能家居的门禁摄像采集及实时显示系统设计。经过长时间调试,设计的各种模块成功地通过了功能时序仿真、逻辑综合约束和测试平台测试,能够正确地执行输入得到相应输出;通过下载到开发板验证,最终得到实时清晰的视频显示图像,达到了预期设计的目标和效果。