针对FPGA优化的高分辨率时间数字转换阵列电路
数字时间转换电路TDC(Time-to-Digital Converter)是精密时间测量中的核心模块,在粒子物理、激光测距、遥感成像等方面有非常广泛的应用。
时间数字转换电路起源于20世纪60年代的核技术与航空航天领域,文献[1]首次提出数字时间测量的概念。时间间隔测量的方法可以大致分为模拟测量与数字测量两大类。模拟测量方法,包括时间幅度转换TAC(Time-to-Amplitude Converter)法[2]与模拟时间放大法,都是通过电容充放电的特性把时间量转换为可以测量的电压量或者电荷量,从而达到测量时间的目的。但是在多数模拟测量方法中还需要进行模数(AD)转换来进行数据的后续处理。此种方法通常由印制电路板上的不同分立元件与芯片构成,因此功耗面积较大,依赖环境温度且易受电磁干扰,电路调试也相对比较困难[3]。随着大规模集成电路技术的成熟,单个芯片集成的晶体管数量成倍增长,计算能力与处理能力也大大提高。文献[5]首次采用CMOS工艺设计出了一种基于环形延迟线的全数字时间数字转换器,此外还有如延迟锁定环[4]DLL(Delay Lock Loop)方法、高速计数器[7]方法、时间延迟线[8-13]方法等,都是利用器件本身的延迟来达到时间测量的目的。
近年来,由于FPGA技术的迅猛发展,在低成本低设计周期方面,FPGA已经可以部分取代ASIC。它所特有的可重用性不仅增加了系统的灵活性、适应性,也大大减小了系统的规模,极具开发和研究的潜力。因此,针对FPGA进行优化的TDC设计方案成为研究人员关注的焦点。文献[4]针对FPGA中延迟的一致性问题,提出了采用类似环形延时门设计的粗计数与细计数两部分电路来完成时间数字转换,达到了3.3 ns的时钟分辨率。文献[6]通过对文献[5]的方法进行改进,在CPLD上实现了时钟分辨率达3.5 ns的TDC。本文针对解决FPGA延迟特性不确定的问题,提出了一种采用时钟状态译码的方法进行时间数字转换的阵列电路CDTDC(Clock Decoder based TDC),阵列规模为16×16。在Altera公司的Cyclone II EP2C15上进行仿真测试,工作频率50 MHz,时钟分辨率可达1.73 ns。
1 CDTDC阵列的工作原理
1.1 CDTDC计数模块
由于FPGA的硬件结构限制,计数器在较高频率下的工作不稳定,在状态转换过程中易产生毛刺、跳码,影响正确的系统输出,时间分辨率很难提高[14]。为了避免此类情况发生,加入结构简单、占用资源少的细计数功能模块来提高时间分辨率。本设计中采用二进制计数器与时钟状态译码分别完成粗计数与细计数,从而对时间间隔进行测量。
CDTDC阵列中单元电路的原理框图如图1所示,每个单元电路具有独立的时间间隔测量功能。为了减小电路规模,粗计数模块采用10 bit线性反馈移位寄存器(LFSR)实现。LFSR对计数时钟进行计数,后续再对LFSR进行状态译码即可得到所计的时钟数。计数时钟来自片上锁相环(PLL)对外部时钟的倍频。当起始信号达到时,接入系统时钟开始计数;当停止信号到达时,计数/读出时钟使能信号变为逻辑低,关闭连接LFSR时钟输入端的与门,达到停止计数的功能。计数时钟的工作频率为150 MHz,因而粗计数模块可以达到的时间测量范围为6.8 μs。
细计数模块由上升沿触发的锁存器1、锁存器2、计数时钟与移相时钟组成。为了提高时钟分辨率,将计数时钟移相90°,通过锁存器锁存两个时钟在停止信号到达时的逻辑电平作为状态码,进而提高时间分辨率。具体过程是:当停止信号达到时,连接锁存器时钟输入端的与门产生电平跳变,在上升沿把计数时钟与移相时钟的逻辑电平锁存进锁存器中,时序图如图2所示。锁存器1保持了停止信号到达时计数时钟的时钟状态,从而可将时钟分辨率提高至时钟周期的1/2;锁存器2保持了移相时钟在停止信号达到时的状态,从而将时钟分辨率提高至时钟周期的1/4。故在计数时钟为150 MHz的情况下,时间分辨率的理论值为1.667 ns。
1.2 CDTDC读出模块
当对记录的时间进行数据读出时,需要输入读出时钟。时钟切换模块在系统进入读出状态时对移位寄存器的输入时钟进行切换,完成数据的正确读出。为了节约逻辑资源,采用组合逻辑电路对时钟信号进行切换控制。
如图1所示,当系统工作在读出模式时,计数/读出模式切换信号变为逻辑低,关闭输入计数时钟的与门,同时打开输入读出时钟的或门,在计数/读出使能信号允许的条件下,输入读出时钟至LFSR的时钟端口。多功能移位寄存器的时钟切换同理。
在计数/读出模式切换信号允许的条件下,通过切换多路复用器断开LFSR的反馈输入端,将多功能移位寄存器的输出输入LFSR中。多功能移位寄存器会自动在并入串出与串入串出模式下进行切换,首先将时钟状态,即锁存器的输出移入,然后输入前一个单元电路的输出,如此每行相邻的单元电路串联直至数据输出端。图3为阵列电路结构图,对于16×16的阵列,每行一个数据读出链。每个单元电路的读出数据为12 bit,故每行信号的数据量为192 bit。如果数据读出时钟为10 MHz,则读出时间为1/10 MHz×192=19.2 μs。如果阵列规模增大,则可提高读出时钟频率。
1.3 CDTDC控制模块
鉴于系统需要自动在计数与读出两种模式下进行切换,并需复位相应寄存器,本设计采用状态机来控制CDTDC的模式切换。控制模块状态机示意图如图4所示。
系统上电复位后,处于复位(10)状态。在此状态下,进行移位寄存器的清零,同时复位所有控制信号至初始状态。复位状态持续4个时钟周期,状态跳转到计数状态。在计数(00)状态下,计数/读出模式切换信号禁止,系统工作在计数模式。接入计数时钟,LFSR开始计数。同时,为使系统具有可配置性,在计数状态中加入一个10 bit计数器来配置系统可以记录的最大时间间隔。若屏蔽此计数器,则此状态持续时间为系统可以达到的最大时间测量范围,即6.8 μs。实际应用中可根据用户实际需要对计数器进行配置来限制计数状态的持续时间。计数状态结束后跳转到读出(01)状态,计数/读出模式切换信号允许,启动数据读出模块,完成记录时间的读出。如前所述,单行数据链需要的读出时间约为20 μs。此后系统回到复位状态准备下次计数。
- 基于FPGA的高精度时间数字转换电路的设计与实现(06-05)
- 锁相环控制及初始化简析(08-27)
- 单片机最小系统组成及电源/复位/振荡电路解析(01-03)
- FPGA系统设计原则和技巧之:FPGA系统设计的3种常用IP模块(06-05)
- 基于VHDL的感应加热电源数字移相触发器设计(06-05)
- 基于DSP的软件锁相环的实现(02-06)