大多数低功耗设计手法在严格意义上说并不是由后端控制的,Clock Gating也不例外。在一颗芯片中,绝大多数的Clock Gating都是前端设计者或者EDA综合工具自动加上去的,后端只有在极端例外的情况下才会动到它们。
尽管如此,Clock Gating的影响与后端息息相关,甚至会引起后端的一些问题,因此我们有必要从头理解一下它的原理。
芯片功耗从原理上区分主要有两大类:静态功耗(Static Power)和动态功耗(Dynamic Power)。二者的形成原因如下:
动态功耗和静态功耗
所谓动态功耗,主要是由于信号的翻转从而导致器件内部的寄生RC充放电引起的,而静态功耗则是由器件在通电状态下的泄漏电流(Leakage Current)引起的。对此,为了节约动态功耗,最初有个十分简单的想法:在芯片实际工作过程中,有些信号或者功能并不需要一直开启,那么就可以在它门不用的时候将其时钟信号关闭。这样一来信号不再翻转,从而能够有效减少动态功耗,这就是Clock Gating。
那么Clock Gating是如何被加入到design中的呢?下面的例子介绍了在RTL阶段加入Clock Gating的方法:
RTL Clock Gating
可以看到在加入Clock Gating之后,DFF的clock信号前多了一个使能端EN,从而可以控制该时钟信号的打开与关闭。
除此之外,在综合阶段,EDA工具同样支持自动插入Clock Gating。以Synopsys公司的Design Compiler工具为例,简单的插入Clock Gating的方法如下:
Synthesis Clock Gating
Clock Gating在后端会引起一些问题,尤其在Setup Timing以及时钟树综合阶段,有时候会需要做一些特殊的处理。关于为何Clock Gating容易引起setup timing 的问题,请参考本专栏的文章【后端Timing基础概念之:为何ICG容易出现setup violation?】
为了尽量避免ICG的setup timing,解决办法之一是将ICG放在距离register(sink)尽量近的地方:
ICG Setup
当然,EDA工具也提供了一些优化方法以便在早期发现和解决ICG的问题,这些技巧希望大家在实践中多多尝试和挖掘。
相关文章
如果大家有任何后端技术与职业发展方面的问题,抑或关于数字后端感兴趣的技术话题想要了解和探讨,欢迎关注我的知乎专栏: 数字IC后端设计工程师修炼之路同时欢迎关注微信公众号:数字后端芯讲堂,一起探讨技术,共同提升!
本极术专栏也会同步更新芯片设计后端的技术干货,也请关注数字IC后端设计工程师修炼之路。