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

news2024/11/26 15:55:06

介绍

能量以热量形式消耗,温度升高芯片失效率也会增加,增加散热片或风扇会增加整体重量和成本,在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.coloradmin.cn/o/2247924.html

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

相关文章

浅谈网络 | 传输层之TCP协议

目录 TCP 包头格式TCP 的三次握手TCP 的四次挥手TCP 的可靠性与"靠谱"的哲学TCP流量控制TCP拥塞控制 上一章我们提到,UDP 就像我们小时候一样简单天真,它相信“网之初,性本善,不丢包,不乱序”,因…

华为无线AC+AP组网实际应用小结

之前公司都是使用的H3C的交换机、防火墙以及无线AC和AP的,最近优化下无线网络,说新的设备用华为的,然后我是直到要部署的当天才知道用华为设备的,就很无语了,一点准备没有,以下为这次的实际操作记录吧&…

七、SElinux

一、SElinux简介 SELinux是Security-Enhanced Linux的缩写,意思是安全强化的linuxSELinux 主要由美国国家安全局(NSA)开发,当初开发的目的是为了避免资源的误用传统的访问控制在我们开启权限后,系统进程可以直接访问当我们对权限设置不严谨时…

Paddle Inference部署推理(一)

一:Paddle Inference推理 简介 Paddle Inference 是飞桨的原生推理库,提供服务器端的高性能推理能力。由于 Paddle Inference 能力直接基于飞桨的训练算子,因此它支持飞桨训练出的所有模型的推理。 Paddle Inference 功能特性丰富&#xff…

【数据分享】2001-2023年我国30米分辨率冬小麦种植分布栅格数据(免费获取)

小麦、玉米、水稻等各类农作物的种植分布数据在农业、环境、国土等很多专业都经常用到! 本次给大家分享的是我国2001-2023年逐年的30米分辨率冬小麦种植分布栅格数据!数据格式为TIFF格式,数据坐标为GCS_WGS_1984。该数据包括我国11个省份的冬…

类和对象plus版

一.类的定义 1.1类定义的格式 图中class为关键字,Stack为类的名字,用{}框住类的主体,类定义完后;不能省略。 为了区分成员变量,一般习惯在成员变量前面或后面加一个特殊标识,_或者m_ 1.2访问限定符 c采用…

jquery-picture-cut 任意文件上传(CVE-2018-9208)

目录 1、漏洞描述 2、访问ip:port 3、一句话木马:exploit.php 4、上传一句话木马 5、中国蚁剑连接成功 6、拿到flag 1、漏洞描述 jQuery是一个快速、简洁的JavaScript框架,是继Prototype之后又一个优秀的JavaScript代码库(框…

【Spring Boot】# 使用@Scheduled注解无法执行定时任务

1. 前言 在 Spring Boot中,使用Scheduled注解来定义定时任务时,定时任务不执行;或未在规定时间执行。 import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component;Component public c…

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

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

电子学习中的关键游戏化元素

游戏化彻底改变了电子学习领域,提供了一种使学习具有吸引力、互动性和有效性的方法。通过将类似游戏的功能集成到教育平台中,教育工作者可以增强动力,提高知识记忆,并创造动态的学习体验。游戏化的关键要素为设计与学习者产生共鸣…

【网络通信】数据集合集!

本文将为您介绍经典、热门的数据集,希望对您在选择适合的数据集时有所帮助。 1 RITA 更新时间:2024-11-22 访问地址: GitHub 描述: RITA 是一个用于网络流量分析的开源框架。 该框架以 TSV 或 JSON 格式提取 Zeek 日志,目前支…

竞赛经验:关于不记得字母表,如何知道字母顺序qwq

利用ASCII码算出码值再转成字符即可 #include <bits/stdc.h> using namespace std;int main() {for(int i 1; i < 30; i){cout << char(ai) << ;} }结果&#xff1a; ps:大意了&#xff0c;本想用电脑目录&#xff0c;但没考虑到会有文件不存在导致缺…

GitLab指定用户分配合并权限

进入项目 -》 Project Settings Repository -》展开 Protected branches -》 添加要保护的分支&#xff0c;设置角色 管理用户角色权限 查看到不同用户的角色&#xff0c;一般设置Developer只有Merger Request权限&#xff0c;Maintainer还有Merge审批权限 GitLab 中的权限…

C语言菜鸟入门·关键字·union的用法

目录 1. 简介 2. 访问成员 2.1 声明 2.2 赋值 3. 共用体的大小 4. 与typedef联合使用 5. 更多关键字 1. 简介 共用体&#xff08;union&#xff09;是一种数据结构&#xff0c;它允许在同一内存位置存储不同的数据类型&#xff0c;但每次只能存储其中一种类型的…

[C++]了解内置类型升级

内置类型升级 1.调用模板T时&#xff0c;为什么可以使用T()类型的匿名对象来传参2.内置类型被升级成为类后的使用事项 1.调用模板T时&#xff0c;为什么可以使用T()类型的匿名对象来传参 当我们在定义或声明一个函数时&#xff0c;如果想使用模板T类型的默认构造&#xff08;例…

JavaScript的基础数据类型

一、JavaScript中的数组 定义 数组是一种特殊的对象&#xff0c;用于存储多个值。在JavaScript中&#xff0c;数组可以包含不同的数据类型&#xff0c;如数字、字符串、对象、甚至其他数组。数组的创建有两种常见方式&#xff1a; 字面量表示法&#xff1a;let fruits [apple…

Neural Magic 发布 LLM Compressor:提升大模型推理效率的新工具

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

友思特新闻 | 友思特荣获广州科技创新创业大赛智能装备行业赛初创组优胜企业!

2024年11月19日&#xff0c;第十三届中国创新创业大赛&#xff08;广东广州赛区&#xff09;暨2024年广州科技创新创业大赛智能装备行业赛颁奖典礼隆重举行。 赛事奖项介绍&#xff1a;广州科技创新创业大赛智能装备行业赛 第十三届“中国创新创业大赛&#xff08;广东广州赛区…

以灵魂的方式进入:从table和drawer哪个单词更长说起

有两个单词&#xff0c;table和drawer&#xff1a; table n.桌子drawer n.抽屉 现在就问&#xff0c;这两个单词&#xff0c;哪个单词更长&#xff1f;你会说&#xff0c;神经&#xff0c;这还用问吗&#xff1f;哪个单词更长&#xff0c;不一目了然吗&#xff1f; 其实&…

车载测试核心知识点和面试题

今天为大家分享一下车载测试岗位面试的时候&#xff0c;一定会问的相关技术。这些工具在测试的工作中会用到&#xff0c;在面试中也会经常被问到。所以同学们一定要去实战操作&#xff0c;这样理解和吸收才会更加深刻。 一、车载仪表台架测试CANoe工具实战 我们知道&#xff…