数字ic设计|如何设计低功耗SoC

Posted IC观察者

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数字ic设计|如何设计低功耗SoC相关的知识,希望对你有一定的参考价值。

一、综述

常见的低功耗技术
常见的技术可以总结为7种,其中前4种需要设计者重点关注,后面三种其实都集成到工具里了,不专门做这方面研究的知道原理即可。
(1)power gating, 关电压。手动设计,需要重点关注。
(2)多点源域设计。手动设计,需要重点关注。
(3)Frequency and Voltage scaling design。手动设计,需要重点关注。
(4)应用层面优化。手动设计。玄学。可以关注。
(5)Clock gating。知道原理即可,工具自动优化。
(6)逻辑门动态功耗优化。知道原理即可,工具自动优化。
(7)晶体管阈值优化。知道原理即可,工具链自动优化。

1、Power Gating
比较简单粗暴,关掉某一块不用的电源。这样动态功耗和静态功耗都被干掉了。这部分东西比较主流。

2、多电源域设计

设计多个电源域。不同的电源域用不同的电压。比如速度慢的用低电压,速度快的用高电压。细节可以看这个桔里猫:如何设计低功耗SOC(三,多电源域)。

3、Frequency and Voltage scaling design

通过降电压和频率来节省能量。这一条也比较关键。各种ISSCC文章水指标的秘籍。发文章和时机使用都非常有效。楼主曾经用65nm工艺下流片的测试结果发现只要频率足够低,供电电压能降到0.5-0.6之间。节省的功耗还是巨大的。细节看这个。

4、从应用层面降低功耗

顾名思义,从应用层面优化功耗。比如笔者在某一年国际会议上遇到一个MIT的小姐姐,她们做了一个神奇的工作,主要研究如何训练神经网络模型,让计算的时候翻转率变小从而节省功耗。不过这种东西可能更适合小公司,因为对于大公司来讲芯片做出来怎么用对于芯片设计者来讲基本上是不归你管的。不让你做防呆设计就不错了你还指望人家听你的给你搞这个。

上面方法是架构和前端需要重点关注的技术,后面这些前端已经要碰不到了。

5、Clock Gating

直接把时钟停了,这样可以干掉动态功耗。实际上在数字芯片里时钟网络本来就占用了很大功耗,有可能超过50%。其原理是这样的。

比如有个EN信号,这个EN信号有效寄存器值才变,那不如直接用这个en把时钟屏蔽了。寄存器多的时候节省还是挺明显的。但需要注意的是,clock gating虽然是很直接的办法,但是一般来说你不要头铁自己去RTL层面写这个clock gating, 工具都会给你优化好。你自己头铁写个clock gating上去非常有可能产生个毛刺啥的影响正确性。

6、逻辑门动态功耗优化

综合工具除了能帮你搞clock gating, 还能帮你搞逻辑门优化的骚操作。比如下面这样。

对于上面这种,对于一个门有可能各个Pin的功耗其实不一样的。把变化率低的信号mapping到低功耗的pin上就有好处。

7、使用不同阈值VT的晶体管

这个应该好理解,VT大了晶体管不容易翻转,所以delay大。但是漏电流就小。反之相反。所以需要快速翻转的用LVT,不需要速度的用HVT。这个东西也是有综合工具帮你搞定的。

8、总结

低功耗设计还是非常重要的,为了让你的SOC有竞争力,低功耗流程来一套先。对于设计者来讲,还是要关注大头。比如power gating, multi voltage. 扣细节感觉收益不大。比如第6点,这种鸡肋技术。

查看更多关于数字ic设计的知识
二、Power Gating

1、Power Gating的概念

Power Gating是最直接有效的办法节省功耗,因为你都关断了嘛。所以从系统层面来讲,power gating的目的是人为设计两种芯片运行模式,一种低功耗模式和一种运行模式。在低功耗模式下只打开必要的组件来节省功耗。

2、实际上的工作模式

如上图所示,为电路增加了power gating模式以后,会引入额外的开销,wakeup是需要时间的,功耗到达最终的power gating功耗(即使power gating了任然会有少量漏电流的)也是需要时间的。

所以节省的功耗是中间凹下去的那个坑减掉wakeup那段功耗。设计的时候要充分考虑这个因素。如果你的芯片一直在工作(duty cycle非常大),那么power gating的收益就有些小。

总结起来,需要考虑恢复开销和power gating节省的功耗哪个大。举个简单的例子,多核CPU,要是某个核执行完任务了,power gating开销就不大,如果需要重新建立cache什么的,开销就非常大。

3、Power Gating的实际做法

实际的power gating有两种做法,第一种是暴力做法。两个电源域,一个电源域引出单独的power pin脚,物理断电。这种办法适用于非常长时间的关断。如果想用内部控制关断的话就需要采用第二个方法,在片上实现一个controller。

如上图所示,首先,我们需要一个power gating controller, 通过power swithing network来切换电源,你可以理解为这是个开关。这样就能把中间的block电源切换掉,例如从VDD切换成VSS。其中有几个点需要注意。

(1)要关掉的模块输出需要接一个ISOL模块,用来隔离的。为什么需要这个模块呢?因为power gated block关断以后,电压会慢慢下降,在阈值电压附近呆好久。那always on block的相关晶体管就漏电流很大。所以需要一个隔离模块。一旦从VDD变为VSS后把输出直接拉到目标电压。在本章第4节着重讲一下这个问题。

(2)如果gated block的某些寄存器值不想丢的话这些寄存器可以用rentention registers。大致原理就是用特殊的具有低功耗模式的寄存器,在低功耗状态下值不可变,但是能保留。

(3)为了关断power,你可以把vdd换成VSS,也可以从VSS变成VDD。但一般情况下关断最好吧VDD变成VSS。因为多点源域一般是共地的,但VDD各不相同。把VSS变成VDD还有点困难的。

(4)power gating相关的控制信号最好能在测试模式下直接用IO引出来,不然芯片一旦出了问题你会哭的的。

4、Power Gated Block输出如何做隔离

输入不需要特殊处理,但输出隔离是非常关键的。如3节所讲,输出是会影响下级的功能和功耗的。最粗暴的办法是加入专门的隔离单元,这些隔离单元不会被综合优化掉。

比如上面两种单元。左面是把信号直接拉到低,右面是直接拉到高。一般来讲,按照惯例我们直接用左面的。因为一个block关掉了输出是VDD你不觉得怪怪的么。需要注意的是这两单元要特殊处理的,不要直接在RTL写个与门,否则有被优化掉的风险,加入这些东西会引入一个逻辑门的延时。

对于IP设计者来讲,这两个门要自己带上。这样SOC级别的设计者不用考虑这些东西。有几个点需要注意:

(1)隔离单元要永远开着电源,不要手滑把隔离单元给划到关断区域了,否则就GG了。

(2)一般来讲不要在gated block里生成时钟,因为clock路劲上放隔离单元是真的坑。

5、典型的Power Gating过程和结构

如上图所示,首先把clock关掉,然后把隔离信号打开。然后把该保存的寄存器保存好,然后把reset放好,然后再关电源,顺序不要错。(唯一能错的是save, 这个阶段有可能不需要保存,也有可能直接在不关clock之前保存)。

如上图所示,一个芯片中可能有很多种Power gating模式的。但是不同电压域要在一个module里,尽量不要嵌套太多的power gating。主要是麻烦,易出错。

另外,设计的时候不要上头,为了节省功耗关了不该关的东西。比如下面这种情况。

你把domain B观点,AC就GG了。一定要非常小心确保所有东西都在考虑范围内。

6总结

power gating的概念到这儿基本就讲完了,主要大头还是个后端问题。对于架构要分清楚要有几个电压域,芯片有几种低功耗模式。对于前端要搞明白接口信号是啥,同时要实现一个控制器用来断电和唤醒电源域。对于后端要正确实现电源域,加上隔离模块等等。

三,多电源域

1、多电源域的原理

由于动态功耗是VDD的平方关系,所以降电压是可以降功耗,当然代价是电路延迟会变大。

这就给降低功耗带来了空间,某些部件并不需要跑的非常快。如上图,SOC部分如果速度慢可以到0.9V。

2、多电源域可能带来的问题

任何事情都是有代价的,比如多电源域的代价就包括:

(1)需要变压器, 英文名是Level shifters. 这个东西主要是后端要考虑。所有信号都需要level shifters. 因为你拿0.7V的电源域信号去驱动1.0V的电源域很容易导致1.0V的晶体管时时刻刻在漏电。而level shifters其实是会导致延迟的。

(2)时序分析不好做。因为电压不同会导致时序不同,跨电源域的信号时序分析就比较麻烦。当然,现在基本上工具都会支持多电压域的分析了。但是要注意的是各个情况都要测试一遍,比如有时候电压域会工作在几种不同的电压状态。

(3)布局的时候电源网络更加复杂了。

(4)上电断电顺序可能是有要求的。

3总结

这一章节较短,主要是多电源域更多的是一个后端经验问题,需要有经验的后端来处理这事儿。对于架构设计者来讲,主要就是搞清楚降电压是影响时序的,确保不会因为多点源域影响系统的功能就好。

四,降电压频率

1、降电压频率的基本原理

这个在多电源域的时候就讲过,降电压是可以降动态功耗的,但是会增加延时。对于数字电路来讲,可以通过降低时钟频率的手段来保证功能的正确。

如上图所示,对于一个固定的电压,能跑到的最高频率是有限度的。但是一般来讲并不能无限通过降低电压来节省功耗,因为电压降低到一定程度芯片计算结果就不对了。

如上图所示,能节省的功耗其实是两方面的,一方面是电压变低了,另一方面是因为频率降低了翻转率变低了。

2、降电压频率可以节省能量么?

那么你要问了,频率变低了,岂不是完成一个任务的时间变长了?事实上确实是这样的。

如上图所示,如果单纯的降低频率其实是没什么作用的,但是同时降电压和频率就不一样。电压与功耗是平方关系,最后会导致整个芯片消耗的能量往下降。

3、DVFS是什么?

这个词可以说是非常容易出现了。Dynamic Voltage and Frequency Scaling,动态的电压频率调节。最常见的实现手段是用CPU来来调节电压和频率。典型的做法如下图。

主要的过程有两种。如果目标的频率比现在高,那么先调电压,再调频。

(1)CPU先给Power Supply外设写个值,调一下电压。

(2)然后等着,直到电压变高。

(3)然后CPU频率切到高频即可。

(4)如果SOC部分需要调频,那通过CPU配置Sysclock generator或者PLL即可。

反过来,如果目标频率比现在低,先调频率,后调电压。一般来讲,频率电压数值是提前设计好的,会有若干的频点,工作状态在这些频点之间变化。

一般来讲,为了时序好处理,一种简单的办法是CPU的时钟只允许是总线的整数倍。然后接口出加上latch。

如上图所示,LPHLAT就是latch,HCLK是BUS的时钟。latch的作用是同步一下CPU的信号,然后时序约束的时候考虑一下CPUCLK和HCLK的差别留出足够的余量就可以了。

4、总结

这个部分东西学术研究还是比较多的尤其DVFS的各种变种。但是实际产品中如果不是极致追求,不一定能用的到。

以上是关于数字ic设计|如何设计低功耗SoC的主要内容,如果未能解决你的问题,请参考以下文章

(数字IC)低功耗设计入门——门级电路低功耗设计优化

(数字IC)低功耗设计入门——功耗的分析

(数字IC)低功耗设计入门——物理级低功耗设计&to be continued?

(数字IC)低功耗设计入门

低电压SRAM的重要性

低电压SRAM的重要性