引言
在低速的数据采集系统中,往往采用单片机或者DSP进行控制;而对于图像采集这种高速数据采集的场合,这种方案就不能满足需要。因此这种方案极大浪费了单片机或DSP的端口资源且灵活性差;若改用串口方式收集数据,则一方面降低了数据采集的速度,另一方面极大地耗费CPU的资源。本系统采用FPGA作为数据采集的主控单元,全部控制逻辑由硬件完成,速度快、成本低、灵活性强。为了增加缓冲功能,系统在FPGA外扩展了256 Mb的RAM,不仅增大了缓冲区容量,而且极大地降低了读写频率,有效地减轻了上位机CPU的负担。在图像数据接口中,比较常见的是VGA、PCIExpress,而这些接口扩展性差、成本高。本系统采用高速的USB接口作为与上位机通信的端口,速度快、易安装、灵活性强。
1 系统框图
图1 系统框图
系统框图如图1所示。FPGA控制单元采用Altera公司Cyclone II系列的EP2C5F256C6,主要由4个部分组成——主控模块、CMOS传感器接口、RAM控制器以及EZUSB接口控制器。传感器接口负责完成SCCB时序控制,RAM控制器用于实现RAM读写与刷新操作的时序, USB接口模块完成主控模块与EZUSB之间的数据读写;而主控模块负责对从EZUSB部分接收过来的上位机命令进行解析,解析完命令后产生相应的信号控制各个对应模块,如CMOS传感器传输的图像格式、RAM的读写方式、突发长度等。
2 OV7620模块设计
图像传感器采用OV7620,接口图如图2所示。该传感器功能强大,提供多种数据格式的输出, 自动消除白噪声,白平衡、色彩饱和度、色调控制、窗口大小等均可通过内部的SCCB控制线进行设置。OV7620属于CMOS彩色图像传感器。它支持连续和隔行两种扫描方式,VGA与QVGA两种图像格式;最高像素为664×492,帧速率为30fps;数据格式包括YUV、YCrCb、RGB三种。OV7620支持SCCB设置模式和自动加载默认设置模式,其选择由SCCB控制。本系统只需要支持SCCB模式,因此在设计的时候将SBB接地。上电后FPGA通过SCCB总线对OV7620进行设置,系统也可接受上位机发过来命令,设置其工作模式。SCCB总线时序类似于I2C总线时序,SIO0相当于SDA,SIO1相当于SCL。OV7620工作于从模式,在写寄存器的过程中先发送OV7620的ID地址,然后发送写数据的目的寄存器地址,最后发送要写入的数据。
图2 OV7620接口图
OV7620功能寄存器的地址为0x00~0x7C,通过设置相应的寄存器,可以使它工作于不同的模式。例如,设置OV7620为连续扫描、RGB原始数据16位输出方式,需要设置寄存器0x12、0x13、0x20、0x28分别为0x2D、0x01、0x02、0x20。另外,图像输出的关键问题是帧同步,VO7620传感器中VSYNC、HSYNC、HREF、PCLK分别表示垂直同步、水平同步、参考信号和像素输出同步,可以通过它们之间的配合使用,定位出每帧输出图像的起始位和结束位。
3 RAM时序控制模块
RAM控制器接口主要用于实现RAM的基本操作时序,如充电(刷新)时序、模式设置时序、读写时序等。读写命令由主控模块发出,由控制器具体执行。系统采用Hynix公司的HY57V561620F(L)T(P),可实现256 Mb的大容量数据存储。
时序控制器由一个有限状态机(FSM)实现,其状态转换图如图3所示。加电复位200 μs后,对RAM的所有块进行预充电,充电操作的引脚电平如表1所列。充电完成后经tRP刷新所有块,延迟tRFC后进入模式设置状态。在模式设置状态中,需要对RAS延迟、突发长度等进行设置,延迟tMRD后进入空闲状态,等待主控单元的读写命令。在空闲状态中,每隔64 ms需要对RAM中所有行刷新。在本设计中定时刷新模块设计成一个计数器,计数脉冲选自控制器本身的时钟。由于RAM要求两次刷新的最大时间间隔不超过64 ms,假设系统的时钟频率为100 MHz,则时钟周期约为0.01 μs,并且要在64 ms内要完成全部8 192行的刷新,所以最大计数应该为781次(64 ms/8192/0.01 μs)。系统采用700次的计数脉冲产生刷新请求。
图3 RAM控制器状态转换框图
表1 RAM控制器各状态引脚电平
RAM控制器的读写地址与读写控制信号均由主控单元产生,主控单元结构框图如图4所示。PLL用于产生RAM控制器和缓冲区的时钟(系统设计为100 MHz);CMD命令解析模块实现对上位机发送过来的命令解析并产生相应的控制信号,如CMOS传感器控制、RAM突发长度控制等。为了降低读写RAM的频率,系统设计了一个8×16位的FIFO。当8个像素的数据存入FIFO后,FIFO向RAM控制器发送写请求(W_req);与此同时,写地址发生器产生写地址,由RAM控制器产生写数据的时序。读写地址发生器是一个递增的计数器,每次的读写地址是上次的地址加BL(突发长度)。由于PCLK的最高频率可达9.2 MHz(640×480×30),而RAM的时钟频率是100 MHz,每次写入一个像素的数据需要5个时钟周期(考虑RAS延迟),这样写操作耗费整个时钟周期的50%;加入FIFO后,读写的突发长度均是8,可降低耗费的时钟周期至10%左右。
图4 主控模块RAM读写控制结构框图
4 EZUSB传输控制器
CY7C68013 是Cypress 公司的EZ USB FX2 系列芯片,引脚连接图如图5所示。该系列芯片集成了USB2.0 收发器、串行接口引擎(SIE)、带8.5 KB 片上RAM的增强型8501、16 KB 的RAM、4 KB的FIFO存储器、I/O 口、数据总线、地址总线和通用可编程接口(GPIF);共有3种接口模式——端口模式、从属FIFO 接口模式和GPIF 接口模式。在端口模式下, 所有I/O 引脚都可作为8051 的通用I/O 口, 作为最基本的数据传输模式, 其数据传输主要由固件程序完成, 需要CPU 的参与, 因此数据传输速率比较低。在从属FIFO 接口模式下, 外部逻辑或外部处理器可以直接与FX2 端点FIFO 相连。GPIF 接口模式使用PORTB 和PORTD 构成通向4个FX2 端点FIFO (EP2、EP4、EP6 和EP8)的16 位数据接口。GPIF 作为内部的主控制器与FIFO 直接相连, 并产生用户可编程的控制信号与外部接口进行通信。后两种模式数据的传输通过执行USB 本身的协议来完成, 微处理器不参与数据传输, 从而使数据的传输速率大大地提高。
图5 USB控制器引脚连接图
本方案采用从FIFO方式,由FPGA提供读写时钟,EZUSB的CPU不参与数据传输。其中端点FIFO相当于FPGA的外部RAM,数据的读写分别由读写控制器完成。如果数据从EZ_USB读入到FPGA中,首先要检测CON控制线的状态,若有数据要读,分配FIFOADR=00,使FIFO指针指向输出端点,使能SLOE使之数据输出,然后采样数据线上的数据,读得的数据送入命令解析模块解析;如果是数据从FPGA写入到EZ_USB中,则设置FIFOADR使之指向输入端点,拉低SLWR,将内部数据总线接到外部数据总线上,这样就完成了一次数据的写入。
除上述设计外还需要对EZ_USB模块本身进行设置,这部分属于固件开发部分。Cypress公司为固件开发提供了一个固件库和固件框架, 都是在集成开发环境下开发的, 固件库提供了一些常量、数据结构和函数来简化用户对芯片的使用。将代码在Keil C51环境中进行编译;编译通过后, 将固件代码下载到单片机中。这部分主要完成相关寄存器的设置和波形文件的编写。
结语
通过以上设计很好地解决了高速数据在采样、传输过程中的瓶颈,并以很短的时延真正实现了高速图像数据的采集。由于其低成本、易安装的特性,拥有广阔的市场前景,可以应用于电话会议、远程医疗和远程教学等需要高清图像传输的领域。本设计的创新点在于,它适应了不同的图像数据的应用需求,实现了多种速率的读写模式,可以是实时的突发长度读写和高速的全页读写。