ic基础|功耗篇02:系统级低功耗技术

2024-05-13 22:36

本文主要是介绍ic基础|功耗篇02:系统级低功耗技术,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

大家好,我是数字小熊饼干,一个练习时长两年半的ic打工人。我在两年前通过自学跨行社招加入了IC行业。现在我打算将这两年的工作经验和当初面试时最常问的一些问题进行总结,并通过汇总成文章的形式进行输出,相信无论你是在职的还是已经还准备入行,看过之后都会有有一些收获,如果看完后喜欢的话就请关注我吧~谢谢~

在上篇文章中我们对影响芯片功耗的几点因素进行了讨论,本篇文章我们讨论系统级低功耗设计方法和技术。

一、低功耗设计的5个层次

在不同的设计阶段,可采用不同的方式进行低功耗设计,比如可以将低功耗设计化为5个层次进行,自上而下分别为:系统级优化、行为级优化、RTL级优化、逻辑级优化和物理级优化。每个层次对功耗优化的效果也不尽相同,从上往下,依次减小。
在这里插入图片描述

二、系统级低功耗优化设计方法

系统层次的设计通常可以节约70%以上的功耗,通常由系统以及架构设计人员对系统层次的低功耗方案进行设计,他们会对系统的性能以及功耗的目标综合考虑,最终得到低功耗方案,并交由前端和后端人员进行实现。

2.1 低功耗优化设计方法

软件/硬件划分:

soc的功能实现可以划分为软件和硬件两个方面,因此不同的功能可以划分为软件或者硬件来做,如果一些资源密集型模块通过硬件实现,就能节约大量的功耗,因此要结合硬件和软件的优势来制定软件和硬件的划分。

算法优化:

算法也是影响功耗的一大因素,在设计时需要对算法尽可能的进行优化,比如:

-规整的算法有利于简化状态机,减少判断分支语句,降低功耗;

-分析算法需要多少存储器及进行多少次存储器访问,尽可能的减少不必要的访问;

-需要多少运算逻辑单元(如乘法器、除法器、加法器等),如何将这些运运算逻辑单元进行优化到最少,例如乘2,4,8这种2^n数时;

-减少不必要的乘法器使用,通过移位代替乘法;

-选择合适的计算精度,即满足需求,尤能减少数据位宽,降低运算模块的面积,进而减少功耗。

-对于大规模运算的应用(比如FFT),使用对数系统(Logarithmic number system,LNS)比使用线性系统更好。LNS在降低平均位元活跃度(也就是降低0到1之间的翻转)的同时使用加法和减法实现乘除法,使效率比线性系统更高。因此基于LNS算法来实现FFT可以节省大量的功耗,但是加法器和乘法器的宽度会增加,导致面积增加。

2.2 低功耗优化设计技术

本节主要介绍一些具体的系统与架构的低功耗设计技术。首先是用于降低静态功耗的一些技术。

2.2.1 静态低功耗技术

  • 多阈值工艺(Muti-Vt Design)方法

    多阈值工艺方法的实质就是在时序和功耗之间进行折中。

  • 高阈值标准逻辑单元具有速度慢、漏电流小的特点。

  • 低阈值标准逻辑单元具有速度块、漏电流大的特点。

因此,我们可以在时序紧张的关键路径上使用低阈值的标准逻辑单元来优化时序,在非关键路径上使用高阈值的标准逻辑单元来减少漏电流。
在这里插入图片描述

2. 电源门控(Power Gating)方法

电压门控法也称多电源法(Multi-Supply),其思想是将芯片上的模块基于其应用上的不同来采用不同的电源网络进行供电,因此,在某个模块不需要工作时,就可以断开电源,进而将该模块的功耗降为零。
在这里插入图片描述
如图所示,电源开关单元(Power Switch Cell)中的高阈值MOS管作为电源闸门,用来将低阈值电源和地隔离开。根据sleep信号的状态对MOS管的开关进行切换。

使用该方法还需要注意,由于睡眠模块和非睡眠模块是有连接的,因此需要添加隔离单元(Isolation Cell),用于在睡眠模块处于睡眠模式时,将出信号保持为常数,从而避免非睡眠单元的输入悬空。并且隔离单元的输出信号需要保证不影响后级非睡眠模块处于非工作状态。

除此之外,在睡眠模块中仍有一些非睡眠区域,需要添加保持寄存器(Retention Register)用于保持一些特殊存储器件上的值,以保证上电时能正常工作。

在睡眠模块上下电时,需要时钟、复位配合,在上电时需要初始化,以避免进入错误状态。且如果有保持寄存器,在下电前睡眠模块需要保存的状态需要存储在保持寄存器中,并在上电后将保持寄存器中存储的状态恢复至睡眠模块中。

3. 体偏置(Body Bias)

晶体管阈值电压随体偏置而变化。

  • 在工作模式下,MOS管的体偏置为0,MOS管处于低阈值状态,翻转速度快,漏电大。
    -在等待模式下,MOS管的体偏置为反向偏置,处于高阈值状态,漏电小。
    在这里插入图片描述
    此外还需要注意的是,由于MOS管的体偏置需要需要时间,由等待模式进入工作模式的时间较长。

2.2.2 动态低功耗技术

随着芯片的集成度的不断提高,越来越复杂的存储器、处理器和时钟树贡献了动态功耗的大部分,因此要从这些方面进行低功耗设计。

1. 多电压域(Multi-Voltage Domain)

系统的功耗与电压的平方成正比,因此减小工作电压可以有效降低功耗,由于芯片的设计一般都是基于模块的设计,因此就让多电压域的设计成为了可能。但是电压的降低也会将MOS管的翻转速度降低,因此需要保证在降低供电电压时,不会影响模块的正常工作。
在这里插入图片描述
在进行多电压域设计时,有以下需要注意的地方:

-需要在不同的电压域之间插入一些电平转换单元(Level Shifter),以将输入电压范围转换成输出需要的不同电压范围。

-如果不同电压域之间的驱动信号和接收信号之间的距离很长,需要插入特殊的驱动单元(Repeater)来增强信号的驱动能力。

  • 如果不同电压域之间可以进行power gating,还需要加入保持寄存器和电压隔离单元。
    -电压域并非划分的越多越好,增加电压域的同时,也会增加电源,控制和电源网络实现复杂度。
  • 跨电压域信号,尽量作为异步信号进行处理。

2. 高级门控时钟(Clock Gating):

就如我们之前提到的那样,对于芯片来说,其中不断翻转的时钟提供了大部分动态功耗,因此在不使用时,将时钟停住就成为了一种非常实用的低功耗方法,也就是所谓的门控时钟clock gating。基于芯片的工作阶段,关闭空闲电路的时钟,可以大量减少消耗在时钟树上的和不工作触发器上的功耗。
在这里插入图片描述
门控时钟clock gating的要点:

  • 门控时钟应该尽量摆放在时钟源附近,减少在门控时钟单元的前面有太多的时钟缓冲器(buffer)不断翻转而造成的功耗。
    -门控时钟也会带来额外的逻辑,比如上图种的寄存器和与门。因此也会带来额外的逻辑面积和路径延迟。
  • clock gating也可以通过rtl编码的方式,通过EDA工具自动插入。

3. 异步设计:

对于同步时钟电路来说,为了减少时钟偏移,会生成大规模的时钟树结构,在时钟树中会存在大量的时钟缓冲器,时钟网络消耗的功耗也随着增加。因此,通过使用异步时钟设计,不需要全局时钟,在两个模块之间通过握手信号进行交互,就可以减少功耗。

在这里插入图片描述

2.2.3 低功耗SOC系统的动态低功耗管理

1.动态电压频率调节:

动态电压频率调节DVFS,Dynamic Voltage and Dynamic Frequency Scaling是一种通过调整不同模块处在工作状态时,性能和能耗之间的关系来降低功耗,即根据性能的需要, 实时分配不同的工作电压以及工作频率,使得系统的性能恰好满足系统最低工作要求,从而在满足性能的前提下,最大限度的降低功耗的一种低功耗方法。

如果一个电路能够估算出它必须做多少工作才能完成当前的任务,那么理论上讲就可以将时钟频率调低到刚好能适时完成该任务的水平。降低时钟频率意味着可以同时降低供电电压。因此通过降低时钟频率,降低了电压,也降低了漏电流,从而能将动态功耗和静态功耗同时降低。

但是该种方法需要在单元设计、模块设计、模块互连、芯片规划、系统架构以及操作系统和应用设计等设计层面进行修改,因此该方法是比较复杂却有效的低功耗设计方法。

2.采用不同的工作模式

根据芯片的应用和功能,将芯片划分出不同的工作模式,在不同的工作模式下,选用不同频率的时钟,并且可以将一些不需要的模块时钟关闭,或者是直接把那些没有使用的模块电源给关掉。 这种动态功耗管理可以通过软件实现,也可以通过硬件实现。

先举一个例子:
在这里插入图片描述以上是一种测距芯片的低功耗状态机,简要说明一下:

  • 当没有供电时,芯片处于power off状态;当给AVDD和IOVDD供电时,芯片启动,进入hp idle状态;
  • 当芯片处于hp idle状态时,发送start命令,芯片进入ranging状态,各个模块正常工作,激光器vcsel开启激光输出进行测距。
  • 当芯片配置为低功耗模式时,进入lp idle状态,此时只保留数据ram和寄存器内容,其余模块被power gating或clock gating,此外,还可通过LPN信号关闭i2c模块的通信功能。处于lp idle模式下时,芯片的功耗大大降低,仅次于power off状态,而且当发送i2c唤醒命令时,芯片能够从lp idle快速进入hp idle状态;

下面再举一个在不同的工作模式下选择不同的时钟频率,并对不需要工作的模块时钟进行clock gating,从而降低功耗的例子:

在这里插入图片描述
上图中将芯片分为了以下4个工作模式:sleep、idle、slow、normal。从normal模式到sleep模式,工作的时钟频率降低,被gating的模块也变多,从而能够将时钟引起的功耗大大降低。

3. 优化存储器:

存储器的功耗也占了芯片总功耗的一大部分,因此降低存储器的功耗非常重要。主要有以下方法可以优化存储器的功耗:

首先可以使用上面提到的方法对存储器进行低功耗优化:

  • 最简单的方式是使用门控电源,在不使用存储器时,将其关闭。

  • 使用双阈值存储器,比如使用基底偏压存储器,在不使用存储器时将其反向偏置,本质上是提高了阈值电压,并降低了漏电流与静态功耗。
    -使用具有多功耗模式的存储器,例如使用双功能存储器,在对存储器进行读写时,使用全电压供电以保证读写操作正常进行,在存储器不需要读写时,降低供电电压进入低功耗模式,仅保持数据不丢失即可。
    需要注意的是,在使用存储器的低功耗模式时,存储器的唤醒需要时间,功耗降的越低,唤醒时间越长,因此在设计时需要考虑唤醒时间。

  • 使用分块的存储器,将一大块存储器分为几个单独时钟和电压可控的bank,例如将访问频次高的存储器和访问频次低的部分分成独立的bank,每一bank工作在不同的功耗模式下,只使得小部分存储器处于电压开状态,其他大部分存储器只在执行密集型运算时打开。
    -对有些需要频繁访问存储器的模块,例如使用快速傅里叶变换(Fast Foutier Transform, FFT)的DSP模块,可以在存储器和处理器之间增加缓存,以预先将相关数据从主存中取到缓存中,使用小范围的缓存能使计算能耗大量下降。

  • 将多端口的存储器替换为单端口的存储器,或者使用共享ram,也可以有效降低面积和功耗。

三、总结

本篇文章简要介绍了在系统层面的一些低功耗方法,对于我们这种前端设计人员,先要对这些方法有一个大致的了解,并在以后的工作逐渐积累实战经验,说不定以后在座的各位就是那些架构大佬中的一员呢~

本篇文章主要是参考了《SoC设计方法与实现》和《硬件架构的艺术》两本书,如果有需要的话,可以在公众号回复“soc设计”和“硬件架构的艺术”哦~

如果你喜欢这篇文章的话,请关注我的公众号-熊熊的ic车间,里面还有ic设计和ic验证的学习资料和书籍等着你呢~欢迎您的关注!

这篇关于ic基础|功耗篇02:系统级低功耗技术的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/987018

相关文章

JWT + 拦截器实现无状态登录系统

《JWT+拦截器实现无状态登录系统》JWT(JSONWebToken)提供了一种无状态的解决方案:用户登录后,服务器返回一个Token,后续请求携带该Token即可完成身份验证,无需服务器存储会话... 目录✅ 引言 一、JWT 是什么? 二、技术选型 三、项目结构 四、核心代码实现4.1 添加依赖(pom

从基础到高级详解Python数值格式化输出的完全指南

《从基础到高级详解Python数值格式化输出的完全指南》在数据分析、金融计算和科学报告领域,数值格式化是提升可读性和专业性的关键技术,本文将深入解析Python中数值格式化输出的相关方法,感兴趣的小伙... 目录引言:数值格式化的核心价值一、基础格式化方法1.1 三种核心格式化方式对比1.2 基础格式化示例

redis-sentinel基础概念及部署流程

《redis-sentinel基础概念及部署流程》RedisSentinel是Redis的高可用解决方案,通过监控主从节点、自动故障转移、通知机制及配置提供,实现集群故障恢复与服务持续可用,核心组件包... 目录一. 引言二. 核心功能三. 核心组件四. 故障转移流程五. 服务部署六. sentinel部署

基于Python实现自动化邮件发送系统的完整指南

《基于Python实现自动化邮件发送系统的完整指南》在现代软件开发和自动化流程中,邮件通知是一个常见且实用的功能,无论是用于发送报告、告警信息还是用户提醒,通过Python实现自动化的邮件发送功能都能... 目录一、前言:二、项目概述三、配置文件 `.env` 解析四、代码结构解析1. 导入模块2. 加载环

linux系统上安装JDK8全过程

《linux系统上安装JDK8全过程》文章介绍安装JDK的必要性及Linux下JDK8的安装步骤,包括卸载旧版本、下载解压、配置环境变量等,强调开发需JDK,运行可选JRE,现JDK已集成JRE... 目录为什么要安装jdk?1.查看linux系统是否有自带的jdk:2.下载jdk压缩包2.解压3.配置环境

从基础到进阶详解Python条件判断的实用指南

《从基础到进阶详解Python条件判断的实用指南》本文将通过15个实战案例,带你大家掌握条件判断的核心技巧,并从基础语法到高级应用一网打尽,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一... 目录​引言:条件判断为何如此重要一、基础语法:三行代码构建决策系统二、多条件分支:elif的魔法三、

Python WebSockets 库从基础到实战使用举例

《PythonWebSockets库从基础到实战使用举例》WebSocket是一种全双工、持久化的网络通信协议,适用于需要低延迟的应用,如实时聊天、股票行情推送、在线协作、多人游戏等,本文给大家介... 目录1. 引言2. 为什么使用 WebSocket?3. 安装 WebSockets 库4. 使用 We

Python中高级文本模式匹配与查找技术指南

《Python中高级文本模式匹配与查找技术指南》文本处理是编程世界的永恒主题,而模式匹配则是文本处理的基石,本文将深度剖析PythonCookbook中的核心匹配技术,并结合实际工程案例展示其应用,希... 目录引言一、基础工具:字符串方法与序列匹配二、正则表达式:模式匹配的瑞士军刀2.1 re模块核心AP

从基础到高阶详解Python多态实战应用指南

《从基础到高阶详解Python多态实战应用指南》这篇文章主要从基础到高阶为大家详细介绍Python中多态的相关应用与技巧,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一、多态的本质:python的“鸭子类型”哲学二、多态的三大实战场景场景1:数据处理管道——统一处理不同数据格式

Linux查询服务器系统版本号的多种方法

《Linux查询服务器系统版本号的多种方法》在Linux系统管理和维护工作中,了解当前操作系统的版本信息是最基础也是最重要的操作之一,系统版本不仅关系到软件兼容性、安全更新策略,还直接影响到故障排查和... 目录一、引言:系统版本查询的重要性二、基础命令解析:cat /etc/Centos-release详