传统的降低Power的方法主要有:
A: 门控时钟技术(Clock Gating)。这种技术对于代码风格有一定的要求,一旦Coding Style满足要求后,比如RTL代码中通过条件选择来实现使能信号,综合工具在逻辑综合过程中会自动翻译为门控时钟。
B:多阈值电压技术(MultiShreshold)。因为不同阈值电压Vth对应的器件其Leakage差异很大,通常情况下低Vth器件的Leakage比高Vth器件的大得多,但是对于高Vth器件来说,随之而来的问题便是在性能(Performance)和功耗(Power)之间的的权衡。
C:动态电压频率调节技术(DVFS)。比如使用该技术可以动态调节CPU工作频率和工作电压,如当CPU高速工作时候,选择合适电压供应给CPU;当CPU处于空闲或者睡眠状态时,系统会自动切换到合适的低电压以达到降低系统功耗的目的。
D:除了上述之外,还有一些传统的可以降低SoC芯片系统功耗的方法。如在芯片架构和相应的算法定义时候提前将系统功耗问题考虑进去。比如实现一个可以求解泰勒级数展开式的电路如何选择相应的加法器和乘法器等。
随着工艺制程的不断发展,特别是在现在65nm一下的先进制程,形成了以下主要的低功耗技术:
1.多电压技术(Multi-Voltage)。具体而言,在芯片设计时候,对于工作频率要求高的系统或者模块使用高电压,对于工作频率要求不高的系统或者模块使用相应的低电压也称Normal电压。比如手机基带芯片中的CPU或者GPU系统模块要在高电压状态下才能才能达到系统工作要求。又如高速数据通信接口模块(如LPDDR)想要获取很高的性能(这里指高的吞吐率)甚至可以加大电压去进行数据传输。而对于一般的只要求能够达到普通性能的模块则可以用较低的电压进行供给,比如系统中需要一直上电的Always-ON区域中的Timer计时器等等。
2.MTCOMS Power Gating 技术(多阈值功耗控制技术)。在整个SoC系统芯片中,芯片中的会有许多模块工作在同一电压下,但是在一些特殊情景下,比如手机芯片,当手机属于待机模式时,SoC系统中电源管理单元(Power Management Unit)会自动将手机芯片中的CPU关掉,而其它通信模块比如基带部分中的2G、3G、CDMA、LTE等通过awake—>sleep—>awake的方式间歇式的打开或关断其电源。
3.多电压+功耗控制+寄存器Retention技术。在这种技术中,SoC系统中的各个模块都可以工作在不同的电压下,同时某些模块的供电电源还可以切断,并且在电源切断的情况下还要保持掉电之前的状态,因此这就需要引入Retention寄存器,当掉电后的模块再次上电后,至少经过一个时钟周期,之前掉电的模块就可以恢复到掉电之前的正常状态。
4:Low VDD Standby技术。这种技术中,比如手机芯片中有一个电压域的供电电压值VDD为0.5V,并且使用该供电电压VDD为0.5V的模块一直都处于Always-On状态,在某种情况下,芯片中的其他模块需要进入sleep状态,这时候可以使用较低的电压来保持芯片可以工作,同时在0.5V电压域中放置一个小的控制单元(假如为一个小的CPU),一旦当系统需要全速工作,这时候我们可以用0.5V电压域中的小的控制单元去唤醒其他模块。如下图所示:
5:DVFS技术(动态电压频率调节)。这是一种自适应的电压频率调节技术,根据系统中电压和工作频率之间的关系,可以有效的降低系统功耗。
一. 在现今工艺制程下低功耗设计验证所面临的挑战
前面讲到的低功耗技术一方面可以有效降低整个SoC系统的动态功耗和静态功耗,但是随之而来的对于设计验证带来了很多新的挑战,主要体现在以下几点。
1. 在系统层面上,需要对诸多因素进行考虑和折中,比如电路设计越来越复杂,需要提前精心规划功耗设计验证计划;同时带来的还有芯片面积越来越大,硬件层面和软件层面上需要定义更多的寄存器,这样也会使得软件设计更加复杂;为了达到有效的控制和降低系统功耗,相应的会带来一些芯片性能的降低,所以必须在芯片功耗和性能之间做出相应的权衡。
2. 在验证层面上,如需要对插入的隔离单元(Isolation cell)和电压转换(Level-Shifter)单元等进行验证。这就要对电压域掉电之后其内部逻辑是否输出“X”态以及“X”态的传播问题和某一电压域掉电之后再次上电后是否还能正常工作等进行验证,以及对电压域电压的改变是否正确等进行验证。
3. 在物理实施层面(Implementation)上,需要对ClockNetwork、Power以及面积之间进行规划,以达到最佳状态。
4. PowerAware仿真层面。可以在RTL级通过Power-Artist功耗仿真工具和在Gate级通过PTPX进行power仿真评估,检查二者功耗仿真结果的是否具有一致性。
二. 功耗管理控制以及验证重点需要关注的问题
1. 在某一时刻,当某一电源域掉电后,该电源域内部的状态保持寄存器的值需要在掉电之前进行保持,当再一次上电之后,可以使得该电源域中的模块上电后快速进去正常工作状态。
2. 如果某一驱动和负载之间路径相隔太远,这样会产生很大的负载电容,那么这时候就需要在这条path上插入buff来提高驱动能力或者要确保在规定的时间内相应的信号必须稳定下来。
3. 如果当负载单元上电而驱动单元没有上电,那么就需要在负载单元和驱动单元之间引入Isolation cell进行隔离,确保负载由一个确定的电压值进行驱动。
4. 如果驱动和负载需要工作在不同的电压值下,那么就需要在驱动和负载之间的路径上引入Level-Shifter进行电压值转换。
原文链接:低功耗技术浅谈 (一) (qq.com)