低功耗设计入门

原文链接https://www.cnblogs.com/IClearner/tag/%E4%BD%8E%E5%8A%9F%E8%80%97%E8%AE%BE%E8%AE%A1/
首先声明本文是根据上面链接里文章截取而来,剩余部分是脚本编写的相关命令,在此我只截取理论知识部分,详细请看原链接。

低功耗设计入门(一)——功耗的构成/类型

本小节主要一方面介绍一下功耗的构成,一方面介绍一下工艺库中的功耗模型。功耗的构成可以从两个角度来描述,一个是从功耗种类方面,另一个是从系统结构方面。我们在设计过程中,讨论比较多的往往是从功耗角度方面;工艺库中的功耗模型主要是结合工艺库来对功耗种类进行一些具体的、补充式的讲解。下面我们就来看看功耗的工程吧。
1.功耗的构成——按类型分
  低功耗按照类型分类呢,其构成主要有动态功耗、静态功耗、浪涌功耗这三种。在这第一小点我主要做一些简要的介绍,在后面的第三小点我将结合工艺库进行介绍。
  (1)动态功耗
  动态功耗包括:开关功耗或者称为翻转功耗、短路功耗或者称为内部功耗。
①开关功耗
  在数字CMOS电路中,对负载电容进行充放电时消耗的功耗,比如对于下面的CMOS非门中:

低功耗设计入门
  在上式中,VDD为供电电压,Cload为后级电路等效的电容负载大小,Tr为输入信号的翻转率(关于翻转率,我们在后面第三小点会进行介绍)。

一般情况下,信号在一个周期内平均翻转两次,即上升沿一次、下降沿一次,也就是说,Tr = 2f,因此,平均功耗就是:

Pdynamic = VddVddCL*f

我们不必追究这个公式怎么得来,我知道这个功耗在这么计算就可以了,有兴趣的话,也可以深入探讨。
②短路功耗

短路功耗也称为内部功耗,短路功耗是因为在输入信号进行翻转时,信号的翻转不可能瞬时完成,因此PMOS和NMOS不可能总是一个截止另外一个导通,总有那么一段时间是使PMOS和NMOS同时导通,那么从电源VDD到地VSS之间就有了通路,就形成了短路电流,如下面的反相器电路图所示:
  

低功耗设计入门
上式中,Vdd为供电电压,Tr为翻转率,Qx为一次翻转过程中从电源流到地的电荷量。短路功耗/内部功耗是单元(比如说反相器单元)的输入从0到1或者从1到0的转换过程中,单元内部P管和N管同时导通那个瞬间的功耗,这不是因为单元损坏而产生的短路功耗
  由此我们可以找到,动态功耗主要有开关功耗和短路功耗;其中开关功耗在动态功耗中占大部分比例;从上面的两个式子中我们可以看到,动态功耗主要跟电源的供电电压、翻转率、负载电容有关。
  (2)静态功耗

在CMOS电路中,静态功耗主要是漏电流引起的功耗,如下图所示:

低功耗设计入门
(3)浪涌功耗

浪涌功耗是浪涌电流引起的功耗。浪涌电流是指开机或者唤醒的时候,器件流过的最大电流,因此浪涌电流也称为启动电流。一般情况下,浪涌功耗不是我们关注的地方,因此这里只是说明有这个功耗存在。
  2.功耗的构成——按结构分

前面按照类型进行功耗分类,这里使用结构进行分类,也就是根据设备的结构或者设备的构成进行分类。(以SoC为例)主要分为:时钟树功耗、处理器功耗、存储器功耗、其他逻辑和IP核功耗、输入输出pad功耗。在不同的应用、设备中,这些功耗的比例不一样,但是时钟树、处理器、存储器占了绝大部分功耗,这是需要说明的。

(二)低功耗设计入门(二)——功耗的分析

前面学习了进行低功耗的目的个功耗的构成,今天就来分享一下功耗的分析。由于是面向数字IC前端设计的学习,所以这里的功耗分析是基于DC中的power compiler工具;更精确的功耗分析可以采用PT,关于PT的功耗分析可以查阅其他资料,这里不涉及使用PT的进行功耗分析。

(1)功耗分析与流程概述

上一个小节中讲解了功耗的构成,并且结合工艺库进行简要地介绍了功耗的计算。但是实际上,我们根本不可能人工地计算实际的大规模集成电路的功耗,我们往往借助EDA工具帮我们分析电路的功耗。这里我们就介绍一下EDA工具分析功耗的(普遍)流程,然后下一小节我们将介绍低功耗电路的设计和优化。

①功耗分析流程的输入输出

功耗分析的流程(从输入输出关系看)如下所示:

低功耗设计入门
·翻转(次)数:逻辑变化的次数,上图中信号的翻转数为3.

·翻转率:前面也有相关介绍,这里重提一下,翻转率是单位时间内信号(包括时钟、数据等等信号)的翻转次数。上图中翻转率为3/6 = 0.5(6个时间间隔内,翻转了3次)

·T1,T0:(节点)信号的逻辑值为1和0的持续时间,上图中T1为4,T0为2。

·静态概率(static probability ,SP):(节点)信号逻辑值为1的概率,上图中的SP为4/6=2/3。

低功耗设计入门(三)——系统与架构级低功耗设计

前面讲解了使用EDA工具(主要是power compiler)进行功耗分析的流程,这里我们将介绍在数字IC中进行低功耗设计的方法,同时也结合EDA工具(主要是Design Compiler)如何实现。我们的讲解的低功耗设计主要是自顶向下的设计,也就是说,我们首先介绍在系统架构层面上如何进行低功耗设计(或者可以从哪些方面进行低功耗设计);然后我们在RTL层面和门级层面上介绍低功耗设计的方法,这两个种方法主要是依靠RTL代码和Design Compiler实现的,这是我们前端设计人员进行低功耗设计与优化所需要知道的,我们会着重介绍;最后我们简单介绍在物理设计层次上面降低功耗的方法。今天我们记录系统与架构级的低功耗设计。
1.系统与架构级低功耗设计
  系统与架构层次的低功耗设计,可以节省70%以上的功耗。这个层次上的设计往往是由系统和架构设计人员进行的,这些人员往往是有着丰富经验的设计人员。他们制定了低功耗设计方案,由下一级的设计人员(比如做前端设计、做Flow的人员)进行具体实现。下面就来介绍一下在系统架构方面,可以从哪些方面进行低功耗设计,由于我只是只菜鸟,因此这些内容只是我在前人的经验中进行总结学习的笔记,仅供参考。
  (1)多电压设计技术(Multi-VDD)
①多电压设计技术介绍
从前面的功耗方程中,我们可以知道,电压与功耗有着密切的联系。因此功耗的降低可以考虑使用低一点的电压。多电压设计技术有三种方式:

低功耗设计入门
  ·电源隔离单元(power isolation cell):主要用于模块的输入、输出。它可以关掉电源时,将信号保持为常数,从而避免单元的输入悬空。电源隔离单元如下图所示:
低功耗设计入门
  该模块的功能是:系统不工作时, 进入IDLE模式, 这时候可以关掉不工作模块的电源; 当系统工作时, 给工作模块提供正常电压。这个模块可以是软件实现,也可以是硬件实现。
  ③多电压设计举例
  对于多电压设计(尤其是A设计),关键是电压分配。在划分供电区域时, 要尽量与设计的层次结构一致, 并且要考虑到设计复杂性。 下面例子(左图)中(电压分配采用固定分配方案), 存储器、 处理器核 、 其他逻辑用不同的工作电压。
低功耗设计入门
  这种功耗的动态管理依赖于前面描述的电压模式控制单元,只不过个单元是用软件进行实现的(因为是操作系统进行动态功耗管理)。具体的功耗动态管理实现这里就不详细说明,这应该是属于系统设计者和软件设计人员考虑的。
  (3)系统时钟分配
  系统时钟的分频也是系统层面降低功耗可以考虑的方面。时钟是系统中频率最高的信号,其功耗功之高是不容置疑的。在系统设计层面,可以考虑应用要求,将系统设置为不同的工作模式,加入时钟控制模块,在不同的工作模式下选用不同频率的时钟,并且将一些不需要的模块时钟关闭。时钟的分配可以使用内部的状态机实现,也可以使用软件实现。
  (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的效能。因此在系统设计的时候,特别是系统架构设计的时候,可以考虑基于缓存的系统体系结构进降低功耗。
  系统层次上面的低功耗设计方法还有很多,比如说可测性设计上进行低功耗设计、存储器(内存)的低功耗设计等,这些都可以在系统层次上面进考虑,这里就不一一列出来了

低功耗设计入门(四)——RTL级低功耗设计

二、RTL级低功耗设计  
  前面介绍了系统级的低功耗设计,换句话说就是在系统级降低功耗可以考虑的方面。系统级的低功耗设计,主要是由系统级设计、具有丰富经验的人员实现,虽然还轮不到我们设计,我们了解一下还是比较好的。我们前端设计人员的重点不在系统级设计上面,而是在RTL级(及综合)上面。下面我们就来介绍RTL编码与逻辑综合的低功耗设计,重点是门控时钟和操作数隔离技术。今天主要是讲解操作数和一些常见的方法;门控时钟由于内容比较多,所以写在后面。
  (1)并行与流水的选择
  对于某一个功能模块,我们可以通过并行的方式进行实现,也可以通过流水线的方式进行实现,这两种方法都是面积换速度,不过在一定的场合下可以降低功耗,需要灵活应用,下面就简要地介绍一下这两种方法(的使用)。
  ·并行处理常用于数字信号处理部分。采用并行处理,可以降低系统工作频率,从而可能降低功耗。例如下图中:
  

低功耗设计入门
  假设在一个设计中,关键路径是一个32bit X 32bit的乘法器。假设该乘法器的整体电容为C,工作频率为f。

->不加流水线时,要达到此工作频率,工作电压应该为V。

->当采用流水线方式时,该路径被分成两部分。对于每一部分,整体电容变为C/2。这样,如果要达到原来的工作频率f,工作电压可以降为βV,这里β   

低功耗设计入门            
进行资源共享后的代码如下所示:
低功耗设计入门
上面的电路图中,当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时,该时钟被关掉。相应的波形如下所示:

低功耗设计入门
 
对应的时序图如下所示:
低功耗设计入门
  上述的右上图中,B点的时钟比A时钟迟到,并且Skew > delay,这种情况下,产生了毛刺。为了消除毛刺,要控制Clock Skew,使它满足Skew >Latch delay(也就是锁存器的clk-q的延时)。上述的右下图中,B点的时钟比A时钟早到,并且|Skew| > ENsetup 一 (D->Q),这种情况下,也产生了毛刺。为了消除毛刺,要控制Clock Skew,使它满足|Skew|Q)。
常见的是第一种毛刺,不过我们可以将这个逻辑做成一个单元,这样就基本上能消除上面的那两种毛刺了,即:
低功耗设计入门
上图的典型综合结果中(即不使用门控时钟的情况),在每个受EN使能控制的寄存器之前加入了一个MUX,当EN信号有效时,寄存器锁存输入信号D;否则保持原值。这种方法也能减少寄存器上的翻转,因而节省翻转功耗。然而,这种“载入一使能”结构中,每个寄存器都有一个MUX,假设MUX面积为4,则8位寄存器需要增加的面积为32。面积越大,意味着芯片成本越高,而且整体的功耗也会增加。另外,这种方式不能消除时钟树上的功耗。

对于右下角的门控时钟形式的综合电路,假设一个门控逻辑的面积为10,一个门控时钟信号可以驱动8位寄存器,则在门控时钟电路中,对每8个寄存器需增加一个门控逻辑,增加的面积为10。由此可以看到,门控时钟的电路比普通综合结果的面积更小、功耗更低。

低功耗设计入门(六)——门级电路低功耗设计优化

三、门级电路低功耗设计优化

(1)门级电路的功耗优化综述

门级电路的功耗优化(Gate Level Power Optimization,简称GLPO)是从已经映射的门级网表开始,对设计进行功耗的优化以满足功耗的约束,同时设计保持其性能,即满足设计规则和时序的要求。功耗优化前的设计是已经映射到工艺库的电路,如下图所示:
  

低功耗设计入门     
由此我们可以找到, 优化时,所产生的电路首先要满足设计规则的要求,然后满足延迟(时序)约束的要求,在满足时序性能要求的基础上,进行总功耗的优化,再进行动态功耗的优化和漏电功耗的优化,最后对面积进行优化。
  优化时先满足更高级优先权的约束。进行低级优先权约束的优化不能以牺牲更高优先权的约束为代价。功耗的优化不能降低设计的时序。为了有效地进行功耗优化,需要设计中有正的时间冗余(timing slacks)。功耗的减少以时序路径的正时间冗余作为交换,即功耗优化时会减少时序路径上的正的时间冗余。因此,设计中正的时间冗余越多,就越有潜力降低功耗。
  通过上面的描述,对门级功耗优化有了一下了解之后,这里先介绍一下静态功耗优化的方法——多阈值电压设计,然后介绍基于EDA工具的动态功耗的优化,接着介绍总体功耗的优化;在最后介绍一种常用的门级低功耗的方法——电源门控。电源门控我放在明天发表,今天的内容主要就是围绕静态、动态、总功耗来写。
  (2)多阈值电压设计
①多阈值电压设计原理
  由于半导体工艺越来越先进,半导体器件的几何尺寸越来越小,器件中的晶体管(门)数越来越多,器件的供电电压越来越低,单元门的阈值电压越来越低。由于单位面积中的单元门越来越多,功耗密度高,器件的功耗大。因此,设计时,我们要对功耗进行优化和管理。在90nm或以下的工艺,静态功耗要占整个设计功耗的20%以上。因此,使用超深亚微米工艺时,除了要降低动态功耗,还要降低静态功耗。在超深亚微米工艺,单元门的阈值电压和漏电功耗(静态功耗)有如下图所示的关系:
   低功耗设计入门
  ②门级网表/RTL代码的多阈值电压设计
  多阈值电压设计可以在门级网表或者RTL代码的时候就进行,也可以在后面布线后进行。门级网表/RTL代码的多阈值电压设计(或者说是静态功耗优化)流程如下所示:
   低功耗设计入门
  如果某一模块在一段时间内不工作,可以关掉它的供电电源(关掉供电电源可以使用MTCMOS开关,通常在使用后端工具进行布局布线时加入MTCMOS,这属于后端知识,这里不进行介绍)。断电后,设计进入睡眠模式,其漏电功率很小。唤醒时,为了使模块尽快恢复工作模式,需要保持关电前的状态。保持寄存器(retention register)可用于记忆状态。使用保持寄存器设计电源门控如下图所示:
   低功耗设计入门
  下面来解释一下上面的设计:
  ·在睡眠模式,寄存器的电源Vdd2被切断,因此它的漏电功耗极小;这时候仅仅保持锁存器处于工作状态,寄存器的值保留在锁存器里。由于锁存器是用高阈值电压的晶体管组成,漏电功耗很低。
  ·当Restore信号被激活时,寄存器的电源Vdd2被加上,保留在锁存器里的值被载入到寄存器。寄存器在工作(活跃)状态时,它作为一般的寄存器工作。Save/Restore引脚也称为电源门控引脚(power gating pins),它们被用于把电路置于适当的模式。
  ·电源门控模块的输出端需要使用隔离单元(Isolation Cell)(我们在前面讲过),因为在睡眠模式时,模块的输出为不确定值。为了保证在睡眠模式时,下一级的输入不会悬空,插入隔离单元,提供一个”1”或”0”的输出,使下一级的输入为确定的逻辑值

低功耗设计入门(八)——物理级低功耗设计&to be continued/h2>

前面学习了从系统级到门级的低功耗设计,现在简单地了解了一下物理级设计。由于物理级的低功耗设计与后端有关了,这里就不详细学习了。这里主要是学习了一些基本原则,在物理级,进行低功耗设计的基本原则是:
   ·对于设计中翻转活动很频繁的节点,采用低电容的金属层进行布线;
  ·使高翻转率的节点尽可能地短;
   ·对于高负载的节点与总线,采用低电容的金属层;
  ·对于特别宽的器件,采用特殊的版图技术,以得到更小的漏极结电容。
   ·在有些布局布线工具中,可以将功耗作为优化目标来生成时钟树。
  低功耗设计入门的学习到这里就结束了,然而这只是入门。在低功耗设计这个专题里面,还有很多东西要学习。在后续的日子里(可能是几个月后,也可能是一两年后,也可能更久),我会深入学习一下低功耗设计,学习的方向主要是:
  ·结合一些具体的Design进行低功耗设计,熟悉低功耗的流程;
  ·使用PT进行低功耗的分析;
  ·更多的低功耗设计技巧;

来源:ECC&SM9

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2020年6月21日
下一篇 2020年6月21日

相关推荐