处理器设计之低功耗

对于处理器而言 ,虽然我们非常关注其主频和性能,但有一个不可忽视的事实,那就是处理器在绝大多数的时间是处于待机休眠状态的。譬如我们日常使用的手机,绝大多数的时间是处于一种休眠状态。即便是在运行的过程中,大段的时间也是处于性能要求不高的场景。

一、处理器低功耗技术概述

处理器的低功耗技术可以从多个层面加以探讨,从高层的软件、系统,到底层的硬件工艺均可涉及 。

1.1 软件层面低功耗

运行于处理器之上的是软件程序,是软件赋予了处理器灵魂 。 软件层面的灵活性很高 ,其发掘低功耗的效果比硬件低功耗本身的效果更加显著 。 通俗地讲,底层硬件辛辛苦苦地优化设计省的电,远远不如软件多休眠省的电多。

为了使处理器消耗尽可能少的功耗,一套好的软件程序应该尽可能合理地调用处理器的硬件资源,比如以下情况 。

  • 仅在关键的场景调用耗能高的硬件,在一般的场景尽可能使用耗能低的硬件。
  • 在处理器空闲的时刻,尽可能进入低功耗休眠模式,以节省功耗。

1.2 系统层面低功耗

系统层面的低功耗技术可以涉及板级硬件系统和芯片内的 soc 系统,其原理基本一致。以 soc 系统为例,常见的低功耗技术如下 。

  • SoC系统划分不同的电源域,能够支持将SoC中的大部分硬件关闭电源。
  • SoC 系统中划分不同的时钟域,能够支持小部分电路以低速低功耗的方式运行 。
  • 通过不同的电源域与时钟域的组合,划分出不同的低功耗模式。 Soc 配备 PMU( Power Management Unit)控制进入或者退出不同的低功耗模式 。
  • 软件可以通过使用 PMU 的功能,在不同的场景下进入和退出不同的低功耗模式 。

1.3 处理器层面低功耗

处理器层面的常见的低功耗技术如下。
(1)处理器指令集中定义一种休眠指令,运行该指令后处理器核便进入休眠状态。

(2)休眠状态可分为浅度休眠和深度休眠。

  • 浅度休眠状态往往将处理器核的整个时钟关闭,但仍然保留电源供电,因此可以节省动态功耗,但是静态漏电功耗仍然有消耗。
  • 深度休眠状态不仅关闭处理器核的时钟,甚至将电源也关闭 ,因此可以同时省掉动态和静态功耗 。

(3)处理器核深度休眠断电后,其内部上下文状态可以有两种策略进行保存和恢复。

  • 策略一:在处理器核内部使用具有低功耗维持( Retention )能力的寄存器或者 SRAM保存处理器状态,这种寄存器或者 SRAM 在主电源被关闭后可以使用极低的漏电消耗保存处理器的状态 。
  • 策略二 : 使用软件的保存恢复( Save-and-Restore )机制,即在断电前将处理器的上下文状态保存在 SoC 层面的电源常开域( Power Always-on Domain)中,待到唤醒恢复供电后,使用软件从电源常开域中读取回来加以恢复。

策略一的优点是休眠和唤醒的速度极快,但是 ASIC 设计的复杂度高:策略二的优点是
实现非常简单,但是休眠和唤醒的速度相对较慢。
(4)在处理器的架构上,可以采用异构的方式节省功耗 。

1.4 单元层面低功耗

模块和单元层面的低功耗技术己经进入了 IC 设计微架构的范畴。其常见的技术与 Soc系统层面基本一致,只不过是规模更小的版本。

  • 一个功能完整的单元往往需要单独配备独立的时钟门控( Clock Gate ),当该模块或者单元空闲时,可以使用时钟门控将其时钟关闭以节省动态功耗。
  • 某些比较独立和规模较大的模块甚至可以划分独立的电源域来支持关闭电源,以进一步节省静态功耗 。

1.5 寄存器层面低功耗

寄存器层面的低功耗技术己经进入了 IC 设计编码风格的范畴,可以从以下 3 个方面减少寄存器层面的功耗。

(1)时钟门控

  • 目前主流的逻辑综合工具均有从代码风格中直接推断出 ICG CIntegrated Clock Gating )的能力 。因此只要遵循一定的编码风格,便能够将一组寄存器的时钟自动推断出 ICG,以节省动态功耗。
  • 在逻辑综合完成后,工具可以生成整个电路的“时钟门控率 ( Clock Gating Rate )”。开发者可以通过此“时钟门控率”数据的高低, 来判断其设计的电路是否被自动推断出了足够的 ICG。好的电路一般有超过 90%的“时钟门控率”,否则可能是电路中数据通路较少(主要以小位宽寄存器为基础的控制电路为主),或者编码风格有问题。

(2)减少数据通路翻转

为了减少不必要的动态功耗,应该尽量减少寄存器的翻转。

  • 示例一:以处理器的流水线为例,每级流水线通常需要配置一位控制位( Valid 位)表示该级流水线是否有有效指令。当指令加载至此级流水线时将 Valid 位设为高,离开此级流水线时将 Valid 位清零 。 但是对于此级流水线的数据通路载体部分( Payload部分),只有在指令加载至此级流水线时,向载体( Payload)部分的寄存器加载指令信息(通常有数十位),而指令离开此级流水线时,载体部分的寄存器无须清零。通过此方法能够极大减少数据通路部分的寄存器翻转率 。
  • 示例二 : 以FIFO(当容量较小而使用寄存器作为存储部分)设计为例,虽然理论上可以使用比较简单的数据表项逐次移位的方式,实现 FIFO的先入先出功能,但是却应该使用维护读写指针的方式(数据表项寄存器则不用移位)实现先入先出的功能。因为数据表项逐次移位的方式会造成寄存器的大量翻转,相比而言,使用读写指针的方式实现则保持了表项寄存器中 的值静止不动,从而大幅减少动态功耗,因此应该优先采用此方法。

(3)数据通路不复位

  • 与上一点同理,对于数据通路部分的寄存器,甚至可以使用不带复位信号的寄存器 。不带复位信号的寄存器面积更小,时序更优,功耗更低。 譬如对于某些缓冲器(Buffer )、 FIFO 和 Regfile 的寄存器部分,经常使用不带复位的寄存器。
  • 但使用不带复位的寄存器时必须小心谨慎,保证其没有作为任何其他控制信号, 以免造成不定态的传播。在前仿真阶段,必须有完善的不定态捕捉机制发现这些问题,否则可能造成芯片的严重 Bug。

1.6 锁存器层面低功耗

锁存器相比寄存器面积更小,功耗更低。在某些特定的场合使用可以降低芯片功耗,但
是锁存器会给数字 ASIC 流程带来极大困扰,因此应该谨慎使用 。

1.7 SRAM层面低功耗

SRAM 在芯片设计中经常使用到,可以从以下 3 个方面减少 SRAM 的功耗 。

(1)选择合适的SRAM

  • 常规 SRAM 通常分为“单口 SRAM(Single Port SRAM )"“ 一读一写 SRAM(Two-Port-Regfile )"“双口 SRAM (Dual-Port SRAM )”。其他类型的 SRAM 需要特殊定制。
  • 从功耗与面积的角度来讲,单口 SRAM 最小, 一读一写 Regfile 其次,双口 SRAM最大。应该优先选择功耗与面积小者,尽量避免使用高功耗的 SRAM 类型 。
  • SRAM 的数据宽度也会影响其面积。以同等大小的 SRAM 为例,假设总容量为 16KB,如果 SRAM 的数据宽度为 32 位,则深度为 4096 。如果 SRAM 的数据宽度为 64 位,则深度为 2048 。不同的宽度深度比可能会产生面积迥异的 SRAM,因此也需要综合权衡 。

(2)尽量减小SRAM读写

  • SRAM 的读写动态功耗相当可观,因此应该尽量减少读写 SRAM 。

  • 以处理器取指令为例,由于处理器多数按顺序取指,因此应该尽量一次从 SRAM 中多读回一些指令,而不是反复多次地读取SRAM(一次读一点点指令),从而节省SRAM的动态功耗。

(3)空闲时关闭SRAM

  • 与单元门控时钟相同的原理,在空闲时应关闭SRAM的时钟,以节省动态功耗。
  • SRAM的漏电功耗相当可观,因此在省电模式下,可以将SRAM的电源关闭,以防止漏电。

1.8 组合逻辑层面低功耗

组合逻辑是芯片中的基本逻辑,可以从以下两个方面减小组合逻辑的功耗。

(1)减小面积

通过使用尽量少的组合逻辑面积减少静态功耗,此为数字逻辑设计的基本认知,无须赘述。因此从设计思路和代码风格上,应该尽量将大的数据通路(或者运算单元〉进行复用,从而减少面积。另外应该避免使用除法、乘法等大面积的运算单元,尽量将其转化为加减法运算。

(2)减少翻转率

可以通过逻辑门控的方式,在数据通路上加入一级“与”门,使没有用到的组合逻辑在空闲时不翻转,从而达到减少动态功耗的效果。额外加入一级与门,在时序非常紧张的场合也许无法接受,需要谨慎使用 。

1.9 工艺层面低功耗

工艺层面的低功耗一般涉及使用特殊的工艺单元库。

二、RISC-V架构的低功耗机制

处理器指令架构本身并不会定义低功耗机制,但是处理器架构中通常会定义一条休眠指令,本节将介绍 RISC-V 架构定义的 WFI 指令。

WIF指令

WFI (Wait For Interrupt)指令是 RISC-V 架构定义的专门用于休眠的指令。当处理器执行到 WFI 指令之后,将会停止执行当前的指令流,进入一种空闲状态。这种空闲状态可以被称为“休眠”状态,直到处理器接收到中断(中断局部开关必须被打开,由 mie 寄存器控制),处理器便被唤醒 。处理器被唤醒后,如果中断被全局打开 (mstatus 寄存器的MIE域控制),则进入中断异常服务程序开始执行;如果中断被全局关闭,则继续顺序执行之前停止的指令流。
以上是 RISC-V 架构推荐的行为,在具体的硬件实现中, WFI 指令也可以被当成一种 NOP 操作,即什么也不干(并不真正支持休眠模式)。
 

  • 6
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: SRAM电路是一种静态随机存储器电路,由若干个存储单元组成,每个存储单元包括一个存储器电容和两个开关管。这些存储单元被组织成一个矩阵,并由译码器和数据线控制。SRAM电路的工作原理是通过在存储单元中读取和写入电荷来存储数据。当要读取存储单元中的内容时,译码器控制需要读取的单元的行和列,将存储单元中的电荷传输到数据线上,然后传递到输入端。当要写入数据时,译码器控制需要写入的单元的行和列,然后将输入的数据写入存储单元中的电容,以改变电荷状态。由于存储单元中的电荷会随着时间而漏失,SRAM电路需要周期性地对数据进行刷新以保持数据的稳定性和正确性。与动态随机存储器(DRAM)相比,SRAM电路在访问速度和功耗方面表现更好,但它的存储密度和成本更高。它通常用于计算机的高速高速缓存存储器和寄存器等需要快速访问数据的场合。 ### 回答2: SRAM是一种静态随机存储器,是计算机主存储器中最常用的类型。其电路结构图如下所示。 ![sram电路结构图](https://cdn-images-1.medium.com/max/1000/1*G8q8rR3DwB5U1UZPQJzvDA.png) SRAM由许多存储单元组成,每个存储单元由一个触发器和两个开关管组成。其工作原理如下: 1. 在读取状态时,通过一个控制线将一个读写开关管置为高电平,另一个开关管置为低电平,然后将地址信号传递给SRAM,将地址线连接到触发器的控制电路上。然后SRAM会检查存储单元的地址,并将数据从相应的存储单元读出。 2. 在写入状态时,先将地址信号传递给SRAM,再将一组二进制数据输入SRAM。SRAM会将数据存储到相应的存储单元中,此时需要将读写开关管置为低电平,另一个开关管置为高电平。 3. SRAM的内部还配备信号放大器以及对电源电压的监测器,来提高SRAM的稳定性。 总之,SRAM以其高速度和高可靠性,在计算机系统中占据重要位置。它常见的应用场景是CPU的缓存以及处理器的临时存储器等。 ### 回答3: SRAM全称为静态随机存储器(Static Random Access Memory),是一种常见的电子存储器件,通常用于计算机的内存储存。作为一种高速随机存取存储器,SRAM存储器的访问速度比动态随机存储器(DRAM)快得多,在计算机处理器等性能要求高的场合得到了广泛应用。 SRAM电路的基本结构如下图所示,由6个MOSFET场效应管和一个电容器组成。其中,两个交叉的闭合MOSFET管构成一个反馈环,形成一个双稳态翻转电路(flip-flop),并通过连接线路与其它存储芯片单元相连,构成存储芯片。 SRAM工作原理是基于双稳态翻转电路的。SRAM主要有读和写两种操作。读取操作时,先向存储单元内输入一个地址码,地址码分为行地址和列地址,分别对应存储单元所在的行和列,从而选择出需要读取的存储单元。然后在读使能信号的作用下,将控制信号写入单元电路中,使其处于稳态,即可进行读出操作。 写入操作时,需要先输入地址码进行选择存储单元,然后将需要存储的数据送入数据输入端,并将写入使能信号打开,数据输入后即可存入当前选择的存储单元。在电路中,写入后的数据会被存放在电容器中,如果不在一定时间内刷新电容器,信息会逐渐丢失。 SRAM电路的优点是快速、可靠、高效,但缺点是相对动态存储器成本较高,并且需要消耗更多的电力。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值