一种基于fpga实现的分数分频方法以及分数分频器的制作方法

文档序号:7525934阅读:273来源:国知局
专利名称:一种基于fpga实现的分数分频方法以及分数分频器的制作方法
技术领域
本发明涉及分频方法技术领域,更具体的说是涉及一种基于FPGA(现场可编程门 阵列)实现的分数分频方法以及基于FPGA实现的分数分频器。
背景技术
目前,分频技术应用之广,几乎涉及到了所有的电子领域。在现代控制系统中,也 有着广泛的应用,例如在伺服驱动器中,需要对反馈脉冲进行分数的分频输出,供其它的驱 动器或者控制器使用。伺服驱动器的反馈脉冲一般是两路正交相位的脉冲,在分频之后,两 路脉冲在相位上还要保持正交。在数控系统中,也需要产生输出任意频率的两路正交脉冲。目前现有的分频技术中,基于FPGA实现的分频器主要有整数分频器和小数分频 器,而分数分频器较少论及。分数可以表示任意有理数,所以分数分频也就完全包括了整数 分频和小数分频。目前,实现分数分频要把分频数分为整数和小数,其结构如图1所示。但是整数分 频与小数分频的实现技术方案并不一样。整数分频一般采用计数器来实现,而且整数分频 也要分为偶数分频和奇数分频。如进行N倍偶数分频,那么可以通过由待分频的时钟触发 计数器计数,当计数器从0计数到N/2-1时,输出时钟进行翻转,并给计数器一个复位信号, 使得下一个时钟从零开始计数。以此循环下去,就可以实现任意的偶数分频。当进行奇数 倍N分频时,可以通过在输入时钟的上升沿进行计数,当从0计数到(N-l)/2时,输出时钟 进行翻转。利用同样的方法在输入时钟的下降沿产生另一路输出时钟,然后把这两路产生 的时钟进行相或运算,就可以实现任意的奇数分频。小数分频一般采用双模前置方法来实现。双模前置方法其原理就是在若干个分频 周期中采取某种方法使某几个周期多计或少计一个数,从而在整个计数周期总体平均意义 上获得一个小数分频比。这种方法输出的分频时钟相位抖动较大,而且输出时钟占空比不 均勻。而且这种方法只是理论上可以获得任意有理小数分频,实际上当小数位较多时,会占 用非常多的FPGA资源。所以当小数位数非常多时,基本上不可实现。如上所述,如果按照现有的分频技术实现一个分数分频器,必须对分频数进行区 分,然后用不同的技术方案完成。由此可以看出目前分频技术方案构成的分数分频器的主 要缺点有一是整数分频与小数分频方案不统一,实现复杂。二是这种分频器输出时钟脉冲 占空比不均勻,输出时钟相位抖动较大。三是占用FPGA资源量较多,甚至当小数位数多的 时候,基本不可以实现。

发明内容
鉴于上述现有技术的不足之处,本发明的目的在于提供一种基于FPGA实现的分 数分频方法以及基于FPGA实现的分数分频器,其结构简单、噪声小、占空比均勻、时钟相位 抖动小、占用FPGA资源量少。为了达到上述目的,本发明采取了以下技术方案
一种基于FPGA实现的分数分频方法,其包括步骤a)获取输入时钟信号;b)侦测所述时钟信号的频率值;c)根据输出时钟频率要求的最小分辨率为单位确定输入时钟频率值fl和输出分 频时钟频率值f2。其中,所述步骤c)之后进一步包括误差判断更新步骤d)在上电初始化时、在输入时钟的频率发生变化时或者需要分频之后的输出时 钟频率有变化时,根据fl和f2判断初始化的误差,所述判断误差的初始化公式为err = 2Xf2-fl,其中err为初始化误差;e)判断误差err是否大于0,如果大于0,执行步骤f),如果小于0,执行步骤g);f)当误差err大于0,输出时钟取反,误差err更新为err (当前值)=err (上个 时钟周期更新值)-2xfl+f2,然后执行步骤e);g)当误差err小于0,误差err更新为err (当前值)=err (上个时钟周期更新 值)+4xf2,然后执行步骤e)。其中,所述步骤c),输入时钟的频率值fl和输出时钟的频率值f2为正整数,而且 输出时钟的频率值f2小于输入时钟的频率值fl。其中,在每个输入时钟信号的上升沿相当于沿着X轴方向前进一个坐标点,每当 输入时钟信号在X轴前进一个坐标点时,则进行所述判断误差更新步骤,根据所述判断误 差的正负以决定是否沿着Y轴方向前进一个坐标点,每当沿着Y轴方向前进一个坐标点都 要产生一个输出时钟信号的沿,其中,输入时钟频率值是X轴坐标点,分频输出时钟频率值 是Y轴坐标点。一种基于FPGA实现的分数分频器,其包括时钟信号获取单元,用于获取输入时钟信号;频率值侦测单元,用于侦测所述时钟信号的频率值;频率值确定单元,用于根据输出时钟频率要求的最小分辨率为单位确定输入时 钟频率值fl和输出分频时钟频率值f2。其中,所述分数分频器,还包括误差初始化单元,用于在上电初始化时、在输入时钟的频率发生变化时或者需要 分频之后的输出时钟频率有变化时,根据fl和f2判断初始化的误差,所述判断误差的初始 化公式为err = 2Xf2_fl,其中err为初始化误差;误差判断单元,用于对所述初始化误差进行正负判断;误差更新单元,用于根据误差判断单元的判断结果进行不同误差值的更新;所述时钟产生单元会根据误差判断单元的结果决定输出时钟电平的变化。其中,所述误差更新单元,具体用于当误差err大于0,输出时钟取反,误差err 更新为err (当前值)=err (上个时钟周期更新值)_2xf l+f2,然后通过误差判断单元对所 述初始化误差进行正负判断;当误差err小于0,误差err更新为err (当前值)=err (上个时钟周期更新 值)+4xf2,然后也通过误差判断单元对所述初始化误差进行正负判断。本发明的有益效果是本发明提供的基于FPGA实现的分数分频方法以及基于FPGA实现的分数分频器,实现简单,不需要知道分频系数,只需要知道希望得到的分频之后 的输出时钟频率值;算法实现过程中无需进行计数,只需要根据判断误差来决定输出时钟 的频率值。另外,本发明是在输入时钟的上升沿判断输出时钟是否进行翻转,所以输出时钟 的相位抖动必然小于输入时钟的周期;并且本发明所占用的FPGA资源量更小。本发明和传 统的整数分频器、小数分频器相比较,从根本上解决了这些方法中所存在的实现方案复杂、 占空比不均勻、时钟相位抖动大等分频中一直难以解决的问题,在应用中,更加具有优势。


图1是现有技术的基于FPGA实现的一般分数分频器的结构图。图2是本发明实施例提供的基于FPGA实现的分数分频器的结构图。图3是本发明实施例提供的基于FPGA实现的分数分频方法的流程图。图4是本发明实施例提供的基于FPGA实现的分数分频方法工作时序图。
具体实施例方式本发明实施例提供一种基于FPGA实现的分数分频方法以及基于FPGA实现的分数 分频器,把输入时钟频率值和分频输出时钟频率值当作坐标系上的一个点,其中输入时钟 频率值是X轴坐标点,分频输出时钟频率值是Y轴坐标点。本发明实施例模拟从原点画一条直线到此坐标点,其中输入时钟在X轴方向运 动,则对应的Y轴方向运动的时钟就是经过分频之后的输出时钟。在每个输入时钟的上升 沿相当于沿着X轴方向前进一个坐标点,每当输入时钟在X轴前进一个点,则都要进行判断 误差更新,根据判断误差的正负以决定是否沿着Y轴方向前进一个坐标点,而每当沿着Y轴 方向前进一个坐标点都要产生一个输出时钟的沿。于是经过循环往复,这样沿着Y轴方向 前进而产生的时钟输出就是经过分频之后的输出时钟。由此可以看出,输出时钟的电平变 化都要在输入时钟的上升沿进行,这样输出时钟的相位不但能够与输入时钟的相位以最小 的相位差保持一致,而且输出时钟的占空比也能够保持着最小的变动。如图2所示是本发明所述方法实施例的详细流程图。该流程图包括第一步、对输入时钟进行频率侦测,其方法为在FPGA中利用高频时钟实时测量输 入时钟的时钟周期,然后将时钟周期进行倒数,得到输入时钟的频率。得到输入时钟的频率 后,确定输入时钟频率值fl。本实施例以输入时钟为8MHz,分频输出时钟为300KHz进行说 明。经FPGA高频时钟实时测量,可以得到输入时钟的时钟周期为125ns,然后确定输入时钟 为8MHz,根据需要输出时钟为300KHz,则fl = 8000, f2 = 300。第二步、根据n和f2初始化判断误差,判断误差的初始化公式为err = 2 X f2-f 1。在本实施例中,该初始化判断误差过程只有在上电初始化或者输入时钟频率变 化或者所要求得到的输出时钟频率变化时才需要进行的,如果这两个量没有任何变化,则 不要再进行判断误差初始化,否则分频输出时钟将不会正确。第三步、首先应该对初始化误差的结果进行判断,根据其是否大于0,进行误差更 新和时钟输出。在本实施例中,需要注意的是,只有在上电初始化和初始化误差有变化的情 况下,才会根据初始化误差进行判断,否则判断误差会在每个输入时钟上升沿都会被更新。第四步、对判断误差进行更新。对误差的更新一定要在输入时钟的上升沿进行。如果误差err大于0,输出时钟取反,误差err更新为err (当前值)=err (上个时钟周期更 新值)-2xfl+f2,然后在下一个输入时钟上升沿对更新后再进行误差进行判断,然后继续根 据判断值进行更新;误差err更新为err (当前值)=err (上个时钟周期更新值)+4xf2, 然后在下一个输入时钟上升沿对更新后的误差进行判断,然后继续根据判断值进行更新。第五步、进行时钟输出。每当输入时钟的上升沿到来,相当于输入时钟在X轴上前 进一个点,此时是否要在Y轴上前进一个点,即输出时钟产生沿的变化,则要取决于判断误 差。当误差大于0,则输出时钟电平取反,产生时钟边沿;当误差小于0,则输出时钟电平不 进行变化。如此进行循环往复,就可以获得需要的输出时钟。本发明的工作时序如图4所示。在本发明上述实施例中,所有步骤都是基于FPGA实施。不过由于FPGA中的乘法 器较少,所以在进行误差初始化和误差更新时,所涉及到的乘法都由进行向左移位所代替。 另外,fl和f2的数值都要是整数,如果输入时钟频率或者输出时钟频率精确到1Hz以下, 则确定fl和f2的数值的时候,要以时钟频率要求的最小分辨率为单位。本发明实施例还提供一种基于FPGA实现的分数分频器,如图3所示,其包括时钟 信号获取单元,用于获取输入时钟信号;频率值侦测单元,用于侦测所述时钟信号的频率值;频率值确定单元,用于根据输出时钟频率要求的最小分辨率为单位确定输入时 钟频率值fl和输出分频时钟频率值f2。频率值侦测单元对输入进来的时钟自动进行频率 的侦测,该频率值确定单元根据输出频率值f2,确定输入时钟频率值n。例如,侦测得到的 输入时钟频率值是8MHz。如果要求得到的输出时钟频率值f2是1KHZ,则输入时钟频率值 n为8000KHZ,于是n = 8000, f2 = 1 ;如果要求得到的输出时钟频率值f2是1Hz,则输入 时钟频率值fl为8000000Hz,于是fl = 8000000,f2 = 1 ;如果要求得到的输出时钟频率值 f2 是 0. 1Hz,则输入时钟频率值 fl 为 80000000Hz,于是 fl = 80000000,f2 = 1。其中,进一步的实施例中,所述分数分频器,还包括误差初始化单元,用于在上电初始化时、在输入时钟的频率发生变化时或者需要 分频之后的输出时钟频率有变化时,根据fl和f2判断初始化的误差,所述判断误差的初始 化公式为err = 2Xf2_fl,其中err为初始化误差;误差判断单元,用于对所述初始化误差进行正负判断;误差更新单元,用于根据误差判断单元的判断结果进行不同误差值的更新;其中, 所述误差更新单元,具体用于当误差err大于0,输出时钟取反,误差err更新为err(当 前值)=err ((上个时钟周期更新值)-2xfl+f2,然后通过误差判断单元对所述初始化误差 进行正负判断;当误差err小于0,误差err更新为err (当前值)=err (上个时钟周期更新 值)+4xf2,然后也通过误差判断单元对所述初始化误差进行正负判断。所述时钟产生单元会根据误差判断单元的结果决定输出时钟电平的变化,具体 为如果err大于0,输出时钟会进行取反;如果err小于0,输出时钟不变。该实施例中,输入时钟到频率值确定单元后,频率值确定单元经过对输入时钟的 分析,会确定出输入时钟的频率,然后会根据需要分频得到的时钟频率值f2确定输入时钟 的频率值fl,fl和f2确定之后,开始进入到误差初始化单元,初始化后的误差进入到误差判定单元,根据误差值的判定去驱动时钟产生单元,进行时钟输出。然后在下一个输入时钟 周期进行误差的更新,误差更新之后,再进入到误差判定单元,根据误差值的判定去驱动时 钟产生单元,进行时钟输出。如此进行循环,就可以得到所需要的分频之后的时钟。本发明 的工作时序如图4所示。 应当理解的是,对本领域普通技术人员来说,可以根据上述说明加以改进或变换, 而所有这些改进和变换都应属于本发明所附权利要求的保护范围。
权利要求
一种基于FPGA实现的分数分频方法,其特征在于,包括步骤a)获取输入时钟信号;b)侦测所述时钟信号的频率值;c)根据输出时钟频率要求的最小分辨率为单位确定输入时钟频率值f1和输出分频时钟频率值f2。
2.如权利要求1所述分数分频方法,其特征在于,所述步骤c)之后进一步包括误差判 断更新步骤d)在上电初始化时、在输入时钟的频率发生变化时或者需要分频之后的输出时钟 频率有变化时,根据Π和f2判断初始化的误差,所述判断误差的初始化公式为err = 2Xf2-fl,其中err为初始化误差;e)判断误差err是否大于0,如果大于0,执行步骤f),如果小于0,执行步骤g);f)当误差err大于0,输出时钟取反,误差err更新为err(当前值)=err (上个时钟 周期更新值)-2xfl+f2,然后执行步骤e);g)当误差err小于0,误差err更新为err(当前值)=err(上个时钟周期更新 值)+4xf2,然后执行步骤e)。
3.根据权利要求1所述的分数分频方法,其特征在于,所述步骤c),输入时钟的频率 值fl和输出时钟的频率值f2为正整数,而且输出时钟的频率值f2小于输入时钟的频率值 fl。
4.根据权利要求2所述的分数分频方法,其特征在于,在每个输入时钟信号的上升沿 相当于沿着X轴方向前进一个坐标点,每当输入时钟信号在X轴前进一个坐标点时,则进行 所述判断误差更新步骤,根据所述判断误差的正负以决定是否沿着Y轴方向前进一个坐标 点,每当沿着Y轴方向前进一个坐标点都要产生一个输出时钟信号的沿,其中,输入时钟频 率值是X轴坐标点,分频输出时钟频率值是Y轴坐标点。
5.一种基于FPGA实现的分数分频器,其特征在于,包括时钟信号获取单元,用于获取输入时钟信号;频率值侦测单元,用于侦测所述时钟信号的频率值;以及频率值确定单元,用于根据输出时钟频率要求的最小分辨率为单位确定输入时钟频 率值fl和输出分频时钟频率值f2。
6.如权利要求5所述分数分频器,其特征在于,还包括误差初始化单元,用于在上电初始化时、在输入时钟的频率发生变化时或者需要分频 之后的输出时钟频率有变化时,根据Π和f2判断初始化的误差,所述判断误差的初始化公 式为err = 2Xf2_fl,其中err为初始化误差;误差判断单元,用于对所述初始化误差进行正负判断;误差更新单元,用于根据误差判断单元的判断结果进行不同误差值的更新;以及所述时钟产生单元会根据误差判断单元的结果决定输出时钟电平的变化。
7.如权利要求6所述分数分频器,其特征在于,所述误差更新单元,具体用于当误 差err大于0,输出时钟取反,误差err更新为err(当前值)=err (上个时钟周期更新 值)-2Xfl+f2,然后通过误差判断单元对所述初始化误差进行正负判断;当误差err小于0,误差err更新为err (当前值)=err (上个时钟周期更新值)+4xf2,然后也通过误差判断单元对所述初始化误差进行正负判断。
全文摘要
本发明提供一种基于FPGA实现的分数分频方法以及分数分频器,所述分数分频器包括频率值确定单元,误差初始化单元,误差判定单元,误差更新单元,时钟产生单元;其中,输入时钟到频率值确定单元后,频率值确定单元经过对输入时钟的分析,确定出输入时钟的频率,根据需要分频得到的时钟频率值f2确定输入时钟的频率值f1,f1和f2,初始化后的误差进入到误差判定单元,根据误差值的判定去驱动时钟产生单元,进行时钟输出。在下一个输入时钟周期进行误差的更新,误差更新之后,进入到误差判定单元,根据误差值的判定去驱动时钟产生单元,进行时钟输出。该分数分频器结构简单、噪声小、占空比均匀、时钟相位抖动小、占用FPGA资源量少。
文档编号H03K23/68GK101997540SQ20091010889
公开日2011年3月30日 申请日期2009年8月11日 优先权日2009年8月11日
发明者凡峻, 张科孟, 李永利 申请人:深圳市英威腾电气股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1