clock Gating

一、为什么要做clock gating?

芯片中的功耗可以广义的定义为动态功耗静态功耗

静态功耗通常包含芯片在不翻转的状态下产生漏电功耗(关不紧产生的功耗)、衬底电流产生的功耗、热电子效应导致的电流效应而产生的功耗等及部分组成。通常情况下,静态功耗在前端设计阶段很难做出一些优化(可以做电源关断处理)。而是一般要基于ME/BE的流程或者工艺方面的改善才能够达到更好的结果。
静态功耗如下图:
在这里插入图片描述

动态功耗的来源通常包含了两个部分,第一部分,芯片中功耗消耗所占比例最大的一部分,是由于cell的充放电产生的功耗,如下图,以Inverter电路为例,由一个PMOS和一个NMOS构成,在输出端可以等效认为有一个对地电容,每次IN从0到1,PMOS会从导通状态变为断开状态。相反NMOS会从断开状态变为导通状态。从而导致电容从NMOS对地放电。
相反, 当IN从1到0,会导致电容通过PMOS充电,这种充放电的过程会消耗很大一部分电能,从而产生功耗。
在这里插入图片描述

动态功耗的另一部分是由于cell在翻转过程中,PMOS和NMOS同时导通的瞬间产生的功耗,又称作internal power,如下图,cell在翻转过程中,总会出现一小段时间PMOS和NMOS同时处于导通状态,这时就会出现从VDD到GND的一条直流通路,这个过程虽然很短,但是处于这个过程中,电路中的电阻是非常小的,所以整个通路中电流就非常大。但是尽管如此,与上面所讲的动态功耗相比,所占比例还是相对较小。在这里插入图片描述
由上面分析可以看出,动态功耗到产生都是由cell翻转导致的。而在芯片中,翻转频率最高的路径便是clock path了。并在时钟路径上要做的就是CTS处理(clock tree)的,就会导致整个clock路径上的CK-BUF或CK_INV特别多。而clock每个cycle的翻转会带动整条path上所有cell的翻转。据统计,一个芯片中,clock路径上的这种功耗消耗会能够占据到整个芯片功耗比例的40%甚至更多。所以对clock路径做动态关断,能够很大程度上节省功耗消耗。这种对clock进行关断的技术就被称作是clock gating。

二、如何做clock gating(基于CELL)?

在这里插入图片描述
如上图所示,data_out在被实现之后可以认为是一个DFF,此DFF的数据并不是每个clock cycle都会有效,只有在data_en==1的时候。DFF在clock的上升沿才会被重写一次。而在其他clock cycle的上升沿,DFF数据实际上是不会被重新覆盖额。这就给我们提供了一个思路,clock的翻转其实只有在data_en为1的前提下才是有意义的,其他cycle都是无效的翻转。

那如何将这些无效的clock翻转带来的功耗消耗节约下来呢?我们其实只要能够实现如下的clock波形就可以了。在这里插入图片描述
有了这个思路,我们就容易寻找解决方案了。看到波形我们很容易的就能够想到可以通过AND-GATE或者OR-GATE的方式,将clock做与/或运算,这样就能够达到我们想要的效果了。
通过AND-GATE或者OR-GATE的方式跟原来CLK做运算,将原来的CLK转化为CLK_G之后,就得到了一个只有在EN有效的时候clock 才会翻转的波形。这种形式的转化过程就是最基本clockgating的形式 – 基于AND/OR GATE电路的clock gating。在这里插入图片描述
这种基本形式的clock gating虽然电路简单,但在真正实现和使用的过程中是要考虑和规避一些问题的。
在这里插入图片描述
基于AND-GATE形式的clock gating,由于AND的功能,会将clock在高电平时的信号放过去。这样就会引入一个问题,我们必须要保证EN信号在clock高电平期间是稳定的,不能有glitch,否则就会使得到的clock –CLK_G产生glitch(毛刺)。
那如何保证EN信号在clock高电平期间时稳定的呢?很容易想到,EN信号的产生source,不能是源于上升沿触发的register。如果EN信号的产生源于上升沿触发的register,那么经过组合逻辑之后,很容易在clock的高电平期间产生如下glitch:
在这里插入图片描述
如果要解决这个问题,将EN的source在register的下降沿触发,这样EN信号在第一个clock上升沿来临之前有半个cycle的时间,可以让EN信号稳定下来,即,达到了让EN信号在clock上升沿到来之前稳定的目的。并且基于与门形式的clock gating电路,ME/BE工具在check timing的时候,一定能check并约束到这一点。如果EN信号在clock上升沿之前能够稳定,即整个clock高电平期间EN信号不会有glitch,这样就能够保证最终产生的clock是稳定没有glitch的。在这里插入图片描述

同理,基于OR-gate的clock gating也需要有类似的考量。只是通过分析之后会发现,其需要EN产生的register采用上升沿触发的register。最后我们可以总结得到:如果要基于ANG-GATE做clock gating,需要EN产生logic是falling edge触发的DFF;如果要基于OR-GATE做clock gating,需要EN产生logic是rising edge触发的DFF。
上面我们在分析的过程中,也提到了基于这种基本CELL方式clock gating,EN信号出来到运算稳定,只有半个cycle的时间。

三、如何做clock gating(高频基于ICG)?

如果要gating的clock时钟频率特别高的话,此处就很有可能会存在很难收敛的timing问题。

要解决上面问题,可以让EN信号的稳定时间延长,换句话说,就是要“借”半个时钟周期来让EN信号稳定。这可以可以用另一个基本CELL —LATCH(锁存器),在电路中可以实现借时间的用途,称作timing borrow。

关于latch在之前的文章有讲过,在数字电路中,很不希望出现锁存器,其中主要一点就是它的timing borrow属性,在做timing时候,会增加很大难度。但是有两个地方经常使用到latch电路,一个就是这里要说的实现clock gating。另一处就是DFT中为了解决hold timing问题。

latch + AND gating电路
原来的AND之前加入一级clock low-active的latch,构成如图所示的电路结构,其时序图如图中下所示。由于加入的LATCH是低电平有效的,所以在CLK为高电平期间,EN信号就算是不稳定,有glitch存在,也不会通过LATCH往后传递。而LATCH之后加入的AND电路,又保证了低电平期间传给LATCH的EN毛刺被挡住了。这就保证了EN信号在整个CLK cycle之内都可以随意toggle。而LATCH的特殊属性,在整个CLK为低的半个cycle期间EN信号都可以锁存进latch,只要保证EN信号在下一个CLK的上升沿来临之前稳定(保证latch的setup/hold time),就能够将正确的EN信号锁存进去。 在这里插入图片描述
基于这种结构clock gating电路,就能够很好地解决了之前提到的EN信号只有半个cycle的稳定时间的问题。

latch + OR gating电路
基于LATCH+OR的clock gating电路形式。如图二所示,其跟AND形式的不同点就是,前面的LATCH要换成clock high-active,并且根据EN信号的高低电平有效不同,会决定图中inverter CELL是否存在,可自行推导,不在赘述。同样基于这种结构的clock gating电路,也能够为EN信号稳定争取到一个CLK cycle的时间。在这里插入图片描述

如果要想LATCH+AND 电路能够为EN信号提供一整个cycle的运算时间的话,那么EN信号的source register一定要是rising-edge触发的;同理LATCH+OR电路如果想能够为EN信号提供一整个cycle的稳定时间,那么就需要EN信号的source register是falling-edge触发的。

  • 28
    点赞
  • 251
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值