《硬件架构的艺术》笔记(五):低功耗设计

介绍

能量以热量形式消耗,温度升高芯片失效率也会增加,增加散热片或风扇会增加整体重量和成本,在SoC级别对功耗进行控制就可以减少甚至可能消除掉这些开支,产品也更小更便宜更可靠。本章描述了减少动态功耗和静态功耗的各种技术。

功耗源

三个主要的功耗源:浪涌、静态功耗、动态功耗。

浪涌电流:器件上电时最大瞬时输入电流。浪涌电流在应用中也称为启动电流。浪涌电流与设备有关,如电机启动电流前几个周期时正常满载电流的数倍。

基于SRAM的FPGA也有很明显的浪涌电流,上电时器件没有配置,需要外部下载数据配置编程资源(查找表、布线资源)。反熔丝FPGA无需上电配置,所以没有浪涌电流。

待机电流:关断主电源或系统进入待机模式下产生的电流。待机电流产生的功耗称为待机功耗。待机功耗也与元件电气特征密切相关。待机功耗也称为静态功耗,静态功耗也包括晶体管漏电流产生的功耗。

动态功耗(开关功耗)是门电路输出转换时,由逻辑转换所引起的功耗。动态功耗定义公式:

逻辑0->1,电容充电;逻辑1->0,电容放电。

ASIC总功耗:

 在典型应用中,动态功耗占到了总功耗的80%

在各设计抽象层次降低功耗

 降低功耗应该在所有设计层次上进行:系统层、逻辑层、物理层。层次越高就可能越有效。

在高的抽象层次上进行功耗的优化效果更好,如在系统和体系结构级可以达到最大的降低效果。

 为了最大程度降低功耗,各抽象层次在设计时就要把功耗因素考虑在内。

 上面的100X打错了是100%

系统级低功耗技术

片上系统方法

纳米级高端芯片的IO使用比内核更高的电压供电(3V3),占总功耗的50%。如果整个系统包含多个芯片,这些芯片间的连线将产生大量功耗。片上系统方法学主要关注降低功耗,缩减面积以及降低成本的手段。

硬件/软件划分

嵌入式处理器在大规模数字系统中广泛使用,某些功能可以用硬件实现,其余部分可以用软件实现。

通信算法具有高度递归的性质,少量代码可以负责大量的处理任务。这些资源密集型模块用硬件识别和实现,就可以节约大量功耗。

 使用硬件综合工具从Verilog或者VHDL描述的模块中提取出物理模型。编译器也可以将用高级语言编写的程序编译成嵌入式处理器所使用的原生指令集。

一种比常规方式更有效的HW/SW划分方法是使用基于模型的方式,如下图。

 这是一种基于给定规范建立系统模型的想法。模型要么完全自己建立要么使用可复用的已有模型库。随着库的增加,可以大大缩短设计时间。

可以使用SystemC建立模型,该语言可以用于对硬件建模。

低功耗软件

修改应用程序可以节约大量能耗,得到“更绿色”和能效更高的系统。

高级语言便于使用,但是有些结构难以用其实现,使用高频轮询实现这样的结构,这会导致较高的能耗。所以使用高级语言时要避免使用复杂原语。

嵌入式应用使用的C代码可能会使用若干循环。一些应用中,90%的运行时间可能都在执行这些循环。

优化方法:合并循环,使执行的指令数减少。基于硬件体系结构或处理器指令和寄存器的实现。我理解的就是更高效的利用硬件,而不是通过软件程序。

选择处理器

首先要选择合适数据宽度的处理器。如果使用简单的MAC(Multiply Accumulate Unit)能满足运算要求,就没必要用专用的DSP处理器,这样可以显著降低功耗。

图中是一个节省功耗的系统体系结构。利用微处理器进行控制,同时用协处理器或DSP进行数据处理。最好的系统体系结构用特定的机器(协处理器)来执行这个任务,使任务在最小且能效最高的机器中完成。即特定功能使用特定硬件实现从而实现降低功耗的目的。大多数情况下,微处理器和协处理器不会并行运行。

体系结构级降低功耗技术

高级门控时钟

同步数字系统中,时钟分布贡献了整个数字开关功率中的绝大部分。很多情况可以通过门控时钟将绝大部分不使用的电路关闭。

插入门控时钟前和插入后电路功能并没有改变,所以可以用一致性检查工具进行验证。

组合门控时钟方案在输出不变时使触发器时钟失效,可以用于降低5%~10%的功耗。时序门控时钟能减少连接到带有门控时钟的寄存器块的设计部分的冗余切换。使用时序门控时钟时,后续的流水线阶段也使用同样的条件进行门控操作。

时序门控时钟在实现时会加入额外的逻辑,所以不适用于多位宽数据。

 使用门控时钟最大挑战:识别出流水线上“多余的”或“不关心”的状态。一旦该工作完成,时序门控时钟就可以降低大量功耗,典型情况可以降低15%~25%开关次数。根据文献,时序门控始终转换只有在多于16个触发器的情况下才更有效率。

动态电压频率调整(DVFS)

DVFS可以在对频率不敏感的应用阶段降低时钟速率和供电电压,在性能适度损失的情况下大幅降低功耗。

当今CMOS工艺的绝大多数处理最大频率往往与供电电压相关,所以在低频时处理器可以工作在低供电电压下,所以DVFS可以通过频率和电压调节节省大量能量。

DVS使用一个可编程的DC-DC开关电压调节器,一个可编程的时钟产生器和一个宽操作域的高性能处理器。

总之,通过负载动态调整处理器的电压和频率,DVS能提供峰值满足运算要求的性能,这种方法好处能体现在低性能处理器上。

基于缓存的系统体系结构

 FFT要求频繁访问系统存储器的数据,这样的存储器能效不高,增强型FFT体系结构需要在系统存储器或RAM与处理器之间增加缓存。

在处理器需要之前,预先将相关数据从主存中取到缓存。小范围的缓存能使计算能耗大量下降,极大地提高了FFT的能效。

对数FFT体系结构

大规模运算的应用,对数系统(LNS)比线性系统更好。LNS降低每个bit活跃度,并用加减法实现乘除运算,使其效率比线性系统更高。基于LNS实现FFT有节约大量功耗的可能。缺点是加法器和减法器的宽度会增加,导致需要以指数级增大的查找表。(这里没懂,google也没搜到)

异步(无时钟)设计

传统的设计方法学会形成大规模时钟数结构,潜在地增加了SoC的平均功耗。并且时钟分配网络的设计也耗费了设计者大量精力,最可能存在的问题是时钟偏移。另外一个问题就是相当大的功耗。

由于时钟会导致上述问题,所以从设计中移除时钟是一件很有诱惑力的想法。这就是异步设计的基本意图。但是不能简单地直接移除电路,一部电路本质上进行自我控制,因此也称为自定时电路。

异步系统两个模块使用握手接口进行交互,书里5.8的图应该给错了。

移除时钟使得能效提升。时钟耗费了许多能量,将其移除使得能效大大提升。除此之外,因为所有未工作元件几乎部消耗能量,所以异步电路动态功耗接近0.

异步电路依赖于延迟不敏感编码的信号交换接口,其中最流行的是双轨道编码。

双轨道编码用两根线传输每个数据位,因此称为双轨。双轨道编码一根线表示逻辑1,另一根表示逻辑0.两部分能可靠地彼此通信而不受线上延迟的影响。

电源门控

电源门控可以在模块不使用时暂时将其关闭。目的:减少晶体管漏电,可以在逻辑模块不操作时将其关闭。

两类电源门控:细粒度电源门控、粗粒度电源门控。

细粒度电源门控

每个门和地之间存在一个开关晶体管。

主要负担:库IP提供者、标准单元设计者身上。

电源门控尺寸必须能满足任何情况下对开关电流的要求。门必须较大以便不会引起可测量的压降。此外对头部开关PMOS和脚部开关NMOS做出选择。开关电流相同时,脚部开关面积更小。

 使用细粒度电源门控可以将漏电减少为原来的1/10.

粗粒度电源门控

粗粒度电源们空中,电源门控晶体管是供电网络的一部分而不是标准单元的一部分。本质是创建一个电源开关网络。

粗粒度不完全依赖于库的质量,EDA工具对其处理能力影响更大。

电压关闭区域的备用晶体管大小和数量会影响对该区域的驱动能力。这将导致IR降幅变化并使性能衰弱。所有头部开关同时再次打开,会有瞬间充放电电流和短路电流产生。这种电流综合称为上电冲击电流(感觉和浪涌电流差不多)。对于避免器件故障和潜在的芯片失效,这种电流是个关键。

 不管实现哪种类型的电源门控,都需要改变RTL,设计一个电源控制器对需要关闭的模块进行控制。百万门规模的AISC很轻易就有20个以上的电源域。这种规模的设计混用粗粒度和细粒度两种技术。

电源门控需要在“关闭”域和“开启”域之间的逻辑或信号上加入隔离的单元以保持设计完整性并避免功耗损耗。模块断电,输出浮动,可能在阈值电压内产生不期望的电流。所以需要隔离模块将下电模块输出信号固定在1或0.可用简单的或、与逻辑作为输出隔离器件。隔离单元要么在RTL插入,要么在指定参数和要插入的模块后由EDA工具自动插入。现在的EDA工具可以做到该功能,一部分综合时插入,其余的在布局布线时插入。

多阈值电压

多单元库包含至少两组功能相同但阈值电压不同的单元。高阈值电压单元较慢但是漏电少;低阈值电压更快但是漏电更多。

缺点:增加生产的复杂性、增加设计时间。设计不恰当的话可能导致使用功耗增加。

测试不同Vt单元是否能达到期望性能时,最好在综合和布局优化阶段进行。逻辑综合或优化过程的门级映射阶段由综合工具实现,布局优化由物理实现工具负责处理。

为满足性能,可以先用低阈值电压库进行综合满足时序要求,在吧不需要的高性能或低阈值单元用高阈值单元替换。原因:大多数应用是以满足时序要求为前提条件的。。低阈值电压库速度快,面积小,高阈值电压单元耗费更多运行时间,面积也更大。

若主要目标是功耗,第一遍综合则使用高阈值电压单元更合适,再用低阈值电压单元进行替换。

多电压供电

设计可以分割成独立的“电压域”,根据每个区域对时序的要求而使用不同的供电电压。

一种方法:时序要求严格的模块置于标准电压下操作。不那么严格的路径可以安排到其他区域。

过去这种方式需要手动插入指定的转换单元在,增加了设计的风险。现在很多EDA公司都能提供可以自动插入电平移位单元的工具。

存储器电源门控

典型SoC中SRAM消耗了总功耗的1/3,其余部分由时钟数和随机逻辑消耗。所以存储器架构十分关键。

最简单的方法:在不使用存储器矩阵时将其关闭。

可以讲存储器分割成多个部分,需要时打开。

划分成小块后,读周期总数仍是相同的,但是每个周期消耗的功耗会大大降低。

另一种技术:基底偏压存储器。在不使用存储体时将其反向偏置,提高了阈值电压降低了漏电功耗。

另一种方法:多模式给存储器供电。全电压供电保证对存储器操作正常进行,不需要读写时,可以编程降低其供电电压,仅保证数据不丢失。

使用堆叠式存储器:存储器堆叠在裸片(Die)上。堆叠式存储器显著降低了互联电容,并且降低了功耗。对存储器带宽要求高的场景中,相关存储器可以堆叠式封装,操作系统或其他应用则可以置于外部存储器中。

 在寄存器传输级降低功耗

RTL完成时80%的功耗就已经确定,后端不能解决所有功耗问题。

综合前RTL阶段就应讲与功耗有关的所有问题解决。

状态机编码与解码

格雷码在相邻状态转换时仅有一位发生变化,消耗能量更少。此外格雷码编码的状态机也消除了依赖于状态的组合等式中存在毛刺的风险。

 若使用别的编码风格,仍可以通过让翻转频率最高的状态有最少的翻转位数,降低功耗。

另一种方法:把FSM和STG(状态转移图)分解成两个,若两个子FSM之间没有转换发生,那么只有一个FSM需要供给时钟。

二进制数表示法

某些应用中,有符号数在切换过程中比补码更有优势。

 某些只使用积分器求和的应用,补码在0->1时所有位都会发生变化,而有符号数只有两位发生变化。

门控时钟基础

该RTL综合出的电路在load_cond为真时写入输入数据值,否则寄存器值保持不变。该RTL写法在clock线上推不出任何门控时钟。后端工具可能产生门控,但是不应依赖于这种方法。

上面这种编码方式后端环境设置会加入一个门控时钟取代32个多路复用门。

某些综合过程中未能识别的情况,可以明确地指定门控时钟对所有功能进行动态控制。

同样门控信号和数据通路重组(把容易产生毛刺或者会经常翻转电平的电路放在电路后级)都应在编写RTL时就予以考虑。

独热码多路器

 采用独热码编码,输出更快更稳定,并且初期就可以将未选中总线隐藏,实现了低功耗的效果。

除掉多余的转换

转换后的数据未被采样,就是多余的,将这样的转换去掉可以显著降低功耗。

图中AB和CD只有一组会最终输出,所有有一组的转换是多余的。

 优化后的电路只有一组输出会读入数据模块。

 5.21中数据会输入所有模块,但是只有选中的模块会输出,导致了不必要的功耗。

 修正好的逻辑消除了多余的转换。新增逻辑门只将信号输入到有用的模块上,降低了功耗。

资源共享

同样的操作多次使用,避免多个位置重复出现。

 这里中文版书value1>value2写成了value1==value2。下面的写法复用逻辑,同样可以减小功耗。

使用行波计数器降低功耗

 使用行波计数器会对STA和综合工具带来麻烦,应尽量避免,但是其使用的门更少,电平的翻转也更少,可以降低功耗。

由于寄存器存在传播延迟,所以较高位相对于降低有效位更晚发生变化。时钟行进时有毛刺会导致错误的结果。

时钟行进延时累计,也会导致短暂出现错误的值。

 这种效应在大部分场景可以接受,如控制LED闪烁,但是该信号驱动多路数据选择器就可能导致错误输出。

行波计数器中每一个阶段都产生了一个新的时钟域,这就需要STA工具处理更多的时钟域,消耗更多时间。

同时行波计数器会为扫描链插入增加难度。

上面接收电路低有效才读入数据。相当于把还在转换的过程给屏蔽掉了。

使用行波计数器必须从正反两方面加以权衡。

总线翻转

 当前数据与下一个数据汉明距离大于N/2,将数据反向后传输,以减少总线上出现的转换的位数量。

 这项技术需要数据伴随着额外的控制位,表示数据是否已反转。从上图可以看出反转后数据转换的区别很明显。(不过感觉数据在传输前后的反转也要算进去 才对呀)

高活跃度网络

思路:将活跃度高的网络从活跃度较低的网络区区分出来,并将其置于逻辑云尽可能深的位置。

 X变化频率低,Y是高活跃度网络。图中将Y=0,Y=1分成两个逻辑云,再根据Y的值选择使用哪一个。分开后的逻辑云没有Y,整体就不活跃了,规模也更小。这样就可以降低功耗了。

某些降低功耗的EDA工具自动实现上述低功耗策略。

启用和禁用逻辑云

操作大规模逻辑云(宽加法器、乘法器),在需要时才将其打开。

 上图在数字逻辑前加了一个使能,在不需要逻辑云时禁用它。

寄存器级低功耗技术

技术水平

更先进的硅处理技术,可以额外降低功耗。

版图优化

版图阶段优化可以显著降低功耗。理想布线所有有直接关联的模块在硅片上都紧密挨在一起。长布线会增加功耗,但是复杂的SoC使得越来越难以达到这种结果。

衬底偏压

将衬底或合适的阱区电压偏置,以提高晶体管阈值,减少漏电。

 阈值电压升高会影响性能,可以动态偏置,工作模式下保持较小的偏置电压,保持模式下加强偏置电压。臣弟便宜效果和工艺尺寸有关,所以在使用更小尺寸时,衬底偏压的效果会大大降低。

减小氧化层厚度

把栅氧化层尽可能做薄,使导通时沟道导电性和性能增至最大,晶体管关闭时将漏电流降到最低。在栅氧化层厚度1.2nm附近,会产生电子隧道效应的量子力学现象,增加功耗。

多氧化层器件

同5.7.4,厚氧化层头/尾可以用于压制栅极漏电。

利用定制设计减小电容

 亚微米技术中Cw是最主要的一种电容,也是最难估计的。必须将串扰之类的复杂效应考虑在内。

使用定制设计对参数可以有更好的控制。

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

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

相关文章

Matlab 深度学习工具箱 案例学习与测试————求二阶微分方程

clc clear% 定义输入变量 x linspace(0,2,10000);% 定义网络的层参数 inputSize 1; layers [featureInputLayer(inputSize,Normalization"none")fullyConnectedLayer(10)sigmoidLayerfullyConnectedLayer(1)sigmoidLayer]; % 创建网络 net dlnetwork(layers);% 训…

LM2904运算放大器的应用:测电池电压

在电子设备的广泛应用中,电池作为便携设备的能量来源,其电压监测显得尤为关键。LM2904作为一款低功耗、高增益带宽积和高共模抑制比的双运算放大器,非常适用于电池电压的测量与监测。本文详细介绍了LM2904在电池电压测量方面的应用&#xff0…

C/C++逆向:虚函数逆向分析

虚函数(Virtual Function)是C中实现多态的一种机制,它允许在运行时通过基类的指针或引用调用派生类中的函数,而不是基类中的版本。虚函数通常与继承和多态结合使用。通过在基类中使用 virtual 关键字声明函数,允许派生…

永磁同步电机末端振动抑制(输入整形)

文章目录 1、前言2、双惯量系统3、输入整形3.1 ZV整形器3.2 ZVD整形器3.3 EI整形器 4、伺服系统位置环控制模型5、仿真5.1 快速性分析5.2 鲁棒性分析 参考 1、前言 什么是振动抑制?对于一个需要精确定位的系统,比如机械臂、塔吊、码头集装箱等&#xff…

pywinauto常见用法详解

1 安装 pip install pywinauto0.6.3 -i https://pypi.tuna.tsinghua.edu.cn/simple 2 启动app appApplication(backenduia).start(程序路径) backend 参数有2种 win32和uia 3 窗口选择 3.1通过类选择 dlgapp["类名"] dlgapp.类名 3.2通过标题选择 dlgapp[&…

20241125复盘日记

昨日最票: 南京化纤 滨海能源 广博股份 日播时尚 众源新材 返利科技 六国化工 丰华股份 威领股份 凯撒旅业 华扬联众 泰坦股份 高乐股份高均线选股: 理邦仪器高乐股份日播时尚领湃科技威领股份资金最多的票: 资金攻击最多的票: …

【实用向】Django 框架入门

声明 这是一篇实用向的Django框架教程博客,适用于想要快速入门的开发者,有前后端开发以及语言基础,想要学习语法或者特性。,包括一些基础的使用,想要学习请结合文章初识 Django并按照我的顺序一步步进行,做…

Git的使用_仓库管理_CI/CD介绍

文章目录 一、Git的基础知识一-1、什么是GitLinux命令行的git的简易安装Git项目的组成Git的基本工作流程Git文件的三种状态 一-2、存储库远程存储库与本地存储库创建存储库git init命令的使用方法1. 初始化一个新的 Git 仓库2. 在指定目录初始化一个新的 Git 仓库3. 初始化一个…

畅游Diffusion数字人(6): JoyHallo: Digital human model for Mandarin

Diffusion Models专栏文章汇总:入门与实战 前言:目前音频驱动大部分的论文和数据都是围绕英文输入驱动打造的,应用在东亚人和国语上效果有所降低。与英语相比,普通话中复杂的嘴唇动作使模型训练更加复杂。这篇博客介绍京东提出的数字人技术《JoyHallo: Digital human model…

SpringCloud入门实战-Spring Cloud Stream消息驱动概述

❤️ 《SpringCloud入门实战系列》解锁SpringCloud主流组件入门应用及关键特性。带你了解SpringCloud主流组件,是如何一战解决微服务诸多难题的。项目demo:源码地址 ❤️ 作者:一只IT攻城狮。关注我,不迷路。 ❤️ 再小的收获x365天都会成就…

Flink 安装与入门:开启流式计算新时代

在当今大数据蓬勃发展的时代,数据处理的时效性愈发关键。传统基于先存储再批量处理的数据方式,在面对诸如网站实时监控、异常日志即时分析等场景时,显得力不从心。随着 5G、物联网等技术的兴起,海量数据如潮水般涌来,且…

神经网络归一化方法总结

在深度学习中,归一化 是提高训练效率和稳定性的关键技术。以下是几种常见的神经网络归一化方法的总结,包括其核心思想、适用场景及优缺点。 四种归一化 特性Batch NormalizationGroup NormalizationLayer NormalizationInstance Normalization计算维度…

设计理念与数据反馈:面向火星熔岩管探索的跳跃机器人

随着人类对火星探索的深入,熔岩管作为潜在资源和居住地的科学价值受到广泛关注。然而,这些复杂且规模宏大的地下空间,对传统探测技术提出了严峻挑战。因此,本文介绍了一款专为火星熔岩管探索设计的跳跃机器人,其核心设…

MTK 展锐 高通 sensorhub架构

一、MTK平台 MTK框架可以分为两部分,AP和SCP。 AP是主芯片,SCP是协处理器,他们一起工作来处理sensor数据。 SCP 是用来处理sensor和audio相关功能和其他客制化需求的一个协处理理器,MTK SCP选择freeRTOS作为操作系统&#xff0c…

SD NAND 的 SDIO在STM32上的应用详解

四.SDIO功能框图(重点) SDIO包含2个部分: ● SDIO适配器模块:实现所有MMC/SD/SD I/O卡的相关功能,如时钟的产生、命令和数据的传送。 ● AHB总线接口:操作SDIO适配器模块中的寄存器(由STM32控制SDIO外设),并产生中断和…

C语言数据结构学习:循环队列

C语言 数据结构学习 汇总入口: C语言数据结构学习:[汇总] 1. 循环队列 队列的博客:C语言数据结构学习:队列 循环队列会预先定义最大队列空间,然后定义一个数组,通过队列头和队列尾指针分别指向开头和结尾&…

leetcode-18-四数之和

题解: 代码:

MySQL45讲 第29讲 如何判断一个数据库是不是出问题了?——阅读总结

文章目录 MySQL45讲 第二十九讲 如何判断一个数据库是不是出问题了?——阅读总结一、检测数据库实例健康状态的重要性二、常见检测方法及问题分析(一)select 1 判断法(二)查表判断法(三)更新判断…

探索Python的HTTP之旅:揭秘Requests库的神秘面纱

文章目录 **探索Python的HTTP之旅:揭秘Requests库的神秘面纱**第一部分:背景介绍第二部分:Requests库是什么?第三部分:如何安装Requests库?第四部分:Requests库的五个简单函数使用方法第五部分&…

指针的奥秘:深入探索内存的秘密

前言 在计算机编程的广阔天地中,指针作为一种独特的数据类型,它不仅是C语言的核心,也是理解计算机内存管理的基石。指针的概念虽然强大,但对于初学者来说,它常常是学习过程中的一个难点。本文旨在揭开指针的神秘面纱&a…