动态时钟配置下的SoC低功耗管理
MUX选中clk_Osci;当OscillatorOrMPLL为“0”时,MUX选中clk_MPLL。在MUX选择其中任何一个时钟信号之前,clk_MPLL或clk_Osci必须已经稳定下来了。强调一下,这里的稳定不是指已经输送出完整的时钟信号,而是输送出高电平或低电平。这样当选择开关达到它们那一方时,接受到的是没有毛刺的且对整个SoC不会产生操作的时钟信号。虽然在这时因为这种操作把SoC的频率降了下来,但这是暂时的(大约2~3个晶振时钟周期),因此对整个SoC性能的影响是微乎其微的。接下来被选中的信号(clk_MPLL或clk_Osci)才开始输送出没有毛刺的时钟信号,从而最终送出的时钟信号是去除了毛刺的。
图5
图5是系统从Slow模式切换到Normal模式时的时序图。通过配置功耗管理模块的内部寄存器打开PLL,即in_PLLStartOrStop信号,由它触发Slow2Normal_r信号,表明当前将要从Slow模式过渡到Normal模式。然后,由这个信号触发Lock Time 计数器开始计数(计数值由PLL的IP提供商所给的公式中确定),接着先把晶振时钟的使能信号关掉,再把多路选择器打到MPLL那一方。最后,把PLL时钟的使能信号打开,这时得到的就是经过倍频的PLL时钟。
《动态时钟配置下的SoC低功耗管理(第3页)》
本文链接地址:http://www.oyaya.net/fanwen/view/146541.html
图5
图5是系统从Slow模式切换到Normal模式时的时序图。通过配置功耗管理模块的内部寄存器打开PLL,即in_PLLStartOrStop信号,由它触发Slow2Normal_r信号,表明当前将要从Slow模式过渡到Normal模式。然后,由这个信号触发Lock Time 计数器开始计数(计数值由PLL的IP提供商所给的公式中确定),接着先把晶振时钟的使能信号关掉,再把多路选择器打到MPLL那一方。最后,把PLL时钟的使能信号打开,这时得到的就是经过倍频的PLL时钟。
从时序图可以清晰看出,在时钟源切换的过程中,最终送出的时钟(out_ClockSource)频率会很明显地降低下来(大约是晶振时钟频率的1/3或1/2);但是如果选择的晶振时钟频率在10MHz以上,则不会对整个SoC芯片的性能产生影响。
至于门控时钟电路,已经有许多人在这方面作了很广泛的研究,本文不再对此作过多的解释[7]。
5 结 论
本文提出了一种SoC芯片的低功耗管理策略。其基本思想是,首先从全局考虑,在满足性能的前提下,根据各种应用环境动态地配置SoC芯片的时钟频率。然后,从局部单独考虑单个模块,通过判断它当前的工作状态决定是否打开其时钟源。
该低功耗管理方案已经应用于我们设计的一款SoC芯片——Garfield。经过表2所列Power Compiler的功耗分析,可以清晰地看出:在Slow模式下的功耗仅为Normal模式下功耗的17%左右,而在Sleep模式下的功耗更低。
表2 功耗分析结果
《动态时钟配置下的SoC低功耗管理(第3页)》