FPGA基础但重要的部分——触发器,计数器,分频器

今天来和大家讨论FPGA中一些很基础但是也很重要的一部分——触发器,计数器,分频器。

触发器最简单的应该是R-S触发器,其示意图及真值表如下:


基于R-S触发器再增加两个与门,如下:

然而真正有意义的输入是置位为0,复位为1或复位为0,置位为1。把数据端信号当作置位信号,它取反后的值就是复位端信号,如下:

就构成了电平触发的D型触发器,D(D a t a)表示数据端输入。所谓电平触发是指当保持位输入为某一特定电平时,触发器才对数据端的输入值进行保存,通常情况下,输入并不被标为保持位,而是标为“时钟”。把数据端简写为D,时钟端简写为C l k,其功能表如下所示:

除了电平触发,还有边沿触发的D型触发器,由两级R-S触发器按如下方式连接:

其功能表如下:

现在将一个振荡器与边沿触发的D型触发器连接在一起(振荡器的输出是在0和1之间变化):

则上述各值如下:

若振荡器的频率是 2 0赫兹,则Q的输出频率是它的一半,即 1 0赫兹。由于这个原因,这种电路(其中 输出依循触发器的数据端输入 )称为分频器。当然分频器的输出可以是另一个分频器的 C l k输入,并再一次进行分频。下面是三个分频器连在一起的情况:

让我们来看一下上图顶部的 4个信号的变化规律:

再把这些信号标上0和1:

这个电路就具备了一个计数功能。

在FPGA的设计中分频器是使用频率较高的基本设计,在很多的设计中也会经常用到芯片集成的锁相环资源,如用Xilinx的DLL以及Altera的PLL来进行时钟的分频、倍频与相移。在一些对时钟精度不高的场合,会经常利用硬件描述语言来对时钟源进行时钟分频。分频器是一种基本电路,一般包括数字分频器、模拟分频器和射频分频器。随着FPGA技术的发展,基于FPGA技术的硬件设计数字分频器已成为数字系统设计的研究重点。数字分频器通常分为整数分频器和小数分频器。在有些需求下还要分数分频器。

现在分别介绍整数分频器的设计、小数分频器的设计和分数分频器的设计。

1、整数分频器的设计

整数分频器是指基准时钟与所需的时钟频率成整数倍关系。整数分频器的分频种类一般包括奇数分频和偶数分频。虽然时钟分频原理会根据时钟分频的要求不同而不同,但均可采用标准计数器原理来实现。

偶数分频器的设计原理较为简单,主要是利用计数器来实现。假设要进行n(n为偶数)分频,设定一个在分频时钟上升沿触发的计数器循环计数来实现。当计数器值为0-((n/2)-1)时,输出时钟信号进行翻转,同时给计数器一个复位信号,使下一个时钟上升沿到来时,计数器重新开始计数,由此不断循环。

奇数分频器的设计原理与偶数分频的设计方法很相似,都是通过计数器来实现的。如果要进行n(n为奇数)分频,直接设计n进制的计数器即可。还有一种方法就是选择两个计数器cnt1和cnt2,分别在时钟上升沿和下降沿触发计数。cnt1和cnt2均当计数器值为0-((n/2)-1)时,输出时钟信号进行翻转,同时给计数器一个时钟复位信号,使下一个时钟上升沿到来时,计数器重新开始计数,如此进行循环下去。由此可知,计数器cnt1和cnt2的实现方法一样,只是翻转边沿不一样,最终输出的时钟为clkout = clk1 + clk2。

2、 小数分频器的设计

小数分频的基本原理是采用脉冲吞吐计数器和锁相环技术先设计两个不同分频比的整数分频器,然后通过控制单位时间内两种分频比出现的不同次数来获得所需的小数分频值,分频系数为N-0.5(N为整数)时,可控制扣除脉冲的时间,以使输出成为一个稳定的脉冲频率,而不是一次N分频,一次N-1分频。

小数分频器有很多种设计方案,但其基本原理是一样的,都是在若干个分频周期中采取某种方法使几个周期多计一个数或少计一个数,从而在整个计数周期的总体平均意义上获得一个小数分频比。还有一种分频方法就是,利用状态机和计数器。假设时钟信号的频率为1khz,需要产生750khz的分频信号,其分频系数为6/8。基本设计思想是,在8个时钟信号中保留6个时钟信号。这种方法是需要预先设定状态机的个数,主要用于已经知道需要使用哪一个小数分频系数的情况下。如果分频系数发生变化,则需要在程序内部进行修改。

双模前置小数分频的设计方法是,假设要进行m,n时钟分频(其中m、n都是整数,且n<10),因为只有一位小数,所以总共要进行10次分频。总的规律是:进行n次m+1分频,10-n次m分频。例如,设计一个分频系数为3.6的分频器,将小数部分的6按倍累加,假设累加的值为a,如果a<10,则进行3分频,如果a<10下一次则加上6。此后,如果a>=10,则进行4分频,4分频过后再将累加值减去4后与10比较以决定下一次分频是4分频还是3分频,这样分频器设计成6次4分频,4次3分频,总的分频值为(6×4+4×3)/(6+4) = 3.6。

3、分数分频器的设计

分数分频器的数据输入部分与小数分频基本相同,差别仅在于数码管显示部分显示三位分频系数。由于分数在一定情况下可以转化为小数进行计算,所以分数分频的设计思想与小数分频的很相似。假设进行分频,总分频数由分母m决定,规律是进行n次j+1分频和m-n次j分频。两种分频交替进行的计算方法和小数分频的很类似。累加分结果是大于等于分母还是小于分母决定是进行j分频还是j+1分频。

文章来源:开源骚客