现如今便携式设备在人们的日常生活中已经越来越普及,手机,iPad,电脑已经成为了日常生活的必需品,就连我爷爷奶奶都已经开始使用智能手机视频聊天,刷抖音了。而便携式设备除了性能和大小以外,续航是我们最关心的问题。前几年某手机厂商更是打出了充电5分钟,通话2小时的广告语。
功耗过大的同时会产生更多的热量,设备过热便会影响器件工作,手机电脑会因此卡顿。同时也要更多的去考虑如何散热,增加散热设备,这样又增加了散热成本。
题主的描述比较早了,14年的,这里主要聊聊低功耗设计。那么在芯片设计中主要会用到哪些低功耗设计技术呢?我就根据自己的实践与理解来介绍一下~
Dynamic power and Leakage power:
在数字IC设计过程中,功率主要指动态功耗和漏电功耗
在数字电路中,如果有信号翻转的话,那么便存在动态功耗,而漏电功耗则是一直存在的。
通常情况下,动态功耗远大于静态功耗,但是因为静态功耗是一直存在的,所以我们也不能忽略它。
- 基于时钟(clock)的低功耗设计
- 基于电压域(voltage)的低功耗设计
- 多阈值库(Multi-threshold libraries)
- RTL低功耗设计(Low power design structure)
该方法的设计思想就是当系统(比如手机手机)某一部分不工作时,我们可以控制其时钟的翻转,这样就能节省一部分功耗。举个例子,当我们打游戏时,那么通话模块是不工作的,我们可以停掉其时钟的翻转,从而节省功耗,增加手机的续航。
实现方法举例:
通常情况下我们是通过插入 clock gater 来控制时钟的翻转,插入clock gater是由综合工具自动完成的.
举个例子,有如下的RTL
always @(posedge clk)
if (en)
Q<= D;
它的硬件电路如下图:
插入clock gater的硬件电路图如下:
寄存器级的clock gating 是为了减少一些不必要的时钟翻转。
下图就是clock gating做的不够好的示意图,DFF中间的 idle状态,时钟仍然是enable的。
为了节省功耗,我们可以在DFF idle的时候把enable信号置为0,从而控制时钟的翻转,达到节省功耗的目的,如下图:
在做clock gating的时候要通常注意以下2点:
1) 通常现在位宽比较大的寄存器加gater
因为加gater本身也会增加面积和功耗,所以要综合考虑。比如只有一位寄存器,加了gater省下的功耗还不如gater本身的耗电高,所以不值得。
2) 当我们加了gater以后要保证原本的电路功能不变
电压与功耗有着密切的联系。因此功耗的降低可以考虑使用低一点的电压。多电压设计技术有三种方式:(ps:没想到这个图片还有我渣电的水印,请忽略哈哈)
A:各电压区域有固定的电压,如上图(a)所示 ;
B:各电压区域具有固定的多个电压,由软件决定选择哪一个电压,如上图(b)所示;
C:自适应的方式,各电压域具有可变的,由软件决定选择哪一个电压,如上图(c)所示。
A 是固定分配的电压,而B和C为动态电压管理,涉及到软硬件协同设计。
这里就要提到DVFS技术:dynamic voltage dynamic frequency scaling,动态电压频率技术,是一种通过将不同电路模块的工作电压及工作频率降低到恰好满足系统最低要求,来实时降低系统中不同电路模块功耗的方法。
电路模块中的最大时钟频率和电压紧密相关,如果一个电路能够估算出它必须做多少工作才能完成当前的任务,那么理论上讲就可以将时钟频率调低到刚好能适时完成该任务的水平。降低时钟频率意味着可以同时降低供电电压。频率和电压同时降低,功耗就大大降低了。这个是DVFS的原理。
DVFS技术这个种方法属于电压的动态管理,可以通过软件和硬件的方式实现。
如下图,如果想要MOS管导通,低阈值的cell需要的导通电压更低,所以相比高阈值的cell,它导通的更快,与此同时,它的漏电也越多。
所以在做综合或者PD的时候,就要想好策略来平衡速度与功耗。
在我们做RTL设计的时候,我们依然有办法来节省功耗,来举个例子:
下图是一个典型的pipe line的design,当它处于工作模式下,每一个寄存器在clk的驱动下都在跳动。
这是对其网表的仿真波形:
此时我们可以对design做一些改进,比如用write_pointer和read_pointer, 普通的pipe就是数据一位一位的传输下去,此时改进以后,就是pointer动而pipe数据不动,从而减少寄存器翻转次数。此时该电路的行为更像ram, 我们甚至可以用latch array,因为latch array面积更小。
改进后的仿真波形,我们可以看到Q端的跳动大大减少了。
以下是做power 分析的常用工具PTPX/Power Artist
To calculate the power based on waveform
input design and waveform based on the design
report the power consuming data for all levels
Good at analysis rtl
Dynamic analysis with waveform
Statistic analysis without waveform
Provide design improvement suggestions (most on the clock gating efficiency
没有什么是免费的,很多时候降低功耗势必会使其他方面受到影响,比如面积,性能等。
对功耗的优化也要有针对性,比如台式机可能更注重性能,而手机就要性能和功耗更平衡。所以对不同的产品要做针对性的平衡。
不讲项目时间表/工程师资源/风险的而是一味的降低功耗都是耍流氓!
IC修真院开设数字IC前端设计,验证,后端等课程。每周都有新班开设,报名时和老师说明由【温戈】推荐,可在原有优惠基础上,额外优惠500元!请务必在第一时间向老师说明!
经验上来看,功耗随频率的三次方增长。你可以算一下。差不多吻合。
==========分割线=========
有人说是忽悠出来的,汗。。。我真的是在认真答题。你可以说我经验不足,毕竟没有专注20年,但是用忽悠这个词实在是太不专业了吧。
P=C*f*V^2
频率乘以2,你得把delay除以二。就得增加电压,增加多少呢?你也承认了速度是随电压线性下降的。所以经验上看是电压要乘以2。所以P就乘以8了。前提是对于同一代工艺,相同的架构,单纯改变频率和电压。要想打破这个定律,就得想别的办法,改变架构啊什么的,就不能单纯改变频率和电压这么简单。
而且跑分也不是说跟频率成正比。这个展开说就罗嗦了。
你所说的同一个芯片功耗随频率线性下降,这是因为你这个芯片已经生产出来了电压定了,你把频率降下去,timing constraint都符合,你不降低电压,自然功耗线性下降。
我是从design角度说,你设计的芯片工作在极限频率下的情况,你发挥出极限性能需要多大电压。
既然是专业的不到一秒钟就能想明白吧。
还有
@谢丹提到“power = V^2/R” 我感到有些困惑,这不是静态功耗的算法么?数字电路动态功耗的表达式怎么能没有频率项?我学的基础不扎实,请赐教。
道歉下,因为我平常做的活都是算力是恒定来核算,所以,有误算。三次方的说法是正确的。
这个算是接近我最近的工作了。
1,首先,为啥上面的答案都提到功耗和频率的三次方增长?这个是不对的。
对于同一个芯片,功耗和频率是正比的。
2,其次,作为一颗芯片,即使降低功耗,也不是降频来实现。而是通过降低电压来实现。
power = V^2/R 。同一芯片的R是可以算不变化的。
芯片的速度下降基本上和电压降成正比。
所以,对于10%的性能差异,大约是30%的功耗节省。
3,假设上面功耗50%的差异是正确的,那么还有20%的差异就是来自低功耗的设计了。
低功耗设计有很多种办法,它们都有一个共同的特点:就是要在多种电路中选择,没法很快完成设计。
所以简单回答问题:做成低功耗的CPU,在设计周期上比普通流程要时间长,而且因为低压,
很可能芯片稳定性不如普通芯片(如果要稳定,也就需要更多时间。)这在目前以快速timing-to-market 为主要目标的芯片行业来说,是一个致命的缺点。(别人一年出一款手机,你3年才出
一款,你就会被市场淘汰,一样的道理)
另外,还有一个快速降低功耗的办法,就是走更高的工艺节点。这个受制于生产厂家工艺和投资。
下面有提到降低电压的风险。对于一般来说,降低10%左右是问题不大的。