复杂SoC设计中的功率管理 (下)
扫描二维码
随时随地手机看文章
功率优化技术
图5中,根据静态与动态功率以及这些技术所应用的设计抽象层次,对各项功率优化技术进行了分类。使用这些方法中的哪项或哪几项要取决于设计目标。将这些方法结合到设计流程中,就形成了一种集成式的功率管理设计策略。
模块门控时钟
模块门控时钟可用于体系结构层次,对不在使用状态下的某些设计部分禁用时钟。Power Compiler能够替换手动插入的门控时钟逻辑电路,运用库的ICG(集成门控时钟)单元控制时钟进入任何模块。一旦用户在脚本中创建出时钟,此工具就能自动确定这样的组合逻辑。
模块门控时钟可以应用于一系列的层次上,包括芯片级、域级(DSP、CPU等)、模块和子模块。当整个芯片处于空闲模式,但必须对外
部的唤醒事件做出响应时,可通过应用程序来对芯片时钟进行门控。在最低层次上也同样适用,当不需要访问存储器时,在SDRAM首先设定为自刷新模式后,SDRAM控制器中的时钟可以关闭。除将时钟关闭和打开以外,门控结构还可以包括可配置的时钟信号分频器,用于改变不同设计部分的时钟速率。
设计这样的时钟结构要对芯片功能及功率分析有充分的了解。总的来说,时钟开关功耗占据了芯片总功耗的30%以上,因此门控时钟通常能够获得良好效果。
门控时钟遇到的挑战
除了确定在哪里和怎样进行门控时钟和(或)时钟分频以外,高层次的门控时钟还涉及一系列的时序和可测性设计方面的问题。对时序问题可通过观察时钟结构中一段较长的路径来进行了解,这段路径可以包含一个数字式锁相环、一个时钟分频器、多个模式开关多路转换器和多级门控时钟。
在用诸如Astro CTS(时钟树综合)等工具对典型芯片进行高质量的时钟树综合后,复杂的门控时钟和分频器会要求手动干预,在大多数情况下是要求修改工具范围以外的设计部分,例如,为了防止出现严重的时钟相位延迟,因而需要进入干预。
寄存器和高层次时钟体系内的非CTS单元放置得过远,会造成高层次扩展时钟树插入延迟的增加,并因此导致时钟相位延迟的增加。非CTS单元的基于网络权重的布局控制能够避免这一问题。该方法可以提取连接门控时钟单元、开关多路转换器和受驱动的CTS宏的节点,从而在布局优化中,将较重的网络权重应用在这些节点上,并将这些单元的距离拉近。这项优化技术能够使单元的负载最小化,并因此使单元延迟和输出回转(slew)最小。
对时钟分配效果不佳的布局也会导致相位延迟问题。这是由于时钟树综合是根据时钟树里最长分支的延迟特性来平衡整个时钟树,因此,布局不当会造成单独一根很长的时钟通路,使得整个时钟树的插入延迟增加。适当的布局限制可以更好地平衡时钟树,防止这一问题的发生。
其它导致时钟相位延迟的原因包括非CTS单元的布局不当,以及非CTS单元输出回转过大。Synopsys公司针对这些问题给出了解决方案,并提出了其它三种时钟分布问题的处理方法:减少时钟扭曲、减少时钟占空比失真和提高门控时钟效率。
由于受到上市时间的限制,手动时钟树分析和平衡方法不适用于复杂的ASIC设计。Synopsys公司提供了一项时钟平衡自动化策略,这项自动化策略包括三个步骤:提取一个通用的共享时钟分布拓扑、针对每个不适合通用时钟分布的时钟路径定义局部平衡策略,以及将这些局部平衡限制条件与通用时钟分布的限制条件相结合。其结果是生成用于CTS工具的时钟树综合限制条件,对整个时钟分布进行自动平衡。
另一项时序问题是,在异步重新启动时钟时会出现时钟毛刺,因此,有必要在设计中包含对重新启动进行定时的电路,以避免出 现毛刺现象。
多电压岛
在门控时钟对动态功率进行限制时,使用多种供电电压和(或)多种阈值电压有助于管理动态功率和泄漏功率。阈值电压不必与供电电压一起按比例缩放。
电压岛或电压域的使用提供了一种同时满足功耗和性能要求的方法。在本方案中,逻辑电路部分根据功能分为独立的区域组,必须工作在最高速度下的区域采用最高的供电电压,对时序要求不太严格的区域采用较低的供电电压。
频率有必要跟电压一起按比例缩放,这样,电压岛方法就能与门控时钟进行良好的配合。门控时钟模块中的逻辑电路持续消耗泄漏功率,但是通过降低此模块的供电电压就能减小泄漏功率。
多供电电压必须通过单独的供电引脚或集成到器件内的模拟电压调节器来提供。这些电压调节器的效率必须包含在器件的功率计算中。如果仅有小部分的设计工作在较低的电压下,则在电压调节器中耗费的功率可能会大于低压逻辑电路中节省的功率。另外,电压岛的设计可能需要采用电平转换单元,以确保在电压域之间信号传输的正确转换。
除了降低供电电压外,还可以根据系统要求改变某一电压岛的供电电压。相对于其它挑战而言,这种方法要求采用已经在所有电压下经过特性化的单元。Synopsys的可缩放多项式模型(Scalable Pdynomial Model, SPM)支持必要的时序和功率信息,非线性查找表格模型(Non-Linear look-up table Model, NLM)也可用于电压岛的设计。SOC还可以设计电源关断的特定电压岛,以消除它们的泄漏功率。这些电压岛要求采用电源隔离单元,可以是简单的"与"门。从电源关断部分进入有源域的输出绝对不允许出现漂移,电源隔离逻辑确保有源域的所有输入信号均箝位在稳定的数值上。另外,还可能需要采用状态保持技术,从而保证模块能在通电时恢复运行。对各个电压岛进行电源关断或对电压进行动态按比例缩放时,也可能需要电源排序电路,以确保芯片的正确运行。
多阈值设计
多供电电压岛与多阈值综合之间可以良好配合,通过在关键的时序路径上采用低Vth单元和在非关键的时序路径上采用高Vth单元这样的优化手段能够满足时序目标。如果芯片供货商提供了与状态相关的泄漏模型,则利用它们可以获得更好的泄漏结果。
根据设计团队所采用的方法或选择,可以将one-pass或two-pass的综合流程应用于多阈值设计。初次综合可采用低Vth、高性能库来执行,随后采用多Vth库来进行增量编译,以降低泄漏电流。对于时序和泄漏均十分重要的设计,可同时采用多Vth库来执行one-pass综合。这种设计首先对时序进行了优化,然后在不影响已实现的时序效果(即worst negative slack,WNS)的条件下,再对泄漏功率进行优化。功率优化后,再进行面积优化。不论是采用one-pass流程,还是two-pass流程对泄漏功率进行优化,在综合环境(使用Power Compiler搭配Design Compiler或Physical Compiler)中都推荐采用多Vth库。
流程的实现要依靠合理的泄漏约束,此约束在Power Compiler中由set_max_leakage_power命令指定。
综合中的功率优化
综合工具能够通过采用如RTL级门控时钟插入和门级功率优化等技术来优化功率设计。这些技术由Power Compiler结合Design Compiler和(或)Physical Compiler共同实现。
当无需触发器的输出信号时,RTL级门控时钟能够将通向大型寄存器组的时钟信号关断。图6所示为没有门控时钟和带有门控时钟的 设计编辑的同步负载使能电路的比较。Power Compiler能够自动插入门控时钟电路,将图6a中的反馈网和多路转换器替代为图6b中的锁存器和插入到寄存器时钟网的双输入门电路。
由于门控电路取代了多路器,因而这种类型的门控时钟对面积的影响相对不大,而且,实际上还能将面积缩减5~15%。Power Compiler能够自动实现这种门控电路,而且不需要改变RTL代码。
Power Compiler还能采用库中的ICG来替换手动插入的门控时钟。这项功能能够支持那些在物理流程中拥有手动门控时钟的传统模块或IP。Power Compiler能够识别ICG中与功率相关的属性,从而有助于此类单元的布局。对于门控时钟的高级用户,Power Compiler能够通过实现多级门控时钟,来节省更多的功率。在这项技术中,一个门控时钟单元代替寄存器组,作为另一个门控时钟单元的馈入。
RTL级门控时钟能够以多种方式节省功率:由于时钟信号不必持续馈入寄存器组,因而内部功耗降低;由于时钟网络中的电容值减小,因而开关功耗降低;由于下游逻辑电路并未改变,因而功耗还能够进一步降低。
在Power Compiler与Physical Compiler协同工作时,门控时钟单元的布局得到了优化。在Physical Compiler流程中,Power Compiler确保门电路单元能够就近放置在一起,门控电路部件与其所驱动的部件也能靠近放置,这样的布局减少了其它方式中门控时钟可能出现的时钟扭曲。
除非加入特定的可测性设计,否则门控时钟会导致芯片的可测性下降。由于时钟信号是由内部信号进行控制,所以测试工程师无法控制可测性设计扫描触发器的负载。这个问题可以通过在测试编辑过程中增加一个测试引脚,并将其指定为一个固定值(1‘b1)来加以避免。添加了控制点的门控时钟电路如图8所示。
Power Compiler的set_clock_gating_style指令的选项能够在门控时钟中指定所添加的具易测性的逻辑电路的数量和类型,以此改善芯片的可测试性。例如,可在门控时钟锁存器前后添加一个用于测试的控制点,并且选择test_mode或scan_enable模式,还可通过其它选项增加可观察性逻辑或者增加建立时间和保持时间裕量。若要使用Design Compiler的check_tes指令或check_dft指令,则要先使用hookup_testports和set_test_hold 1 Test_Mode指令。
门控时钟不应在具有由Design Compiler实现的主/从触发器的变量(或信号)的设计中使用。Design Compiler采用clocked_on_also信号类型属性来实现这些触发器。但在门控时钟发生的抽象层面上,Power Compiler不能识别出这项属性,而只能将触发器的从时钟信号进行门控。可以使用set_clock_gating_signals指令,将特定的由主从型触发器实现的设计变量(或信号)排除在外:
dc_shell> set_clock_gating_signals -design TOP -exclude
{ A B }
总之,最佳的代码编制是由以下四种方式中的任意一种实现的基本同步负载使能,这些实现方式可以混用,也可以相互嵌套。
"If-Else"语句
条件赋值
"Case"语句
"For"循环
&nb sp; 除了RTL级优化外,Power Compiler还采用下列门级优化技术(按优先次序排列),同时对功率、时序和面积进行优化:
尺寸选择(sizing);
优化技术(technology mapping) ;
引脚交换(pin swapping) ;
因子分解(factoring);
缓冲器插入(buffer insertion);
相位分配(phase assignment)
这些优化要求采用具有功率特性的库。由于Power Compiler自动保持时序,并在设计人员的约束下维持设计的面积,因此,这项工具实现了门级的“一键式”(push-button)功率节省。
高水平功率管理范例
为了表明SOC中高水平功率管理的潜力,Synopsys公司与ARM、NS和Artisan公司共同合作,制造了一款用于验证大幅节省功耗效果的测试芯片。此芯片采用专门的硬件和软件,以控制不同芯片域内的电压和时钟频率,并对本文上述的电压和频率按比例缩放技术应用了高层次控制。
控制组件包括了ARM公司的Intelligent Energy Manager软件,此软件用于平衡处理器的工作负载和能量消耗。而NS公司所提供的PowerWise硬件监控性能以及与电压调节器的通信,其目的是在每一种工作频率下,将供电电压按比例缩小至最低的工作电平。这套系统能够对由于制造工艺所产生的硅芯片性能差别以及由于温度波动所造成的运行时间性能变化进行补偿。
这款240MHz的芯片分为三个主要的电源域:可缩放电压的CPU电源、存储器电源域和供芯片其它部分使用的标准固定电压域。这些相互独立的电源域能够对CPU和RAM进行精确的电压控制和电流测量。标准单元和电平转换器的工作范围是0.7~1.32V。
针对大量应用高速缓存的工作负载,对处理工作负载的功耗和精确时间均进行了测量,并对仅使用动态频率按比例缩放的效果和同时使用动态电压和频率按比例缩放的效果进行了比较。图8总结了标准化至1.2V工作电压下的结果。图中表明功率节省仅是在芯片的动态电压和频率按比例缩放子系统中。通常在这样的SoC中,有些芯片无法进行电压按比例缩放,如外部存储器等部件通常只能工作在固定的电压下,因此设计分区和规划时必须考虑到系统级的功率节省。
与只有频率按比例缩放相比,电压和频率均按比例缩放可以显著降低能量消耗。例如,在120MHz下运行时,能够削减一半的功耗要求,但如果同时对供电电压进行按比例缩放,就能将功耗削减80%。
结语
通过将各种功率管理技术相结合,能够使芯片功耗大幅降低,就像由Synopsys、ARM、NS和Aritisan等公司的测试芯片所获得的那样。典型的SoC设计可能不需要用到所有这些技术,但是主流的解决方案已经存在,可以满足全部的设计要求。
设计人员应根据详尽的功率分析和对可用工具功能的充分了解,选择正确的解决方案。在设计流程中应尽早分析功率要求,以避免发生与功率相关的错误。因为层次较高的技术能够最大程度地节省功率,所以早期分析还有益于功率目标的实现。