CMOS图像敏感器是近年来兴起的一类固态图像传感器。CMOS图像敏感器具有低成本、低功耗(是CCD耗的1/1000~1/100)、简单的数字接口、随机访问、运行简易(单一的CMOS兼容电池供给)、高速率(可大于1000帧/秒)、体积小以及通过片上信号处理电路可以实现智能处理功能等特点而得到广泛应用。有些CMOS图像敏感器具有标准的I2C总线接口,可方便应用到系统中。有些没有这类总线接口电路的专用CMOS图像敏感器需要增加外部驱动电路。由于CMOS敏感器的驱动信号绝大部分是数字信号,因此可采用FPCA通过VerilogHDL语言编程产生驱动时序信号。Verilog HDL语言是IEEE标准的用于逻辑设计的硬件描述语言,具有广泛的逻辑综合工具支持,简洁易于理解。本文就STAR250这款CMOS图像敏感器,给出使用Verilog HDL语言设计的逻辑驱动电路和仿真结果。
1 CMOS图像敏感器STAR250
STAR250是一款专为卫星天文导航的星跟踪器(tracker)设计的CMOS图像敏感器。由于太空中含有大量辐射,芯片中加入了抗辐射电路以提高空间应用的可靠性。STAR250的技术指标如下:
(1)0.5μm CMOS工艺;
(2)512x512分辨率,像素大小25μmx25μm;
(3)每个像素4个光敏二极管,提高MTF(幅值转换功能)和减少PRNU(非均一化光响应);
(4)抗辐射设计;
(5)片上双采样电路抵消FPN(固定模式噪声);
(6)电子快门:
(7)最大30帧/秒;
(8)可以取子窗口;
(9)片上10位ADC;
(10)陶瓷JLCC-84针封装。
STAR250是有源像素的线扫描CMOS图像敏感器。所有像素的输出都连接到列总线,并且在列总线上每例都有一个列放大器。使用二次采样技术,控制列放大器可以从读出信号中减去光敏单元上一次采集残留的电荷。片上ADC独立于敏感器,可以使用也可以通过软件关闭,而用外部的ADC。STAR250为了应用方便有多种读出数据的方法(窗口方式、电子快门等),不同的读出方式有不同的时序要求。
传统的计算机或打印机的图像座标系定义左上角为原点(0,0),在STAR250中定义右上角为原点(0,0),如图1。这样敏感器输出数字信号后能够方便地转换为计算机格式的图像,方便后续的处理。窗口扫描方式是从上向下、从左向右一个像素一个像素地扫描。
2 STAR250时序信号
STAR250通过两个步骤完成图像的采集。第一步是逐行扫描RESET像素。行内像素RESET后,本行自上一次RESET或读出后积累的所有光敏电荷被排空。从RESET行像素开始新的曝光周期。第二步是本次曝光周期数据读出。以电压的形式读出,然后经过ADC转换为数字量。由于电荷采用排出式读取,CMOS图像敏感器的像素读出不可恢复,读取过程也相当于RESET像素,所以CMOS敏感器行RESET的速度与读取速度一样。
STAR250通过三个指针标定整个图像地址:Yrd当前扫描行,Yrst当前RESET行,Yrd当前读出像素。这三个指针都有相应的移位寄存器,通过设置这三个寄存器的初始值可以调整采集窗口的大小和位置。图像采集的流程图如图2。每秒钟的图像帧数通过设置Yrd和Yrst进行控制,曝光周期也由这两个量控制。这个时间量可以用空间距离(行距)表示,定义DelayLines=︱Yrst-Yrd+︱。由于每一行的RESET和读取时间是固定的,所以DelayLines如果固定那么帧率也就固定了。将DelayLines转换成像素的有效积分时间(曝光时间),是将Delay-Lines乘以读取一行像素所用的时间。读取一行像素所用的时间由四部分组成:(1)行中有效像素的个数(由行的长度定义);(2)读取一个像素所用的时间;(3)像素累积电荷转换为数字量的时间;(4)选择新一行所用的时间。例如在主时钟频率为12MHz时,像素的输出频率为主时钟的二分频6MHz,因此一行像素所需要的时间为512×1/6MHz=85.3μs。再加上换行所需时间,一行像素的读取时间大约90μs左右。因此可以根据这个时间设置DelayLines来控制曝光时间。
3 Verilog HDL驱动时序设计
经过以上分析可知,CMOS图像敏感器采集时可以分为RESET过程和采集过程。时间上两个过程是独立的,如图3。但在FPGA内部处理这两部分的电路物理上是同时存在,因此必须将相应的信号通过置标志位的方法置为有效或无效。
STAR250所需数字驱动信号共28个,其中SELECT信号在正常使用时,直接接PCB板的Vcc。因此需FPGA控制的驱动信号有27个。根据采集过程可以把信号划分为列放大器信号,包括CAL、Reset、Lr、S、R、LdY。这6个信号在每一行的初始化部分都要用到,因此可以编写到一个模块(ColControl)中;模式信号(PaternCtrl)模块用来设置CMOS敏感器的工作模式及初始地址,包括G0、G1、Bitlnvert和Addr[8:0]共12个信号。其中G0、G1用来设计输出的放大倍数,BitInvert用于将输出取反,Addr[8:0]则设置采集的起始地址;行读出信号控制模块(YlCtrl)产生行读出地址的同步信号SyncYl及时钟驱动信号ClkYl;行RESET信号控制模块(YrCtrl)产生行RE-SET地址的同步信号SyncYr及时钟驱动信号ClkYr;像素控制模块(RowCtrl)产生行内像素初始地址的装载信号LdX及同步信号SyncX;行内时钟信号模块(RowClk)产生列内像素的时钟驱动CLKX、ADC驱动时钟信号CLkAdc及输出三态控制信号TriAdc。系统的输入信号为主时钟CLK、EosX行内像素结尾信号、EosYl帧内行结尾信号、EosYr帧内RESET行结尾信号、芯片的RESET信号。经过这样划分后的模块化Verilog程序就比较易写了。经过顶层模块综合生成的网表如图4。布线仿真时序图如图5,其中时钟信号过于密集变成黑色带状,同样输出时钟CIkX及ClkAdc也是黑色带状。在时序上ClkX与ClkAdc是反相关系,在TriAdc保持低电平时输出有效。所设计的驱动信号仿真波形与理论波形十分符合。这样就完成了STAR250的时序驱动电路设计。
使用Verilog语言设计时序逻辑具有很高的效率。结合CMOS敏感器特性可以方便地开发出驱动时序电路。但必须对CMOS图像敏感器的信号分析准确,正确分离那些独立的信号和共用的信号,用时序逻辑设计驱动信号,用组合逻辑实现不同采集过程时间上的分离。布线延迟是必须考虑的,采用流水线技术可以预测延迟,保证信号的正确性。虽然文中并未给出像素ADC输出的存储电路,但实际上直接使用TriAdc信号作为SRAM的片选,ClaAdc的低电平作为写信号,SRAM的地址在ClkAdc的上升沿增加、下降沿写入。这样就可以完成图像数据的存储。以上Verilog程序在FLEXl0kl0上布线实现。经示波器观察逻辑正确,CMOS敏感器正常工作。