1 引言
数字锁相环路已在数字通信、无线电电子学及电力系统自动化等领域中得到了极为广泛的应用。随着集成电路技术的发展,不仅能够制成频率较高的单片集成锁相环路,而且可以把整个系统集成到一个芯片上去。在基于FPGA的通信电路中,可以把全数字锁相环路作为一个功能模块嵌入FPGA中,构成片内锁相环。
锁相环是一个相位误差控制系统。它比较输入信号和振荡器输出信号之间的相位差,从而产生误差控制信号来调整振荡器的频率,以达到与输入信号同频同相。所谓全数字锁相环路(DPLL)就是环路部件全部数字化,采用数字鉴相器(DPD)、数字环路滤波器(DLF)、数控振荡器(DCO)构成的锁相环路,其组成框图见图1示。
当锁相环中的鉴相器与数控振荡器选定后,锁相环的性能很大程度依赖于数字环路滤波器的参数设置。
2 K计数器的参数设置
74297中的环路滤波器采用了K计数器。其功能就是对相位误差序列计数即滤波,并输出相应的进位脉冲或是借位脉冲,来调整I/D数控振荡器输出信号的相位(或频率),从而实现相位控制和锁定。
K计数器中K值的选取需要由四根控制线来进行控制,模值是2的N次幂。在锁相环路同步的状态下,鉴相器既没有超前脉冲也没有滞后脉冲输出,所以K计数器通常是没有输出的;这就大大减少了由噪声引起的对锁相环路的误控作用。也就是说,K计数器作为滤波器,有效地滤除了噪声对环路的干扰作用。
显然,设计中适当选取K值是很重要的。K值取得大,对抑止噪声有利(因为K值大,计数器对少量的噪声干扰不可能计满,所以不会有进位或借位脉冲输出),但这样捕捉带变小,而且加大了环路进入锁定状态的时间。反之,K值取得小,可以加速环路的入锁,但K计数器会频繁地产生进位或借位脉冲,从而导致了相位抖动,相应地对噪声的抑制能力也随之降低。
为了平衡锁定时间与相位抖动之间的矛盾,理想的情况是当数字锁相环处于失步状态时,降低K计数器的设置,反之加大其设置。实现的前提是检测锁相环的工作状态。
3 工作状态检测电路
图2为锁相环状态检测电路,由触发器与单稳态振荡器构成,fin为输入的参考时钟,fout为锁相环振荡器输出的时钟移相900。fout对fin的抽样送入单稳态振荡器。
在锁定状态如图3,fout与fin具有稳定的相位关系, fout对fin抽样应全部为0或1,这样不会激发振荡器振荡,从而lock将输出低电平;而失锁状态时如图4,fout与fin出现相位之间的滑动,抽样时就不会出现长时间的0或1,单稳态振荡器振荡,使lock输出高电平。锁相环的锁定状态保持时间的认定,可以通过设置振荡器的性能。在FPGA设计中,要采用片外元件来进行单稳定时,是很麻烦的,而且也不利于集成和代码移植。单稳态振荡器的实现也可以在FPGA内实现,利用计数器的方法可以设计全数字化的上升、下降沿双向触发的可重触发单稳态振荡器。
4 智能锁相环的设计
智能全数字锁相环的设计如图5所示。锁相环与CPU接口电路,由寄存器来完成。对于CPU寄存器内容分为两部分:锁相环的工作状态(只读),k计数器的参数值(读/写)。CPU可以通过外部总线读写寄存器的内容。
CPU根据锁相环状态就可以对锁相环K计数器进行最优设置。实际测试时设置K初始值为23,此时锁相环的捕捉带较大,在很短时间内就可以达到锁定状态,lock变为低电平。CPU检测到此信号后自动将K值加1,如lock仍然为低电平,CPU会继续增加K 值;直到锁相环失锁,记住其最佳设置值。设置K为初始值,锁定后,设置到最佳值,这样锁相会快速进入最佳的锁定状态。
关于CPU的选择有三种方案:①FPGA片内实现CPU。片上系统的发展使其成为可能。②与片外系统共用CPU。DPLL大多用于通信系统中,而大部分通信系统都有嵌入式CPU。③单独采用一个廉价单片机(如89C51),不仅可用于智能锁相环的控制,还可控制外部RAM实现FPGA的初始装载,一机多用,经济实惠。可以视具体情况而定。