IC设计知识1

低功耗设计


前言

低功耗设计比较重要,所以通过在网上参考了IC_learner关于低功耗设计的博客整理了其中的内容,以此梳理一下低功耗设计的脉络,不然一直看不总结太容易忘记啦。


一、低功耗设计的目的

  1. 便携性设备的供电需求:在相同电能提供下,低功耗设计的产品能够工作更长的时间;
  2. 设备可靠性性能需求:设备工作会发热,发热越严重,热噪声越大,就会影响器件的正常工作;
  3. 成本的影响:不考虑低功耗设计,可能会增加后期芯片组装成本。

二、功耗的类型

1.动态功耗

在动态功耗中,开关功耗占大部分比例,动态功耗主要跟电源的供电电压翻转率负载电容有关。
在这里插入图片描述

  1. 开关功耗(翻转功耗):在数字CMOS电路中,对负载电容进行充放电时,PMOS和NMOS导通和截止情况相反,电源的充放电形成一开一闭的变化,就产生了开关功耗:(V为供电电压,Cload为后级电路等效的电容负载大小,Tr为输入信号的反转率)在这里插入图片描述
  2. 短路功耗(内部功耗):输入信号进行翻转时,不能瞬时完成,因此PMOS和NMOS总有一段时间是同时导通的,因而在VDD和VSS之间就会有通路,进而形成短路电流:(VDD为供电电压,Tr为翻转率,Qx为一次翻转过程中从电源流到地的电荷量)在这里插入图片描述

2.静态功耗

在CMOS电路中,静态功耗主要是漏电流引起的功耗,一般指栅极泄漏电流和亚阈值电流。

  1. 栅极泄漏功耗(栅压):在栅极加上信号后,从栅极到衬底之间存在电容,因此两者之间就会存在电流,由此存在功耗;
  2. 亚阈值电流:使栅极电压低于导通阈值,仍会产生从FET漏极到源极的泄漏电流。在较窄的晶体管中,漏极和源极距离较近的情况下会产生亚阈值泄漏电流,晶体管越窄,泄漏电流越大。
    静态功耗计算公式为,在这里插入图片描述
    静态功耗往往与工艺有关。

3.浪涌功耗

浪涌功耗是由浪涌电流引起的功耗。浪涌电流是指开机或唤醒的时候,器件流过的最大电流,因此浪涌电流也称为启动电流。

三、低功耗设计方法

由上及下介绍各层次低功耗设计方法。

1.系统与架构级低功耗设计

系统与架构层次的低功耗设计,可以节省70%以上的功耗。

1.1 多电压设计技术(Multi-VDD)

根据上面已经提到的公式,我们知道,电压与功耗联系密切,因此可以通过降低电压来降低功耗。主要有三种方式:
a. 各电压区域有固定的电压在这里插入图片描述
b. 各电压区域有固定的多个电压,由软件决定选择哪个电压在这里插入图片描述
c. 自适应的方式,各电压区域可变,由软件决定选择哪个电压在这里插入图片描述

1.2 软硬件协同设计

在1.1中电压的动态管理,就可以通过软件和硬件方式实现。
动态电压频率技术(dynamic voltage dynamic frequency scaling,DFVS),即DVFS技术为例,就是一种通过将不同电路模块工作电压和工作频率降到最低,恰好满足系统最低要求,来实时降低系统中不同电路模块功耗的方法。DVFS原理是,电路模块中的最大时钟频率和电压紧密相关,如果一个电路能够估算出它必须做多少工作才能完成当前的任务,那么理论上就可以将时钟频率调低到刚好能适时完成该任务的水平。降低时钟频率意味着可以同时降低供电电压。频率和电压同时降低,功耗就大大降低了。

1.3 系统时钟分配

时钟是系统中频率最高的信号,所以其功耗也是很高的。通过在系统层次,根据应用要求,将系统设置为不同的工作模式,加入时钟控制模块,在不同的工作模式下,选用不同频率的时钟,且关闭一些不需要工作的模块的时钟。

1.4 算法与IP设计

在设计算法时,尽量使耗能多的操作最小化;
SoC设计依赖于IP的集成,所以在选择IP时,除了要考虑性能,还要考虑功耗问题。

1.5 其他

通过异步设计(不使用全局时钟,两个模块通过握手信号进行交互,降低时钟网络的功耗);
在大多数DSP中,需要用到快速傅立叶变换(Fast Fourier Transform, FFT)算法。FFT算法需要频繁访问存储器,我们可以在存储器和处理器之间添加缓存,使用小范围的缓存能够使计算能耗大量下降,提高的FFT的效能;
还可以考虑可测性设计上进行低功耗设计、**存储器(内存)**的低功耗设计等。

2.RTL级低功耗设计

2.1 并行与流水的选择

并行和流水线方式运行功能模块,都是用面积换速度
并行处理常用于数字信号处理部分,采用并行处理可以降低系统工作频率,从而降低功耗,比如用两个乘法器取代原设计中的一个乘法器;
流水线技术可以将一个较长的组合路径分成M级流水线,路径长度缩短为原始路径长度的1/M,那么一个时钟周期内充放电电容变为C/M。如果加入流水线后,始终速度不变,那么在一个周期内,只需要对C/M进行充放电,而不是对原来的C进行充放电,因此在相同速度要求下,可以采用较低的电源电压来驱动系统,这样系统的整体功耗可以降低。

2.2 资源共享与状态编码

对于设计比较多算术运算的设计,如果同样的操作在多处使用,那我们就可以避免相应的运算逻辑在多个位置重复出现
另外,对一些变化非常频繁的信号,利用数据编码来降低开关活动(如使用格雷码比二进制码翻转更少,功耗更低);

2.3 操作数隔离

操作数隔离(operand isolation,简称OI)的原理就是:如果在某一段时间内,数据通路的输出是无用的,则将它的输入置成个固定值,这样,数据通路部分没有翻转,功耗就会降低。
在这里插入图片描述上面的电路图中,当SEL_0≠1,SEL_1≠0时,加法器Add_0的运算结果并不能通过mux_0和mux_1到达寄存器reg_0的输入端口,也就是说寄存器reg_0将不会保存加法器Add_0的运算结果,这就意味着加法器Add_0的运算是不必要的。为了节省功耗,我们可以用操作数分离的方法,在某些条件下,使加法器不工作,保持静态,进行操作隔离之后的电路如下所示:在这里插入图片描述

  1. OI物体的选择
    a. EDA工具自动指定操作数隔离的物体
    默认情况下,如果操作数隔离的物体满足下列条件,Power Compiler自动选择它(们):
    i. OI物体是算术运算器或层次组合单元;
    ii.OI物体的输出是选择性地使用
    iii.运算器必须有非零的翻转率
    iv.仅当工具进行功耗估算后,用操作数隔离具有潜在的功耗可节省,才把它(们)作为OI物体。
    b. 手动指定操作数隔离的物体
    i.OI物体是算术运算器或层次组合单元;
    ii.OI物体的输出是选择性地使用;
    iii.运算器必须有非零的翻转率。
  2. 操作数隔离的范围
    通过set_operand_isolation_scope命令来指定模块进行操作数隔离;
  3. 隔离逻辑的设置
    实现操作数隔离需要插入如与门/或门等隔离逻辑。可通过工具根据输入数据连线的静态概率(SP)来选择适合的隔离逻辑(与/或),也可以手工选择隔离逻辑(AND/OR);
  4. 操作数隔离的复原
    一般情况下,如果加了隔离逻辑后,设计时序变差了,即当WNS(worst negative slack)大于指定的slack时,EDA工具会使设计自动复原到原来没有操作数隔离的状态。
    也可以用手工的方法复原操作数隔离,用手工的方法进行操作数隔离的复原是在指定的时序路径上删除OI逻辑。

2.4 门控时钟

门控时钟有两种方案:一种直接针对寄存器的时钟进行门控(更灵活,主要讲述),一种对模块级别的时钟进行门控。

2.4.1一个与门(即不带锁存的门控时钟)

在这里插入图片描述
如上图所示,将控制信号(EN)直接与时钟信号(CLK)进行与操作,以完成门控。门控后的时钟信号GCLK送到寄存器阵列中。这样,当EN为0时,该时钟被关掉。这种方式中,为了使门控时钟不出现毛刺,使能信号EN需要满足的条件是,它是寄存器的输出,该寄存器的时钟信号与要门控的时钟信号是相同的。

2.4.2基于锁存器的门控时钟方案

在这里插入图片描述
分散的锁存器+与门:
由于锁存器在CLK为低时透明,所以,EN 信号上的毛刺仅出现在CLK的低电平处,EN1与CLK进行与操作,可以将这部分毛刺消除掉。这样,GCLK上就没有毛刺了。但是如果在电路中,锁存器与与门相隔很远,到达锁存器的时钟与到达与门的时钟有较大的延迟差别,则仍会出现毛刺。
集成的锁存器+与门:
将锁存器和与门做成一个逻辑单元,就可以消除分散锁存器中的毛刺问题;
采用门控时钟,可以非常有效地降低设计的功耗,一般情况下能够节省20%~60%的功耗。此外,由于门控时钟不需要用到MUX单元,加入门控时钟电路后,设计的面积也减少了。
门控时钟电路非常容易实现,用工具自动插入门控时钟,不需要修改RTL代码,且门控时钟与工艺无关。
在DC中,我们主要通过命令来设置门控时钟(Clock Gating)的风格和通过命令“启动”插入门控时钟把普通的综合结果“转换”为门控时钟的结果。因此,门控时钟的实现主要有两步,一步是设置门控时钟的风格,通过命令set_clock_gating_stale 及其选项来实现;另一步就是在网表中加入门控时钟,通过命令insert_clock_gating来实现。

3.门级电路低功耗设计

门级电路的功耗优化(Gate Level Power Optimization,GLPO)是从已经映射的门级网表开始,对设计进行功耗的优化以满足功耗的约束,同时设计保持其性能,即满足设计规则和时序的要求。门级电路的功耗优化包括了设计总功耗,动态功耗以及漏电功耗的优化。优化时,所产生的电路首先要满足设计规则的要求,然后满足延迟(时序)约束的要求,在满足时序性能要求的基础上,进行总功耗的优化,再进行动态功耗的优化和漏电功耗的优化,最后对面积进行优化。
为了有效地进行功耗优化,需要设计中有正的时间裕量(timing slacks)。功耗的减少以时序路径的正时间裕量作为交换,即功耗优化时会减少时序路径上的正的时间裕量。因此,设计中正的时间裕量越多,就越有潜力降低功耗

3.1 多阈值电压设计(静态功耗优化)

多阈值电压设计可以在门级网表或者RTL代码的时候就进行,也可以在后面布线后进行。
由于半导体工艺越来越先进,半导体器件的几何尺寸越来越小,器件中的晶体管(门)数越来越多,器件的供电电压越来越低,单元门的阈值电压越来越低。由于单位面积中的单元门越来越多,功耗密度高,器件的功耗大。在90nm或以下的工艺,静态功耗要占整个设计功耗的20%以上。在超深亚微米工艺,单元门的阈值电压和漏电功耗(静态功耗)有如下图所示的关系:在这里插入图片描述
由上图可知,阈值电压Vt与漏电功耗和单元门延迟有如下关系:
阈值电压Vt越高的单元,它的漏电功耗越低,但门延迟越长,也就是速度慢
阈值电压Vt越低的单元,它的漏电功耗越高,但门延迟越短,也就是速度快
可以利用多阈值电压工艺库的这种特点,进行漏电功耗的优化,设计静态功耗低性能高的电路。
一般的设计中,一个时序路径组((timing path group)有多条时序路径,延迟最大的路径称为关键路径。根据多阈值电压单元的特点,为了满足时序的要求,关键路径中使用低阈值电压的单元(low Vt cells),以减少单元门的延迟,改善路径的时序。而为了减少静态功耗,在非关键路径中使用高阈值电压的单元(high Vt cells),以降低静态功耗。因此,使用多阈值电压的工艺库,我们可以设计出低静态功耗和高性能的设计。

3.2 动态功耗优化

动态功耗优化通常在做完时序优化后进行。动态功耗优化时,需要提供电路的开关行为,工具根据每个节点的翻转率,来优化整个电路的动态功耗。在EDA工具中用compile/physopt命令可以同时对时序和功耗做优化,优化过程会运用很多技术比如插入缓冲器相位分配等,由power compiler自动实现。

3.3 总体功耗优化

总功耗是动态功耗和静态功耗的和优先级比动态功耗和静态功耗。总功耗优化时,工具尽量减少动态功耗和静态功耗的和。优化时如果减少了漏电功耗增加了动态功耗,但它们的和减少了,优化是有效的。反之亦然。我们可以通过设置开关,使动态功耗优化和静态功耗优化用不同的努力级别(effort levels)和权重(weights)进行优化。

3.4门级低功耗优化方案-电源门控

电源门控(power gating)是指芯片中某个区域的供电电源被关掉,即该区域内的逻辑电路的供电电源断开。在电路中某些模块进入休眠或者空闲模式时,我们可以使用之前讲过的门控时钟技术来降低它们的动态功耗,但是无法降低它们的静态功耗。而电源门控技术可以在它们休眠的时候完全关掉它们的电源从而消除它们的静态功耗
使用保持寄存器设计电源门控如下图所示:
在这里插入图片描述
a. 在睡眠模式,寄存器的电源Vdd2被切断,因此它的漏电功耗极小;这时候仅仅保持锁存器处于工作状态,寄存器的值保留在锁存器里。由于锁存器是用高阈值电压的晶体管组成,漏电功耗很低。
b. 当Restore信号被激活时,寄存器的电源Vdd2被加上,保留在锁存器里的值被载入到寄存器。寄存器在工作(活跃)状态时,它作为一般的寄存器工作。Save/Restore引脚也称为电源门控引脚(power gating pins),它们被用于把电路置于适当的模式。
c. 电源门控模块的输出端需要使用隔离单元(Isolation Cell),因为在睡眠模式时,模块的输出为不确定值。为了保证在睡眠模式时,下一级的输入不会悬空,插入隔离单元,提供一个"1”或”0”的输出,使下一级的输入为确定的逻辑值。

4.物理级低功耗设计

在物理级,进行低功耗设计的基本原则是:
a. 对于设计中翻转活动很频繁的节点,采用低电容的金属层进行布线;
b. 使高翻转率节点尽可能地;
c. 对于高负载的节点与总线,采用低电容的金属层;
d. 对于特别宽的器件,采用特殊的版图技术,以得到更小的漏极结电容
e. 在有些布局布线工具中,可以将功耗作为优化目标来生成时钟树。

总结

以上内容只是简单的总结,由于学习时间不长,还没有进行特别深入的研究,后面应该会根据需要再次学习的!

  • 3
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Ann_xia66

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值