基于FPGA的小数分频实现方法
扫描二维码
随时随地手机看文章
摘 要: 提出了一种基于FPGA的小数分频实现方法。介绍了现有分频方法的局限性,提出一种新的基于两级计数器的分频实现方法,给出该方法的设计原理以及实现框图,利用软件对电路进行仿真,由仿真结果可以看出该方法可有效实现输入信号频率的小数调整,最后分析了方法的优缺点及其应用领域。实验结果表明,设计方法能够高精度地完成对信号频率的微调,并且频率转换时间被缩短到2.56 μs。
关键词: FPGA;小数分频; 信号频率的微调
分频器是电子线路设计的重要功能单元,在通信、雷达、微波、仪器等领域有着重要应用。具体实现形式有偶数分频、奇数分频、锁相环分频电路等,这种结构的分频器只能实现整数分频,或者是仅实现半整数分频和奇数分频[1],一般的锁相环分频电路会有几十微秒级的频率转换时间[2],虽然现在少数芯片有所改善,但是时间也较长。同时,在某些场合下,所需要的频率与给定的频率并不成整数或半整数倍关系,或需要实现对输入信号频率的微调整,此时可采用小数分频器进行分频[3]。
本文提出了一种基于FPGA的小数分频实现方法,给出该方法的设计原理以及实现框图,使用VHDL硬件描述语言和原理图混合输入的设计方式[4],通过Quartus II开发软件,在Altera公司的Stratix II系列EP2S15F484C3型FPGA器件平台上对电路进行仿真,并对仿真结果进行分析,由仿真结果可以看出该方法可有效实现对输入信号的50%占空比的小数调整,解决了在一些场合下整数分频对输入频率调整幅度较大,频率转换时间较长的问题[6]。
1 设计方案及其原理
该方法是通过两级计数电路来实现小数分频的,第一级利用输入信号对系统时钟计数,并对计数结果进行修正;第二级利用修正后的结果通过定时操作产生频率调整后的输出信号。电路图的组成如图1所示。
以输入信号的脉宽作为闸值,计数器1在系统时钟的控制下进行加计数,设此计数结果为n。为实现对输入信号频率的调整,通过给n加上一个调整值N来实现对计数结果的调整,调整后的结果存于寄存器3,同时计数器1复位并等待进入下一轮操作。计数器2在同一系统时钟控制下对寄存器3的值减计数。当计数器2减到0时产生下溢信号,如此重复,计数器2将产生频率调整后的非对称方波,最后利用模一计数器将其调整为占空比为50%的时钟信号。上述方法中,N的值决定了输出信号与输入信号间的频率关系,通过对N的设置来改变该方法的分频倍数。
在具体实现时,为了避免计数器2置入的数据发生冲突,n的修正值先存放在寄存器3中,这样,每当计数器2减到0时,再置入n的修正值,则可以避免第二级计数器没有输出信号的问题。
1.2 小数分频参数的取值范围
使用本设计方法对输入信号的频率进行小数量级的分频,要得到有效、可靠的结果,调整参数N只在一定范围内取值。
由式(1)可知:由于输出信号频率K>0,故N>-n。
2 仿真结果及分析
2.1 电路功能的仿真及分析
理论上,当fin=1 MHz、N=1时,n=100,K=1.01, fout≈0.990 1 MHz。
以上述参数对电路进行仿真,仿真结果如图2所示。
N在有效范围内变化,使用上述参数对电路进行仿真得到表1所示仿真结果。
对电路进行调整,把N减小一个单位,即:N=1,由式(1)得分频比K2=1.02,电路的仿真结果如图4所示。
文中提出了两级计数电路来实现小数分频的方法,并对结果进行仿真和分析,该方法可以实现分频比为任意小数的小数分频,或者可高精度地完成对输入信号频率的微调,实现结果表明了本设计可以使频率转换时间被缩短到2.56 μs,随着分频步长的提高,频率调整误差?着会增加,但是误差比较小,这一优点应用在IEEE1588中,可有效地实现LXI的主从设备的时钟同步[5],这是本设计方案的典型应用。但是,当系统的时钟频率与输入频率的比值n不是整数时,频率调整误差ε较大,这是本方案的使用局限性。
参考文献
[1] 许德成.任意数分频设计方法[J].科技广场,2007,13(6):219.
[2] 王芳,阔永红.小数分频与快锁芯片ADF4193的原理与应用[J].新特器件应用,2008,10(5): 1-3.
[3] 刘亚海,林争辉.基于FPGA的小数分频器的实现[J]. 现代电子技术, 2005,28(3):113-114.
[4] 古良玲,杨永明,郭巧惠. 基于FPGA的半整数及整数分频器的参数化设计[J].电子器件,2005,28(2):404-406.
[5] 王刚,乔纯捷,王跃科.基于时钟同步的分布式实时系统监控[J].电子测量与仪器学报,2010,24(3):274-278.
[6] TIAN Hong Li,SHI Shuo,ZHANG Jun, et al.Controllable arbitrary integer frequency divider based on VHDL[J]. IEEE.Xplore,2009,62(10):691-694.