0 引言
在数字系统设计中,根据不同的设计需要,经常会遇到偶数分频、奇数分频、半整数分频等,有的还要求等占空比。在基于cpld(复杂可编程逻辑器件)的数字系统设计中,很容易实现由计数器或其级联构成各种形式的偶数分频及非等占空比的奇数分频,但对等占空比的奇数分频及半整数分频的实现较为困难。
本文利用vhdl(甚高速集成电路硬件描述语言),通过quartus ⅱ 4.2开发平台,设计了一种能够实现等占空比的整数和近似等占空比的半整数分频器,这种设计方法原理简单,而且只需很少的cpld逻辑宏单元。
1 设计原理
系统设计框图如图1所示。
根据不同分频系数设置适当的计数器周期,每个计数值对应输入时钟信号fi的一个周期,让q0只在fi的上升沿及适当的计数范围内产生高电平,最后将q0和q1进行逻辑或操作,进而得到所需的分频信号fo。q1的作用是在奇数分频中补足下降沿处半个时钟周期,使其等占空比,以及在半整数分频中,在时钟下降沿处产生分频信号的上升沿,以实现半整数分频。
下面介绍如何确定计数器周期以及q0、q1产生高电平输出时各自的计数范围。为叙述方便,现规定如下标记:分频系数为divide(max downto 0),其中max是分频数对应二进制数的最高位,对于半整数分频,最低位即第0位为小数位;q 0_count和q1_count分别为q0和q1产生高电平的计数范围,并记divide(max downto 1)为a,divide(max downto 2)为b,divide(max downto 0)-1为c。
1.1 偶数及奇数分频
计数器周期都为0到c。等占空比的偶数分频很容易实现,在此不加叙述。对奇数分频,只需当q0_count<a时q0输出高电平,当q1_count=a-1时q1输出一个周期的高电平,其他情况下q0和q1都为低电平,然后把q0和q1逻辑或,所得的输出fo就是所需的基数分频时钟信号。
1.2 半整数分频
计数器周期为0到c。如果整数部分是偶数,只需当q0_count<b时q0输出高电平,当b≤q1_count<a+b时q1输出高电平,其他情况下,q0和q1都为低电平;如果整数部分是奇数,只需当q0_coun≤b时q0输出高电平,当b≤q1_count≤a+b输出高电平,其他情况下q0和q1都为低电平,然后把q0和q1逻辑或所得输出f0即所需的半整数分频时钟信号。
2 仿真结果及硬件电路测试
根据上面的原理,利用quartus ⅱ 4.2开发的7分频和7.5分频的仿真波形如图2和图3所示。
只要稍微修改程序,即可实现任意整数和半整数分频。
本设计在altera公司的epm7064slc84-10构成的一个数据采集系统测试通过,性能良好。
3 结束语
本分频方法原理简单,具有一定的通用性,而且使用的cpld逻辑宏单元数较少,如在epm7064中,上面仿真的两个分频器均只用7个逻辑宏单元。
作者:许永贤 来源:豆豆技术应用