在传统设计中,所有计算机运算(算法、逻辑和存储进程)都参考时钟同步执行,时钟增加了设计中的时序电路数量。在这个电池供电设备大行其道的移动时代,为了节省每一毫瓦(mW)的功耗,厂商间展开了残酷的竞争,因此将电路分成多个电源域并根据要求关闭它们,并且在设计每个时序电路的同时节省功耗,这两点至关重要。时序电路(如计数器和寄存器)在现代设计中无处不在。本文以约翰逊计数器为例介绍了如何采用有效门控时钟来设计高能效的时序电路。
约翰逊计数器系统,可同步提供多种特殊类型的数据序列,这对于大多数重要应用(如D/A转换器、FSM和时钟分频器)来说至关重要。为支持不同频率(从MHz到GHz)的模块,越来越多的IP集成到片上系统,因此,设计中在不同层级实施了许多可支持多个分频因子的时钟分频器。本文中,我们介绍了一款节能设计,即用带有门控时钟的多级可编程约翰逊计数器系统来取代多个时钟分频器,该计数器可提供8至任何偶数值(在本文中为38)的时钟分频因子。下面,我们将探讨实施细节和该技术的优劣。
典型时序电路
图1给出的是一款传统4位上升沿约翰逊计数器。约翰逊计数器只不过是修改过的移位寄存器,其最后一个D触发器的反相输出作为第一个D触发器的输入。所有其他触发器将接收上一个触发器所提供的输出。
图1 传统约翰逊计数器
如表1所示,在所有的纵列中,4个连续的“0”后面都跟随着4个连续的“1”,但所有纵列都位于不同的阶段。约翰逊计数器可同步创建一个特定的数据模式。该数据模式在建模时非常有用,因为它可以使用任何抽头就可以产生一个有不同阶段的时钟样式的模式。此外,从表中可以推导出,约翰逊计数器只使用了N个触发器提供2N个状态,因此,与标准环形计数器相比,约翰逊计数器仅需要一半数量的触发器便可实现同样的MOD.
表1 约翰逊计数器的状态图
典型时序电路的缺陷
如图1所示,这种电路最大的缺点是不可配置,因此,不能改变时钟分频因子。一个N触发器设计只能产生2N个周期的时钟。需要预先将固定数量的触发器加入到设计中,才能产生固定周期的时钟。这大大阻碍了特定时钟的设计,而且多个这样的设计,需要多种分频因子来进行分频。
另外,该设计非常耗能,并且也没有机制可通过高效门控时钟来节省动态功耗。如表1所示,Q3只能在时钟脉冲2和时钟脉冲6中改变其输出,对于所有其他时钟而言,触发器一次又一次地存储了相同的数据。这导致在时钟周期内产生了不必要的功耗,而采用适合的门控时钟可解决该问题。
通过调整结构和门控时钟来增强电路
任何时序电路都可通过调整结构和有效的门控时钟加以增强。图1中所示的约翰逊计数器在图2种得到了增强,可以灵活地支持多种分频因子,产生可变化的输出频率。
为了使其可编程,触发器的多个延迟阶段都加入了所需的组合逻辑,以根据所需分频因子进行选择。
图2显示的就是一款低功耗可编程约翰逊计数器。该电路包括级联延迟阶段B1、B2、B3、B4、逆变器I、参考时钟输入CLK、门控时钟逻辑CGL,以及控制逻辑(分频器和减法器),可根据要求选择触发器组合。
图2 低功耗可编程的约翰逊计数器
在图2所示的修改后的约翰逊计数器电路中,我们采用了19个D触发器,这些触发器提供8至38以内的偶数值的分频因子。可通过添加额外的触发器和多路复用器,使所需分频因子进一步增加至任何偶数值。多个路径可将触发器“a、j、o和r”的输出连接至相应的多路复用器输入,例如,分流路径将触发器“a”的输出连接至第一个多路复用器的第一个输入,延迟路径则将触发器“a”的输出[经过一组触发器(b、c、d、e、f、g、h、i)]连接至第一个多路复用器的第二个输入。这种实施方案允许选择多路复用器输出,使电路具备所需的可配置性,可以支持多个分频因子。
如图3所示,为了节省功耗,控制电路输出馈入CGL中,以根据所需分频因子启用或禁用“延迟路径触发器”的时钟。当分频因子为2N时,需要N个触发器提供所需的时钟频率。为了促进多路复用器输入的选择,并为时钟门控逻辑启用所选的输入,我们添加了一个主要由减法器构成的控制逻辑。该减法器可根据用户所提供的分频因子,将N-4作为输出提供,并且减法器(sel[3:0])的二进制输出位数每个都可作为4个多路复用器(1st、2nd、3rd、4th)的相应选择线路,并使CGL以高效的方式对触发器的时钟进行门控。
这有效地实现了设计的可编程化,并降低了计数器的动态功耗。
图3 电路运算说明图
电路运算
以分频因子为10(即2N=10)的电路为例。由于传统约翰逊计数器在分频因子为2N时需要N个触发器,要使分频因子为10,电路中需要2N/2 = 10/2 = 5个触发器。分频器电路的输出是2N/2 = 5,这时减法器的输出则为(5-4)= 1,再馈入多路复用器的选择线路,其二进制表示为0001.这个4位sel[3:0]=0001信号极为重要,因为它不仅控制着门控时钟逻辑,还在分流和延迟路径中做出选择。
图4 分频因子为10的电路运算
在这种情况下,只有Sel[0]会变为1并启用s触发器的时钟,并且同样地,sel[3]、sel[2]、sel[1]将相应禁用(b、c、d、e、f、g、h、i)、(k, l, m, n)、(p、q)触发器的时钟,见图4中突显部分。另外需要注意的是,“a, j, o和r”触发器将始终启用。这样一来,不仅启用了所需的触发器,并且该电路可在第4个多路复用器的输出上获得所需的输出时钟。因此,在这个示例中,共有5个触发器接收到时钟,其他触发器的时钟将自动被禁用。
我们对上述计数器进行了模拟,其结果以RTL波形的形式呈现在图5中。根据图5可以推出:修改后的计数器采用sel[3:0]作为4'h0001,将一个100 MHz的时钟进行分频,提供10 MHz的输出。
图5 分频因子为10的波形
推荐的电路可实现各种组合,表2列出了多路复用器所选择的输入。
表2 不同分频因子的多路复用器
推荐方法的优势
本文所介绍的约翰逊计数器可根据分频因子(范围为8至38)进行编程,按提供给计数器组合逻辑的输入所配置的提供一系列输出频率。
即使此计数器中配备了额外的硬件来实现可编程性,但是该电路的功耗通过一个逻辑提供的有效门控时钟进行控制,该逻辑与在选择阶段挑选多路复用器时所采用的逻辑相同,并启用门控时钟单元。
因此,将门控时钟添加到设计内以后,任何从移位寄存器传送至计数器的时序逻辑都可以变得更加高效,并且片上系统的一系列此类电路综合起来可以节省功耗并延长设备电池寿命。
总结
在设计阶段,由于架构师对电路的功耗要求越来越严格,并且倍增系数越来越大,因此对多路复用级联时钟分频器的需求也随之加大,但这种分频器会使电路消耗更多的功耗,并且占用更大的芯片面积。结构调整后的设计却提供了一个更加轻松的解决方案,与传统电路相比,重组后的电路可支持不同的输出频率,同时消耗更低的功耗。该解决方案还可轻松应用至各种其他设计中,使其他设计变得更加节能。