低功耗设计概述
低功耗设计动机
- 功耗的增加影响芯片Power grid(电源网格)的设计;
- 功耗的增加导致芯片温度的上升,进而带来一系列影响。如Leakage Power增加;电路时序可能变差;IR Drop(IR压降)变大;
- 功耗的增加导致芯片封装成本和散热成本的增加(packing cost、cooling cost)
- 功耗的增加会影响芯片的长期可靠性(Long Term Reliability);
- 对于便携设备来说,功耗的增加会导致电池寿命的降低和重量的增加;
- 某些产品对对耗电有严格要求,例如基站的用电成本占运营商开支的30%。
CMOS电路功耗来源
CMOS电路功耗=动态功耗(Dynamic Power)+静态功耗(Static Power).
(1)静态功耗(Static Power)
静态功耗(Pstatic)是指电路不翻转时所消耗的功耗,器件中所有晶体管的漏电流(源极到漏极以及栅极泄露)引起的功耗,以及任何其他恒定功耗需求,即leakage power。电路处于静态时,由于 CMOS管没有完全关断,源漏之间的亚阈值电流和有源区与衬底之间的反向漏电流仍会造成功耗消耗。静态功耗主要由上述两种漏电流造成。
,其中Igate为有源区与衬底之间的反向漏电流,Is→d为源漏之间的亚阈值电流。
- 静态功耗增加的比例大约是温度增加的3次方(或1.03倍)
- 随着工艺提高,要求沟道相对宽度L减小,漏电流越大;
- 静态功耗与供电电压呈线性关系
(2)动态功耗(Dynamic Power)
动态功耗(Dynamic Power) = 开关功耗(Switch Power)+ 短路功耗(Short-current Power)
Switch功耗(Pswitch)是指CMOS电路输出发生翻转时对负载电容充放电时所消耗的功耗。负载电容包括net电容和gate电容,
其中,A为电路翻转活动因子,C为电路负载电容和固有电容,f为电路工作频率。Switch功耗与供电电压呈平方关系,随逻辑反转率线性增长;逻辑的布线影响C,进而影响动态功耗,C是同等规模FPGA比ASIC功耗大的主因。
Short-current功耗(Pshort)是指 CMOS电路的输入变化导致输出状态翻转的时候,在电源和地之间形成的短暂通路所消耗的功耗(可以理解为Q1、Q2的延迟不一致,当Q1导通时,Q2也导通,会形成一瞬间的VDD到GND的通路), Pshort = A*V*Isc*f,其中,A为反转活动因子,V为供电电压,Isc为短路电流,f为运行频率。
功耗优化时间窗
低功耗设计涉及系统设计、架构设计到生产工艺的各个阶段,不同的设计层次采用相应的功耗优化设计技术。实践证明,按照自顶向下的电路设计方法,在不同设计层次上对功耗进行优化时,改善的程度是不同的:设计层次越高,优化所能达到的效果越好。
以微处理器设计为例,在系统结构级上进行优化,它们的优化程度20%~90%不等,RTL(寄存器传输)级优化程度为10%~15%,而到版图级时优化程度则小于5%。
低功耗设计目标的实现是权衡收益与代价的结果。芯片设计是一个追求性能、面积和功耗等多个设计目标的过程。总的来说,面积 、成本、性能、功耗、风险、进度等因素都是相互关联和相互影响的,优化芯片的功耗势必会影响到芯片的其它方面,例如高性能必然伴随着高功耗。低功耗设计的目标就是采用各种优化技术和方法,在各个设计目标之间找到最佳的结合点,选择一种较好的折衷方案。
低功耗编码
复位方案
复位信号的扇出和功耗,都仅次于时钟网络,设计原则上要简化复位网络,减少对布线资源的占用。大规模逻辑的reset的网络占用了走线资源,如果能省掉一半的reset布线,其他信号就拥有了更多的布局布线选择,拥塞会缓解,时序有优化,功耗同样可以优化。
建议数据路径尽量不用reset,控制路径如果必须用,也尽量用同步复位。ASIC芯片无复位寄存器面积小于带复位寄存器,功耗也小。例如3种28nm HPTSMC工艺下的寄存器参数,可以发现同一类型下面积差别如下;
同步复位比无复位的REG面积大约5~15%左右;
异步复位比同步复位的REG面积大约0~10%左右;
Memory方案
设计原则:合理使用Memory模式,降低Memory组件功耗。
设计原则描述:系统设计时,优化Memory数目和大小。大规模逻辑Memory功耗占比较高,通过控制Memory使用,减少Memory反转,降低Memory功耗。
- 在设计上尽量减小Memory的大小,减小无效读写次数,避免无效访问。尽快利用计算后的结果,减少对临时存储的需求。
- 门控处理:用Memory的片选信号(或者读写使能)对时钟和地址/数据总线进行门控处理,减少时钟和地址总线不必要的翻转。例如某些Memory在某种工作模式下没有用到,则可以关闭时钟信号。在没有读写操作时必须为无效状态,地址在没有读写操作时必须为固定值,例如为上一次操作的历史值。
- 存储器分片处理,减少同时访问Memory块数,降低整体功耗。通过将系统所需要一定容量的存储器分成多块,然后高位地址线进行片选译码。通过这种分片方式,来降低Memory访问功耗,适用于大块Memory。越大的Memory,时序越差;分片处理可降低Memory功耗,对Timing也有好处,但是对面积指标会有影响。将小的Memory合并为大的Memory,可以减小面积;将大的Memory拆分为小的Memory,可以降低功耗和优化时序,这两者在设计时需要进行折中权衡,例如:1024*32的两块RAM和2048*32的一块RAM。面积:1块2048的比2个1024的小;功耗:采用2块1024的RAM,每次读写只操作了2块中的一块,读写的动态功耗小。采用1块2048的RAM,读写的总次数不变,但是由于每次操作的都是一块大RAM,读写的动态功耗大。
平均动态电流(mA) | 芯片面积(mm2) | |
优化前 | 13.4 | 6.4 |
优化后 | 11.2 | 6.4 |
- 小深度的RAM由寄存器数组替换,深度小于64的RAM,建议用存器数组来实现,功耗和布局上都有帮助。
- WRITE_MODE推荐全部用NO_CHANGE模式,功耗最优。
- RAM的读使能启用,不访问时建议启用ram sleep mode。并且RAM读出的数据用读使能锁存,减少数据的翻转。
- 挖掘更有效的数据存储格式,减少对冗余信息的存储。
- 采用合理高效的层次化Memory结构,提高Memory使用效率,合理安排片内片外Memory比例。
- 控制对Memory的读写操作次数,提高读写效率对Memory地址和数据总线的处理。
- 编码处理:对地址总线进行编码,编码的目的是为了降低地址总线的翻转率;例如,对于深度为2^n,并且地址规律递增或者递减可以进行格雷码编码,减少地址bit位翻转,降低功耗。
- Memory选型
对于ASIC:
- 如果Vendor提供低功耗Memory库,在性能和面积满足要求的情况下,建议选用低功耗Memory库。通常我们以端口功能来对Memory分类,对应到物理实现上,每一种memory,都有多个不同的类型可以选择,包括HSD(高速)、HDE(高密度)等。Memory的功耗、面积与其bit数,并不是理想的比例关系,具体选择哪一种memory类型,需要实际综合一下看看。另外注意进出低功耗模式有时间开销,需要在设计中提前考虑能否及时切换。
- SRAM和RegFile之间的选择:如果SRAM和RegFile深度和位宽规格相同对两者的面积和功耗进行评估,从中选择更优的。
- 一般Memory具有Power gating/power retention等低功耗特性,支持这些低功耗特性的Memory面积会稍稍变大,根据应用场景分析且在面积成本可接受的前提下,推荐选用这些低功耗特性Memory;可在Memory idle条件下彻底关断电源以节省漏电。
对于FPGA:
- WRITE_MODE推荐全部用NO_CHANGE模式,功耗最优。
- 大块的RAM使用URAM替代(X 16nm FPGA以后);
- RAM的读使能启用,不访问时建议启用ram sleep mode。并且RAM读出的数据用读使能锁存,减少数据的翻转。
组合逻辑电路
设计原则:优化流水线,减少组合逻辑毛刺,降低功耗。
设计原则描述:组合逻辑,尤其是异或逻辑,每次输入的任何变化都会改变输出值,对于高位宽XOR逻辑,功耗会非线性增加。
插入REG分解流水
加解密压缩以及CRC模块存在大量高位宽的XOR逻辑,导致信号反转率飙升,信号消耗的功耗较大。解决办法是在中间插入寄存器,但会额外增加一个周期的延时,如果无法承受这部分时延,建议插入下降沿触发器,这会影响时序,但对功耗有帮助。
操作数隔离技术
对设计中的算术运算单元做操作数隔离设计,主要思想是:在不进行算术运算的时候,使这些模块的输入保持不变,不让新的操作数进来,使得输出结果不会翻转;而在进行算术运算的时候,再将它们打开。从而去除算术单元的冗余运算,达到降低翻转率的目的。以乘法器为例,是一个组合逻辑,输入数据如果一直在变化,那么这个乘法器会一直有相应的动态功耗。
超前计算技术的本质是操作数隔离,主要针对复杂运算。一般地,一个复杂的运算过程通常由很多计算步骤组成,而这些计算步骤由不同的功能逻辑完成。针对某一种具体的输入,有些计算步骤其实并不需要,可以简化关键是如何判断。因此,可以通过超