APP下载

基于FPGA的图像接口的设计

2018-06-07李智中

现代工业经济和信息化 2018年5期
关键词:寄存器时序时钟

韩 众, 李智中, 曹 飞

(1.中北大学仪器与电子学院, 山西 太原 030051;2.北京航天长征飞行器研究所, 北京 100076)

引言

随着图像设备广泛应用于社会的各行各业,图像数据的传输、存储问题也越来越被人们关注研究,以期获得高速传输、大容量存储的方案[1]。本文以SDRAM为存储介质,通过FPGA控制实现CMOS摄像头的图像获取,SDRAM的图像数据缓存,VGA对采集图像的实时显示,数据传输速率可达到32 MB/s,并设计了图像数据的乒乓式存储方式,实现了CMOS图像的SDRAM存储与VGA实时显示。

1 总体设计

设计实现过程如图1所示,系统上电后,程序先利用SCCB协议接口对CMOS OV7670摄像头的寄存器进行了配置,配置完成后OV7670模块就可以稳定、持续地输出采集到的图像数据;然后将图像数据通过WFIFO缓存写入到SDRAM中,再通过RFIFO缓存读出图像数据到VGA显示器中显示。程序中SDRAM读和写操作采用“乒乓结构”解决图像拖影的问题,当摄像头采集的数据写入到SDRAM的Bank0时,VGA从SDRAM的Bank3读取数据显示。当摄像头的一帧图像写入完成后,SDRAM读和写的Bank交换。

2 前端CMOS摄像头对图像的采集

CMOS摄像头图像采集的设计包括两部分:SCCB协议接口时序;RGB图像数据输出时序。

图1 设计总体实现过程

2.1 SCCB协议接口时序

SCCB协议是用于配置OV系列摄像头的专属总线。SCCB是一种3线的总线,它由SCCB_E、SIO_C、SIO_D组成。在为了减少引脚的芯片上缩减为2根线:SIO_C和SIO_D。

SCCB协议接口配置过程[2]:由三个阶段写完毕一个地址,第一阶段:发送设备的ID地址(ID Address);第二个阶段:发送此次所发数据的目的地寄存器地址(Sub_address);第三阶段:发送要写入的数据。这里类似突发传输,即如果要在连续的寄存器中写数据,那么一个寄存器写入值后,地址指针自动加1,自动跳过上述的第一个阶段。设计中使用的CMOS摄像头OV7670模块就是如此配置的。

设计中调用SCCB协议接口的通信程序配置了OV7670摄像头的169个寄存器,其中前19个寄存器需要根据实际情况配置,其余的寄存器全部使用默认参数,最终结果是配置成RGB565 30fs数据输出格式、水平镜像、调用外部时钟、使用内部电源、没有设置彩条。

2.2 RGB图像数据输出时序

CMOS摄像头 OV7670感光阵列:640×480,图像分辨率:30万像素,采集速率:30 fps VGA,输出数据信号类型:8位数字信号,设计中配置的输出格式:RGB565。

OV7670 RGB565模式下的时序,OV7670在HREF信号为高电平时输出一行的图像数据,图像数据在PCLK的上升沿的时候有效。因RGB565显示模式下每个像素为16 bits,而OV7670每个PCLK驱动8 bit,故每帧图像的每个像素分两次输出,第一个 Byte为 R4~R0 和 G5~G3,第二个 Byte为 G2~G0和B4~B0,总共是16 bits的RGB颜色信息[3]。

设计功能实现后,使用Quartus 13.1软件的仿真工具Signaltap对行有效信号(CMOS_HREF)、场有效信号(CMOS_VSYNC)、数据输出信号(CMOS_i-DATA)进行了联合硬件仿真,以验证时序设计的正确性。

仿真结果表明,在帧有效信号(Frame_vaild)为高电平时,系统稳定接收图像;场有效信号(CMOS_VSYNC)为低时,表示一场图像扫描还未完成,那么在PCLK脉冲持续输出情况下,行有效信号(CMOS_HREF)为高时,输出一行有效的数据。

由此可判断,OV7670 RGB565时序设计正确。

由前面的介绍可知,CMOS OV7670摄像头输出的是8 bits的图像数字信号,为了与后面SDRAM的输入数据位宽16bits保持一致,设计中将两个8 bits的CMOS_iDATA数据组合成了一个16bits的CMOS_o-DATA。

设计中,CMOS摄像头采集的一帧图像的数据大小为:,输出时钟PCLK为 ,在下一步的FIFO设计中必须要考虑这两个数据。

3 中端数据存储单元设计

3.1 FIFO的设计

FIFO一般用于不同时钟域之间的数据传输[4]。此设计中,CMOS摄像头的输出时钟PCLK为25 MHz,SDRAM为100 MHz,所以设计FIFO通道缓冲这两个不同时钟域之间数据。

图2 quartus

13.1 软件中的WFIFO、RFIFO参数配置

如图2所示为WFIFO和RFIFO的参数设置。其中 data[15..0]:16bits输入图像数据,wrreq:写 FIFO的请求信号,wrclk:写FIFO的应答信号,rdreq:读FIFO的请求信号,rdclk:读FIFO的应答信号,aclk:异步清零信号,q[15..0]:16bits输出图像数据,rdusedw、wrusedw:读、写 FIFO已使用量,用于判断FIFO读写满空状态。

设计中,WFIFO、RFIFO的输入、输出的数据宽度均为 16bits,深度均为 512words,故 WFIFO、RFIFO的大小均为,用FIFO容量的一半(rdusedw,wdusedw)来判断读写满空状态。

FIFO的读写经常用到“突发”传输,这里也不例外。设计中读突发长度rd_length、写突发长度wr_length均为256位。WFIFO的数据写入SDRAM时,若wrf_use>=wr_length,则表明WFIFO中已经缓存了至少一次的突发数据,则使能写SDRAM信号;此时若SDRAM已经初始化完毕,则可以存储突发数据的条件是:(写SDRAM的地址sdram_wraddr)<(写SDRAM的最大地址 wr_max_addr)-(一次突发长度wr_length),表明还未写到当前bank的最大地址;若不满足此条件,说明已容纳不下再一次的突发数据了,则锁存地址,防止数据溢出,再送出一个写完成标志信号frame_write_done。

RFIFO的相关操作类似WFIFO,读完数据后同样送出一个读完成标志信号frame_read_done,利用这两个读写完成标志锁存读写地址,防止数据溢出。设计中,SDRAM的读写初始地址均为22’h0,读写SDRAM的最大地址为22’d307200。

3.2 SDRAM的存储设计

SDRAM是同步动态随机存储器,它的正常工作需要同步时钟,本身的性质决定了其存储阵列需要不停地刷新以保证数据的可靠保存。与FLASH存储器相比,SDRAM的读写速度要高得多,所以用于运行内存、存储大数据的使用[5]。

设计中使用的是海力士公司的HY57V2562-S DRAM,容量为 256 Mbit,即 32 MB,地址线 13根,数据位宽16 bits,存储架构为,外部输出和内部控制时钟:100 MHz。

SDRAM通常有如下特点。

1)行列地址复用,即在选取完行地址后,依然可以纵向选择列地址,使用相同的地址线。

2)由于器件本身特性,需要不断刷新,以免数据丢失,每行刷新的循环周期是64 ms。

3)有预充电操作,同一时间只能写指定的一行,些其他行时需要关闭之前的行。

4)正常工作前需要配置模式寄存器。

程序在行有效信号CMOS_HREF为高电平,场有效信号CMOS_VSYNC为低电平的时候采样数据,把两个Byte的数据合成一个16 bit的数据写入WFIFO中,再传输存储到SDRAM中。然后程序产生一个帧采集完成信号CMOS_VALID去通知SDRAM读写控制模块进行读写Bank的交换。

设计中对SDRAM的读写采用了“乒乓结构”,以解决图像拖影问题,如图3所示。

图3 SDRAM“乒乓结构”式读写操作

在Bank交换程序中,当检测到CMOS_VALID的下降沿,说明一帧图像捕获完成,程序等候图像数据全部写入SDRAM中,若完整写入,则SDRAM的Bank地址交换(如果是Bank0,则切换到Bank3;如果是Bank3,则切换到Bank0);另外等待整幅图像从SDRAM读出,读出完毕则互换SDRAM的Bank地址。SDRAM读写Bank交换的同时,产生一个wr_load和rd_load信号去分别复位SDRAM 的读写地址和读写FIFO。

4 终端VGA实时显示设计

VGA接口传输红、绿、蓝模拟信号以及水平和垂直同步信号,另外设计中通过搭建电阻匹配网络,将中端的数字信号数据转换为了模拟信号,以供VGA接口使用。

扫描方式:VGA屏幕内部的电子枪从左上角开始扫描,从左往右,逐个像素点扫描,当扫描至最右边时,重新返回至下一行的最左边开始扫描。由于这是一个物理过程,所以在返程中就出现了行消隐和场消隐的概念,即返程的扫描不是有效扫描。扫描完一行,行同步信号复位;扫描完一场,场同步信号复位,开始下一帧输入图像的扫描。

VESA中定义VGA的场时序和行时序都需要同步脉冲(Sync a)、显示后沿(Back porch b)、显示时序段(Display interval c)和显示前沿(Front porch d)四部分,设计中的640×480@60 Hz的分辨率参数如表1所示。

表1 分辨率的VGA时序参数

设计中,VGA接口的参数设置为640×480@60Hz,每场对应525个行,其中有效显示480行;每显示行包括800点时钟,其中有效显640点。由此可知:需要为VGA接口提供的点时钟频率为:525×60×80=25MHz。

设计功能实现后,使用Quartus 13.1软件的仿真工具Signaltap对VGA_HSYNC输入行时序、VGAD输入16bits图像数据进行了联合硬件仿真,以验证时序设计的正确性。

仿真结果表明,在clk_vga脉冲的驱动下,vga扫描一行数据的像素个数为,上式中,+1 600表示相对于1361的位移,即此段的宽度为1 600,2表示1个像素点是由2个8bits数据组成,故可计算得到:vga扫描一行图像数据的个数为800个像素点,与表1中的“e段”数据吻合。

由此可判断,VGA时序设计正确。

5 测试结果与结论

试验结果如图4所示,采用CMOS OV7670摄像头采集图像的方式对图像传输、存储、实时显示的设计进行验证,并通过Signaltap仿真工具联合硬件分析OV7670 RGB565时序、VGA时序的设计正确性。试验结果表明,高速图像SDRAM存储的设计能实时显示图像,并无卡帧停顿现象。FPGA作为主控制器,设计了各部分工作时序,构建了FIFO和SDRAM组合的二级缓存结构,达到了CMOS图像在不同时钟域的传输目的,图像数据的存储与实时显示功能也顺利完成。本设计可实现持续的32 MB/s数据的实时显示,满足大多CMOS摄像头设备中数据的实时传输要求。

图4 OV7670模块视频采集效果图

[1]郭柳柳,甄国涌,刘东海.基于FPGA高速图像数据的存储及显示设计[J].电子技术应用,2014,40(11):75-77;84.

[2]李慧敏,樊记明,杨笑.基于STM32和OV7670的图像采集与显示系统设计[J].传感器与微系统,2016,35(9):114-117.

[3]陈文昌,王勇,杨振国,等.基于OV7670图像采集与显示的FPGA设计[J].电脑编程技巧与维护,2017(4):67-68;85.

[4]高俊岭,陈志飞,章佩佩.基于FPGA的实时视频图像采集处理系统设计[J].电子技术应用,2018,44(2):10-12;19.

[5]丁培培,郑列,李宏.基于FPGA的DDR3 SDRAM控制器设计与实现方法[J].信息记录材料,2018,19(5):64-66.

猜你喜欢

寄存器时序时钟
清明
STM32和51单片机寄存器映射原理异同分析
别样的“时钟”
古代的时钟
Lite寄存器模型的设计与实现
基于不同建设时序的地铁互联互通方案分析
移位寄存器及算术运算应用
基于FPGA 的时序信号光纤传输系统
有趣的时钟
时钟会开“花”