基于FPGA的高速图像采集系统设计
时间:03-30
来源:互联网
点击:
引言
在低速的数据采集系统中,往往采用单片机或者 DSP进行控制;而对于图像采集这种高速数据采集的场合,这种方案就不能满足需要。因此这种方案极大浪费了单片机或DSP的端口资源且灵活性差;若改用串口方式收集数据,则一方面降低了数据采集的速度,另一方面极大地耗费CPU的资源。本系统采用FPGA作为数据采集的主控单元,全部控制逻辑由硬件完成,速度快、成本低、灵活性强。为了增加缓冲功能,系统在FPGA外扩展了256Mb的RAM,不仅增大了缓冲区容量,而且极大地降低了读写频率,有效地减轻了上位机CPU的负担。在图像数据接口中,比较常见的是VGA、PCI—Express,而这些接口扩展性差、成本高。本系统采用高速的USB接口作为与上位机通信的端口,速度快、易安装、灵活性强。
1 系统框图
系统框图如图1所示。FPGA控制单元采用 A1tera公司Cyclone II系列的EP2C5F256C6,主要由4个部分组成——主控模块、CMOS传感器接口、RAM控制器以及EZ—USB接口控制器。传感器接口负责完成 SCCB时序控制,RAM控制器用于实现RAM读写与刷新操作的时序,USB接口模块完成主控模块与EZ—USB之间的数据读写;而主控模块负责对从EZ —USB部分接收过来的上位机命令进行解析,解析完命令后产生相应的信号控制各个对应模块,如CMOS传感器传输的图像格式、RAM的读写方式、突发长度等。
2 OV7620模块设计
图像传感器采用OV7620,接口图如图2所示。该传感器功能强大,提供多种数据格式的输出,自动消除白噪声,白平衡、色彩饱和度、色调控制、窗口大小等均可通过内部的SCCB控制线进行设置。OV7620属于CMOS彩色图像传感器。它支持连续和隔行两种扫描方式,VGA与QVGA两种图像格式;最高像素为664×492,帧速率为30fps;数据格式包括YUV、YCrCb、RGB三种。0V7620支持SCCB设置模式和自动加载默认设置模式,其选择由SCCB控制。本系统只需要支持SCCB模式,因此在设计的时候将SBB接地。上电后FP—GA通过SCCB总线对OV7620进行设置,系统也可接受上位机发过来命令,设置其工作模式。SCCB总线时序类似于I2C总线时序,SIO一O相当于SDA,SIO一1相当于SCL。OV7620工作于从模式,在写寄存器的过程中先发送OV7620的ID地址,然后发送写数据的目的寄存器地址,最后发送要写入的数据。
OV7620功能寄存器的地址为0x00~0x7C,通过设置相应的寄存器,可以使它工作于不同的模式。例如,设置OV7620为连续扫描、RGB原始数据16位输出方式,需要设置寄存器0x12、Oxl3、Ox20、Ox28分别为OX2D、0x01、Ox02、0x20。另外,图像输出的关键问题是帧同步,VO7620传感器中VSYNc、HSYNC、HREF、PCLK分别表示垂直同步、水平同步、参考信号和像素输出同步,可以通过它们之间的配合使用,定位出每帧输出图像的起始位和结束位。
3 RAM时序控制模块
RAM控制器接口主要用于实现RAM的基本操作时序,如充电(刷新)时序、模式设置时序、读写时序等。读写命令由主控模块发出,由控制器具体执行。系统采用Hy—nix公司的HY57V561620F(L)T(P),可实现256 Mb的大容量数据存储。
时序控制器由一个有限状态机(FSM)实现,其状态转换图如图3所示。加电复位200μs后,对RAM的所有块进行预充电,充电操作的引脚电平如表1所列。充电完成后经tRP刷新所有块,延迟tRFC后进入模式设置状态。在模式设置状态中,需要对RAS延迟、突发长度等进行设置,延迟tMRD后进入空闲状态,等待主控单元的读写命令。在空闲状态中,每隔64 ms需要对RAM中所有行刷新。在本设计中定时刷新模块设计成一个计数器,计数脉冲选自控制器本身的时钟。由于RAM要求两次刷新的最大时间间隔不超过 64 ms,假设系统的时钟频率为1O0MHz,则时钟周期约为0.01μs,并且要在64 ms内要完成全部8 192行的刷新,所以最大计数应该为781次(64 ms/8192/0.01μs)。系统采用700次的计数脉冲产生刷新请求。
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%;加入FIF0后,读写的突发长度均是8,可降低耗费的时钟周期至10%左右。
在低速的数据采集系统中,往往采用单片机或者 DSP进行控制;而对于图像采集这种高速数据采集的场合,这种方案就不能满足需要。因此这种方案极大浪费了单片机或DSP的端口资源且灵活性差;若改用串口方式收集数据,则一方面降低了数据采集的速度,另一方面极大地耗费CPU的资源。本系统采用FPGA作为数据采集的主控单元,全部控制逻辑由硬件完成,速度快、成本低、灵活性强。为了增加缓冲功能,系统在FPGA外扩展了256Mb的RAM,不仅增大了缓冲区容量,而且极大地降低了读写频率,有效地减轻了上位机CPU的负担。在图像数据接口中,比较常见的是VGA、PCI—Express,而这些接口扩展性差、成本高。本系统采用高速的USB接口作为与上位机通信的端口,速度快、易安装、灵活性强。
1 系统框图
系统框图如图1所示。FPGA控制单元采用 A1tera公司Cyclone II系列的EP2C5F256C6,主要由4个部分组成——主控模块、CMOS传感器接口、RAM控制器以及EZ—USB接口控制器。传感器接口负责完成 SCCB时序控制,RAM控制器用于实现RAM读写与刷新操作的时序,USB接口模块完成主控模块与EZ—USB之间的数据读写;而主控模块负责对从EZ —USB部分接收过来的上位机命令进行解析,解析完命令后产生相应的信号控制各个对应模块,如CMOS传感器传输的图像格式、RAM的读写方式、突发长度等。
2 OV7620模块设计
图像传感器采用OV7620,接口图如图2所示。该传感器功能强大,提供多种数据格式的输出,自动消除白噪声,白平衡、色彩饱和度、色调控制、窗口大小等均可通过内部的SCCB控制线进行设置。OV7620属于CMOS彩色图像传感器。它支持连续和隔行两种扫描方式,VGA与QVGA两种图像格式;最高像素为664×492,帧速率为30fps;数据格式包括YUV、YCrCb、RGB三种。0V7620支持SCCB设置模式和自动加载默认设置模式,其选择由SCCB控制。本系统只需要支持SCCB模式,因此在设计的时候将SBB接地。上电后FP—GA通过SCCB总线对OV7620进行设置,系统也可接受上位机发过来命令,设置其工作模式。SCCB总线时序类似于I2C总线时序,SIO一O相当于SDA,SIO一1相当于SCL。OV7620工作于从模式,在写寄存器的过程中先发送OV7620的ID地址,然后发送写数据的目的寄存器地址,最后发送要写入的数据。
OV7620功能寄存器的地址为0x00~0x7C,通过设置相应的寄存器,可以使它工作于不同的模式。例如,设置OV7620为连续扫描、RGB原始数据16位输出方式,需要设置寄存器0x12、Oxl3、Ox20、Ox28分别为OX2D、0x01、Ox02、0x20。另外,图像输出的关键问题是帧同步,VO7620传感器中VSYNc、HSYNC、HREF、PCLK分别表示垂直同步、水平同步、参考信号和像素输出同步,可以通过它们之间的配合使用,定位出每帧输出图像的起始位和结束位。
3 RAM时序控制模块
RAM控制器接口主要用于实现RAM的基本操作时序,如充电(刷新)时序、模式设置时序、读写时序等。读写命令由主控模块发出,由控制器具体执行。系统采用Hy—nix公司的HY57V561620F(L)T(P),可实现256 Mb的大容量数据存储。
时序控制器由一个有限状态机(FSM)实现,其状态转换图如图3所示。加电复位200μs后,对RAM的所有块进行预充电,充电操作的引脚电平如表1所列。充电完成后经tRP刷新所有块,延迟tRFC后进入模式设置状态。在模式设置状态中,需要对RAS延迟、突发长度等进行设置,延迟tMRD后进入空闲状态,等待主控单元的读写命令。在空闲状态中,每隔64 ms需要对RAM中所有行刷新。在本设计中定时刷新模块设计成一个计数器,计数脉冲选自控制器本身的时钟。由于RAM要求两次刷新的最大时间间隔不超过 64 ms,假设系统的时钟频率为1O0MHz,则时钟周期约为0.01μs,并且要在64 ms内要完成全部8 192行的刷新,所以最大计数应该为781次(64 ms/8192/0.01μs)。系统采用700次的计数脉冲产生刷新请求。
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%;加入FIF0后,读写的突发长度均是8,可降低耗费的时钟周期至10%左右。
单片机 DSP FPGA USB CMOS 传感器 总线 Cypress 收发器 Keil Verilog 嵌入式 相关文章:
- 采用EEPROM对大容量FPGA芯片数据实现串行加载(03-18)
- 周立功:如何兼顾学习ARM与FPGA(05-23)
- 初学者如何学习FPGA(08-06)
- 为何、如何学习FPGA(05-23)
- FPGA作为协处理器在实时系统中的应用(04-08)
- 我的FPGA学习历程(05-23)