基于FPGA的多种分频设计与实现
扫描二维码
随时随地手机看文章
分频器是FPGA设计中使用频率非常高的基本单元之一。尽管目前在大部分设计中还广泛使用集成锁相环(如altera的PLL,Xilinx的DLL)来进行时钟的分频、倍频以及相移设计,但是,对于时钟要求不太严格的设计,通过自主设计进行时钟分频的实现方法仍然非常流行。首先这种方法可以节省锁相环资源,再者,这种方式只消耗不多的逻辑单元就可以达到对时钟操作的目的。
1 整数分频器的设计
1.1 偶数倍分频
偶数分频器的实现非常简单,通过计数器计数就完全可以实现。如进行N倍偶数分频,就可以通过由待分频的时钟触发计数器计数,当计数器从0计数到N/2-1时,输出时钟进行翻转,并给计数器一个复位信号,以使下一个时钟从零开始计数。以此循环,就可以实现任意的偶数分频。图1所示是占空比为1:1的36分频的仿真波形图。
1.2 奇数倍分频
奇数倍分频有两种实现方法,其中之一完全可以通过计数器来实现,如进行三分频,就可通过待分频时钟上升沿触发计数器来进行模三计数,当计数器计数到邻近值时进行两次翻转。比如可以在计数器计数到1时,输出时钟进行翻转,计数到2时再次进行翻转。这样,就在计数值邻近的1和2进行了两次翻转。如此便实现了三分频,其占空比为1/3或2/3。
占空比1/15的15分频设计的主要代码如下:
如果要实现占空比为50%的三分频时钟,则可通过待分频时钟下降沿触发计数,并以和上升沿同样的方法计数进行三分频,然后对下降沿产生的三分频时钟和上升沿产生的时钟进行相或运算。即可得到占空比为50%的三分频时钟这是奇数分频的第三种方法。这种方法可以实现任意的奇数分频。如将其归类为一般的方法:对于实现占空比为50%的N倍奇数分频,首先要进行上升沿触发以进行模N计数,计数选定到某一个值再进行输出时钟翻转,然后过(N-1)/2再次进行翻转,就可得到一个占空比非50%的奇数n分频时钟。再同时进行下降沿触发的模N计数,当其到达与上升沿触发输出时钟翻转选定值相同时,再进行输出时钟翻转,同样,经过(N-1)/2时,输出时钟再次翻转以生成占空比非50%的奇数n分频时钟。将这两个占空比非50%的n分频时钟相或运算,就可以得到占空比为50%的奇数n分频时钟。图2所示是占空比为1:1的3分频电路原理图。图3为其仿真波形。
2 半整数分频器设计
进行n+0.5分频一般需要对输入时钟先进行操作。其基本设计思想是:首先进行模n的计数,在计数到n-1时,将输出时钟赋为'1',而当回到计数0时,又赋为0,这样,当计数值为n-1时,输出时钟才为1,因此,只要保持计数值n-1为半个输入时钟周期,即可实现n+0.5分频时钟。因此,保持n-1为半个时钟周期即是该设计的关键。从中可以发现,因为计数器是通过时钟上升沿计数,故可在计数为n-1时对计数触发时钟进行翻转,那么,时钟的下降沿就变成了上升沿。即在计数值为n-1期间的时钟下降沿变成了上升沿,也就是说,计数值n-1只保持了半个时钟周期。由于时钟翻转下降沿变成上升沿,因此,计数值变为0。所以,每产生一个n+0.5分频时钟的周期,触发时钟都要翻转一次。图4给出了通用的半整数分频器的电路原理图。
图5所示是一个分频系数为2.5的分频器电路,该电路是用FPGA来设计半整数分频器的。它由模3计数器、异或门和D触发器组成。图6是其仿真波形图。
3 任意整数带小数分频
任意整数带小数分频的基本原理是采用脉冲吞吐计数器和锁相环技术先设计两个不同分频比的整数分频器,然后通过控制单位时间内两种分频比出现的不同次数来获得所需要的小数分频值。若设计一个分频系数为10.1的分频器,即可以将分频器设计成9次10分频和1次11分频,这样,总的分频值为:
F=(9×10+1×11)/(9+1)=10.1
从这种实现方法的特点可以看出,由于分频器的分频值不断改变,分频后得到的信号抖动一般较大。当分频系数为N-0.5(N为整数)时,可控制扣除脉冲的时间,以使输出成为一个稳定的脉冲频率,而不是一次N分频,一次N-1分频。一般而言,这种分频由于分频输出的时钟脉冲抖动很大,故在设计中的使用已经非常少。但是,这也是可以实现的。
4 结束语
利用本文介绍的方法可在对时钟要求比较严格的FPGA系统中,用FPGA内嵌的锁相环资源来实现分频。该设计方法简单方便、节约资源、可移置性强、便于系统升级,因此,在时钟要求不太严格的系统中应用非常广泛,同时在以后的FPGA设计发展中也有很大的应用空间。