×
FPGA/DSP > 图像处理 > 详情

基于FPGA和FLASH ROM的图像信号发生器设计

发布时间:2020-05-23 发布时间:
|
   

摘要:以XC2V1500-FPGA为硬件架构,设计了一种图像信号发生器,作为自适应光学系统波前处理机的信号源,为波前处理机的调试和算法验证提供支持。系统采用大容量的NAND型FLASH存储数据,存储容量为1 GB。图像数据通过USB总线预存入FLASH ROM,在FPGA控制逻辑作用下循环读出,并通过Camera Link接口输出。该Camera Link接口支持base,medium,full三种模式,输出像素时钟频率可以达到70 MHz。
关键词:FPGA;FLASH ROM;图像信号发生器;USB;Camera Link

0 引言
    在自适应光学系统中,哈特曼波前传感器检测到的波前信息通过高速CCD相机采集输出,然后由波前处理机完成斜率计算、波前复原运算和控制运算。自适应光学系统研制时,为了缩短研制周期,哈特曼传感器和波前处理机需要同步进行设计和研制,以便同步完成后进行系统集成调试。
    然而,通常都要等到哈特曼传感器研制完成,并且配合必要的光学系统之后,才能输出子光斑图像给波前处理机进行调试。这样给波前处理机的研制周期带来了很大压力。因此,如果可以建立一个模拟前端系统哈特曼传感器作为子光斑图像输出的信号源,则可以简化波前处理机对调试环境的要求、缩短其研制周期。本文以XC2V1500-FPGA和K9F1G16UOM-FLASH ROM为载体,设计了一种模拟哈特曼传感器中CCD相机图像输出的信号发生器。该系统不仅能为波前处理机的调试提供信号源,而且还可以为已经研制完成的波前处理机提供算法验证的支持。

1 系统原理及组成
    该图像信号发生器的基本原理如下:通过模拟产生CCD相机输出控制时序,将特定图像进行循环播放输出。目标图像数据可通过PC机进行加载,并且需要进行非易失性存储。这样在完成图像加载之后,系统一经启动就能够将图像数据按照要求进行输出。目标图像按要求均是灰度图像,可以是单帧、也可以是多帧,可以是从相机采集而来,也可以是通过Matlab仿真模拟得到的。选择载入不同的目标图像序列,则系统可以完成不同的需求任务。
    系统组成如图1所示,主要由主控模块、USB接口模块、数据存储模块和Camera Link接口模块组成。


    主控模块由一片XC2V1500-FPGA来实现。CY7C68013A芯片组成USB接口模块,实现PC机与系统的通信功能。8片并行K9F1G16UOM-FLASHROM芯片组成数据存储模块,可提供1 GB的存储空间、良好的读写速度。对于Camera Link接口模块,采用3片DS90CR287、1片DS90LV019和1片DS90LV048A来实现,可以支持Carnera Link接口的初级配置(Base)、中级配置(Medium)和高级配置(Full)。Camera Link接口是一种应用最广泛的高帧频相机接口,具有差分传输、传输速率高的特点。
    系统的任务可以分为两个过程:首先PC机通过USB总线和FPGA将目标图像序列写入FLASH;然后由于FLASH是一种非易失存储器,接下来系统一旦启动后FPGA就能够模拟产生CCD相机时序、将FLASH中的数据进行循环输出。这两个过程的实现可加载不同的FPGA程序来完成。
[page]

 

    2 系统实现
2.1 USB接口模块
    USB接口具有传输速度快、即插即用等优点,所以使用USB来实现PC机与系统的通信。CY7C68013A作为USB 2.0控制器,有3种接口工作模式:Ports,Slave FIFO和GPIF。根据系统构成和实际要求,选用Slave FIFO模式的数据传输方案。具体的硬件连接如图2所示。


    CY7C68013A通过固件编程来配置具体的功能。应用程序通过USB驱动程序建立与USB外部设备的联系。本文采用了Cypress公司提供的通用驱动CyUsb.sys,该驱动程序完全满足本系统设计的要求。应用程序可以通过两种方式来访问CyUsb.sys:
    (1)使用Windows API如SetupDiXxxx和Deviceio Control;
    (2)使用Cypress公司提供的CyAPI.lib。
    本文采用CyAPI.lib来访问USB驱动,CyAPI.lib提供了简单高效的与Cyusb.sys通信的方法,方便掌握、可有效缩短USB设备的开发周期。
    在完成图像数据写入功能时,FPGA接收到图像数据写入的命令后,使faddr地址指向用于下传数据的端点FIFO,然后开始获取来自USB控制器的数据,FPGA内部USB通信模块工作情况如图3所示。IFCLK是由FPGA提供的40MHz时钟,CY7C68013A的端点FIFO被配置为同步工作。


 

    2.2 FLASH ROM无效块管理
    选取 SAMSUNG 公司的 NAND 型的K9F1G16UOM-FLASH作为存储芯片,单片容量为1 Gb、数据宽度为16 b。大容量的FLASH器件一般都是按块(block)管理其存储空间。FLASH芯片可能有包含一个或多个无效位的无效块,这在NAND型FLASH中是不可避免的。无效块出现的几率很小,但影响很大。如果对FLASH中的无效块进行操作,无效块会在数据记录的过程中造成数据的丢失和误码,影响数据的有效性和完整性。由于无效块和有效块相互隔离,无效块并不会影响有效块的操作,因此只要在数据存储前将FLASH中的无效块剔除,就可有效避免数据的丢失和误码。
    FLASH在出厂时会对无效块进行检查,并将信息标注在FLASH每一块的第一页和第二页的第1 024个字,0xFFFF表示块有效。非0xFFFF则表示无效块。为避免破坏这些标注信息,在对FLASH进行任何擦除或写入操作前,要首先建立无效块信息表。SAMSUNG公司保证其FLASH的第一块一定是有效块,并且在对其擦写1 000次以内不会出任何错。所以本文使用该块来保存整片FLASH的无效块信息。FPGA遍历访问FLASH中的每个块的第一页和第二页,判断该块是否满足有效块的要求,若不满足则将其块地址缓存到FPGA的RAM中;接下来,将FLASH的无效块数量和无效块地址存入该片FLASH的第一块的第一页内。在FLASH的使用过程中,仍然有可能产生新的无效块,当出现这种情况时,则需要更新无效块信息表。无效块信息表用来供读写地址产生器查询时使用,这样就可以避开坏块的影响。
2.3 数据写入管理
    图像数据写入时,FPGA接收来自USB控制器的数据,并产生控制时序将数据写入FLASH。由于高帧频相机一般是多通道输出,所以在模拟这类相机的时候要注意这个因素。对于某一幅目标图像,图像数据写入首先是应用程序获取图像数据;然后将各个通道对应位置的像素数据按次序调整在一起;接着通过USB将数据传输至FPGA,FPGA将数据截断成2 KB大小并依次将各分段数据块写入8片FLASH中,数据分流如图4所示。图像数据按通道进行调整可以使得系统轻松地实现多通道输出。对数据的分流处理,使得系统的8片FLASH在读出时可以真正实现并行读取数据。


    FLASH的一页(page)的大小为2 KB,也是它的基本渎写单元。要想连续写入2 KB的数据,需要将访问FLASH的页地址都设为00H。当FPGA需要向某一片FLASH写入数据时,首先要查看该片FLASH的FPGA写入管理模块是否处于ready状态;若处于busy状态,则应用程序进入传输等待,当写入管理进入ready状态后,则应用程序发送数据,一共2 KB数据缓冲到FLASH在FPGA中对应的RAM;数据缓冲完成之后,该FLASH的写入管理模块进入busy状态并开始将RAM中的数据写入FLASH ROM的某一页(page),同时FPGA转向对下一片FLASH进行传输访问。
2.4 数据读出管理
    数据读取输出是指FPGA模拟CCD相机输出时序,将FLASH中的数据通过Camera Link接口进行循环输出。所选的FLASH的单片最大读出速率可达25 MB/s,由于8片FLASH可以并行读出,所以整个系统的数据读出率可以达到200 MB/s。这样有利于模拟出较高帧频的CCD相机输出。当系统进行图像数据渎取输出时,FPGA中设置了FIFO来缓冲数据。Camera Link输出管理模块产生相机时序,将FIFO中的数据按要求送到Cam era Link接口。对于从FLASH向FIFO转移数据,首先将各FLASH中的2 KB数据被读入其在FPGA中对应的RAM中;然后控制各RAM中的数据被按顺序转移至FIFO中,控制器通过FIFO的数据深度来判断是否需要继续读入数据,当判断FIFO中的数据快满时暂停读取,这时由于数据继续被读出,随着FIFO中的数据减少到一定程度时,启动将RAM中的数据继续读入FIFO;一旦一个RAM中的数据被转移,则FLASH读取管理模块继续将该FLASH中的后续数据写入该RAM。


    在加载某种8位数据宽度、双通道输出的目标图像时,使用Chipscope得到的Camera Link信号如图5所示。其中,strobe为时钟信号,dval,lval,fval分别是数据有效、行有效、帧有效信号。观测结果说明输出的数据与加载的数据保持一致,输出控制时序也符合要求。
为了模拟出不同类型的CCD相机,只需要修改FPGA程序中设定的strobe时钟频率、Line blanking时间、Frame blanking时间等必要参数即可。[page]

 

    3 实验结果与分析
    系统实物图如图6所示。


    为了检测该信号发生器的性能,将其输出接入图像采集卡进行验证。经过试验验证,FLASH ROM中存储的图像数据与从PC机载入的数据完全一致、控制时序符合设计要求。通过改变Strobe的频率大小,验证得到Camera Link输出的像素时钟频率最大可以达到70 MHz。对于尺寸为128×128、位宽为8 b的目标图像,在采用40 MHz的Strobe时钟进行单通道输出时,帧频可以达到1 876 f/s。对于尺寸为512×512、位宽为8 b的目标图像,当Strobe时钟为70 MHz,单通道输出时,帧频可以达到252 f/s;双通道输出时,帧频可以达到476 f/s。该信号发生器可以模拟目前大部分波前处理机所需的信号源。在进行单通道或双通道输出时,系统可以充分利用Camera Link接口的输出能力。但是当进行更多通道的输出时,由于受限于FLASH的读出速率,该系统不能充分应用Camera Link接口的输出能力。对于这个缺陷,在对系统进行改进时可以通过使用FLASH ROM和高速大容量RAM共同组成数据存储模块来解决。

4 结论
    根据本文介绍的设计方案,采用FPGA技术设计的图像信号发生器结构简单,实现方便,易于修改。FLASH ROM提供了较高的数据读出速率,支持系统能够模拟出较高帧频的CCD相机输出。经过试验验证,系统工作稳定,达到了设计要求。



『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
FPGA的高动态范围图像信号处理