任意数值分频器的FPGA实现
扫描二维码
随时随地手机看文章
摘要:本文介绍了一种基于FPGA的多数值分频器的设计,该分频器可以实现占空比及分频系数可调,其分频数值可以是整数、小数和分数。文章给出了使用Altera公司的Cyelon eII系列EP2C5Q208C型FPGA芯片中实现后的仿真结果和测试结果,这些结果表明设计的正确性和可行性。分频器采用VHDL语言编程实现,用户可以自行设置分频器功能,这种分频器设计具有很强的实用性和可移值性。
FPGA是数字系统主流控制器之一,成为目前硬件设计的研究重点。工程人员在数字系统的设计过程中,总会遇到各种各样数值的分频要求,比如偶数分频、奇数分频、半整数分频、小数分频等等,通常一些数字系统设计中,系统不仅对信号频率有要求严格,而且对占空比也有严格的要求。整数分频器的实现比较简单,可以采用标准的计数器或可编程逻辑器件得以设计实现。但0.5倍整数分频和等占空比的奇数分频实现起来就比较困难,小数分频和分数分频就更加困难难。计数器构成的分频器,大多只能实现整数分频,或者只能实现半整数分频和奇数分频。而实现小数分频的多数是专用分频器,针对这一问题,本人首先设计了各种数值的分频器,然后增加一个控制模块,用拔码开关选择分频类型,即由拨码的二进制数确定是偶数分频、奇数分频、小数分频还是分数分频。各种数值分频器由控制模块决定其分频的工作状态,最后综合起来成为通用分频器。根据分频器分频原理,摸索出了一种简单的设计方法,设计了任意数值分频器。
1 偶数分频器的设计
偶数分频最易于实现,可以利用计数器实现。假设要设计M=2N的偶数分频,当计数值计数到0到K-1时(K用于调节占空比),输出的电平为1,计数器的计数值K到2N-1时,输出的状态为0。计数器计数到2N-1时计数器复位为0。如此循环下去,便可实现占空比为K/2N偶数分频,这里M和K都是可调整的预置数,K调整占空比,M调节分频系数。图1中M取值是6实现的是6分频。即输出时钟频率是输入时钟频率的1/6。从图1的仿真结果可以看出k=3=m/2,输出时钟占空比为50%。
2 奇数分频器的设计
想要实现非50%占空比的奇数分频,比如实现占空比为20%(1/5)、40%(2/5)、60%(3/5)、80%(4/5)的分频器,我们可以采用类似于偶数分频的方案就可以实现。但如果要实现占空比为50%的奇数分频,就不能用偶数分频中所采用的方案了。占空比50%奇数分频实现起来会比较麻烦一点,这是因为计数值为奇数,前半个和后半个周期所包含的不是整数个输入时钟脉冲clkin的周期。实现的方法很多,这里介绍一种占用资源少的方法。例如对时钟脉冲CLKIN进行5分频,前半个周期包含2.5个clkin周期,后半个周期包含2.5个clkin周期。需要定义两个计数器,CNT1和CNT2,分别对输入时钟的上升沿和下降沿进行计数,当计数值为0~((n/2)-1)时,输出时钟信号进行翻转,同时给计数器一个时钟复位信号,下一个时钟的上升沿到来时,计数器重新开始计数,如此循环即可。计数器CNT1和CNT2计数方法完全一样,只是翻转边沿不同。然后把这两个计数值输入一个组合逻辑作或运算,CLKOUT=CNT1+CNT2。图2是CLKIN的5分频。
推广为一般方法:欲实现占空比为50%的2N+1分频器,则需要对分频时钟上升和下降沿分别进行1/(2N+1)分频,然后将两个分频所得的时钟信号作或运算便可得到占空比为50%的2N+1分频器。
3 小数分频器的设计
实现小数分频器的方法很多,但其原理都基本一样,即通过可变分频和多次平均的方法得到。本设计采用双模前置小数分频的方法设计。假设要进行m、n分频(m、n都是整数,且n<10),因为只有一位小数,所以总共要进行10次分频,总的规律是进行n次m+1分频,10-n次m分频。假设要进行k.mn分频(k、m、n都是整数且m、n<10),由于小数是2位,所以总共要进行100次分频,分频的规律是进行mn次k+1分频,100-mn次K分频。也就是说不管是几位小数总要进行两种系数的分频,两种分频究竟如何交叉进行,可以根据一定的规律计算出来,下面以2.7分频为例进行讲解。由上面的分析知道2.7分频要进行7次3分频,3次2分频。总分频值为:(7×3+3×2)/(7+3)=2.7,将小数部分7按倍累加,假设累加的值为A,如果A<10则进行2分频,A<10的话下一次则加上7,此后,如果A≥10则进行3分频,3分频过后再将累加值减去3后与10比较以决定下一次分频是7分频还是2分频,计算过程见表1。图3是2.7小数分频仿真波形。小数分频器部分VHDL核心代码如下:
4 分数分频器设计
分数分频器设计与小数分频器的设计思想相似,假设进行分频,总分频次数是m决定的,分频规律是:进行n次k+1分频和m-n次k分频。两种分频交替进行,计算方法也和小数分频相似,是进行k分频还是k+1分频,要看累计值是大于分母还是小于分母。分频计算过程见表2,只要在13次分频中,进行7次3分频,6次2分频就可以的到,总分频值为(7×3+6×2)/(7+6)=33/13。为了两种分频均匀,将分子累加,小于分母进行2分频,大于等于分母作3分频。表2是 的分频规律。图4是33/13分频器仿真波形。
5 多数值分频器的实现
将上述各模块整合在一起,需要增加一个控制模块,这样就构成了多数值分频器。顶层原理图见图5。
当B=00时,实现整数分频,当B=01时实现占空比50菰的奇数分频,B=10时实现小数分频,B=11时实现分数分频。其中M、K控制整数分频的分频系数以及占空比。小数分频时M、N分别调整整数部分和小数部分。分数分频时K调整整数部分,M,N调整分母和分子值,虽然预置端口较多,但可调整性很好。
6 结束语
文中给出了基于FPGA的多数值分频器的设计方法,设计采用自顶而下的设计方法,进行功能模块的划分,该分频器可以实现偶数、奇数、小数、分数的分频,有良好的可移值性,本设计选用EP2C5Q208C型FPGA芯片实现,从综合配置后的配置报告可以看出,本分频器占用FPGA资源很小。仿真结果和硬件测试结果验证了这个设计的有效性。对相关人员有一定的参考价值。