【数字IC基础】低功耗设计

低功耗技术

  • 功耗构成
    • 静态功耗(漏电功耗)
    • 动态功耗
      • 翻转功耗(Switch Power)
      • 短路功耗(Internal Power)
    • 不同类型的标准单元的功耗
  • 低功耗设计方法
    • 降低芯片工作电压
    • 多阈值工艺方法
    • 电源门控(Power Gating)
    • 多电压域(Multi-Voltage Domain)
    • 体偏置
    • 门控时钟
      • 一个简单的门控时钟
      • 基于锁存器的门控时钟
      • 基于触发器的门控时钟
      • 门控时钟的可测试性设计
      • 门控时钟的时钟树设计
  • 部分参考资料

功耗构成

在这里插入图片描述

静态功耗(漏电功耗)

CMOS电路中静态功耗主要是由漏电流引起的功耗。漏电流主要由以下几部分组成:

在这里插入图片描述

  1. PN结反向电流 (PN-junction Reverse Current),由少数载流子漂移和在耗尽区产生电子/空穴对引起。

  2. 源极和漏极之间的亚阈值漏电流(Sub-threshold Current),亚阈值泄漏电流是晶体管应当截止时流过的电流。

  3. 栅极漏电流,包括栅极和漏极之间的感应漏电流(Gate Induced Drain Leakage),

  4. 栅极和衬底之间的隧道漏电流 (Gate Tunneling ),由于栅极氧化物隧穿和热载流子注入,从栅极直接通过氧化物流到衬底的电流,

在这里插入图片描述

随着工艺先进,晶体管阈值电压降低,漏电流增大,静态功耗增大。

静态功耗的计算公式:

在这里插入图片描述

动态功耗

在这里插入图片描述

动态功耗 = 翻转功耗 + 短路功耗

翻转功耗(Switch Power)

翻转功耗又称为开关功耗,是电路在开关过程中对输出节点的负载电容充放电所消耗的功耗

当电容Cload通过PMOS 管充电时它的电压从0升至VDD,此时从电源上吸取了一定的能量。该能量的一部分消耗在 PMOS 器件上,而其余的则存放在负载电容上。在由高至低的翻转期间,这一电容被放电,于是存放的能量被消耗在NMOS 管中。

翻转功耗的计算公式:

在这里插入图片描述

从上述公式中可以看出,如果想要减少功耗,可以:①降低电压;②降低反转率;③减少负载电容

短路功耗(Internal Power)

短路功耗又可以称为内部功耗,主要原因是直接通路电流引起的功耗,即短路造成的。短路功耗是因为在输入信号进行翻转时,信号的翻转不可能瞬时完成,因此PMOS和NMOS不可能总是一个截止另外一个导通,总有那么一段时间是使PMOS和NMOS同时导通,那么从电源VDD到地VSS之间在短期内出现了一条直流通路,就形成了短路电流,

在这里插入图片描述

不同类型的标准单元的功耗

低功耗设计基础:深入理解Internal Power

低功耗设计方法

在这里插入图片描述

在设计一个系统的时候,必须清楚功耗和性能的关系。也就是说,在开始设计时必须清楚地知道你的系统应用需要在得到尽可能高性能的基础上降低功耗,还是需要在尽可能低的功耗基础上提高性能,这对采用什么样的低功耗设计技术非常关键。

下图所示为基于低功耗反馈的前向设计方法。从图中可以看出,可以在五个层次上对系统的功耗进行优化,自顶向下分别是系统级优化,行为级优化,RTL级优化,逻辑级优化和物理级优化。

在这里插入图片描述

各层次优化的具体方法及优化效果如下图所示。

在这里插入图片描述

可以看到,层次越高的优化方法优化效果越明显
体系结构级优化:多电压供电、多阈值电压、添加缓存
RTL级优化:门控时钟(对应是的降低反转率f)、减少毛刺
物理级优化:减少电容、衬底偏压

降低芯片工作电压

按照中学物理的计算公式,功率与电压和电流的乘积正相关。在芯片上计算功耗虽然没有这么简单,但是从原理上降低芯片电压仍然是降低功耗最直观最有效的方法。也正因为如此,当前大多数芯片的工作电压从最初的5V、3V一路下降,目前基本都在1V以下甚至0.5V以下。而随之而来的困难在于,随着电压的下降,标准单元的速度也会随之变慢,但是电子设备对处理速度亦即芯片频率的要求却越来越高。以移动设备为例,最初的芯片频率不过几十上百兆赫兹,而现今最快的手机SoC频率峰值已经超过2GHz。这方面也是每一代芯片升级背后所需要解决的技术难题之一。

(静态功耗和动态功耗的计算中都涉及到电压)

多阈值工艺方法

使用多阈值工艺可以在时序和漏电流之间进行一些折中。如下图所示,低阈值的标准逻辑单元具有速度快、漏电流大的特点,高阈值的标准逻辑单元具有速度慢、漏电流小的特点。所以在设计中可以在关键路径上使用低阈值的标准逻辑单元来优化时序,在非关键路径上使用高阈值的标准逻辑单元来优化漏电流。所以使用多阈值工艺可以大大减少系统的静态功耗.

在这里插入图片描述

这是当前芯片行业最常用也是最容易使用的设计方法之一。所谓Vth,指的是逻辑门的阈值电压。而阈值电压和功耗与速度存在如下关系:阈值电压越高,cell速度越慢,功耗越小;反之阈值电压越低,cell速度越快,功耗越高。

在实际应用中,一般采用的策略为:对于性能要求高的模块,或者频率比较高的部分,采用Vth比较低的cell,让setup更容易收敛;对于性能要求较低的模块,或者频率较低的部分,多采用Vth比较高的cell,让功耗更低。通过这种方法,可以实现在同一块芯片上,根据性能和功耗的不同要求而调整cell的使用,从而避免在不太重要的功能上浪费过多的功耗。

电源门控(Power Gating)

一颗SoC中可能包含很多功能模块如视频处理(DSP),音频处理(AUDIO),定位(GPS),游戏(GPU),存储(Memory)等,但大多数功能并不会同时开启,因此为了降低不用模块在等待状态下消耗的功耗,干脆就设计成在不用的时候把它们关闭。这就是Power Gating最初的想法。

最有效的降低功耗的手段莫过于电源关断了。其原因在于不论多低的电压,多小的电流,多慢的速度抑或多小的leakage,都不如将电源完全关闭来的彻底。

在这里插入图片描述

在正常工作状态,Sleep信号为低电平,高阈值MOS管处于导通状态;当处于睡眠状态时,Sleep信号为高电平,切断电源,并且由于采用了高阈值MOS管作为开关,可以有效地减少漏电流。

值得注意的是,一方面,由于模块的输入输出信号是与其他模块相连接的,很多情况下需要在处于睡眠状态的模块与非睡眠状态的模块之间的信号接口上添加隔离单元(Isolation Cell),这样在输出信号的模块断电情况下,没有断电的接收模块的输入信号仍然具有特定的驱动。另一方面,需要添加保持寄存器 (Retention Register)来保持一些特殊存储器件上的值,以保证电源开通时的正常功能。例如,当模块电源处于断电状态时,需要保存其中存储器中的值,就需要添加保持寄存器。

多电压域(Multi-Voltage Domain)

在Power Gating的基础上,还做如下考虑:
对于性能要求较高的CPU,GPU等模块,由于需求频率较高,在设计上可能采用较高的电压,而一些不太核心的模块如AUDIO,GPS等,可以采用相对低的电压来设计。这样一来,整颗芯片可能就会变成下面的样子:

在这里插入图片描述

在当前的设计流程中,一般使用基于模块的设计,这就使多电压设计成为可能。但电压的降低将使 MOS 管的翻转速度降低。可以根据应用场景让不同的模块在不同的电压下以不同的频率运行。

体偏置

将衬底电压偏置,提高晶体管阈值。但阈值电压的升高会影响性能,使用动态偏置的方法,在工作模式下保持较小的偏置电压,在保持模式下加强偏置电压。

值得注意的是,由于MOS 管的体偏转需要时间,电路由等待模式转为工作模式的时间较长。

参考链接:
低功耗基础:Body Bias

门控时钟

随着如今芯片的规模和功耗越来越大,门控时钟被大量地用在芯片设计中,这是在 RTL级的低功耗优化技术

门控时钟即用逻辑门控制电路模块时钟信号的通断,从而控制该模块的工作情况。

当芯片上的某一模块的功能不需要工作时,如芯片上的 USB 模块或 SPI 接口模块没有使用时,通常会将通往这些模块的时钟停下来。通过关闭空闲电路的时钟,可以大量减少消耗在时钟树上的和不工作的触发器上的功耗。

一个简单的门控时钟

下图所示为一种简单的门控时钟电路结构,它由一个与门或者是或门组成。(“与”门或“或”门使用哪个取决于触发器的活跃沿)

在这里插入图片描述

不含有锁存器的门控时钟电路,虽然实现比较简单,但是我们无法确定EN的持续时间,如果EN的持续时间小于T/2(T位CLK的周期),那么就会产生门控无效的问题。

在这里插入图片描述

此外,还会引起时钟毛刺的产生:

在这里插入图片描述

当源时钟 CLK 为高电平时,如果CLK_EN为低电平,GCLK 将立刻变为低电平,结果一个时钟的下降沿提前出现,即产生一个类似于毛刺的不完整时钟信号,这会影响一些使用下降沿触发器的电路。同样的,当源时钟CLK为高电平时,如果 CLK_EN 变为高电平,GCLK将立刻变为高电平,造成一个时钟的上升沿提前出现,这会影响一些使用上升沿触发器的电路。总之,这类在门控时钟上出现的毛刺,对同步电路来说是非常致命的。

(使能信号的到来时间和离开时间是不确定的,导致)

基于锁存器的门控时钟

对于简单使用与门的情况,在时钟信号位高电平的时候,使能端的变化会可能会导致毛刺的产生(因为高电平是与门的非控制值,低电平时控制值)。

为了避免过早截断时钟脉冲或误产生多个时钟脉冲(或时钟上的毛刺),正确的操作强制要求使能信号(EN)从时钟活跃沿(本例为上升沿)起持续到时钟不活跃沿(本例为时钟下降沿)止为一个常量。

基于锁存器的门控时钟的思想是设计中加入了一个电平敏感的锁存器,以在时钟活跃沿和不活跃沿之间保持使能信号不变,这样就无须依靠门控电路本身来满足这一要求了。如下图所示:

在这里插入图片描述

基于触发器的门控时钟

虽然基于 Latch 的门控时钟保证门控时钟周期完整、避免产生毛刺。但会产生亚稳态,避免产生亚稳态就把锁存器换成触发器。

在这里插入图片描述

(使用触发器就可以同伙时序约束来避免亚稳态的产生。)

集成时钟门控单元(Integrated Clock Gating Cell

门控时钟的可测试性设计

在进行可测性设计的时候,如果要进行全扫描设计,则希望所有的触发器在扫描模式时都由个统一的同步时钟驱动。如果电路中存在门控时钟单元,则会使得产生的时钟 GCLK 不可控制。最简单的解决方法是在门控电路结构前加入一个或门,其输入为扫描测试模式的使能信号和门控时钟使能信号,如图10所示。在测试模式下,时钟的门控时钟单元将被旁路。
在这里插入图片描述

门控时钟的时钟树设计

在时钟树的设计中,门控时钟单元应尽量摆放在时钟源附近,即防止在门控时钟单元的前面摆放大量的时钟缓冲器(Buffer)。这样,在利用门控时钟电路时钟时不仅能将该模块中的时钟停掉,也能将时钟树上的时钟缓冲器停止反转,有效地控制了时钟树上的功耗。如下图所示,在布局时将门控时钟电路的部件摆放在一起,并摆放在时钟源 GCLK 附近,停掉时钟后,整个时钟树上的缓冲器(CTS)和时钟树驱动的模块都停止了翻转。通常的 SOC 设计中,门控时钟单元会被做成一个硬核或标准单元,称之为集成时钟门控单元(Integrated Clock Gating Cell),也就是 ICG 技术。

在这里插入图片描述

部分参考资料

低功耗设计方法

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/22152.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

微服务使用步骤

Maven的依赖冲突解决方案: 路径最短原则配置优先原则破坏规则则使用排除 SpringBoot场景启动器starter的开发流程 c3p0-spring-boot-starter自定义场景启动器test-c3p0调用自定义场景启动器SpringBoot自动装配SpringBoot应用启动原理nacos服务治理 安装 启动bin/s…

算法leetcode|66. 加一(rust重拳出击)

文章目录 66. 加一:样例 1:样例 2:样例 3:提示: 分析:题解:rust:go:c:python:java: 66. 加一: 给定一个由 整数 组成的 非…

IDEA SpringBoot项目引入外部jar并打包

1、首先,我们再pom.xml中导入依赖包时,打包可以正常进行。 但如果我们引入了第三方的外部jar包(这里需要先把jar包添加到该项目依赖库中,这里不做演示),如图 2、导致打包时报错,程序包不存在或…

1005 继续(3n+1)猜想

描述 卡拉兹(Callatz)猜想已经在1001中给出了描述。在这个题目里,情况稍微有些复杂。 当我们验证卡拉兹猜想的时候,为了避免重复计算,可以记录下递推过程中遇到的每一个数。例如对 n3 进行验证的时候,我们需要计算 3、5、8、4、…

SpringBoot 配置文件

一、配置文件作用 整个项目中所有重要的数据都是在配置文件中配置的,比如: 数据库的连接信息(包含用户名和密码的设置); 项目的启动端口; 第三方系统的调用秘钥等信息; 用于发现和定位问题的…

MBG中update语句的区别

int updateByPrimaryKey(User record) thorws SQLException 按主键更新 int updateByPrimaryKeySelective(User record) thorws SQLException 按主键更新值不为null的字段 使用以上的方式更新数据时必须提供主键,MyBatis根据主键进行数据记录的更新。 int updateBy…

android app控制ros机器人四(调整界面布局)

半吊子改安卓,记录页面布局调整: 在ros-mobile基础上顶端增加一行,用于显示app名称和logo图像;修改标签页。 添加文字简单,但是替换图标长知识了,开始只是简单的把mipmap各个文件夹下的图片进行替换&…

MFC第二十六天 CRgn类简介与开发、封装CMemoryDC类并应用开发

文章目录 CRgn类简介与开发CRgn类简介CRgn类区域管理开发CRgn类区域管理与不规则形状的选取 封装CMemoryDC类并应用开发CMemoryDC.h封装CMemoryDC开发游戏透明动画CFlashDlg.hCFlashDlg.cpp 封装CMemoryDC开发游戏动画 附录四大窗口CDC派生类 CRgn类简介与开发 CRgn类简介 CR…

Qt 6. 其他类调用Ui中的控件

1. 把主类指针this传给其他类,tcpClientSocket new TcpClient(this); //ex2.cpp #include "ex2.h" #include "ui_ex2.h"Ex2::Ex2(QWidget *parent): QDialog(parent), ui(new Ui::Ex2) {ui->setupUi(this);tcpClientSocket new TcpClient…

next_permutation与prev_permutation(全排列函数)

1&#xff0c;next_permutation(a,an);&#xff08;找下一个&#xff09; a代表数组头地址&#xff0c;b代表数组尾地址&#xff0c;如果下一个排列存在则返回真&#xff0c;否者返回假 #include<iostream> #include<algorithm> using namespace std; int main()…

mysql重置和修改密码 Ubuntu系统

忘记密码要重置密码 cat /etc/mysql/debian.cnf/etc/mysql/debian.cnf这个只有Debian或者Ubuntu服务器才有&#xff0c;里面有mysql安装后自带的用户&#xff0c;作用就是重启及运行mysql服务。我们用这个用户登录来达到重置密码的操作 使用上面的那个文件中的用户名和密码登…

【腾讯云Cloud Studio实战训练营】React 快速构建点餐页面

前言&#xff1a; Cloud Studio是一个在线的云集成开发环境&#xff08;IDE&#xff09;&#xff0c;可以让开发人员在浏览器中轻松地开发、测试、调试和部署应用程序。它提供了基于云的计算资源和工具&#xff0c;例如代码编辑器、编译器、调试器、版本控制系统和项目管理工具…

210. 课程表 II Python

文章目录 一、题目描述示例 1示例 2示例 3 二、代码三、解题思路 一、题目描述 现在你总共有 numCourses 门课需要选&#xff0c;记为 0 到 numCourses - 1。给你一个数组 prerequisites &#xff0c;其中 prerequisites[i] [ai, bi] &#xff0c;表示在选修课程 ai 前 必须 …

IDEA超强XSD文件编辑插件-XSD / WSDL Visualizer

前言 XSD / WSDL Visualizer可以简化XML架构定义(XSD)和WSDL文件编辑过程; 通过使用与IntelliJ无缝集成的可视化编辑器&#xff0c;转换处理XSD和WSDL文件的方式。告别导航复杂和难以阅读的代码的挫败感&#xff0c;迎接流线型和直观的体验。 插件安装 在线安装 IntelliJ IDE…

第三方控价服务流程

控价是一项需要技术和经验双重协作才能完成好的工作&#xff0c;技术指的是监控价格&#xff0c;经验指的是治理乱价&#xff0c;二者缺一不可&#xff0c;很多品牌会选择自己去完成&#xff0c;自己开发系统&#xff0c;组建治理团队&#xff0c;成本相对更高&#xff0c;也有…

Qt/VS LNK2019/LNK2001:无法解析的外部符号

LNK2019 序言LNK2019&#xff1a;无法解析的外部符号"__declspecLNK2019&#xff1a;无法解析的外部符号" public private函数名1、有函数声明忘写定义2、有种可能性是处于不同目录下去调用那个对应的文件接口3、有种可能性&#xff0c;是因为跨类调用了inline函数4、…

爬楼梯 LeetCode热题100

题目 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢&#xff1f; 思路 最后一步有两种情况&#xff0c;从n-1跳到n&#xff0c;从n-2跳到n。 推出&#xff1a;f(n)f(n-1)f(n-1) 斐波那契数列。 代码 cla…

Go指针取址问题:循环后每次都拿到相同内容

例子&#xff1a; func main() {yourList : [...]int{1, 2, 3}yourMap1 : make(map[int]*int)yourMap2 : make(map[int]*int)for key, value : range yourList {// 修改前yourMap1[key] &value// 修改后tmp : valueyourMap2[key] &tmpfmt.Println(value, &value…

LabVIEW开发高压航空航天动力系统爬电距离的测试

LabVIEW开发高压航空航天动力系统爬电距离的测试 更多电动飞机MEA技术将发电&#xff0c;配电和用电集成到一个统一的系统中&#xff0c;提高了飞机的可靠性和可维护性。更多的电动飞机使用更多的电能来用电动替代品取代液压和气动系统。对车载电力的需求不断增加&#xff0c;…

访问 Hive 的元数据存储(MetaStore)的API方式

访问 Hive 的元数据存储&#xff08;MetaStore&#xff09;的API方式 访问 Hive 的元数据存储&#xff08;MetaStore&#xff09;是通过 Hive 的 Thrift API 来实现的。Thrift 是一个跨语言的远程服务调用框架&#xff0c;它可以让不同编程语言之间进行跨语言的远程过程调用&a…