分频,搞定只需分分钟

分频,搞定只需分分钟

通常我们说对原时钟进行N分频,即分频后的时钟的一个周期是原时钟周期的N倍。N可以为偶数、奇数、分数(小数)。
思维导图:
分频,搞定只需分分钟

偶数分频
Verilog实现:N为偶数,使用一个计数器循环0-(N-1)进行计数,在N/2-1与N-1分别将输出取反,即完成了N分频,注意,当计数到N-1时,需要对计数器复位,如果需要得到占空比不是50%的分频时钟,则需要修改输出时钟信号发送翻转时候的计数值,此时就不是在N/2-1处翻转了。
若采用D触发器画出分频器,单个D触发器的反向输出到输入就构成了一个简单的2分频器,以此为基础,其分频输出作为下一级D触发器的时钟,如此串联起来,x个串联就是2^x分频,属于偶数分频。
分频,搞定只需分分钟
如果偶数N不是2的整数幂,比如6分频,则可以用计数器的方法来实现,也可以先进行三分频,再进行二分频,三分频电路可在奇数分频部分查看电路图。
分频,搞定只需分分钟

奇数分频
奇数分频器跟偶数分频器一样,当计数器的值等于分频系数(加1或者减1)的一半或等于分频系数时,时钟信号翻转。奇数分频器分频原理如下图:
分频,搞定只需分分钟
上图的分频系数是3,但是实际计数时是从0计数到2,用一个计数器在上升沿计数,每次计数到1翻转一次,每次计数到3再翻转一次,然后周期重复得到信号clkp1,它的周期就是clk的3倍,但是它的占空比不是50%(占空比就是clk为高的时间占整个时钟周期的百分比)。奇数分频想通过计数器直接分频出占空比是50%的时钟是不可能的,必须要通过中间的临时波形,做一些逻辑“与”“或”的动作才能得到占空比50%的分频时钟。
分频,搞定只需分分钟
用一个下降沿的D触发器锁存clkp1得到信号clkn1,把信号clkp1和信号clkn1做逻辑“与”就得到了占空比50%的3分频时钟信号clkout。
另外一种产生3分频时钟的方法:假设计数器在计数到1的下降沿分频后的时钟信号clkn2翻转一次,计数到2的下降沿clkn2再翻转一次, 再利用下图电路调整占空比到50%:
分频,搞定只需分分钟
用一个正常的D触发器锁存clkn2得到信号clkp2, clkn2“或”上clkp2就可以得到占空比50%的3分频时钟信号clkout。
下图为另外一种占空比50%的三分频电路,其中count3模块是分别计数到1和3时发生信号翻转,这种方法跟上面提到的两种方法对比就是使用的器件更多,多一个count3计数器。对clk_out再进行一次二分频就可以得到6分频电路。
分频,搞定只需分分钟
其他的奇数分频器调整占空比的原理也是相同的。

分数分频
对于要求相位以及占空比严格的分数分频(小数分频),建议采用模拟电路实现。而使用数字电路实现只能保证尽量均匀,无法做到纯粹的50%占空比,在长时间内进行分频可以是占空比尽量接近50%。
对于一个分数,把他它分为整数部分和小数部分的形式。例如N=M.D>1分频,分为整数M和小数D,我们使用M分频和M+1分频来构成M.D分频。这里可以使用初中知识十字交叉法
设M分频的次数为N1,M+1分频的次数为N2。
将M分频进行N1次和M+1分频进行N2次,那么在MN1+(M+1) N2个周期内,整体可以看作(M * N1+(M+1)* N2)/(N1+N2)=N分频。
可以通过均匀分布M分频和M+1分频,使得相位较为均匀。
举例:比如8.7分频。因为没办法用计数器表示0.7这种数字,所以就用一个等效的概念来进行8.7分频,原时钟87个周期的总时间等于分频后的时钟10个周期的总时间;
先做3次8分频得到时钟周期数是24,再做7次9(8加1)分频得到时钟周期数63,总共就87个时钟周期;在这87个时钟周期里面分频时钟跳变20次总共10个周期。
用整数部分zn(=8)作为一个分频系数,zn加1(=9)作为另外一个分频系数组成一个小数分频器。
根据上面的原理可以列出下面的二元一次方程组
zn * N+(zn+1) * M=87 ……(1)
N+M=10 ……(2)
可以解出N和M的值分别是3和7,分配时尽量均匀,如采取下面第三种情况。
分频,搞定只需分分钟
如果分频系数6.432,那么有下面的二元一次方程组,zn是6
zn * N+(zn+1) * M=6432 ……(1)
N+M=1000 ……(2)
解出N和M的值分别是568和432,这个值就很大了,计数器的位宽也变大了,也就是说小数部分位数越多,需要的计数器的位宽越大,消耗的硬件资源越多。不过568,432,1000这几个数有公约数,可以除以最大公约数,把计数数值减小。
如下图所示:一个小数分频器就有两部分组成:ZN和ZN+1为分频系数的多路分频器,还有一个ACC计数器。
分频,搞定只需分分钟
分频器在输入信号enout=0的时候是ZN分频;
分频器在输入信号enout=1的时候是ZN+1分频;
ACC计数器的作用对ZN分频和ZN+1分频的次数计数,对于一位小数计数总次数为10(两位小数为100…),输出信号enout决定下次是ZN分频还是ZN+1分频。

哈姆雷特,请保持前行!