本文首先介绍了各种分频器的实现原理,并在FPGA开发平台上通过VHDL文本输入和原理图输入相结合的方式,编程给出了仿真结果。最后通过对各种分频的分析,利用层次化设计思想,综合设计出了一种基于FPGA的通用数控分频器,通过对可控端口的调节就能够实现不同倍数及占空比的分频器。
1.引言
分频器是数字系统中非常重要的模块之一,被广泛应用于各种控制电路中。在实际中,设计人员往往需要将一个标准的频率源通过分频技术以满足不同的需求。常见的分频形式主要有:偶数分频、奇数分频、半整数分频、小数分频、分数分频。在某些严格的情况下,还有占空比的要求。其中非等占空比的偶数分频器和奇数分频器其实现比较容易,但对于半整数分频器和占空比为50%的奇数分频器实现比较困难。
本文首先介绍了各种分频器的实现原理,并结合VHDL硬件描述语言对其进行了仿真,最后提出一个可控的通用分频器的设计方法,该方法可实现任意分频,资源消耗低,具有可编程等优点。
2.偶数分频器
偶数分频器比较简单,即利用计数器对需要分频的原始时钟信号进行计数翻转。
例如:要进行M=2N(N为自然数)分频,当计数值为0~k-1时,输出高电平,当计数值为k-1~2N-1时输出低电平,同时计数值复位,如此循环可实现任意占空比的偶数分频,其中M和k为预置数,可根据分频倍数和占空比的要求进行置数。如图1所示,当k=N时,即可实现占空比为50%的偶数分频。
图1 占空比为50%的4分频仿真结果
3.奇数分频器
任意占空比的奇数分频器的实现,其原理与偶数分频器类似。但对于占空比为50%的任意奇数次分频却无法用上述相同的方法实现。
下面介绍一种常用的实现方法。
实现原理:采用两个不同的边沿触发器(一个在上升沿和一个在下降沿)来实现,其细节在于实现1/2个原始时钟周期的时间差。
如图2所示,进行M=2N+1分频时,k1是在clk上升沿且计数周期为M变化的信号。当计数器值为0~N时,k1保持低电平,计数值为N+1~2N时,k1保持高电平。
图2 占空比为50%的5分频仿真结果
k2与k1一样,唯一不同的是:k2是在clk的下降沿变化。最后将k2与k1进行或运算即可得到占空比50%的任意奇数分频器。
4.半整数分频器
半整数分频器原理如图3所示[3]。主要包括模M计数器,异或模块和2分频模块三个部分。其设计思想是:通过异或门和2分频模块组成一个改变输入频率的脉冲添加电路,即在M-0.5个输入信号周期内产生M个计数脉冲,并将其中的一个计数脉冲的周期变为含有两个脉冲的周期。而这种改变的具体实现是将原始时钟信号与2分频模块的输出进行异或。
图3 半整数分频器原理
另外,不难发现此原理图还可以实现占空比为50%的2M-1倍的奇数分频。当M=3时,其仿真结果如图4所示。原理图的输出端口q即为占空比为50%的5分频,输出端口C为2.5分频。
图4 半整数分频器仿真结果
5.数控通用分频器的实现
综上,利用模N计数器、脉冲添加电路,以及控制模块即可实现占空比可调的通用分频器。在具体设计过程中可采用层次化的设计方法。首先,设计通用分频器中各组成电路元件,然后通过元件例化的方法,调用各元件,实现通用分频器。
图5 通用分频器原理图
其中:
模N计数器的实现可以采用两种方式:
一是调用L P M库中的参数化的计数器模块LPM_COUNTER,根据向导对参数进行设置,QuartusII会生成相应的。vdh计数文本。为了能够调用计数文本,最后还需要利用VHDL语言对该计数文本设计一个例化程序,并将其设置为顶层文件。二是利用VHDL描述语言实现。
二分模块是利用D触发器来实现的,即将D触发器的输出信号Q反馈回来作为输入信号,将模N计数器输出信号的最高位作为D触发器的时钟信号。
其顶层原理图如图5所示。其中a为分频模式选择,当a=00时进行偶数分频;当a=01时进行占空比为非50%奇数分频;当a=10时进行占空比为50%的奇数分屏;当a=11时进行半整数分频[2]。端口M的作用是控制分频数。端口K的作用是进行偶数(M=2N)和奇数(M=2N+1)分频时,调节占空比,当k=N时,占空比为50%.
6.结论
本设计的最终目的是实现分频器的通用性和实用性,本设计中控制端口M、K、以及计数器N的位宽均采用参数化设计思想,用户根据需要对其稍加修改就可满足不同的分频需求,在一定程度上实现了通用性。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)