前面讲解了使用EDA工具(主要是power compiler)进行功耗分析的流程,这里咱们将介绍在数字IC中进行低功耗设计的方法,同时也结合EDA工具(主要是Design Compiler)如何实现。咱们的讲解的低功耗设计主要是自顶向下的设计,也就是说,咱们首先介绍在系统架构层面上如何进行低功耗设计(或者能够从哪些方面进行低功耗设计);而后咱们在RTL层面和门级层面上介绍低功耗设计的方法,这两个种方法主要是依靠RTL代码和Design Compiler实现的,这是咱们前端设计人员进行低功耗设计与优化所须要知道的,咱们会着重介绍;最后咱们简单介绍在物理设计层次上面下降功耗的方法。今天咱们记录系统与架构级的低功耗设计。前端
1.系统与架构级低功耗设计算法
系统与架构层次的低功耗设计,能够节省70%以上的功耗。这个层次上的设计每每是由系统和架构设计人员进行的,这些人员每每是有着丰富经验的设计人员。他们制定了低功耗设计方案,由下一级的设计人员(好比作前端设计、作Flow的人员)进行具体实现。下面就来介绍一下在系统架构方面,能够从哪些方面进行低功耗设计,因为我只是只菜鸟,所以这些内容只是我在前人的经验中进行总结学习的笔记,仅供参考。编程
(1)多电压设计技术(Multi-VDD)缓存
①多电压设计技术介绍网络
从前面的功耗方程中,咱们能够知道,电压与功耗有着密切的联系。所以功耗的下降能够考虑使用低一点的电压。多电压设计技术有三种方式:架构
A:各电压区域有固定的电压,如上图(a)所示 ;异步
B:各电压区域具备固定的多个电压,由软件决定选择哪个电压,如上图(b)所示;工具
C:自适应的方式,各电压域具备可变的,由软件决定选择哪个电压,如上图(c)所示。性能
A是固定分配的电压;而B和C为动态电压管理,涉及到软硬件协同设计,这里咱们放到后面进行介绍。这里主要是从总体上进行介绍多电压设计技术及其要求,而后给出A方式的一个例子以及一个多电压低功耗设计的脚本示例。学习
②多电压综合库及电压模式控制单元
不管是哪种低电压设计方式,都须要综合库的支出。这低功耗设计的综合库中,须要包含同一个单元在不一样电压下的描述。此外综合库还要多电压设计的特殊单元,这些单元主要是:
·电平转换器(level shifter):把高(低)电压区域的信号转换到低(高)电压区域。信号一般包括数据、时钟、扫描链数据等。电平转换器的示意图以下所:
·电源隔离单元(power isolation cell):主要用于模块的输入、输出。它能够关掉电源时,将信号保持为常数,从而避免单元的输入悬空。电源隔离单元以下图所示:
·保持寄存器(retention register):在不工做的状况下,将寄存器的状态保留下来。
电源隔离单元和保持寄存器咱们将在后面的电源门控中进行详细介绍,这里先给出一个概念。
为了实现电压的动态管理——不管是使用硬件仍是软件进行动态管理,都须要在设中加入电压模式控制单元。一个电压模式控制单元的例子以下所示:
该模块的功能是:系统不工做时, 进入IDLE模式, 这时候能够关掉不工做模块的电源; 当系统工做时, 给工做模块提供正常电压。这个模块能够是软件实现,也能够是硬件实现。
③多电压设计举例
对于多电压设计(尤为是A设计),关键是电压分配。在划分供电区域时, 要尽可能与设计的层次结构一致, 而且要考虑到设计复杂性。 下面例子(左图)中(电压分配采用固定分配方案), 存储器、 处理器核 、 其余逻辑用不一样的工做电压。
右图中的设计有3个工做频率,分别为300,250和400MHz。因为单元的延迟与供电电压成相反关系,即供电电压越高,单元的延迟越小。所以为了知足时序的要求,对于工做频率高的模块,使用供电电压高的电源,以下降时序路径中单元的延迟,从而下降整条时序路径的延迟。上例中,工做频率为400MHz的模块,时序要求最高,所以供电电压最高,为1.2V。工做频率为250 MHz的模块,时序要求最低,所以供电电压最低,为0. 8V。经过对不一样的模块设置不一样的供电电压,可使整个设计既能知足时序的要求,又能够下降其功耗。使用多电压技术,版图设计时,要产生多个电压区域(Voltage Area),把供电不一样的模块,分配到不一样的电压区域。
在power compiler中,可使用"Top Down Compile"的方法进行多电压的功耗设计,一个示例脚本以下所示:
(2)软/硬件协同设计
前面介绍了多供电电压设计,同时介绍了使用EDA工具实现的一个示例脚本。多供电电压设计中涉及到电压的动态管理,而动态管理可使用软件实现,这就设计到了软硬件协同设计的问题。在这里,咱们主要介绍软硬件协同设计中的软硬件划分以及电压的动态管理技术。
①软硬件划分
系统中的功耗都是硬件单元消耗的,可是软件组织对硬件的功耗有着很大的影响。在设计过程当中,系统的功能能够用硬件实现,也可使用使用软件进行实现。低功耗软件的设计须要注意:在知足系统应用的基础上,速度应该尽量慢,电压应该尽量低,尽量知足时间要求。系统设计者根据规范和自身经验对系统性能进行推测(仿真建模),决定哪一部分使用硬件来实现,哪一部分使用软件来实现,从而达到性能和功耗最佳平衡。这些是系统设计者须要考虑的,这里不进行详细叙述,只须要知道,软硬件划分能够很大程度上下降功耗。
②动态电压频率调节DVFS技术
DVFS技术:dynamic voltage dynamic frequency scaling,动态电压频率技术,是一种经过将不一样电路模块的工做电压及工做频率下降到刚好知足系统最低要求,来实时下降系统中不一样电路模块功耗的方法。
电路模块中的最大时钟频率和电压紧密相关,若是一个电路可以估算出它必须作多少工做才能完成当前的任务,那么理论上讲就能够将时钟频率调低到恰好能适时完成该任务的水平。下降时钟频率意味着能够同时下降供电电压。频率和电压同时下降,功耗就大大下降了。这个是DVFS的原理。
DVFS技术这个种方法属于电压的动态管理,能够经过软件和硬件的方式实现。将DVFS合并到操做系统的调度程序和实时嵌入式任务管理服务当中,利用一个可编程的DC-DC开关电压调节器、一个可编程的时钟产生器和一个宽操做域的高性能处理器等资源进行实现。这种技术的使用须要系统使用者决定,这里不进行详述,只须要知道在系统层面能够考虑使用这种方法进行下降功耗。
③低功耗软件(操做系统)的动态功耗管理
前面也说了,可使用软件的方式进行自适应地选择功耗。在系统软件过程运行过程当中,能够在操做系统中加入功耗管理机制,把没有使用到的硬件单元关掉,这即是系统功耗的动态管理。加入功耗管理机制的操做系统的示意图以下所示:
这种功耗的动态管理依赖于前面描述的电压模式控制单元,只不过个单元是用软件进行实现的(由于是操做系统进行动态功耗管理)。具体的功耗动态管理实现这里就不详细说明,这应该是属于系统设计者和软件设计人员考虑的。
(3)系统时钟分配
系统时钟的分频也是系统层面下降功耗能够考虑的方面。时钟是系统中频率最高的信号,其功耗功之高是无可置疑的。在系统设计层面,能够考虑应用要求,将系统设置为不一样的工做模式,加入时钟控制模块,在不一样的工做模式下选用不一样频率的时钟,而且将一些不须要的模块时钟关闭。时钟的分配可使用内部的状态机实现,也可使用软件实现。
例如,能够将系统分为4种工做模式:normal 、 slow、idle、sleep。在不一样的模式下,器分频的时钟以下所示:
(4)算法与IP选择
在系统设计层次上面,还能够经过算法和IP这两个方面下降功耗。
算法:
算法级在算法级下降功耗是很是有价值的。 在设计算法时, 要分析该算法须要多少ALU操做, 须要多少次存储器访问, 要尽可能使那些耗能多的操做最小化。算法级低功耗设计跟具体设计有关。好比,对于大规模运算的应用(好比FFT),使用对数系统(logarithmic number system,lns)比使用线性系统更好。lns在下降平均位元活跃度(也就是下降0和1的变化程度)的同时使用加法和减法实现乘除法,使效率比线性系统更高。所以基于lsn算法来实现FFT能够节省大量的功耗,可是加法器和乘法器的宽度会增长,使用FPGA实现时就会须要更大的LUT(查找表),并且这个查找表的大小是以指数增加的。
在一些行为综合工具中,可采用延时功耗乘积表示系统的优化目标,以下降完成特定计算所需的状态转换数,生成高效的计算结构。算法这一方面的低功耗设计让算法工程去考虑吧,咱们来了解一下就能够了。
IP:
如今的SoC设计依赖于IP的集成。在选择IP时,除了考虑到性能要求,还须要考虑到功耗问题。例如,在选择CPU时,能够分析在完成相同的功能时,哪一种CPU功耗更大。
(5)其余
在系统层次上,除了能够上面那些因素外,咱们还能够考虑异步设计。在如今的系统设计中,一个系统可能使用多个时钟,可是在每一个时钟控制的区域内部都设计成一个同步的子系统。经过时钟树综合、插入缓冲器减小时钟的偏移。这种方法在时钟网络上添加了大量的缓冲器,时钟网络消耗的功耗也增长。在异步设计里面,不须要全局时钟,两个模块经过握手信号进行交互,这时候就能够减小功耗。所以异步设计也是下降功耗的一种方法。
在大可能是DSP中,须要用到FFT算法。FFT算法须要频繁访问存储器,咱们能够在存储器和处理器之间添加缓存,在处理器须要以前,预先将相关数据从存储器中取到缓存里面。使用小范围的缓存可以使计算能耗大量降低,提升的FFT的效能。所以在系统设计的时候,特别是系统架构设计的时候,能够考虑基于缓存的系统体系结构进下降功耗。
系统层次上面的低功耗设计方法还有不少,好比说可测性设计上进行低功耗设计、存储器(内存)的低功耗设计等,这些均可以在系统层次上面进考虑,这里就不一一列出来了。