平均意义的小数分频:
小数分频器的系统原理是:通过精确的控制器来控制内部分频器进行N分频还是N+1分频,从而在平均意义上实现分频系数为小数的分频器。
输入时钟是33MHz,要分出一路2.048MHz的时钟
1.考虑到33000/2048=16+(232/2048)->16+(58/512), 即输出时钟每8+29/512个输入时钟翻转一次. 用累加器在每个输入时钟周期将余数累加直到溢出(>512), 大部分时间输出时钟每8拍翻转一次, 逢累加器溢出时, 9拍输入时钟再翻转. (注意: 溢出部分剩余值还应留在累加器中等待下一次累加). 这样做的结果即可实现分数分频, 且输出最大抖动取决于输入时钟.
2.比如画一条从原点到(33000, 2048)的直线,要求画笔每沿x轴移动16.11328125个象素,就沿y轴移动一个象素,如此往复。实际只能按整数象素移动,那么大部分时间每沿x轴移动16个象素,就沿y轴移动一个象素(并且把误差累积起来),如果误差大于0.5个象素,那么说明沿x轴移动过快,那就多等一步(即移动17个象素)再沿y轴移动。长期平均起来看,正好是33000/2048的比例。
摘自http://blog.csdn.net/Solstice/archive/2005/12/12/549965.aspx
另一个想法:Fo= (Fclk*K)/(2^N)
Fo 为输出方波
Fclk为输入时钟
2^N指将输出方波进行2^N抽样,存放在存储单元中
K为单次相位累加量(每次clk累加一次并读取相应相位的方波抽样数据)
K/(2^N)即为分频参数,通过调整可对Fclk任意分数分频
注意:相位步进量大于(抽样数/2)时 相当于 以(抽样数 - 相位步进量)为新的步进量沿反方向步进(即相位累减)所以分频后的频率最大为原频率的2分频