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].天津:天津大学出版社, 20051-5 [2]常丹华,于洋.基于VHDL的CCD驱动时序设计[J].今日电子,2003,10,P27-29 [3]蔡泽彬,蒋跃.基于CPLD技术的线阵CCD驱动电路设计[J].空军雷达学院学报,2004,18(1),P50-52 [4]冯江,王晓燕等.IC设计中的VHDL语言应用研究[J].微计算机信息,2006年一二期,P250 |