图3 IL-E2 TDI-CCD详细驱动时序
图2中,CSS12的驱动信号为-7V,CSS6、 CSS24、 CSS48均与CI4相同,表明此时选中的积分级数为12。
3.2 驱动时序
为了使TDI-CCD完成正常的扫描成像工作,即电荷的积分、转移和读出等,施加在TDI-CCD各个引脚上的时钟脉冲应有着严格的时间关系。
IL-E2 TDI-CCD的像元移位读出时钟为CR1,CR2。CIx(x=1,2,3,4)、TCK、OS分别为成像区时钟、行转移时钟、输出信号。驱动时序分析如下:将各驱动时钟脉冲加到TDI-CCD的相应引脚上,在行转移时钟脉冲TCK为高电平期间,像元感光产生的信号电荷在成像区时钟脉冲CI1、CI2、CI3、CI4的共同作用下,沿着TDI方向积累并转移到输出移位寄存器中。当TCK为低电平时,TDI-CCD在像元移位读出时钟脉冲CR1、CR2的作用下,输出复位时钟脉冲RST每来一个有效的高电平时,TDI-CCD的输出信号OS 端输出一个信号,直到信号输出完为止;与此同时,像元感光(曝光)产生信号电荷。之后TCK由低电平变为高电平,CI1、CI2、CI3、CI4也相应的变为有效电平,开始一个新的周期。
驱动时序如图2和图3所示:临近的CI高电平交叠时间t1不小于1.0us,CI高电平持续时间t3不小于3.0us,TCK的上升沿与CI3的下降沿之间的t4最小为0,TCK的下降沿与CI4的上升沿之间的t5最小为0,CI4的上升沿与CR1的下降沿之间的t6最小为100ns, TCK的下降沿与CR1的下降沿之间的t7最小为100ns,CR1与RST的上升沿和下降沿之间的t8、t9最小为0,RST高电平持续时间t10最小为15ns, CI1的上升沿与CI3的下降沿之间的t11最小为100ns。只有严格的遵循此时序关系,设计出的时序电路才能稳定、可靠的工作。
4 时序电路设计与时序仿真
IL-E2 TDI-CCD的像元数有每行512,1024和2048三种,本文以项目使用的像元数为2048的为例设计时序电路。2048为有效像元数,每行有128个哑像元,设计中使每行输出2288个信号电平,即每个行周期内有2288个CR1、CR2、RST驱动脉冲。除了2048+128=2176个像元驱动脉冲以外,其余为空驱动脉冲。空驱动数越多,CCD曝光积分时间越长,灵敏度提高,但过长的曝光积分时间会使CCD输出饱和失真,故空驱动数目不易过多。
行积分时间和像元移位读出时钟频率是CCD时序电路的设计依据。在工程应用中,我们根据技术指标要求,算出行积分时间即行周期(T)为0.25ms,以此确定合适的系统主时钟。
设计时,先产生CR信号,然后以此为基础,根据周期相位关系产生其它驱动时序信号。
驱动时序用超高速集成电路硬件描述语言(VHDL)编写【3】,程序主要包括:
(1)调用所需的库函数和程序包;
(2)定义输入和输出端口;
(3)用计数器对输入的系统主时钟进行分频。
(4)驱动时序信号的产生和输出。部分源代码如下:
process(cr2_s)
begin
if cr2_s'event and cr2_s = '1' then
if cr_count_s &; 2288 + CONV_INTEGER(linecycle_s) then
cr_count_s <= cr_count_s + 1;
else cr_count_s <= 0;
end if;
end if;
end process;
process(sysclk,cr_count_s,cr1_s,cr2_s) ――产生CR信号
begin
if sysclk'event and sysclk = '1'then
if cr_count_s < 64 then
cr1 <= '0'; cr2 <= '1';
else
cr1 <= not cr1_s; cr2 <= not cr2_s;
end if;
end if;
end process;
process(sysclk,sys_count_s) ――产生输出复位信号RST
begin
if sysclk'event and sysclk = '1' then
case sys_count_s is
when 1 => rst_s <= '1';
when 2 => rst_s <= '1';
when others => rst_s <= '0';
end case;
end if;
end process;
process(cr_count_s,cr2_s) ――产生CI和TCK信号
begin
if cr2_s'event and cr2_s = '1' then
if cr_count_s < 16 then
ci1_s <= '1'; ci2_s <= '0'; tck_s <= '1';
elsif cr_count_s < 24 then
ci1_s <= '1'; ci2_s <= '1'; tck_s <= '1';
elsif cr_count_s < 40 then
ci1_s <= '0'; ci2_s <= '1'; tck_s <= '1';
else
ci1_s <= '0'; ci2_s <= '0'; tck_s <= '0';
end if;
end if;
end process;【4】
由XILINX公司的设计软件ISE6.2对XQVR300器件进行时序设计,通过时序仿真与工程应用验证了能完成上述所有功能。
5 结束语
本文的创新点是完成了对像元数为2048的IL-E2 TDI-CCD的驱动时序的VHDL编写和在可编程器件中的下载实现,时序仿真和硬件电路测试表明该时序电路能够较好地产生器件所需的时序脉冲;使用延迟量小的FPGA使得系统可以工作在百兆赫兹的高频段,可靠性和稳定性得到了很好的保证;程序可移植性强,可作为其它类型的CCD驱动时序设计的参考。
参考文献:
[1]王庆友.CCD应用技术[M].天津:天津大学出版社, 2005:P1-5
[2]常丹华,于洋.基于VHDL的CCD驱动时序设计[J].今日电子,2003,10,P27-29
[3]蔡泽彬,蒋跃.基于CPLD技术的线阵CCD驱动电路设计[J].空军雷达学院学报,2004,18(1),P50-52
[4]冯江,王晓燕等.IC设计中的VHDL语言应用研究[J].微计算机信息,2006年一二期,P250