动态时钟配置下的SoC低功耗管理
摘要:随着芯片集成度的提高,对一些功能复杂的系统芯片功耗的管理,已经引起大家越来越多的重视,如何控制好SoC的功耗将成为芯片能否成功的重要因素。本文提出一种通过动态管理时钟的策略,达到降低整个SoC芯片功耗的目的;同时,分析动态管理时钟方案中可能会出现的一些问题,并给出解决方案。
关键词:系统芯片 毛刺 AMBA 总线 时滞
引 言
随着集成电路技术的飞速发展和对消费类电子产品——特别是便携式(移动)面向客户的电子产品的需求,推动了SoC(System on Chip)的飞速发展,也给人们提出了许多新的课题[1]。对于电池驱动的SoC芯片,已不能再只考虑它优化空间的两个方面——速度(performance)和面积(cost),而必须要注意它已经表现出来的且变得越来越重要的第三个方面——功耗[1],这样才能延长电池的寿命和电子产品的运行时间。
图1
SoC中CMOS电路功耗有:一是静态功耗,主要是由静电流、漏电流等因素造成的;二是动态功耗,主要是由电路中信号变换时造成的瞬态开路电流(crowbar current)和负载电流(load current)等因素造成的[2],它是SoC芯片中功耗的主要来源[3]。javascript:window.open(this.src);" style="cursor:pointer;"/>因此,解决好SoC中的动态功耗是降低整个SoC芯片功耗的关键。本文后面所提到的功耗就是指SoC芯片中的动态功耗。
如何降低SoC中的功耗,从不同的层面分析会得出不同的解决方案。从芯片的系统级(architecture)角度考虑,有低功耗总线设计、低功耗存储系统设计、低功耗时钟网络设计、开发系统的休息模式、时钟门控等技术;从芯片的行为级(RTL)角度考虑,有信号门控、预前计算、操作数分离、状态机优化、并行和流水结构等技术;从芯片的门级(gate)角度考虑,有缓冲插入、提取因子、单元缩放、管脚交换、相位配置等技术[4]。从越高的抽象层次去考虑功耗问题,芯片功耗优化的幅度就越显著。
本文所提出的基于动态配置时钟的SoC低功耗管理是从芯片的系统级角度考虑的。在最后的实验中,它非常明显地降低了整个芯片的功耗。
1 动态配置时钟的SoC低功耗管理原理
基于微处理器应用的SoC设计,其复杂程度变化很大:在一些应用中可能需要用到所有的硬件资源,但是在其它的一些应用中可能只需要用到其中一部分硬件资源;在一些应用中可能需要很高的工作频率,而在其它的一些应用中却可以大大降低工作频率。动态管理SoC系统时钟的思想就是:不仅动态地管理SoC内部模块的时钟源供给,还可以动态地配置SoC系统的时钟频率。
动态地管理SoC内部模块的时钟源供给就是,根据不同的应用,管理SoC内部的硬件资源。简而言之,就是进行内部模块的开和关的操作。关闭单个模块,可以通过对每个模块设置一个使能位,然后对这个使能位编程做到关闭或打开那个模块。但这样做不是最佳的,原因有二:其一,每个模块的接口部分必须是始终打开的,否则,CPU核无法随时对它的内部寄存器进行编程;其二,通过模块使能位只是关闭了它的功能操作,而并没有把它模块内的时钟树关闭掉,也就是说它里面的时钟树依然处于激活状态,而时钟树所造成的功耗占单个模块功耗的很大一部分。其实大多数模块都是同步系统,系统的所有操作都是在时钟信号的节拍下进行的[5],关闭时钟源能同时达到关闭模块和降低功耗的目的。
动态地配置SoC系统的时钟频率则是以不牺牲系统的性能为前提,动态地管理系统的工作频率来降低SoC的功耗。时钟频率是影响动态功耗的重要因素:[3]。它的工作频率越高,功耗也就越大。但在很多时候,所有的模块并不是工作在同一时钟频率,或者同一个模块在不同的时段可以工作在不同的时钟频率。这些就是动态地配置SoC系统的时钟频率的前提。
图1是整个SoC中的时钟网络(时钟树)。图中的功耗管理模块(power management module)完成这种功能。
图3
2 芯片的低功耗工作管理模式
为了更好地实现动态配置时钟的SoC低功耗管理策略,芯片在其工作中开发出了其低功耗管理机制中的四种工作模式:Slow、Normal、Idle和Sleep。下面结合图2所示的工作模式流程图来说明它的工作机制。
表1为四种工作模式的状态。
表1
模 式 | Slow | Normal | Idle | Sleep |
状态 | 由晶振提供CPU核和各模块的时钟源 | 由PLL提供CPU核和各模块的时钟源 | 关闭CPU核的时钟源 | 关闭CPU核和所有模块的时钟源 |
CPU核状态 | 开 | 开 | 关 | 关 |
模块状态 | 不确定 | 不确定 | 不确定 | 关 |
(1)Slow模式
当系统复位以后或当系统关掉PLL不需要高速时钟运行时,系统进入到Slow模式。在Slow模式下,系统中的CPU核和所有模块的时钟源都来自晶振。如果这时系统认为有必要关掉某些模块,那么,就可以通过配置功耗管理模块内部的寄存器,把相应模块的时钟源使能位关掉。
(2)Normal模式
如果在某些应用中需要高速时钟,那么就应该切换到Normal模式。在Normal模式下,系统中的CPU核和所有模块的时钟源都来自PLL。当然,在这种模式下也可以根据系统的应用关掉某些模块。如果系统需要调整时钟的频率,可以通过动态配置PLL来实现。但是在动态配置PLL过程中,要注意这样一个问题:因为PLL有一个时钟锁定的时间,在这段