草庐IT

IC设计中节省静态功耗和动态功耗的方法

一点一点的进步 2024-01-13 原文

目录

1.功耗

2.静态功耗

3.动态功耗

4.  静态功耗与动态功耗


1.功耗

功耗 = 静态功耗 + 动态功耗
        = 静态功耗 + 转换功耗 + 短路功耗
 

2.静态功耗


P_static = V*I_leak,和 电压、漏电流 有关,而漏电流和工艺有关;

 电压角度 V:
(1)降低工作电压;
(2)多电压域;
(3)动态电压缩放DVS技术(处理器在不同工作模式下使用不同电压);
(4)电源关断技术,power-gating;
 
 
电流角度 I_leak(漏电流):
(1)使用HVT高阈值晶体管,漏电流小;
(2)多阈值;

3.动态功耗

P_dynamic= k*C*V*V*f + m*V*I_sc,和 电压、负载电容、工作时钟频率、信号翻转率、短
路电流有关;
        
    电压角度
(1)降低工作电压;
(2)多电压域;
(3)动态电压缩放DVS技术(处理器在不同工作模式下使用不同电压);
(4)电源关断技术,power-gating;
        
    负载电容角度:与工艺有关
       (1)按比例缩小集成度,降低器件电容;
       (2)多芯片系统中,可以考虑多芯片封装,减低接口间电容;
       (3)合理的布局布线;
 
    工作时钟频率角度
       (1)降低工作频率;
       (2)多时钟域;
       (3)门控时钟,clock gating;
 
    数据翻转率角度
       (1)使用格雷码等状态翻转比较少的编码;
       (2)数据不操作说,保持上次的值,而不是强制置0或者置1;
       (3)使用使能信号、片选信号,减少不必要的切换;


4.  静态功耗与动态功耗

0. 功耗源
功耗的本质是能量耗散。由能量守恒定律可知,能量只能从一种形式转成另一种形式,能量
的总量不变。芯片耗散的电能主要转化成热能。如果一颗芯片的功耗过大,容易导致工作时
温度过高,造成功能失效,甚至晶体管失效。因此,减小芯片功耗是很重要的一个任务。静
态功耗以及动态功耗是两个主要的功耗源。
1. 动态功耗
动态功耗来源于:
(1)当门翻转时,负载电容充电和放电,称为翻转功耗
(2)pmos和nmos管的串并联结构都导通时的有短路电流,称为短路功耗
1.1 翻转功耗
翻转功耗可以用如下公式表示:

α 称为活动因子,是电路节点从0跳变至1的概率。时钟的活动因子为1,因为它在每个周
期都有上升和下降。大多数数据的活动因子为0.5,每周期只跳变一次。
C称为负载电容。
有以下办法可以降低翻转功耗:
(1)使用门控时钟
降低活动因子是降低功耗的非常有效的办法,如果一个电路的时钟完全关断,那么它的活动
因子和动态功耗将降为0。Verilog在设计寄存器时采用下面写法可以综合成一个带门控的
寄存器。
 
(2) 减小毛刺
毛刺会增大活动因子,有可能使门的活动因子增加到1以上。
 
3)减小负载电容
电容来自于电路中的连线以及晶体管。缩短连线长度,良好的平面规划和布局可以使连线电
容减小。选择较小的逻辑级数以及较小的晶体管可以减小器件的翻转电容。
 
(4)电压域
动态功耗与电压有平方的关系,降低电源电压可以显著降低功耗。将芯片划分成多个电压域,
每个电压域可以根据特定电路的需要进行优化。例如,对于存储器采用高电源电压来保证存
储单元的稳定性,对于处理器采用中等大小的电压,对运行速度较低的IO外围电路采用低
电压。解决跨电压域信号传输的方法是使用电平转换器。
 
(5)动态电压调整DVS
CPU处理不同的任务有不同的性能要求。对于低性能要求的任务,可以使时钟频率降低到足
以按预定时间完成任务的最低值,然后使电压降低到该频率下工作所需要的最小值就可以节
省大量的能耗。
 
在这里插入图片描述
 
(6)降低频率
动态功耗正比于频率,芯片只应当工作在所要求的频率下,不能比所要求的还要快。由前面
小结可以,降低频率还可以采用较低的电源电压,大大降低功耗
 
(7)谐振电路
谐振电路通过使能量在储能元件如电容或电感之间来回传送而不是将能量泄放到来减小翻
转功耗。
 

1.2 短路功耗
 
短路功耗发生在当输入发生翻转时,上拉和下拉网络同时部分导通的时候。如果输入信号翻
转速率比较慢,那这两个网络将同时导通较长的一段时间,短路功耗也会比较大,增大负载
电容可以减小短路功耗,原因是负载较大时,输出在输入跳变期间只翻转变化很小的一个量。
 
短路电流一般为负载电流的10%。当输入边沿变化速度很快时,短路功耗一般只占翻转功耗
的2%-10%。
2. 静态功耗
 
静态功耗主要来源于:
(1)流过截止晶体管的亚阈值泄漏电流(subthreshold leakage)
(2)流过栅介质的泄漏电流(gate leakage)
(3)源漏扩散区的p-n节泄漏电流(junction leakage)
(4)在有比电路中的竞争电流
 
在这里插入图片描述
 
2.1 亚阈值泄漏电流
 
亚阈值泄漏电流是晶体管应当截止时流过的电流。在90nm节点之前,泄漏功耗主要在休眠
模式下才考虑,这是因为它与动态功耗相比可以忽略不计。但是在低阈值电压和薄栅氧的纳
米工艺中,泄漏电流占到总工作功耗的1/3。
 
亚阈值泄漏电流与多种因素有关。提高源极电压或应用一个负的体电压可以减小泄漏。泄漏
电流还与温度有关,限制芯片温度对于控制泄漏至关重要。另外,通过两个或更多个串联晶
体管的泄漏电流会应堆叠效应(stack effect)而大大减小。例如两输入与非门,两个NMOS
堆叠在一起。
2.2 栅泄漏电流
 
栅极泄漏电流发生在一个电压加到栅上时(例如当门导通时)载流子遂穿通过薄栅介质的情
况下。泄漏电流与介质厚度有极强的关系。工艺中通过选择合适厚度的介质将栅泄漏电流限
制到一个可接受的水平上。泄漏电流还取决于栅极电压。通过使晶体管堆叠起来并使截止晶
体管靠近电源/地线可以使栅泄漏电流减小。
2.3 结泄漏电流
 
结泄漏电流发生在源或漏扩散区处在与衬底不同电位的情况下。结泄漏电流与其他泄漏电流
相比时通常都很小。
2.4 竞争电流
 
静态CMOS电路没有任何竞争电流,但其他某些电路甚至在静态时本身就会吸取电流。电
流模式逻辑和许多模拟电路也会吸取静态电流。这样的电路应该在休眠模式时通过禁止上拉
或电流源工作来关断他们。
2.5 降低静态功耗办法
 
(1)电源门控
减小静态电流最容易的方法就是关断休眠模块的电源。这一技术称为电源门控
2) 多种阈值电压和栅氧厚度
有选择的应用多种阈值电压可以使具有低Vt晶体管保持性能而又使具有高Vt晶体管的其
他路径减少泄漏。
大多数纳米工艺的逻辑管采用薄栅氧,IO晶体管采用厚的多的栅氧以使它们能够承受较大
的电压。
(3)可变阈值电压
通过体效应可以调制阈值电压。在休眠模式下应用一个反向体偏置减小泄漏。在工作模式下
利用一个正向体偏置来提高性能。
(4)输入向量控制
由前面可知,堆叠效应和输入排序会引起亚阈值泄漏和栅泄漏的变化。因此,一个逻辑模块
的泄漏与门的输入有关。输入向量控制是当模块置于休眠模式时,应用一组输入图案使模块
的泄漏最小。这些输入向量可以通过寄存器上的置位/复位输入端或通过扫描链加入。

参考链接:https://blog.csdn.net/zhong_ethan/article/details/104759746 

有关IC设计中节省静态功耗和动态功耗的方法的更多相关文章

  1. ruby - 如何使用 Nokogiri 的 xpath 和 at_xpath 方法 - 2

    我正在学习如何使用Nokogiri,根据这段代码我遇到了一些问题:require'rubygems'require'mechanize'post_agent=WWW::Mechanize.newpost_page=post_agent.get('http://www.vbulletin.org/forum/showthread.php?t=230708')puts"\nabsolutepathwithtbodygivesnil"putspost_page.parser.xpath('/html/body/div/div/div/div/div/table/tbody/tr/td/div

  2. ruby - 如何从 ruby​​ 中的字符串运行任意对象方法? - 2

    总的来说,我对ruby​​还比较陌生,我正在为我正在创建的对象编写一些rspec测试用例。许多测试用例都非常基础,我只是想确保正确填充和返回值。我想知道是否有办法使用循环结构来执行此操作。不必为我要测试的每个方法都设置一个assertEquals。例如:describeitem,"TestingtheItem"doit"willhaveanullvaluetostart"doitem=Item.new#HereIcoulddotheitem.name.shouldbe_nil#thenIcoulddoitem.category.shouldbe_nilendend但我想要一些方法来使用

  3. ruby - 为什么我可以在 Ruby 中使用 Object#send 访问私有(private)/ protected 方法? - 2

    类classAprivatedeffooputs:fooendpublicdefbarputs:barendprivatedefzimputs:zimendprotecteddefdibputs:dibendendA的实例a=A.new测试a.foorescueputs:faila.barrescueputs:faila.zimrescueputs:faila.dibrescueputs:faila.gazrescueputs:fail测试输出failbarfailfailfail.发送测试[:foo,:bar,:zim,:dib,:gaz].each{|m|a.send(m)resc

  4. ruby - Facter::Util::Uptime:Module 的未定义方法 get_uptime (NoMethodError) - 2

    我正在尝试设置一个puppet节点,但ruby​​gems似乎不正常。如果我通过它自己的二进制文件(/usr/lib/ruby/gems/1.8/gems/facter-1.5.8/bin/facter)在cli上运行facter,它工作正常,但如果我通过由ruby​​gems(/usr/bin/facter)安装的二进制文件,它抛出:/usr/lib/ruby/1.8/facter/uptime.rb:11:undefinedmethod`get_uptime'forFacter::Util::Uptime:Module(NoMethodError)from/usr/lib/ruby

  5. ruby-on-rails - Rails - 子类化模型的设计模式是什么? - 2

    我有一个模型:classItem项目有一个属性“商店”基于存储的值,我希望Item对象对特定方法具有不同的行为。Rails中是否有针对此的通用设计模式?如果方法中没有大的if-else语句,这是如何干净利落地完成的? 最佳答案 通常通过Single-TableInheritance. 关于ruby-on-rails-Rails-子类化模型的设计模式是什么?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.co

  6. Ruby 方法() 方法 - 2

    我想了解Ruby方法methods()是如何工作的。我尝试使用“ruby方法”在Google上搜索,但这不是我需要的。我也看过ruby​​-doc.org,但我没有找到这种方法。你能详细解释一下它是如何工作的或者给我一个链接吗?更新我用methods()方法做了实验,得到了这样的结果:'labrat'代码classFirstdeffirst_instance_mymethodenddefself.first_class_mymethodendendclassSecond使用类#returnsavailablemethodslistforclassandancestorsputsSeco

  7. ruby-on-rails - Rails 3.2.1 中 ActionMailer 中的未定义方法 'default_content_type=' - 2

    我在我的项目中添加了一个系统来重置用户密码并通过电子邮件将密码发送给他,以防他忘记密码。昨天它运行良好(当我实现它时)。当我今天尝试启动服务器时,出现以下错误。=>BootingWEBrick=>Rails3.2.1applicationstartingindevelopmentonhttp://0.0.0.0:3000=>Callwith-dtodetach=>Ctrl-CtoshutdownserverExiting/Users/vinayshenoy/.rvm/gems/ruby-1.9.3-p0/gems/actionmailer-3.2.1/lib/action_mailer

  8. ruby - Highline 询问方法不会使用同一行 - 2

    设置:狂欢ruby1.9.2高线(1.6.13)描述:我已经相当习惯在其他一些项目中使用highline,但已经有几个月没有使用它了。现在,在Ruby1.9.2上全新安装时,它似乎不允许在同一行回答提示。所以以前我会看到类似的东西:require"highline/import"ask"Whatisyourfavoritecolor?"并得到:Whatisyourfavoritecolor?|现在我看到类似的东西:Whatisyourfavoritecolor?|竖线(|)符号是我的终端光标。知道为什么会发生这种变化吗? 最佳答案

  9. ruby - 主要 :Object when running build from sublime 的未定义方法 `require_relative' - 2

    我已经从我的命令行中获得了一切,所以我可以运行rubymyfile并且它可以正常工作。但是当我尝试从sublime中运行它时,我得到了undefinedmethod`require_relative'formain:Object有人知道我的sublime设置中缺少什么吗?我正在使用OSX并安装了rvm。 最佳答案 或者,您可以只使用“require”,它应该可以正常工作。我认为“require_relative”仅适用于ruby​​1.9+ 关于ruby-主要:Objectwhenrun

  10. ruby - 多个属性的 update_column 方法 - 2

    我有一个具有一些属性的模型:attr1、attr2和attr3。我需要在不执行回调和验证的情况下更新此属性。我找到了update_column方法,但我想同时更新三个属性。我需要这样的东西:update_columns({attr1:val1,attr2:val2,attr3:val3})代替update_column(attr1,val1)update_column(attr2,val2)update_column(attr3,val3) 最佳答案 您可以使用update_columns(attr1:val1,attr2:val2

随机推荐