本发明涉及倍频技术,具体涉及一种基于gps(globalpositionsystem,全球定位系统)秒脉冲的2的幂次方倍频方法,应用于基于fpga(fieldprogrammablegatearray,现场可编程门阵列)的数字信号处理系统设计中,为fpga中各数字信号处理模块提供所需的时钟信号。
背景技术:
时钟信号是数字信号处理模块工作所必须的输入信号,通常是将晶体振荡器输出时钟进行处理以获得所需频率的时钟信号。近年来,工业界研发了各种时钟信号产生技术,主要是基于除法器实现,具体来说是利用除法器计算输入时钟频率与输出时钟频率的倍数关系,而后以此倍数关系确定参数,进而以此参数对输入时钟进行处理而获得所需频率的时钟信号。这种技术有三个主要的缺点,首先是本地晶振时钟频率不可避免的漂移将引起输出时钟频率的漂移;其次是使用除法器计算参数,将占用fpga的大量片内资源且设计复杂;最后是除法器计算的延时将带来输出时钟频率的误差。gps秒脉冲是精度很高的时钟信号,其精度能够满足大多数数字信号处理模块对时钟信号的精度需求,但其频率为固定的1hz,无法被fpga中各数字信号处理模块直接使用。因此,寻找一种设计简单、占用资源少、不存在时钟漂移和时延误差的基于gps秒脉冲的时钟信号倍频产生方法具有十分重要的意义。
技术实现要素:
本发明的目的是为解决目前基于除法器的时钟信号产生方法无法消除输入时钟漂移、设计复杂、占用fpga大量资源、存在时延误差等问题,提供了一种基于gps秒脉冲的2的幂次方倍频方法。该方法能够以高精度gps秒脉冲为输入信号,产生gps秒脉冲的2的幂次方倍频时钟信号,通过使用gps秒脉冲测量本地高频晶振时钟信号的实际频率以消除晶振频率的漂移,利用左移即为二进制除法来实现倍频参数的计算,避免了使用除法器,使时钟信号产生方法简单、占用fpga资源少且没有时延误差。
为实现上述发明目的,本发明采用如下技术方案:
一种基于gps秒脉冲的2的幂次方倍频方法,该方法包括以下步骤:
步骤s1:clk为倍频方法输出时钟,f_local为本地高频晶振时钟的频率;clk频率的理论值是2的幂次方,通过对数运算确定其频率的理论值为2的m次幂;f_local除以clk频率的商是实现倍频所需参数,将f_local以二进制表示,以f_local二进制表示形式的第1位至第m+1位作为商的小数部分b;以f_local二进制表示形式的第m+2位至最高位作为商的整数部分a;
步骤s2:设立本地晶振时钟频率计数寄存器clk_local_1、clk_local_2,clk_local_1、clk_local_2初始化为零;
步骤s3:在gps秒脉冲第一次到来时,使用寄存器clk_local_1开始对本地高频晶振时钟频率f_local进行累加计数,每次累加值为1,当以后每一次gps秒脉冲到来时,用寄存器clk_local_1的值减去寄存器clk_local_2的值以获得本地高频晶振时钟频率f_local的测量值,而后将寄存器clk_local_1的值存储到寄存器clk_local_2中;
步骤s4:由f_local测量值计算步骤s1中所述商的整数部分a和步骤s1中所述商的小数部分b;
步骤s5:设立倍频累加寄存器quotient,倍频累加寄存器quotient最大容量值的二进制表示位数与整数部分a的二进制表示位数相同;
步骤s6:设立小数累加寄存器remainder,小数累加寄存器remainder最大容量值的二进制表示位数与小数部分b的二进制表示位数相同;
步骤s7:将倍频累加寄存器quotient的初始值设置为其最大值减去整数部分a;
步骤s8:以本地晶振时钟上升沿为触发条件,倍频累加寄存器quotient开始累加,每次累加1;
步骤s9:以倍频累加寄存器quotient溢出为触发条件,小数累加寄存器remainder开始累加,每次累加b;
步骤s10:当倍频累加寄存器quotient溢出时,将倍频累加寄存器quotient的值重置为其最大值减去整数部分a;
步骤s11:当小数累加寄存器remainder溢出时,倍频累加寄存器quotient减1;
步骤s12:将倍频累加寄存器quotient的溢出位作为输出的时钟信号clk。
通过以上步骤,实现了基于gps秒脉冲的2的幂次方倍频。
与现有的技术相比,本发明具有以下优点:
通过gps秒脉冲消除了本地晶振时钟频率的漂移,利用二进制表示获得除法运算结果,避免使用专用除法器模块,简化了系统设计、降低了fpga资源消耗,避免了除法器模块时延带来的误差;
附图说明:
1.图1为本发明实施例的结构图;
2.图2为本发明实施例的工作流程图;
3.图3为本发明具体实施方式步骤s3的仿真结果;
4.图4为本发明具体实施方式步骤s4的仿真结果;
5.图5为本发明具体实施方式步骤s12的仿真结果。
具体实施方式:
下面将结合说明书附图和具体实施例对本发明作进一步详细说明。
如图1所示,为一种基于gps秒脉冲的2的幂次方倍频方法实施例的结构图,图2为本实施例的流程图,具体包括以下步骤:
步骤s1:f_local为本地高频晶振时钟信号频率,频率的理论值为62.5mhz;clk为倍频方法输出时钟,clk频率的理论值为4096hz,4096是2的幂次方,通过对数运算确定其频率的理论值为2的12次幂;f_local除以clk频率的商是实现倍频所需参数,将f_local以二进制表示,以f_local二进制表示形式的第1位至第(12+1)位作为商的小数部分b;以f_local二进制表示形式的第(12+2)位至最高位作为商的整数部分a;
步骤s2:设立本地晶振时钟频率计数寄存器clk_local_1、clk_local_2,clk_local_1、clk_local_2初始化为零;
步骤s3:如图3所示,在gps秒脉冲第一次到来时(gps秒脉冲由图3中one_pps表示),使用寄存器clk_local_1开始对本地高频晶振时钟频率f_local进行累加计数(f_local由图3中sysclk62p5mhz表示),每次累加值为1,当以后每一次gps秒脉冲到来时,用寄存器clk_local_1的值减去寄存器clk_local_2的值以获得本地高频时钟频率f_local的测量值,而后将寄存器clk_local_1的值存储到寄存器clk_local_2中;本地高频晶振时钟的理论值为62.5mhz,而实际测量的结果为62.500499mhz,有效消除了本地晶振时钟漂移带来的影响;
步骤s4:如图4所示,由f_local的测量值计算步骤s1中所述商的整数部分a和步骤s1中所述商的小数部分b;此计算过程在1个本地晶振时钟节拍完成,避免了使用除法器带来的时延误差;
步骤s5:设立倍频累加寄存器quotient,倍频累加寄存器quotient最大容量值的二进制表示位数与整数部分a的二进制表示位数相同;
步骤s6:设立小数累加寄存器remainder,小数累加寄存器remainder最大容量值的二进制表示位数与小数部分b的二进制表示位数相同;
步骤s7:将倍频累加寄存器quotient的初始值设置为其最大值减去整数部分a;
步骤s8:以本地晶振时钟上升沿为触发条件,倍频累加寄存器quotient开始累加,每次累加1;
步骤s9:以倍频累加寄存器quotient溢出为触发条件,小数累加寄存器remainder开始累加,每次累加b;
步骤s10:当倍频累加寄存器quotient溢出时,将倍频累加寄存器quotient的值重置为其最大值减去整数部分a;
步骤s11:当小数累加寄存器remainder溢出时,倍频累加寄存器quotient减1;
步骤s12:如图5所示,clk_divider_rising和clk_divider_faling信号为quotient的溢出标志,倍频累加寄存器quotient的溢出位即是输出时钟信号clk。
本实施例是基于xilinx公司的spartan-6型fpga芯片设计,其对fpga资源的消耗与传统方法对比如表1所示,可以看到本实施例所消耗的pfga资源与传统方法相比,减小了约10倍。
使用本发明所生成的时钟信号,其1秒以上的长期精度与gps秒脉冲精度一致;其1秒以内的短期精度与消除漂移后的本地晶振时钟精度一致,而传统方法所生成的时钟信号精度与含有漂移的本地晶振时钟精度一致,因此本发明所生成时钟信号精度高于传统方法。
表1fpga资源消耗对比
以上仅是本发明的优选实施方式,本发明的保护范围并不仅限于上述实施例,凡属于本发明思路下的技术方案均属于本发明的保护范围。应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理前提下的若干改进和润饰,应当视为落入本发明的保护范围。