低功耗设计在前端的应用(上)

目录

基础

门控时钟

其他低功耗设计方法


低功耗设计是贯穿芯片设计全流程的重要思想,随着工艺节点不断发展,功耗的重要性已经和性能同等重要。我们工作时常常听到一些低功耗方法,比如门控时钟,多电源域等等。那么作为前端设计人员,有哪些是我们需要了解的呢?本文将从前端设计的视角,详细剖析前端人员需要负责的门控时钟,讲解其原理及方法,其他几种不需要前端考虑的部分作简要介绍。

基础

首先,低功耗设计的原理是降低芯片的动态功耗和静态功耗,先给出其公式和定义

CMOS是数字芯片的最小单元,动态功耗是电路在工作时消耗的能量,动态功耗又可以细分为翻转功耗(电路开关时,门电路负载电容充放电造成,较大)和短路功耗(门电路输入信号翻转时,PMOS和NMOS同时导通瞬间短路电流造成,较小)。静态功耗是电路在待机时晶体管的漏电流造成的,和元件的电气特性密切相关。相比起来,静态功耗比动态功耗小好几个数量级。

其实还有一种功耗叫浪涌功耗,是设备在上电时由于巨大的启动电流产生的,不同设备的启动电流差异很大,浪涌功耗差异也很大,在IC设计时通常不考虑浪涌功耗。

分析上面的公式中容易想到,如果要降低翻转功耗,可以考虑降低C,Vdd,f,Nsw这四个变量。其中C为电路负载电容,可以通过工艺提升来降低,不属于前端范畴;Vdd为工作电压,这部分只在文末进行简要介绍,也不属于前端范畴;f为工作时钟频率,由于性能要求,并不能调低;Nsw为晶体管翻转率,也就是单个时钟内翻转的晶体管数量,这是前端可以降低的,方法即门控时钟。

如果要降低短路功耗,可以考虑降低Qsc,Vdd,f,Nsw这四个变量。其中Qsc为翻转过程中的短路电荷,由于电路短路存在的时间非常少,一般忽略短路功耗;Vdd,f和Nsw我们已经分析过了

如果要降低静态功耗,可以考虑降低Ileak和Vdd这两个变量。其中Ileak为所有漏电流综合,细分可分为亚阈值漏电流Isubthreshold(从漏极经过弱反形层流向源极的电流),栅漏电流Igate(由于隧道效应和热载流子效应,从栅极经过薄栅氧流向Sub的电流,竞争电流Icontention(从漏极流向Sub的电流),结反偏电流Ijunction(由反偏结耗尽区少子漂移和电子空穴对形成,从漏极流向源极和Sub的电流);Vdd我们已经分析过了,将在文末简单介绍。

鉴于有些同学可能对基础有所遗忘,这里顺便复习一下数电的知识。我们在数字设计中,常说的寄存器其实就是D触发器,其结构如下

寄存器是由门电路构成的,结构如下

门电路是由CMOS晶体管构成的,例如与非门结构

以上体现了数字电路的建模层次:开关级(晶体管级),门级,RTL级(寄存器级)。除此之外,电路建模还可以抽象为行为级,算法级,系统级等多个层次。

门控时钟

言归正传,那么该如何降低晶体管翻转率呢?很容易理解,由于芯片中的晶体管数量非常多,我们可以让这些晶体管只在需要的时候翻转,而在不用的时候将其暂时关闭,这样就可以降低晶体管翻转率了。

那么又该如何关闭晶体管呢?我们在前端设计时都是用RTL寄存器级和行为级建模的,很少会用到晶体管级建模,所以我们可以通过关闭寄存器间接关闭晶体管。

那么如何关闭寄存器呢?我们知道寄存器是时钟驱动的,所以可以给寄存器的时钟信号加上一个使能,关闭寄存器的时钟就可以了,这也就是门控时钟的由来,即用逻辑门电路来控制时钟的开或关。

时钟信号的翻转功率占整个芯片功耗的20%到30%,所以掌握门控时钟是非常重要的。设计门控时钟的方法大致有两种:第一种是由设计人员自己添加到电路中,第二种是设计人员通过一种特定的寄存器编码风格,当综合工具识别到这种编码时,会自动将其综合为带门控时钟的等效电路。

我们看上图中例子,左边的代码正常综合出来为右上角的电路,但由于其符合这种编码风格,所以综合工具会综合成右下角的电路,这两种电路在功能上是等价的。

分析这段代码含义为,每个上升沿检测EN,如果EN为1就采样D输出到Q,如果EN为0则Q保持不变。正常思路自然是将EN作为一个选择器的MUX信号,综合成右上角的电路。然而我们换一种思路,让EN作为时钟信号CLK的使能,如果EN为1,就将CLK连到寄存器的时钟端口,如果EN为0就让寄存器的时钟端口为0,就综合成右下角的电路。这两种电路的功能是一样的,区别在于右上角的寄存器时钟端一直处于跳变状态,即使EN信号为0,寄存器也在一直工作,造成了很多功耗浪费,而右下角的电路则在EN为0时,寄存器直接处于关闭状态。

由这个例子可以总结出,在建模寄存器时,只要让寄存器的输入信号D被一个EN使能信号控制,并且当EN为0时Q端保持不变,综合工具就可以将这种代码风格自动综合出门控时钟。

由于直接将CLK和EN与起来会产生毛刺,所以门控时钟单元需要用锁存器来实现,注意与门在实际工程中用与非门和非门构成,在综合的library中通常会把Latch和与门封装成一个ICG cell整体进行调用

由于系统时钟将是通过时钟树连接到每一个寄存器的,因此门控时钟越靠近时钟树的根部,也就是越靠近时钟源,被该门控时钟控制的寄存器或时钟单元就越多。但需要注意的是,门控时钟越靠近根部,其使能信号的Tsetup会更容易违例,但这是后端人员需要考虑的,后端需要对门控时钟的使能信号做Timing check,确保门控后输出的时钟没有毛刺

其他低功耗设计方法

最后我们简单介绍一些后端负责的低功耗设计方法,前端人员作简要了解即可。

采用多阈值电压的Cell

综合是将代码翻译成电路的过程,综合工具的库里不仅会提供各种基本单元,如与或非门,还会针对这些单元提供可选择的导通阈值电压,例如RVT(Regular Vt),HVT(High Vt),LVT(Low Vt),综合时会把同时读入这三种库,让综合工具可以对不同的路径选择导通阈值电压不同的单元来降低功耗。

Vt越大,Ileak漏电流就越小,但元件延时会变大。所以对于延时敏感的Critical Path关键路径,可以选择更小的LVT满足时序,而其他一般的路径就选择更大的RVT或HVT来满足低功耗。需要注意这种方法容易使timing违例,并且造成面积优化困难,所以要做好PPA trade-off。

Power gating

上面的多阈值cell是通过对不同路径选择不同的导通电压来降低Ileak,而Power gating则是通过控制单元直接关闭电源(sleep mode),来降低漏电流。

如图所示,当sleep为1时,虚拟电源Vddv被关断。这部分电路通过晶体管来实现电源开关,但由于晶体管本身也会分压,所以这些晶体管设计要足够小,避免影响电路正常工作。

需要注意,对于那些必须always_on的模块和电路,不能关闭其电压。对于可以关闭电压的部分电路,需要用与门作为隔离单元让这部分电路输出固定值(接电源1或者接地0),避免sleep后输出高阻态,对后续电路造成影响。

并且sleep的电路需要使用Retention cell可以保留数据的元件,在断电恢复后不丢失数据。Retention cell由Vdd供电的DFF和由Vdd_always_on供电的Retention Latch构成。

多电源域

根据不同逻辑功能提供不同电压,比如CPU高频给1.3V,周边小系统给1.0V。信号在不同电压域传输时,需要使用Level-Shifter(模拟模块)

动态电压频率调节DVFS(Dynamic Voltage and Frequency Scaling)

DVFS核心是动态调整,根据工作负载来确定升频升压还是降频降压,根据芯片当时的实际功耗设定Vt和F。例如CPU跑分时,通过软件调节增大CPU供电电压,获得更高的频率,但并不能一味的降频降压,因为低频运行会使处理时间加长,整体可能反而增加了功耗。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值