在做clock gating的时候要通常注意以下2点:
1) 通常现在位宽比较大的寄存器加gater
因为加gater本身也会增加面积和功耗,所以要综合考虑。比如只有一位寄存器,加了gater省下的功耗还不如gater本身的耗电高,所以不值得。
2) 当我们加了gater以后要保证原本的电路功能不变
b. 基于电压域(voltage)的低功耗设计
电压与功耗有着密切的联系。因此功耗的降低可以考虑使用低一点的电压。多电压设计技术有三种方式:
A:各电压区域有固定的电压,如上图(a)所示 ;
B:各电压区域具有固定的多个电压,由软件决定选择哪一个电压,如上图(b)所示;
C:自适应的方式,各电压域具有可变的,由软件决定选择哪一个电压,如上图(c)所示。
A 是固定分配的电压,而B和C为动态电压管理,涉及到软硬件协同设计。
这里就要提到DVFS技术:dynamic voltage dynamic frequency scaling,动态电压频率技术,是一种通过将不同电路模块的工作电压及工作频率降低到恰好满足系统最低要求,来实时降低系统中不同电路模块功耗的方法。
电路模块中的最大时钟频率和电压紧密相关,如果一个电路能够估算出它必须做多少工作才能完成当前的任务,那么理论上讲就可以将时钟频率调低到刚好能适时完成该任务的水平。降低时钟频率意味着可以同时降低供电电压。频率和电压同时降低,功耗就大大降低了。这个是DVFS的原理。
DVFS技术这个种方法属于电压的动态管理,可以通过软件和硬件的方式实现。
c. 使用不同的阈值库文件(Multi-threshold libraries)
如果想要MOS管导通,低阈值的cell需要的导通电压更低,所以相比高阈值的cell,它导通的更快,与此同时,它的漏电也越多。
所以在做综合或者PD的时候,就要想好策略来平衡速度与功耗。
d. RTL设计
在我们做RTL设计的时候,我们依然有办法来节省功耗,来举个例子:
下图是一个典型的pipe line的design,当它处于工作模式下,每一个寄存器在clk的驱动下都在跳动。
这是对其网表的仿真波形:
此时我们可以对design做一些改进,比如用write_pointer和read_pointer, 普通的pipe就是数据一位一位的传输下去,此时改进以后,就是pointer动而pipe数据不动,从而减少寄存器翻转次数。此时该电路的行为更像ram, 我们甚至可以用latch array,因为latch array面积更小。
改进后的仿真波形,我们可以看到Q端的跳动大大减少了。
功耗分析的EDA工具
以下是做power 分析的常用工具PTPX/Power Artist
PTPX
To calculate the power based on waveform
input design and waveform based on the design
report the power consuming data for all levels
Power Artist / Power Pro
Good at analysis rtl
Dynamic analysis with waveform
Statistic analysis without waveform
Provide design improvement suggestions (most on the clock gating efficiency
写在最后
没有什么是免费的,很多时候降低功耗势必会使其他方面受到影响,比如面积,性能等。
对功耗的优化也要有针对性,比如台式机可能更注重性能,而手机就要性能和功耗更平衡。所以对不同的产品要做针对性的平衡。
不讲项目时间表/工程师资源/风险等因素,而是一味的要求降低功耗的老板都是在耍流氓!