eetopcnLow Power ology Manual For SystemonChip Design分析读书笔记.doc_第1页
eetopcnLow Power ology Manual For SystemonChip Design分析读书笔记.doc_第2页
eetopcnLow Power ology Manual For SystemonChip Design分析读书笔记.doc_第3页
eetopcnLow Power ology Manual For SystemonChip Design分析读书笔记.doc_第4页
eetopcnLow Power ology Manual For SystemonChip Design分析读书笔记.doc_第5页
免费预览已结束,剩余49页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

首先感谢IC兄的资源分享!最近正好有点时间,想静下来读一读书了,就从这本书看起,写写阅读笔记。这本书是Synopsys和ARM联合开发小组根据实际的项目经验写的,其中实际工程上的考虑应该多于理论分析,适合我们这样的实际工程人员。第一部分:前言功耗问题的起源芯片功耗的问题最近几年得到了越来越多的重视,主要来源于以下几个方面:1、90nm以下,随着设计流程的发展,芯片的集成度达到了上千万门级。一颗最顶级的芯片总功耗可以达到惊人的100-150W(可以煮鸡蛋了),单位面积功耗可以达到50-75W/cm2,而局部热点的功耗更大。这就产生了芯片封装成本、电源成本和可靠性问题,估计还要有大得像砖头一样的散热片。2、对于需要电池供电便携式设备和无源芯片类(非接触电子标签)来说,功耗则意味着电池寿命和工作距离。功耗的组成: 功耗分为动态功耗和静态功耗两大部分。 动态功耗是电路在工作时(翻转时)所消耗的能量。对于CMOS电路来说,它又分为开关功耗和短路功耗。开关功耗为电路翻转时对负载电容充电的功耗,短路功耗为输入翻转时,PMOS和NMOS同时打开的瞬间电流形成的功耗。用公式描述可写为: Pdyn = (CL * Vdd2 * Ptran * F) + (ttran * Vdd * Ipeak * F)其中,CL为电路总负载电容;Vdd为工作电压;Ptran为工作电路所占比例;F为工作时钟频率;ttran为PMOS,NMOS同时导通时间;Ipeak为短路电流。公式中前半部分为开头功耗,后半部分为短路功耗。一般来说,只要gate输入斜率足够小,也就是ttran足够短,短路功耗一般可以忽略。 从公式中可以看到降低动态功耗的思路,无非是从Vdd、F、CL和降低gate翻转次数的方向出发。由此会带来一系列架构设计上、设计流程上、时序分析上、电路设计上、后端布局上的考虑,以及由于工艺的发展带来的一系列问题。在后续章节中会详细讨论这些内容。再来说说静态功耗。静态功耗是电路在没有翻转时,只有供电的情况下,晶体管中漏电流造成的功耗。根据重要性可以分为以下四个部分:1、 亚域值漏电流Isub: 从Drain经过弱反形层流向Source的电流2、 栅电流:Igate:由于隧道效应和热载流子效应,由Gate经薄栅氧流向Sub的电流3、 由Gate引起的Drain电流IGIDL:由于Drain端的强电场引起的由Drain流向Sub的电流4、 结反偏电流Irev:反偏结耗尽区少子漂移和电子空穴对产生形成的由Drain、Source到Sub的电流。 其余电流还好理解,就是IGIDL没搞清楚是怎么来的。查了一些资料,看起来应该是这样形成的,是由于工艺尺寸降到90nm以下后,在Drain端会形成超强的反偏电场,而在Gate和Drain的overlap区域,Sub的参杂浓度偏大(为了防止punchthrough),在这里会容易发生band-band tunneling或者avalanche,因此会形成较大的Drain到Sub的漏电流。 深亚微米下,Vdd降低,为了提高性能会同时降低管子Vt,而Isub和Vt是指数反比关系,会造成Isub急剧增大。45nm下Isub会是90nm下Isub的6.5倍。同时Isub也会随温度上升指数增加。 90nm工艺下,栅氧厚度只有几个nm(几个原子的厚度),栅氧的隧穿电流Igate在90nm下可以达到Isub的1/3,在65nm下可以等于Isub电流。降低静态功耗的方法: 有几种方法可以降低静态功耗,其中Multi-Vt和powergating的方法后面会详细介绍。其它还有VTCMOS、Stack Effect和Long channel器件的方法。VTCMOS(Variable Threshold CMOS)是在SUB上加上一个反偏电压,从而提高管子的VT,以减小Isub。这样会额外增加两条powerrails,增加了建库的难度,而且在小尺寸下,这种作法的作用也不明显了。 Stack Effect就是采用叠加的gate,如果叠加的gate中有两个输入都是关闭状态,则流过两个gate的静态电流会很小。在理论上,应该在关闭时钟前将所有gate输入置为关闭状态,但在现实中,这是不可实现的。 长沟道器件:长沟道器件可以有效降低静态电流,但同样会影响动态响应,降低电路性能。同时长沟通也会增加栅电容,对动态功耗不利。因此可以考虑在开头次数较小或者对性能要求不高的地方采用长沟器件。第一部份大概就这内容了。下一部分是一些标准的低功耗措施了,包括clock gating, gate levelpoweroptimization, multi-VDD, multi-Vt等第二部分:几种常用低功耗技术 这一部分书中介绍了四种低功耗技术,clock gating, gate levelpoweroptimization, Multi-VDD, Multi-Vt。大概都是些比较常用的技术,而且很多都已经是工具很好的支持了。书中一带而过,没有深入讲。我根据书上内容说说自己的理解。1、 clock gating 门控时钟的基本思想是在寄存器不工作时(使能信号无效时),把clock关掉,从而clock tree上的buffer及register都不会再有动态功耗。现在单元库中会有专门提供用于gate clock的cell,这种cell可以检查setup/hold的violation,工具可以保证时钟上不会出现glitch。如果库中没有这样的单元,也可以手动的在RTL中插入门控电路,或者在DC中用命令自动插入门控电路,或者是二者混合应用。一般会有两种门控电路,一种是基于latch一个逻辑门(and/or gate),一种是就用一个逻辑门。如果电路中全部采用的同相时钟,最好使用第一种电路,可以用latch保证逻辑门的输出不会出现glitch(当然也要用STA分析相应的时序)。如果采用双相时钟,用第二种电路也可,同样需要用STA报告setup/hold violation。插入门控时钟可以极大降低电路动态功耗,书上例子说可以节省50%以上动态功耗。同时还有一个附加好处是可以显著减小电路area。因为如果一组寄存器的EN电路被一个clock enable电路取代,会减小相应的面积。同时如果这个clock tree上还需要串入delay cell的话,也由于gate cell引入的delay而减少delay cell的数量。书中的例子说完成clock gating后,电路面积减小20%左右。(记得一次面试还被问过这方面内容,可惜当时理解还不深,没回答好,呵呵)DC中自动插入门控单元的命令为:set_clock_gating_style -sequential latch -positive_edge_logic and -negative_edge_logic or -setup 0.5 -hold 0.5 -minimum_bitwidth 3在compile前执行insert_clock_gating -module_level-sequential latch指定DC用基于latch的门控电路类型。-positive_edge_logic指定时钟rising edge触发的寄存器所用的门控单元。-negative_edge_logic指定时钟falling edge触发的寄存器所用的门控单元。-setup/-hold指定setup/hold 约束。-minimum_bitwidth指定一组最少多少个寄存器共用一个门控单元,缺省值是3。据分析至少是3个寄存器共用一个门控单元才能达到节省功耗及面积的目的。-module_level选项可以指定DC自动替换在RTL中手动插入的门控单元为DC认为安全的门控单元。2、门级功率优化这一级优化是由工具自动完成的,对设计者和后端工程师都是透明的,设计者可以不用关心具体细节。其基本思想包括:把翻转频率高的net在path早期和翻转频率低的net运算,高翻转率net的传播路径;高翻转率net接到低输入电容的门输入端,低翻转率net接到高输入电容的门输入端等。3、Multi Vdd 其基本思想就是SOC中,不同模块根据其性能要求不同采用不同电源供电。书里的例子,Cache RAM需要工作在最高时钟,因此分配的电压值最高,为1.2V;CPU的电压值次之,保证整个系统的性能还是取决于高速RAM的速度;其余部分的电路工作在最低频,因此电压最低为0.9V。这样做会得到最好低功耗效果,但也会较大影响设计流程。设计需要在模块间额外增加powerrails和level shifters。而且我想工艺库中也应相应提供各种电压下单元的delay信息。各个模块接口之间的时序可能也要严格保证。书中以后可能会有详细这方面的详细内容。4、Multi-VT 降低VT也是把双刃剑。由于深亚微米下,工作电压降低,降低VT是势在必行。降低VT可以提高动态电流也就是可以提高电路工作速度,但VT是和静态漏电成指数反比关系。书中给出了漏电流和延时的关系图。基于这个原理,在设计中我们就可以对于性能要求高的电路,采用lowVt的管子;对于性能要求不高,频率低的电路可以用高VT的管子。书中说现在工具可以利用库中给出的不同域值的单元自动优化timing和power。我至少目前还没有做过这样的项目,没有这方面的体验。书中提到了双VT设计流程。如果项目的目标是追求最高性能,则第一遍实现时用lowVT单元库。然后再用high VT单元库进行优化,把非关键路径中的cell替换为high VT的cell,从而实现在满足性能的同时,功耗最低。反之则顺序相反。听起来到是个好办法,有没有人做过这样的流程?有什么体会不?工具怎么样支持这种设计流程?最后书里给出了一个这几中常用技术的低功耗效果和对传统流程影响的表格。这一部分并没有深入展开讲,可能是作者认为已经是很常见的技术了。从下一部分开始就要进入比较新颖、复杂的低功耗技术powergating和adaptive voltage scaling第三部分:多电压设计(Multi-Voltage Design)既然从前面的公式可知,动态功耗和电压平方成正比,静态功耗也正比于电压,则降低功耗就首先从降低电压上做文章了。一言以蔽之,低电压策略的原则就是在功能、性能允许的情况下尽量降低工作电压。其中,最基本的形式就是芯片划分为不同电压域(Power Domain),高性能的部分在高电压域,低性能要求的部分就分配在低电压域。举例来说,一个SOC芯片中,MCU应该工作在尽可能高的时钟,则它的电压应该是最高电压;而外设中的USB模块,有协议定义的固定速率,则只要分配给能满足要求的工作电压即可;一些平时不工作的模块甚至可以将电压关断(Power Gating),也就可使功耗趋于0。这样一个芯片中,就会划分为各种不同的电压域。根据低电压策略应用的复杂性,这种技术可分为以下四种: 静态电压缩放(Static Voltage Scaling,SVS):芯片中,不同模块具有一个固定的电源电压。 多级电压缩放(Multi-level Voltage Scaling,MVS):芯片中各个部分的电源电压可以根据运行时状态在两级或多级电源电压间切换。 动态电压频率缩放(Dynamic Voltage and Frequency Scaling,DVFS):相对于MVS,DVFS会有更多的电压级数用于模块的切换。也即比MVS的电压调整粒度更细。 自适应电压缩放(Adaptive Voltage Scaling,AVS):顾名思义,这是一种带有控制环路的自动实时调整各模块工作电压的方式。书中这一部分就以上多电压技术的一些共性的问题做了一定的分析,MVS技术可以说多电压技术的一个代表,就从这一个角度出发先介绍一些基本概念。后续的章节会对每种技术的具体问题具体分析。由多级电压技术带来的设计上的挑战包括:各级电压域之间信号的传递需要增加电平移位器(Level Shifter)由于芯片各个模块会工作在多种电压下,因此在各种电压下的时序都要满足。增加了STA分析复杂度。电源网格(Power grids)的布局规划、模块接口单元的电源布线等需要仔细考虑。板级上需要更多电压regulator来提供各种不同电压,增加板级设计复杂度。由于电压不同,各个模块的上电/下电顺序也需要仔细设计以避免电路出现死锁。下面分别就这些挑战展开分析:由level shifter引入的问题:1、 为什么需要level shifter?2、 Level shifter的对芯片powerdomain划分的影响。3、 什么时候需要插入level shifter?4、 插入level shifter对传统STA带来的影响?5、 Level shifter对传统PR带来的影响1、由于一个芯片中各个模块之间工作电压会有差异,信号的传递就会有从高电压传区域传到低电压的情况(high tolow)或者由低电压向高电压区域传递的情况(lowto high)。理论上,由high tolow传递时,driver输出可以直接连接到输入gate上,不用插入特别的接口单元。但是如果这样设计,目标电压域中的所有单元都将重新针对输入高压情况下建库,对timing进行建模,工作量会很大。而如果插入特殊设计的high tolow单元,则可只对其进行timing建模,隔离了内部单元为一个单独的电压域。这样有利于建库和STA分析。反之,lowto high时除了有以上问题,还会有功耗问题。低电压的driver直接驱动高电压gate,如压差较大,则会造成负载单元P管不能完全关断,造成较大漏电流。因此,不同电压域之间的level shifter是必要的。2、level shifter的设计是一个模拟电路问题。它只能是单向的,也就是只能是high tolow或者是lowto high。双向的level shifter的设计需要用到特殊的器件,不易实现。由于level shifter只能是单向的,要求系统在划分不同电压域时,相临电压域之间的关系必须的确定的。也就是一个电压域在工作时电压值只能是永远高于相临域或者永远低于相临域。而不能是一段时间高,一段时间低。3、1中分析过,high tolow时,接口上会造成timing分析上的误差,电压差大到一定值时,这个误差会造成时序上的error,此时需要有准确timing模型的level shifter的插入以用于STA分析。具体多大的压差需要插入level shifter,则根据库和设计的约束决定。lowto high时,除了以上timing问题,还会有不能完全关断负载的问题。工程上,一般取电压差在VTPMOS基础上留一个10%VDDH余量,即 VDDH-VDDL VTPMOS (0.1*VDDH)时,就需要插入lowto high level shifter。4、对STA带来的影响:一方面,插入的level shifter会带来极大的延迟,在设计critical path和CTS综合时要充分考虑到level shifter带来的影响。另一方面,各个模块的电压域值不同,而且在工作中会动态变化,而不同的电压值会带来不同的timing值。那么我们在综合、STA、PR时选用哪一个电压模式呢?书中的做法时,同时对所有可能的电压情况进行约束,用于综合、STA、PR中。在一个电路实现中应该同时满足各种电压模式下的时序要求。(看起来好像是工具可以支持同时对各种工作电压进行描述了,现在的DC可以同时设定各种不同电压的operating conditions么?还没在实际中这么用过)。5、level shifter对于PR的影响主要包括其placement和电源的routing。由于level shifter的插入不会影响功能,理论上可以由工具自动完成。用户可以指定工具将level shifter放在驱动端的powerdomain、中间的powerdomain或者负载端的powerdomain中。书中的建议是一律放在负载端的powerdomain,因为level shifter的输出负载相对输入会更大。如果两个相关powerdomain距离较远,中间还间隔另一个powerdomain时,有可能还需要在中间插入一个驱动端的driver。这种情况和lowto high shifter情况还会有对power进行布线的情况出现。书中介绍对电源线当信号线进行走线很复杂,但没具体介绍原因。为了便于理解,这里放入书中两个典型的level shifter电路结构:图1图2MVS对系统设计的影响主要包括两个方面:1、上电过程由于各个模块由各自电压源驱动,各模块间有一个上电顺序的问题以保证电路正常功能。一般来说CPU会等待周边模块完全上电完成后再启动。整个上电过程包括上电、振荡器(PLL)稳定、reset信号完成。一些复杂情况下,上电完成后还需要一些握手协议表示上电完成。2、上电过冲由于模块电压在工作中还会动态变化,要对电压上升下降的时间进行控制,避免出现overshoot和undershoot。否则过高或过低的异常电压值可能会造成电路自锁甚至损坏。这个过程可以用控制信号控制电压的启动、上升过程。最后由于电压控制一般都是由CPU控制,因此电压控制软件需要集成在系统软件中运行。这一部分内容只是从概念上介绍了MVS一些基本问题,一些更具体的问题还会在后续内容中有介绍,下一部分介绍powergating的相关内容。第四部分门控电源技术(Power gating)降低功耗最直观的思想就是在不需要电路工作时把它的电源关掉,这样什么动态功耗、静态功耗就全没有了。在需要电路工作时,再把电源打开,这就是门控电源。思想简单,实现起来可有许多复杂的情况要考虑。这一部分主要是介绍了一些门控电源的基本概念和提出一些要解决的问题。 和前面讲的门控时钟等低功耗技术可以对设计者透明不同,门控电源技术则需要系统设计者根据实际情况在各种因素间加以权衡。先来介绍两个术语:睡眠(Sleep):使系统进入低功耗模式(在这里就是关断模式)唤醒(Wake):使系统回到工作模式再来看一下实际powergating工作时的功耗状态图图一可以看到,Sleep事件使系统进入关断模式,但由于电路工作状态时的特性和电源开关的非理想性,系统功耗并非立刻进入最小值。同样,在Wake事件到来将系统唤醒时,由于等待复位和时钟信号的稳定,系统也要延时一定时间才会进入工作状态。门控电源在各类子系统中应用的考虑:1、Cached CPU(带有缓存的CPU,不知是否这样翻译合适)子系统会长时间处于不工作状态,适合采用门控电源技术。CPU不工作时,将其电源关断会节省大量功耗。但是唤醒时一般是由中断触发,而CPU会有一个唤醒时间的延迟,系统设计时要充分考虑这个延迟(可能会需要更深的FIFO或安排特定的时隙)。另外,CPU掉电后,其中的cache内容也会消失,如果每次上电后都要先把cache填满,这个动作也会消耗一定的能量。因此节省的净功耗是电源关断时节省的减去上电时恢复先前状态所消耗能量。2、外设系统(Peripheral subsystem)相对于CPU有很好的“作息规律”。它由驱动软件或操作系统中电源管理模块来规划上电/下电动作。同样,每次上电/下电时也都要储存/加载状态信息值,这会为软件增加负担。最好的办法是外设自己内部处理状态信息的保存加载动作。但这需要一些特殊的电路。3、在多核系统中,一个或多个核任务完成后在等待下一个任务时,可以将电源关掉以降低功耗。由于这时各核上一个任务已经完成,再次上电后,可以完全复位重新开始执行新分配的任务。管理这样一个系统需要一个自适应的关断算法来根据工作量的数量动态增加或减少睡眠CPU核的数量。(这里可能会有一些算法值得研究一下)门控电源设计的原则有两种关断电源的方式,一种是一个子系统有一个独立的外接电源,则如果该子系统想关断电源,可以直接暴力的将芯片外的电源关断即可,这样可彻底把功耗降为0,但这样会花费更长的时间,需要更多的能量完成上电。另一种是内部电源管理方式,在短时间的电源关断会是更理想的办法。内部电源管理系统中,内部电路通过一个电源开关网络(power-switching network)连接到电源上,电源开关网络控制着电路与VDD或VSS的连通与关断。开关网络由门控电源controller控制,是由一个很大数量的CMOS开关阵列组成。这样一个系统中会存在一个子系统处于断电状态,而和它相邻的系统处于工作状态的情况。一个问题出现在两个模块接口上,处于断电状态的系统的输出接口在断电发生时有可能会长时间处于中间电平,会造成相临工作系统上N管P管常开,造成大量的直通电流(Crowbar current)。为了解决这个问题,在模块相临的接口上需要添加隔离器件。在前面系统关断发生时,使能该隔离器件隔离两端,隔离器件不会受输入中间电平的影响,直通电流非常小。这些隔离器件应该是受门控电源controller控制。当断电系统上电后需要恢复某些断电前的状态时,如果能保持断电前的状态,则可以极大节省再次上电工作的时间和功耗。这时,可以采用一种“保持寄存器”(retention register)来在掉电情况下保持内部状态。保持寄存器一般都有一个辅助或影子寄存器,它们工作速度慢,但用来掉电时保持状态会消耗极低功耗。这些影子寄存器是需要长期供电的。它需要告知什么时候需要保存当前状态,什么时间恢复以前状态,这些也都由门控电源controller控制完成。电源开关的细粒度控制(Fine Grain)vs粗粒度控制(Coarse Grain)细粒度控制的思想就是在每个标准单元门上加一个电源开关,这种开关需要提供这个单元门的最大工作电流。为了不影响单元门的性能,这样的开关就会设计得非常大,通常是原标准门的24倍面积。这样做的好处是每一个单元可以很好的模拟性能,包括对timing的影响和IR Drop的影响,相当于重新建一个单元库,还可以放到传统设计流程中采用。粗粒度控制是整块电路用一组电源开关单元阵列统一控制。这一组电源的开关的多少很难估计,因为你不知道电路工作时是一个什么的电流需求。但是相对于细粒度会极大的节省面积上的损失。(估计对粗粒度中电源开关数量的估计、设计和布局也将会是个课题)。在过去的几年中,有一种强烈的趋势趋向于粗粒度电源控制,因为细粒度带来的面积上的损失是不能接受的。在今天,实际上所有的门控电源设计都是采用的粗粒度电源控制。因此这本书也主要集中在粗粒度门控电源的介绍上。门控电源的技术带来的设计挑战(在看这部分之间,本来觉得门控电源没什么,不需要用时把电源关上就行了,没想到看到这才知道还有这么多麻烦的问题.呵呵)*设计电源开关阵列(估计是它的数量、size、位置、漏电流的模拟等)*设计门控电源控制器(驱动电源开关阵列的开/关、什么时候开/关、控制保持寄存器、控制隔离单元功能)*对上电时过冲电流的控制,过大的电流引起的IR Drop可能会损坏其余电路的工作状态。*选择和使用保持寄存器和隔离单元*评估和尽量减小门控单元带来的开启延迟和面积上的影响*对时钟和复位信号恢复的控制*在实践和分析中设计正确的约束(估计这条是自动化设计中要做的工作了)*对每一种电源状态实施依赖于状态的验证工作(涉及门控电源的验证工作了)*电源状态转换的验证,确保合法的状态进入/退出可以被仿真和验证。*开发可制造和可测试性设计策略(为产品测试作准备) 这些内容会在后面章节中介绍。这一部分还是个概念上的介绍,真正的如何实施这些技术就要在下一部分中了,前面做了这些铺垫,终于快要看到本书的重点了!.第五部分 设计门控电源(一)这一部分内容太多,不得不把它分为两部分了。这一部分把门控电源每一个组成部分都从RTL前端设计的角度,在设计、验证、测试三个方面做了充分的说明。其中涉及的面太广,有一些地方还没能搞得太明白,先放到以后再研究一下,或者实际工程中搞清楚了。先来看一下,一个完整的门控电源电路的组成:图1包括控制器、电源开关网络、保持寄存器、隔离器这几大部分先从分别如何设计这几大部分说起电源开关网络的设计:具体的电路级设计是和工艺相关的,会在附录A中介绍,这里先从架构级考虑设计开关网络的要求。第一个问题就是开关控制VDD?还是控制VSS?(header switch or footer switch?)首先可以明确的是如果两头都用开关控制是不能接受的,因为那样会造成实际落在中间功能逻辑的电平降低太高,影响中间真实工作电路的性能。有三个理由支持使用header switch1、如果是在芯片外进行电源控制,那只能使用header switch,因为板子上的地电平是公共的。2、如果在芯片内外都有电源控制,那么芯片内最好也用header switch,表现的功能和片外电源控制一致,方便验证和分析。3、如果芯片内存在多电压域,它们之间会有level shifter(一般是共地,两个不同电压源)。这种情况下不适宜开关VSS。(具体为什么不太清楚)最后,关断VDD意味着所有内部节点电平都会被拉到地,更方便系统设计分析。支持footer switch的根据是从电路的电气特性来分析的(会在14章分析)总之,在系统开始设计时应尽早确定哪种开关方式最适合系统要求,书中给的建议是不要footer switch和外部电源开关或者多电源设计混用,会带来复杂的功能、时序和功率分析。(至于为什么会增加设计难度还要在实践中体会了)电源开关网络的控制控制开关网络的关键是控制过冲电流(In rush current),否则会在powerrail上会出现电压尖峰,破坏其余模块的工作状态。开关网络上可能会有成百上千个开关,避免过冲电流的思想就是分时打开这些开关。或者采用菊花链的形式(开关上的poweron信号通过buffer一级级传到各个开关上,每一个开关打开都会有一定延时),或者由控制器发出多个poweron信号,分时打开相应开关。不管怎样,开关网络的全部打开需要一定的时间,开关网络需要给出一个确认信号给控制器,表示上电完成。之后控制器才可以开始下一步操作。隔离单元(Isolation cell)的设计: 上一部分内容说过,隔离单元的作用是就是防止下电模块的输出端口不要对相连的上电模块的功能造成破坏。这里需要提一下,在模块断电后,其内部节点电位并不是一定被拉向高(VSS Switch)或低(VDD Switch),而是有可能上下漏电流形成一种平衡,中间节点长时间处在一个中间电平处,因此要将下电模块输出端隔离。下电模块的输入端由上电模块驱动为正常电平,不会引起电路异常。有三种功能隔离单元,将输钳位到0、钳位到1,锁存到最近值。单元库中的隔离单元经过精心设计可以在控制端使能情况下,输入悬空也不会有串通电流和很小的泄漏电流。另外,这些隔离单元可以被综合工具识别,不会对其进行逻辑上的优化。图二中是两种概念上的基本隔离单元。图二这种隔离单元具有较大的延时,在一些高速接口上,比如对高速缓存的访问,这样的延时是不能接受的。有另外一种隔离方式,即加入上拉或下拉管的方式。这种方式会引入端口上的多驱动问题,要由开关电源控制器控制下电和隔离使能的顺序,避免出现竞争。由于上电动作先于撤消隔离使能信号,因此使用这种隔离方式会造成上电时的驱动竞争。另外这种多驱动的方式也会带来测试上困难。因此书中推荐尽量采用第一种隔离方式,除非对timing有特殊的要求,否则不要使用上拉或下拉管的方式隔离。隔离在下电模块输出端还是隔离在上电模块输入端的考虑:一般来说,隔离在输出端有利于验证、节省面积、方便移植等。但隔离单元需要always on的电源布线,这种方式会造成在一个模块中有多条电源的布线,这增加了布线的复杂度。好在现代的EDA工具已经可以解决这种问题。而且EDA工具也可以识别隔离单元的位置,不会在隔离单元的前后插入非隔离单元。作者强烈建议,在可重用的IP设计中,把复杂的隔离单元封装在IP内部,达到对SOC级的集成来说是透明的目的。对隔离接口钳位为1或者0的考虑:一般来说,我们要避免输出的钳位值被接口模块误认为是有效信号,一般在电路设计中采用的高有效信号,因此隔离单元的接口钳位为0比较合适,而reset信号一般是低有效(因为在全部上电之前,所有信号都是低电平),因此reset信号需要钳位为1。在相临两个模块都可以独立下电的情况下,如果输入模块下电,而输出模块隔离接口钳位为1,则会有从输出到输入的漏电流存在,在这种情况下,所有信号(reset除外)均应钳位到0最合适。总结:建议一律采用高有效信号,低有效的reset。最后,对于保持最近值的隔离单元,需要一个带有latch的隔离单元。书中说任何库中都没有这种单元,需要根据情况自行设计。状态保持和恢复的方法:系统下电后,内部寄存的所有状态均会消失,如果想要系统上电后继续前面状态进行工作,则需要一种状态保持和恢复的策略。怎么样快速、高效的保持恢复内部状态是我们要考虑的问题。目前有三种方法:*通过软件控制读出和写入寄存器的方式。*通过扫描链将内部状态串入串出的方式。 *基于芯片内部状态保持寄存器(retention register)的方式。通过软件的方式有以下问题,在上电下电过程中,通过总线将内部寄存器读出至RAM,再从RAM读回至寄存器,显著降低了上电下电速度。总线的竞争也造成了上电下电过程时间的不可预测性,很难判断是否还值得关断电源。增加了软件工作量,降低了软件的适用性。这里只集中讨论后两种方式。扫描链的方式:这种方式利用芯片内部的扫描链,在下电的过程中,下电模块内的寄存器向扫描测试的工作方式那样将寄存器状态扫描输出至片内或片外RAM中。在上电过程上,再将RAM中的值通过扫描链扫描回芯片内部寄存器。整个过程由开关电源控制器来控制。这种方式不会增加太多额外的面积,但会带来以下几个问题。*从RTL设计的角度,扫描链的插入是在综合后才进行的,而我们需要在RTL设计时就要在RTL级验证控制器。而且寄存器的数量、扫描链的长度也在初步实现后才可以确定,在RTL设计时需要参数化这些值。对Scan Enable和Scan in/out的控制也需要在网表生成后连接上。 *需要多条链并行串出/入数据,加快和RAM的储存/读取速度。一般来说取8条比较合适。这些链需要有相同的长度,这样控制器只需要一组控制信号即可控制这些链。这样可能会需要增加一些附加寄存器在最短的链上,以平衡所有扫描链。 *扫描所有寄存器进出RAM,需要一定的时间。而且RAM需要保持上电状态。如果RAM是在片外,扫描动作在IO端口上会消耗大量功耗。即使RAM在片内,这时寄存器同时翻转,在最坏情况下的动态电流也会过大,造成可以破坏内部状态的IRDrop。除了这些潜在问题,扫描链的方式有某些场合还是非常有用的,比如可能会长时间断电的子系统,通过扫描链存储完状态后,可以完全把片外电源关掉,最大化的降低了功耗。对于需要在RTL级就仿真验证电源开关控制器的功能来说,可以在RTL级编写一个扫描链功能模型用来仿真开关控制功能。书中给出了一个RTL扫描链功能模型的例子:1. define CPU_SCAN_LEN 257 /* set to implementation length once known */2. ifdef RTL_SLEEP_EMULATE3. parameter scan_reg_length = CPU_SCAN_LEN;4. reg 15:0 scanword 0:scan_reg_length-1;5. integer i;6. /* initialize the scan chain to count pattern, or more draconian X */7.8. initial9. begin10. for (i=0; i scan_reg_length; i=i+1)11. begin12. scanword CPUSO */17. always(posedge CLK)18. begin19. if (CPUSE = 1b1) /* when SCAN ENABLE is active */20. begin21. for (i=1; i scan_reg_length; i=i+1)22. begin23. scanword=scanwordi-1;24. end25. scanword0 = CPUSI15:0;26. end27. end28.29. assign CPUSO 15:0 = scanwordscan_reg_length-1;30. endif复制代码在设计阶段后期,可以用综合后的网表仿真真实的扫描链连接和功能是否正确。 (这一部分介绍了保持/恢复内部状态的扫描链方式,更为有效的内部保持寄存器的方式放在下一部分介绍了。下一部分还包括控制器的设计;控制器、隔离器、开关网络、保持寄存器这四类单元的RTL级仿真验证;最后是它们在测试上的考虑。)第五部分 设计门控电源(二)除了前面说的扫描链的状态保持值方式外,另一种方式就是用自保持寄存器替代标准寄存器。保持寄存器中包含一个影子寄存器,在下电时它可以保存主寄存器的状态,上电时主寄存器再从影子寄存器中读回其状态值。影子寄存器是永远上电的。详细的保持寄存器的设计在第13章中介绍。实际情况中,保持寄存器会占用一定额外面积,一般来说会大于原电路20%。在一些情况下,用于防止开关瞬态电压尖峰破坏保存状态的额外保护带会使额外面积大于50%。这种面积上开销是不可避免的。除了面积上的开销,它还需要更复杂的电源控制器。电源控制管理状态机必须定义保存和恢复状态操作时序。由于影子寄存器速度一般较慢,为了保证稳定的存入主寄存器值,状态保存时一般要将主寄存器的时钟停掉。保存完状态后,电源才可以关断。在上电时,主寄存器要装载完影子寄存器值后才可以继续工作,因此也应该恢复完保持值后再恢复时钟。自保持寄存器策略的一大好处就是它可以支持工具自动化处理,也就是可以对RTL设计是透明的。工具可以自动完成保持寄存器替换标准寄存器。这种自动实现的前提是在保持/恢复时,主寄存器的时钟和复位信号必须停掉,以避免读写冲突。(这种自动化处理需要库单元的支持)全状态保持和部分状态保持全状态保持就是模块中所有寄存器均替换为自保持寄存器,这样可以得到最健壮、最易于验证的设计。但有时在面积不允许的情况下,也可以只保留部分必要的寄存器值。这会带来一些设计挑战,设计需要保证那些非自保持寄存器的状态在上电后不会出现非法的随机值,并且是可测试的。这种非自保持寄存器在设计中可以是FIFO、memories和计数器等。这些寄存器并不直接参与逻辑功能的控制,我们称之为深状态寄存器;与之相对的是状态机中的浅寄存器,这种寄存器直接作用于组合逻辑电路。一般来说深寄存器可以定义为非自保持寄存器。则深寄存器应在上电后被复位成合法值,浅寄存器上电后恢复为保持值。这样我们需要两套复位信号分别用于自保持寄存器和非自保持寄存器。在RTL级仿真中,也需要验证上电后两套复位信号不会互相影响另一方的寄存器状态。深浅寄存器之间也要进行充分的验证,保证深寄存器不会影响浅寄存器的状态自恢复,否则系统会进入死锁状态。各种状态保持策略对clock gating也有一定影响。我们知道clock gating中会用到latch产生门控时钟的使能信号,因此在上电时,这些latch应能自动保证处于合法的状态,而不必再为这些latch也设计一个自保持寄存器。这就要求所有寄存器都用一个时钟沿工作,在电路下电时,clock处于0状态,这使得所有latch处于透明状态,状态值可以自由通过,保证所有寄存器输入端口建立正常信号值。相反,如果电路用到了双相时钟沿,则不能保证所有clock net上的latch都是透明的,就不能保证所有寄存器能正常恢复状态。状态保持对scan测试的影响:在进行scan test时,应使电源控制模块处于不使电路处于保持和恢复状态,否则会和scan发生冲突。而在扫描到电源控制模块本身时,则需要测试其保持和恢复状态值。门控电源控制器的设计:门控电源控制器控制模块上电/下电的操作顺序。对于不需要保持电路的下电操作顺序:*结束所有总线上的交易和正在执行的动作*停止时钟*启动隔离控制信号,使所有输出处于安全状态*复位信号使能(使模块上电时处于复位状态)*使能电源关闭信号,关断电源上电操作顺序:*禁止电源关闭信号,恢复模块电源(为防止过冲电流,可以选择相应的上电策略)*电源恢复后,置位复位信号*置位隔离输出信号,恢复输出 *启动时钟工作,避免毛刺产生对于需要保持状态电路的下电顺序:*结束所有总线上的交易和正在执行的动作*停止时钟*启动隔离控制信号,使所有输出处于安全状态*产生状态保持信号使需要保持状态的寄存器将状态值存入影子寄存器中*使能复位信号作用于不需要保持状态的寄存器*使能电源关闭信号,关断电源上电操作顺序:*禁止电源关闭信号,恢复模块电源(为防止过冲电流,可以选择相应的上电策略)*电源恢复后,置位复位信号*产生状态恢复信号,控制寄存器读入影子寄存器状态值*置位隔离输出信号,恢复输出 *启动时钟工作,避免毛刺产生电源的关断或打开都需要一定的延时(避免大的过冲电流),控制器则需要等待电源动作完成后才会进行下一步操作。控制器这时可以设定一个固定的较长延时,确保电路操作已经完成,但这种方式不利于可重用的设计。一个方法是控制器和开关网络之间建立一个握手协议,通过REQ、ACK信号来交互信息。在大多数设计中,ACK信号是异步的,它的时间决定于开关电路的设计。开关控制器在接收时需要先同步这个信号。设计电源控制器时要考虑一个极端情况,就是在下电过程还没有结束,又要上电时该如何处理。(我想控制器内部的状态机应该能判断出这种情况,依反顺序再操作回去)门控电源设计的RTL仿真这一部分,作者一个主要的目的就是从RTL级前端的角度了解门控电源是如何设计和验证的。由于硬件描述语言不支持对电源连接的描述,因此要仿真门控电源的工作需要扩展RTL代码或者使用UPF(Unified Power Format)来描述电源开关及其连接。UPF是一组TCL命令,用于描述电源连接。详细的使用在11章介绍,这里介绍如何在仿真中运用。现在的EDA工具已经有支持UPF的仿真。对于还不支持UPF的工具,也可以通过修改RTL代码的方式(手动或脚本自动修改方式,脚本方式需要RTL代码是严格按照可重用设计方法学要求设计的),实现大部分UPF的语义。 RTL中仿真门控电源需要在RTL包括以下内容: *电源开关的功能模型(下电后所有节点电平为X等) *隔离单元的功能模型 *保持和恢复寄存器的模型 *上电/下电执行顺序的功能模型 首先模拟RTL中上下电的功能,以下图中的电源连接关系为例:图一用UPF描述上述电源连接,首先在top级定义powerdomain、powernet(VDD,VSS),然后在下级层次定义powerdomain、powernet,最后定义电源开关及其和各powernet、控制信号的连接关系等。代码如下:1. create_power_domain top -include_scope2. create_power_domain top_power_domain -include_scope3. create_supply_ne

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论