低功耗设计
低功耗设计比较重要,所以通过在网上参考了IC_learner关于低功耗设计的博客整理了其中的内容,以此梳理一下低功耗设计的脉络,不然一直看不总结太容易忘记啦。
在动态功耗中,开关功耗占大部分比例,动态功耗主要跟电源的供电电压、翻转率、负载电容有关。
在CMOS电路中,静态功耗主要是漏电流引起的功耗,一般指栅极泄漏电流和亚阈值电流。
浪涌功耗是由浪涌电流引起的功耗。浪涌电流是指开机或唤醒的时候,器件流过的最大电流,因此浪涌电流也称为启动电流。
由上及下介绍各层次低功耗设计方法。
系统与架构层次的低功耗设计,可以节省70%以上的功耗。
根据上面已经提到的公式,我们知道,电压与功耗联系密切,因此可以通过降低电压来降低功耗。主要有三种方式:
a. 各电压区域有固定的电压
b. 各电压区域有固定的多个电压,由软件决定选择哪个电压
c. 自适应的方式,各电压区域可变,由软件决定选择哪个电压
在1.1中电压的动态管理,就可以通过软件和硬件方式实现。
以动态电压频率技术(dynamic voltage dynamic frequency scaling,DFVS),即DVFS技术为例,就是一种通过将不同电路模块工作电压和工作频率降到最低,恰好满足系统最低要求,来实时降低系统中不同电路模块功耗的方法。DVFS原理是,电路模块中的最大时钟频率和电压紧密相关,如果一个电路能够估算出它必须做多少工作才能完成当前的任务,那么理论上就可以将时钟频率调低到刚好能适时完成该任务的水平。降低时钟频率意味着可以同时降低供电电压。频率和电压同时降低,功耗就大大降低了。
时钟是系统中频率最高的信号,所以其功耗也是很高的。通过在系统层次,根据应用要求,将系统设置为不同的工作模式,加入时钟控制模块,在不同的工作模式下,选用不同频率的时钟,且关闭一些不需要工作的模块的时钟。
在设计算法时,尽量使耗能多的操作最小化;
SoC设计依赖于IP的集成,所以在选择IP时,除了要考虑性能,还要考虑功耗问题。
通过异步设计(不使用全局时钟,两个模块通过握手信号进行交互,降低时钟网络的功耗);
在大多数DSP中,需要用到快速傅立叶变换(Fast Fourier Transform, FFT)算法。FFT算法需要频繁访问存储器,我们可以在存储器和处理器之间添加缓存,使用小范围的缓存能够使计算能耗大量下降,提高的FFT的效能;
还可以考虑可测性设计上进行低功耗设计、**存储器(内存)**的低功耗设计等。
并行和流水线方式运行功能模块,都是用面积换速度。
并行处理常用于数字信号处理部分,采用并行处理可以降低系统工作频率,从而降低功耗,比如用两个乘法器取代原设计中的一个乘法器;
流水线技术可以将一个较长的组合路径分成M级流水线,路径长度缩短为原始路径长度的1/M,那么一个时钟周期内充放电电容变为C/M。如果加入流水线后,始终速度不变,那么在一个周期内,只需要对C/M进行充放电,而不是对原来的C进行充放电,因此在相同速度要求下,可以采用较低的电源电压来驱动系统,这样系统的整体功耗可以降低。
对于设计比较多算术运算的设计,如果同样的操作在多处使用,那我们就可以避免相应的运算逻辑在多个位置重复出现;
另外,对一些变化非常频繁的信号,利用数据编码来降低开关活动(如使用格雷码比二进制码翻转更少,功耗更低);
操作数隔离(operand isolation,简称OI)的原理就是:如果在某一段时间内,数据通路的输出是无用的,则将它的输入置成个固定值,这样,数据通路部分没有翻转,功耗就会降低。
上面的电路图中,当SEL_0≠1,SEL_1≠0时,加法器Add_0的运算结果并不能通过mux_0和mux_1到达寄存器reg_0的输入端口,也就是说寄存器reg_0将不会保存加法器Add_0的运算结果,这就意味着加法器Add_0的运算是不必要的。为了节省功耗,我们可以用操作数分离的方法,在某些条件下,使加法器不工作,保持静态,进行操作隔离之后的电路如下所示:
门控时钟有两种方案:一种直接针对寄存器的时钟进行门控(更灵活,主要讲述),一种对模块级别的时钟进行门控。
如上图所示,将控制信号(EN)直接与时钟信号(CLK)进行与操作,以完成门控。门控后的时钟信号GCLK送到寄存器阵列中。这样,当EN为0时,该时钟被关掉。这种方式中,为了使门控时钟不出现毛刺,使能信号EN需要满足的条件是,它是寄存器的输出,该寄存器的时钟信号与要门控的时钟信号是相同的。
分散的锁存器+与门:
由于锁存器在CLK为低时透明,所以,EN 信号上的毛刺仅出现在CLK的低电平处,EN1与CLK进行与操作,可以将这部分毛刺消除掉。这样,GCLK上就没有毛刺了。但是如果在电路中,锁存器与与门相隔很远,到达锁存器的时钟与到达与门的时钟有较大的延迟差别,则仍会出现毛刺。
集成的锁存器+与门:
将锁存器和与门做成一个逻辑单元,就可以消除分散锁存器中的毛刺问题;
采用门控时钟,可以非常有效地降低设计的功耗,一般情况下能够节省20%~60%的功耗。此外,由于门控时钟不需要用到MUX单元,加入门控时钟电路后,设计的面积也减少了。
门控时钟电路非常容易实现,用工具自动插入门控时钟,不需要修改RTL代码,且门控时钟与工艺无关。
在DC中,我们主要通过命令来设置门控时钟(Clock Gating)的风格和通过命令“启动”插入门控时钟把普通的综合结果“转换”为门控时钟的结果。因此,门控时钟的实现主要有两步,一步是设置门控时钟的风格,通过命令set_clock_gating_stale 及其选项来实现;另一步就是在网表中加入门控时钟,通过命令insert_clock_gating来实现。
门级电路的功耗优化(Gate Level Power Optimization,GLPO)是从已经映射的门级网表开始,对设计进行功耗的优化以满足功耗的约束,同时设计保持其性能,即满足设计规则和时序的要求。门级电路的功耗优化包括了设计总功耗,动态功耗以及漏电功耗的优化。优化时,所产生的电路首先要满足设计规则的要求,然后满足延迟(时序)约束的要求,在满足时序性能要求的基础上,进行总功耗的优化,再进行动态功耗的优化和漏电功耗的优化,最后对面积进行优化。
为了有效地进行功耗优化,需要设计中有正的时间裕量(timing slacks)。功耗的减少以时序路径的正时间裕量作为交换,即功耗优化时会减少时序路径上的正的时间裕量。因此,设计中正的时间裕量越多,就越有潜力降低功耗。
多阈值电压设计可以在门级网表或者RTL代码的时候就进行,也可以在后面布线后进行。
由于半导体工艺越来越先进,半导体器件的几何尺寸越来越小,器件中的晶体管(门)数越来越多,器件的供电电压越来越低,单元门的阈值电压越来越低。由于单位面积中的单元门越来越多,功耗密度高,器件的功耗大。在90nm或以下的工艺,静态功耗要占整个设计功耗的20%以上。在超深亚微米工艺,单元门的阈值电压和漏电功耗(静态功耗)有如下图所示的关系:
由上图可知,阈值电压Vt与漏电功耗和单元门延迟有如下关系:
阈值电压Vt越高的单元,它的漏电功耗越低,但门延迟越长,也就是速度慢;
阈值电压Vt越低的单元,它的漏电功耗越高,但门延迟越短,也就是速度快。
可以利用多阈值电压工艺库的这种特点,进行漏电功耗的优化,设计静态功耗低性能高的电路。
一般的设计中,一个时序路径组((timing path group)有多条时序路径,延迟最大的路径称为关键路径。根据多阈值电压单元的特点,为了满足时序的要求,关键路径中使用低阈值电压的单元(low Vt cells),以减少单元门的延迟,改善路径的时序。而为了减少静态功耗,在非关键路径中使用高阈值电压的单元(high Vt cells),以降低静态功耗。因此,使用多阈值电压的工艺库,我们可以设计出低静态功耗和高性能的设计。
动态功耗优化通常在做完时序优化后进行。动态功耗优化时,需要提供电路的开关行为,工具根据每个节点的翻转率,来优化整个电路的动态功耗。在EDA工具中用compile/physopt命令可以同时对时序和功耗做优化,优化过程会运用很多技术比如插入缓冲器、相位分配等,由power compiler自动实现。
总功耗是动态功耗和静态功耗的和,优先级比动态功耗和静态功耗高。总功耗优化时,工具尽量减少动态功耗和静态功耗的和。优化时如果减少了漏电功耗增加了动态功耗,但它们的和减少了,优化是有效的。反之亦然。我们可以通过设置开关,使动态功耗优化和静态功耗优化用不同的努力级别(effort levels)和权重(weights)进行优化。
电源门控(power gating)是指芯片中某个区域的供电电源被关掉,即该区域内的逻辑电路的供电电源断开。在电路中某些模块进入休眠或者空闲模式时,我们可以使用之前讲过的门控时钟技术来降低它们的动态功耗,但是无法降低它们的静态功耗。而电源门控技术可以在它们休眠的时候完全关掉它们的电源从而消除它们的静态功耗。
使用保持寄存器设计电源门控如下图所示:
a. 在睡眠模式,寄存器的电源Vdd2被切断,因此它的漏电功耗极小;这时候仅仅保持锁存器处于工作状态,寄存器的值保留在锁存器里。由于锁存器是用高阈值电压的晶体管组成,漏电功耗很低。
b. 当Restore信号被激活时,寄存器的电源Vdd2被加上,保留在锁存器里的值被载入到寄存器。寄存器在工作(活跃)状态时,它作为一般的寄存器工作。Save/Restore引脚也称为电源门控引脚(power gating pins),它们被用于把电路置于适当的模式。
c. 电源门控模块的输出端需要使用隔离单元(Isolation Cell),因为在睡眠模式时,模块的输出为不确定值。为了保证在睡眠模式时,下一级的输入不会悬空,插入隔离单元,提供一个"1”或”0”的输出,使下一级的输入为确定的逻辑值。
在物理级,进行低功耗设计的基本原则是:
a. 对于设计中翻转活动很频繁的节点,采用低电容的金属层进行布线;
b. 使高翻转率的节点尽可能地短;
c. 对于高负载的节点与总线,采用低电容的金属层;
d. 对于特别宽的器件,采用特殊的版图技术,以得到更小的漏极结电容;
e. 在有些布局布线工具中,可以将功耗作为优化目标来生成时钟树。
以上内容只是简单的总结,由于学习时间不长,还没有进行特别深入的研究,后面应该会根据需要再次学习的!