在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
楼主: eewater

[转贴] Low Power Methodology Manual For System-on-Chip Design 读书笔记转载

[复制链接]
 楼主| 发表于 2010-5-7 13:10:28 | 显示全部楼层
第十一部分 多电压域设计的实现
  这一部分从实现的角度,介绍了芯片设计流程中每一个实现环节要重点考虑的低功耗相关问题。
  这一部分以ARM1176JZF-S项目为例,先简单介绍一下这个项目。和前面项目一样,它包括一个CPU核、一个cache子
系统、存储器管理子系统、AXI总线系统。整个项目分为三个电压域:VSOC域永远上电,包括所有AXI总线上的单元;
VCPU域支持电压缩放和关断,包括所有CPU核逻辑部分;VRAM域包括Cache子系统。它和VCPU域一起缩放但在VCPU域
关断时保持上电。
  要实现这样一个系统,与常规流程相比增加的工作包括逻辑上和物理上电压域划分、相关单元的插入(电平移位单元
、隔离单元、保持寄存器)、VCPU域电源开关网络的插入,还有在实现中检查电源网格的IR Drop、路径时序、电气完整
性等检查的工作。
  在讨论设计流程之前,先引入两个概念:
  Power Domain:(电源域)是一个逻辑上的概念、表明逻辑上各个模块间的电压关系。
  Voltage Area:(电压域)是一个物理上的概念,表示芯片上用来布局一个power domain里相关单元的有一定几何尺
寸的区域。它是power domain物理上的实现,一个power domain在芯片上可能有多个不相连的voltage area。
  power domain创建于流程中的综合环节,voltage area则对应流程中布局规划后的各环节。
 
  在这个项目中,power domain和voltage area是一一对应的。

*设计划分
  对一个设计进行各个电源域的划分意味着在模块接口间引入相关的单元(隔离、电平移位等),这些单元引入会对设
计的整体性能带来影响。设计划分的工作需要系统架构工程师、RTL工程师、物理实现工程师在理解了目标应用、功耗
性能指标、工艺特性后,共同参与才可以。
  电源域的划分的一个原则是尽量和逻辑层次完整的吻合。否则,如果一个电源域需要跨多个逻辑层次会造成时序上
收敛的困难和设计复杂度的增大。而且尽可能减少电源域的个数和跨电源域的接口信号数目也有助于优化设计。
  另一个原则是避免在已经是关键路径的地方划分电源域,电源域的接口会引入额外的电路增加延时,对路径延时不
利。对接口时序的充分考虑会极大帮助后续工作的顺利完成。另外,也要避免上电模块的状态值与断电模块内部状态值
相关,这样会减小接口单元的复杂度。

*设计流程一览
  流程如下图
  
    图一
  可以看到和常规IC设计流程相比增加了以下步骤:
  1、在RTL级定义好电源体系的spec
  2、逻辑综合时创建不同的电压域(生成的逻辑网表应该包含电源相关单元,分析了各种电压/频率下的时序信息)
  3、在布局规划阶段划分物理上电压区域、引入MTCMOS开关单元并对其综合(MTCMOS的size、个数等)
  4、早期的电源网络性能分析
  5、电源相关单元的布局优化
  6、多电压域时钟优化
  7、电源网络的布线,包含上电顺序的验证


*逻辑综合
  多电源域的逻辑综合比常规综合增加了电源相关方面的考虑,包括引入的电源相关单元对时序的影响,对design
rule的影响等。它的输入除了RTL、SDC外还增加了对电源系统的描述。
  对电源系统的描述可以有以下几种方式:
  1、显示的在RTL中定义(手动例化移位器、隔离器等)
  2、通过HDL语句(系统函数等)有RTL中定义
  3、通过工具相关的命令定义
  4、通过一个独立的标准格式的电源文件(UPF)
  在这里,使用了UPF格式描述电源系统。下面列举典型语句,因为这一部分重点不在这里,不作具体解释了。
  #定义电源域:
  create_power_domain domain_name
     [-elements list]
     [-include_scope]
     [-scope instance_name]
  #插入隔离单元
  set_isolation isolation_name
     -domain domain_name
     <-isolation_power_net net_name | -isolation_
     -isolation_power_net net_name -isolation_
     -no_isolation>
     [-elements list] [-clamp_value <0 | 1 | latch
     [-applies_to <inputs | outputs | both>]
  #定义隔离单元控制方式
  set_isolation_control isolation_name
     -domain domain_name
     -isolation_signal signal_name
     [-isolation_sense <high | low>]
     [-location <self | parent | sibling | fanout | automatic>]
  #插入保持寄存器
  set_retention retention_name
     -domain domain_name
     <-retention_power_net net_name | -retention_ground_net net_name |
     -retention_power_net net_name -retention_ground_net net_name>
     [-elements list]
  #定义保持寄存器的控制方式
  set_retention_control retention_name
     -domain domain_name
     -save_signal {{net_name <high | low | posedge | negedge>}}
     -restore_signal {{net_name <high | low | posedge | negedge>}}
  #移位寄存器的插入
  set_level_shifter level_shifter_name
     -domain domain_name
     [-elements list]
     [applies_to <inputs | outputs | both>]
     [-threshold value]
     [-rule <low_to_high | high_to_low | both>]
     [-location <self | parent | sibling | fanout | automatic>]
     [-no_shift]
  
  多电源域逻辑综合对扫描链的要求
  1、尽可能减少跨电源域的扫描链路径,如果跨电源域的扫描路径不能避免,要自动插入移位单元并考虑对时序的
    影响。
      2、尽可能将scan path限制在一个电源域内,这样可以在扫描测试时,一个电源域内的扫描链单独工作,避免所有
    寄存器同时工作,芯片热量过大。

  
  对always-on网络的综合
  在门控电源的电路中,电源控制相关信号如电源开关信号、隔离控制信号、保持寄存器控制信号在电路断电时也
需要保持上电。这部分的电路被称做always-on网络,它与其它单元完全一样,只是电源是连在always-on电源网格上。
这部分工作现在已经可以由工具自动完成。综合工具可以自动识别这些单元,并从库中找到标有always-on属性的单元
用于电路网表中。尽管工具可以自动完成这一步骤,我们还需要在最后的电源验证中,检查这些控制信号通路是否连在
一直上电的电源上。

*多电压设计中的多边界条件优化
  现代SOC设计中,一个芯片有多种工作模式是很正常的了。在多电压域设计中,又引入了多种工作电压、性能等级
和各种低功耗模式。这些增加的工作模式又会工作在各种PVT(process,voltage,temperature)条件下。这些模式和工作
条件组合,形成了各种我们称之为“场景”(scenarios)的工作状态。在实现的过程中,我们要对每一种场景进行分析
与优化。
  在单电压电路设计中,我们的最差边界(对于建立时间)是最低的电压、最高的温度、最差的工艺条件。但在多电压
多频率设计中,系统的最差边界可能就不是在工作条件窗口的边界,而是在电压和频率的某一个组合值中。确定这个最
差边界的过程可以由EDA工具完成,工具需要工作在设计者指定的多种工作模式和边界条件下,在这些“场景”中确定
最差边界。这会消耗相当长的设计时间。
  在实际多边界、多模式技术中,我们需要在最优结果和设计时间中取得平衡。定义全部的工作模式和边界会消耗
工具大量的优化时间也不一定能得出最优化的结果。一般来说,指定某几个特定的边界约束条件(SDC)进行优化设计,
最后在sign-off前用更复杂的工作模式、边界条件做STA分析是比较好的方法。


*设计布局规划
  设计规划是低功耗设计最重要的一个步骤,是整个设计环节中会面对最主要设计挑战和可能对设计结果带来最大负面
影响的地方。设计规划确定芯片的全局拓扑结构。一般来说,全局拓朴会由许多因素决定,包括IO PAD的位置、存储器系
统的位置和其它硬IP的位置。这些都限制了设计者对布局的自由度和灵活度。从低功耗角度出发考虑布局不要给原有的布
局规划带来不必要的约束。
  创建电压区域
  在这一环节,我们要在物理版图上为逻辑上的电源域创建电压域。同一电源域的单元将会尽量放在一起,方便电源
网络的有效布线。
  各个电压域的之间的相对位置关系要尽量保证各电压域接口这间有效的连接,避免跨其它电压域信号走线。和大多
数设计规划的任务一样,电压域的确定是一个需要反复迭代的过程,需要尝试各种形状、尺寸以达到最适合的电压区域。

我们建议每一个逻辑上的电源域都只有一个电压区域对应,尽管工具支持将一个电压域分成不相连的几个,但这样会增
加设计要考虑的因素。每一个电压域都需要有一个隔离带将其保护起来,与其它电压域隔离。设计中,逻辑上的电源域
可能会有不同电源域嵌套的情况,物理上的电压域要尽量避免嵌套,如果实在不能避免也要加上隔离带将其保护起来。
  移位器是另一个要考虑的布局规划因素。前面说过,移位器由于驱动的原因需要放在目标电压域内,而移位器的输
入是不能插入buffer的,长的无buffer的线可能会造成信号时序的问题。这就要求,所有的移位器都要尽量放在目标电
压域的边界上。这会造成潜在的问题。比如接口上有一个宽的数据总线,则总线上所有path移位器都要放在目标电压域
的边界上,这些移位器会把边界的位置资源用完,造成其它移位器不得不远离电压域边界。解决这个问题的办法可以是
加大电压域的边界,将移位器分散在边界上,这样也可以减小两个电源域中单元的物理距离。
  电源开关的拓朴
  门控电源开关有不同的拓朴结构,第十四部分会有详细介绍。
  大多数电源网络会设计成网格状。一般现代的工具会提供两种方式在电源网络上摆放开关,一种是指定x、y增量,
工具则均匀地在电源网格上摆放开关。另一种方式是告诉工具一个设计目标(提供电流能力或IR drop),工具会尝试各
种布局,然后给出多种方案供设计者选择。
  开关的尺寸和位置是决定电源网格IR drop的关键,同时也决定着时序路径的延时大小。UPF中,开关由下面指令描
述:
  create_power_switch switch_name
     -domain domain_name
     -output_supply_port {port_name supply_net_name}
     {-input_supply_port {port_name supply_net_name}}*
     {-control_port {port_name net_name}}*
     {-on_state {state_name input_supply_port {boolean_function}}}*
     [-on_partial_state {state_name input_supply_port {boolean_function}}]*
     [-ack_port {port_name net_name [{boolean_function}]}]*
     [-ack_delay {port_name delay}]*
     [-off_state {state_name {boolean_function}}]*
     [-error_state {state_name {boolean_function}}]*
  过冲电流的管理
  开关同时打开引起的过冲电流可能会造成电源网格上的电压尖峰,这个电压波动可能会破坏域中保持寄存器中的状
态或相临电源域中的数据值。
  一个有效的办法是把这些开关分组,并把各组开关的开关信号用buffer串接起来形成一个菊花链,这样一组内的开
关同时打开,各组之间会有一个相对延时,避免同时打开造成的过大的过冲电流。每个开关组的大小决定着上电速度和
电源噪声的平衡。

  几点建议
  1、电压区域应该用保护带隔离
  2、一个电源域中的单元尽量摆放在一个电压区域中
  3、在物理实现中增加的新单元要确保放在适合的电压区域中,并和正确的电源网络相连
  4、直接穿过一个电压区域的路径上避免在优化过程中和design rule fixing中加上新单元
  5、隔离单元和移位单元尽量放置在电压区域边界上,使得其对时序的影响最小
  6、尝试不同的开关拓朴结构,选择对于当前设计最优的,并且考虑电源走线对开关拓朴的影响

*电源网络设计
  设计布局规划后就可以考虑电源网络的设计。电源网络设计的一个主要原则是减小网络上的压降。而低功耗引进的
各种技术都会不利于这个原则。
  当代EDA工具都会提供某种程度上的电源网络综合(power network synthesis PNS)的自动化设计。设计中要尽量利
用这个功能分析许多互相影响的因素(如压降、布线资源等),手动设计很难达到最优结果。
设计时,可以给PNS施加一
定约束,如最大压降、布线层次、穿孔的使用等。PNS会自动分析,并给出全局压降分析和电迁移分析结果。
  电源开关晶体管的电源网络设计包括三个部分:永远上电的电源网、一个虚拟(受控)电源网和开关晶体管本身。这
部分网络的设计要考虑压降、布线资源和面积的因素。在以前的设计中,这部分工作都是手工写脚本插入和布局的,现
在的PNS工具已经可以自动这些因素,完成电源开关网络的布局和设计。
  一些建议:
  1、使用支持开关单元的工具完成开关网络的设计、插入和布局
  2、在开关网络上运行静态和动态IR Drop分析,验证电源完整性
  3、动态的IR Drop问题可以通过插入滤波电容修复。精确的瞬态分析可以得到上电过程的I-V特性,保证没有动态
    电源波动问题
  4、遇到任何IR Drop问题,尽量在永久上电的电源网络中修复。对开关单元、虚拟电源的改动都要重新进行唤醒延
    延迟分析和峰值电流分析。
  5、运行唤醒过冲电流分析,检查唤醒延迟和最大过冲电流是否满足要求。对于小规模设计,这可以通过SPICE仿真。
    对于较大规模可以用专用电源分析工具完成
  6、运行动态IR Drop分析还可以分析电压尖峰是否会对相临电源网络产生干扰
  解耦电容的引入
  电源和地之间、电源和电源之间都会有因为电路工作、电源开关而引起的噪声,这些噪声会危害到电路的正常工作,
插入解耦电容是通常解决办法。电源开关的打开会引起较大的电源、地的噪声(尽管有菊花链可以减轻这种现象)。这些
噪声会耦合到相临的上电区域。在永久上电的电源域中加上一定电容,会有效解决这个问题。电容的位置放在靠近开关
的地方效果最好。
  除了这种噪声,电路工作的翻转也会引起电源的噪声。解决的办法也是在电源、地之间加入滤波电容。但是,一方
面,在90nm工艺下,滤波电容的静态漏电会显著增大;另一方面,如果是在门控的电源网络上,大的滤波电容会造成唤
醒时过大的过冲电流和长的上电延时。因此,在加这些电容时,要分析出电路中翻转的热点,在热点附近加入适当的电
容。现代的EDA工具可以自动分析这些滤波电容的插入方式。

  建议:
  1、在永久上电的电源域中,离相临开关域中开关最近的地方加尽可能多的解耦电容(主要受漏电和面积约束),
可以达到最大的滤波效果。将这些电容和开关单元集成在一起可以使设计方便。
  2、尽量避免在虚拟电源中加入解耦电容,如果动态IR drop严重,一定要加解耦电容,则只在有电压波动最大的地
方加入适量的电容即可。


*时钟树综合
  时钟树会消耗大量的功耗(可能会超过芯片功耗的一半),在常规电路中会用到门控时钟和减小时钟树延迟的办法
减小时钟树功耗。对于多电压系统的时钟树设计,又会有一些新的考虑。
  如果系统中只有一个时钟,则这个时钟有可能会跨多个电压域,电压的变化会造成时钟树延迟的变化,如果数据和
时钟的延迟没有很好的平衡,可能会对时序造成问题。
  如下图,数据路径在VCPU和VRAM电压域中有buffer缓冲,而时钟路径单元主要在VRAM域中。当两边电压一致时,
假设时钟在两个域中skew达到最小。则当VCPU域电压下降后,VCPU域中数据、时钟路径延时变大,而VRAM域中延时
没变,则可能会造成时钟skew变大,出现setup规则违反。
  
  图二
  为了解决这个问题,现代的EDA工具可以意识到这个问题,会采取一种自低向上的时钟树综合办法。先在每一个电
压域中做时钟树综合,保证skew最小,再将这些各个域中的子时钟树拼接在一起形成完整的时钟树。这种办法帮助在同
一电压域中缓冲数据路径同时缓冲时钟路径,也避免了时钟在各个域中来回跨越。每次跨越就会引入一个移位器,会加
大时钟延迟。


*布线
  现代的布线工具已经可以意识到低功耗的要求,自动完成布线,但还有一些细节需要注意。首先在电压域划分和
布局时就要考虑到布线的可能性,特别是总线和一些全局控制网络。
  如果一条最佳的走线要穿过一个或多个电压域,则可以有两个办法:
  1、在每个电压域中加入移位器
  2、绕过这些中间电压域布线
  第一个方法会增加在这条路径上增加面积、功耗、延时。第二个方法也会增加延时,但相比之下还是好于第一种。
两种办法都会带来不好的影响,因此在设计中还是用避免这种情况出现。在布局规划的早期就应该考虑避免这种情况,
虽然完全避免是不可能的,但尽量考虑周全还是必要的。


*电源分析
  完成上面工作后,就要考虑验证分析电源网络完整性了。两个方面要重点分析,一个是逻辑单元上的电压降,另一个
是门控电源上电时的过冲电流。
  粗粒度的电源网络分析在电源布局规划时就做了,这里主要分析细粒度的,局部电路的功耗热点。现代的实现工具
为了实现性能的目标,倾向于将相关的寄存器、时钟门单元、时钟树缓冲单元集中在一起,这会恶化动态工作时电源的
波动。由于这时,电路已经固定,不能再改变,只有改变这一区域开关管和电源网络的尺寸是最好办法。
  电源网络分析可以给出每个单元上的电压下降情况,我们可以根据这一信息,在电压下降不能接受的地方增加开关
单元或加大电源线。电路中每个单元的电压下降信息还可以用于最后的sign off时序分析。
  对于唤醒过冲电流的分析,则需要在各种条件、情况下进行大量的瞬态分析。从而达到唤醒时间和过冲电流的平衡。

*时序分析
  在多电压系统设计过程中,我们是在众多工作环境(不同模式+边界条件)中选择了其中几个进行设计实现的。现在
我们期望我们当时选的刚好是最好和最差的工作环境,这样这个设计就可以适应所有可能的工作环境了。signoff的静态
时序分析就是要确认这一点,因此这时需要把所有可能的工作环境约束都用来验证设计,包括所有必须的工艺库。工艺
库中的单元需要有所有工作环境下的时序模型。这个静态时序分析的时间可能会比不是低功耗设计的项目要长许多。
  在芯片生产过程中,工艺会或多或少有漂移,造成同一芯片中不同区域的电阻、电容值会有微小的区别。这有可能
会影响到timing。保守的做法是在每一种工作环境约束里加一点余量,以抵消这种片上不一致性(on-chip variation,
OCV)。OCV可能会造成数据路径和时钟路径往相反的方向变化,比如造成路径延时加大,同时时钟路径延时变短。

*低功耗相关电路验证
  这里要保证低功耗相关的电路是否和设计初衷一致。
  这个工作可以通过三种方式:
  1、门级仿真
  2、一致性检查
  3、基于规则的方法
  门级仿真可以确认电路功能是否正确,包括验证上电后复位电路是否正常、可以进入不同睡眠模式、下电过程正常、
下电后上电功能正常。一致性检查可以最后的门级网表等效于原始的RTL加UPF代码。基于规则的检查工具可以检查最后
网表的电源网络是合理的。它可以检查是否放置了隔离单元和移位单元、一些需要保持上电的单元-保持寄存器、隔离
单元、相关控制信号等-是否是连在永久上电的电源中。还可以用这个工具检查是否有冗余的隔离单元和移位单元。

*生产测试
  在设计和实际应用中,芯片都是工作在各种低电压、低功耗的模式。但在测试模式下,芯片会工作在正常电压模式
下,会造成芯片消耗比应用时多得多的功耗。如果芯片的封装只是考虑到正常低功耗的模式,那么在测试时的高热量可
能会损坏芯片和封装。另外,增加的热量也会导致芯片中过大的电压降,造成功能失败。因此,在多电源系统设计时就
要考虑到测试的这个问题,设计好测试模式。
  另外,在90nm工艺以下,路径延时测试(delay fault testing)是和电压、频率密切相关的,关键路径在不同的工作
模式下还会发生变化。每一个芯片性能等级下都会有相应的关键路径。
  自动化的生产测试要在芯片的各种电压模式、速度模式下和高低温模式下测试stuck-at故障和延迟故障。保证测试
的覆盖率同时还要降低测试成本是一个复杂的问题,需要针对不同的应用,进行不同的折衷。


(这一部分内容挺充实,涉及到多电源系统实现的许多具体环节。现在的EDA工具已经可以自动化完成大部分的工作,但
还是要清楚工具干了什么,用什么方法实现的,才能够灵活应用。下一部分要介绍另一个重点了,单元库对低功耗设计
的支持。)
 楼主| 发表于 2010-5-7 13:12:02 | 显示全部楼层
第十二部分 物理单元库
  多电压低功耗设计首先解决的就是有适用于低功耗技术的单元库和存储器编译工具。这一部分介绍低功耗设计技术
对单元库和存储器编译工具的要求。
  
标准单元库的分类
  单元库一个重要的属性是它的单元高度值,用tracks描述。一个track是metal1的中心距距离,一个8-tracks的标准
单元表示单元高度的空间可以有8条水平metal1穿过。这个属性值表示了单元库的速度和可布线性能。
  高度值大(11-12 tracks)的单元库有更大的驱动能力(性能)、更好的布线性能,同时也会有最大的静态功耗。
     高度值低(7-8 tracks)的单元库应用于面积小、性能要求不高的设计。
  一般高度值(9-10 tracks)的单元库在面积效率、性能之间取得平衡。适用于绝大多数设计。
  库单元还可以分为单元引脚兼容、不同域值电压的版本。
  高域值(high-Vt)库有最低的静态漏电流,但也有最慢的速度。它适用于时钟速度要求不高的应用。
  低域值(low-Vt)库有最快的工作速度但漏电流也最大。
  标准域值库介于二者之间。
  每种域值库生产时都会增加一层光照掩膜成本,为最后产品的性能增加了一定的不确定性。因此设计者一般一次只
使用两种版本的域值库单元。
  另外,单元库中的低功耗优化方式还包括长沟道器件单元、串联晶体管单元等
标准单元库的模型
  单元库建模的目的是方便实现和验证工具使用库单元的各种信息而不用了解单元库底层电路具体的实现方式(具体
实现方式可能是商业敏感的)。单元库的各种模型(view)就是把单元库的各种特征抽象出来。这些views包括:引脚接口
模型、功能模型、时序模型、功耗模型、测试模型等。EDA工具可将这些信息用于综合、布局、布线、寄生参考提取、
布局后时序分析等而不用了解单元具体的电路实现。在最后生产时,再将单元的真实版图实现替换进来,形成最后用于
tape out的版图。
  同样,用于多电压低功耗设计流程的单元库也要提取低功耗设计流程所需要的模型信息。

标准单元库的特征提取
  一般来说单元库的特征提取会根据工艺、电压和温度条件分为最坏(最慢的工艺参数、最低电压主、最高温度)、最
好(最快的工艺参数、最高电压、最低温度)、典型情况等。最坏情况参数用于setup约束检查,最好情况参数用于hold
约束检查。
  这种单元库的特征提取在90nm工艺下变得更加复杂,90nm以下连线的阻抗会变得更加突出,会增大到比驱动门的输
出阻抗更大。连线的延时会变得更加重要。
  
  温度反转
  在常规工艺中,门延迟和温度会成正比变化。但在90nm工艺下,在低VDD或低信号翻转电平下,随温度升高门延迟会
减小。这种现象称为温度反转(temperature inversion)。

  这种现象的物理原因很复杂,但可以有一个直观的解释。门延迟取决于饱合电流IDSAT。IDSAT越大,门延迟越小。
IDSAT随载流子迁移率线性变化,随VDD-VT平方性变化。当温度增加、迁移率减小,但由于VT随温度变大减小,电压余
量VDD-VT变大,抵消了由于迁移率减小对电流造成的影响,使得电流表现为增大,延时表现为减小。在常规工艺中,温
度对迁移率的影响占主导作用(由于电压余量较大,微小的变化可以忽略),表现为延时随温度变大而增加。在深亚微米
工艺下,VDD显著减小,电压余量小到VT微小的变化也可以显著影响到IDSAT。VDD越小则温度反转现象越明显。  
  温度反转现象也依赖于信号翻转,信号翻转得越慢,温度反转现象越明显。因此,在一个电路中,同一单元在有同
的路径下的温度反转特性都是不同的。这需要在计算延时时,对电路中每一条通路都分析其温度反转特性。
  
  新的库时序模型
  在多电压系统设计下,芯片上的工作电压是随时在较大范围变化中的。传统的给定电压下延时信息的库模型已不再
适用。传统的延时模型是一个时间相关的带一个串联电阻的电压源,这种模型很不准确。新的延时模型是一个复合电流
源(composite current source,CCS),单元门输出建模为一个时间、电压相关的电流源,具有无限大的驱动电阻。使用
这种模型可以很精确的计算在指定电压下每个例化单元的延时值。(这里不是很明白)
  电流源模型也可以用于表示温度反转效应,但还不能精确计算。找到电路worst case的温度点还是一个难题。

库中特殊单元-隔离单元
  隔离单元用于将断电模块的输出端口信号钳位到固定电平。有三种钳位方式:
    输出钳位到0,使用NAND逻辑门
  输出钳位到1,使用NOR逻辑门
  输出钳位到上一次有效值(内部有一个保持锁存器)。这种隔离单元的一个例子如下图所示:

  图一
  保持latch由RET信号控制,RET信号在逻辑门下电前触发latch保存当前输出值,然后ISOLATION信号使能MUX输出锁
存器值。
  
  输出隔离VS输入隔离
  在模块输出端隔离相对在目标模块输入端隔离有几大优势。
  *对于一个输出端口连接多个模块的输入时,只需要插入一个隔离单元。
  *输出隔离时,所有的隔离单元可以共用一个隔离控制信号。避免了隔离控制信号的分散布线。
  输出隔离也有一个问题。它需要一个常开的电源网络供电,在与门控电源模块一起布局时需要一个特殊的电源开关
将其电源与其它标准单元电源分开。这需要特殊的物理版图设计。
  
  潜在的直流漏电路径
  这里说使用输出隔离单元可能会有潜在的漏电路径,如下图所示:

  图二
  输出被钳位到0,并驱动目标模块的异或门,当异或门另一个输入为1时,一条穿过中间传输门、最后穿过隔离单元
下拉NMOS管的漏电路径就产生了。虽然不是直接路径导通,但传输门的漏电会比较大。(这里有个疑问,这个漏电路径
和输出是不是隔离单元应该没什么关系,一般的输出门也会有这样的漏电路径啊!是不是搞错了?)。反正建议说,商
业化的单元库不会用传输门做单元的输入,由于功耗和其它一些原因。
  几点建议:
  *输出端隔离好于输入端隔离(更少的隔离单元和更简单的隔离控制)
  *如果库中没有定制的隔离单元,标准的与/或门也可以使用。但保持上电的电源网络一定要在可能断电的电压域附
   近,用于隔离的标准单元一定放在保持上电的电压域中
  *隔离单元只在必要的地方插入。因此需要分析相临电源域的逻辑关系。如果是会同时上电/下电的模块,二者之间
   就不必插入隔离单元
  *在布局和物理综合中,应确保隔离单元放置在电压域的内部且在边界上,保证隔离单元的输出不会在插入其它单元
   否则隔离单元起不到隔离的作用
  *传输门逻辑不应在两个电源域接口中应用以防止可能的直流漏电路径
  *建议检查电源域的输入接口单元,避免可能存在的漏电路径

库中特殊单元-移位单元
  移位单元用于两个不同电压域之间电平移位,其中高电平移向低电平较容易,反之有一些复杂。
  当高向低转换时,要求高电平不超过低电平平均电压的25%以上,过高的电压可能会导致时序问题。高向低转换的移
位器可以就用一个inverter或buffer实现。移位器放置在低电平域中,其栅上可以耐一定的输入过压,输出转换为低电
平。这样的移位器建立库模型时,一定要用真实的输入/输出电压计算延时等信息。
  低向高电平转换时需要一个专用的移位单元。下图是一个简单的低高转换移位器,输入和输入反向驱动一个放大器。

  图三
  低高转换的移位器单元设计要注意单元中两个不同电压域的N阱要分开,不同电压域N阱的间隔有特别的设计规则,
需要的间隔空间更大。由于移位单元也要和其它标准单元物理布局上排在一起,因此高压的N阱在单元的周围,低压部
分的N阱则在高压N阱内部且有较大间隔,同时N阱又要兼容标准单元的N阱位置,这些造成低高转换移位器单元的高度较
大(多个标准单元高度)。
  下图是一个低高转换移位器的版图实例,它有三个标准单元高度。它可允许在高压域中灵活的布局,可以兼容标准
单元的N阱位置,也可以根据需要上下翻转。它里面有一些空间空闲是为了兼容标准单元的电源、地布局。这样可以使
设计流程不变,不用增加特别的脚本处理它。
  
  图四
  这种低高转换单元还可以集成隔离单元,如下图,隔离使能时,可以输出钳位为0,低电压域断电后,其输出悬空
也不会造成高电压域的漏电流。

  图五

存储器
  一般来说存储器是由编译器自动产生的,编译器可以产生下面几种存储器架构:
  *单端口或多端口RAM
  *RAM阵列或寄存器组
  *性能优化的RAM
  *面积优化的RAM
  *功耗优化的RAM
  存储器性能和面积取决于位单元和bank结构,bank容量小可以使访问速度加快,但bank数增多也会加大面积。存储
器也可以用不同域值的晶体管实现,针对性能优化可以用低域值的晶体管,针对功耗优化可以用高域值的晶体管。
  在90nm以下,RAM几乎没有电压下调空间。在电压缩放设计中,一般外围的标准单元逻辑工作电压要低于RAM电压,
因此RAM的输入端口需要有低高转换移位器,输出电平需要高低移位器。在外围电路断电时,输入还需要隔离单元。
  由于RAM通常时时序上的关键路径,插入的移位器和隔离器需要尽可能靠近RAM单元,这样可以避免RAM时钟信号和其
它数据、控制信号的过大延时差。移位器、隔离器和RAM本身通常做为一个整体做时序信息的提取建模。如果RAM编译器
不支持这些低功耗接口单元,最好的办法是将RAM和这些离散的单元封装在一起,作为一个单元来分析。
如果多个RAM都
需要接口单元,可以使这些RAM共享接口单元,以节省面积。但这样又会使外围的RAM信号连线过长,时序不易收敛。
  有几种办法可以降低RAM保持数据时的静态功耗,这些在第十三章中介绍。

门控电源策略和结构
  按开关管的域值分,两种常用的门控电源开关为MT-CMOS(高域值)、MV-CMOS(低域值)。
  其中MV-CMOS使用低域值开关管开关电源,为了减小它的漏电,其栅上的驱动电压要高于VDD(上位开关)或低于VSS(
下位开关)。这就需要它的控制信号的电源供给是独立于VDD、VSS的电源网络,造成实现上的困难。因此这种方法在商用
产品很少被用到。本书中的门控开关为MT-CMOS。

  门控开关结构
  重新考虑粗粒度电源开关还是细粒度开源开关。
  细粒度电源开关结构在每个标准单元上串入一个电源开关门(上位或下位),由于这个开关管要提供足够的电流供单
元正常工作,它的面积一般设计得很大,可能是单元门的几倍大小。因此,一般这种结构都使用下位开关,因为同样尺
寸的NMOS管比PMOS管有更小的导通电阻。
  为了进一步减小面积,细粒度电源开关可以只用在低域值、高泄漏的逻辑单元里。为了在电源关断时隔离这些单元,
在输出上使用了弱上拉/下拉管,使输出电平不会悬空。

  细粒度电源开关的优点:
  *对电源的开关噪声不敏感。开关隐含在每个单元中。
  *由于电源开关网络细化,上电延迟、过冲电流均很小
  *内建钳位晶体管,避免了上电时中间电平造成的过大crowbar电流
  *可以用常规EDA工具和流程处理。单元内的开关管的特性可以精确建模建库
  缺点:
  *面积增加大,一般来说可增加原3倍面积
  *需要定制的单元库
  *开关控制信号需要大量的缓冲和布线资源

  粗粒度电源开关是一组电源开关跨接在常通电源和虚拟电源间,控制虚拟电源的接通与关断。
  粗粒度电源的优点:
  *由于开关管可以共享充电/放电电流,它对于PVT的变化更不敏感,并且有更小的IR drop。
  *相对于细粒度增加更小的额外面积。开关管的数目可以根据工作速度、负载的要求等优化。
  *可以利用现有的单元库,只需要增加几个特殊单元,如开关管、移位单元、隔离单元等。
  缺点:
  *复杂的电源网络设计(常通电源、开关管、虚拟电源等),需要严格的静态、动态IR drop分析。
  *上电时间长
  *增加STA和功耗分析的复杂性
  *更复杂的设计方法和流程(逻辑综合和物理综合)
  综上所述,绝大多数设计都不能接受产品面积的显著增大,因此大都采用了粗粒度开关的设计方法。

门控开关单元
  支持门控电源开关的单元库应该包括上位开关和下位电源开关单元。这些单元有一系列的尺寸和驱动能力,以适应
不同的开关网络设计。
  一个开关单元物理上由多个开关晶体管并连而成,具有优化过的最大开/关电流比(Ion/Ioff)。
  电源开关的布局将不同尺寸的开关单元分散跨接在全局电源网格和虚拟电源网格间,最大化的共享开关间的充放电
电流。同时打开这些开关产生的过冲电流和电压波动会破坏保持寄存器中的状态或相临电源域中的逻辑值。因此在打开
开关网络时可以先打开一些小尺寸开关充电,等电压上升到一定幅度时再打开整个开关网络。这涉及到实现中要决定先
打开多少开关并且以怎样的拓朴,这些问题在下一章介绍。

门控电源的标准单元库
  在粗粒度的电源开关设计中,我们利用了标准单元库,这其中一个关键问题是分析开关上的压降对标准单元延时的
影响。最后落在标准单元上的压降是和设计、实现等相关的,因此有两个方法对这个问题进行分析:
  *在设计时忽略IR压降对标准单元的影响,过约束(over-constrain)设计目标频率。这在早期的综合分析中还没有考
虑功耗问题时是合适的。
  *先设一个合理的IR压降值,并且使用支持电压下降的时序单元库进行时序分析。然后在后端分析中,确保真实的IR
压降没有超过我们预先设定的值。这可以通过先用大尺寸的开关实现,再逐步减小开关尺寸的,直到电路中的"热点"区域
压降首先达到预设值的办法。
  注:门控电源的设计一般比非门控电源的设计频率低5%-10%。实现过高频率的"野心"将会造成向设计中放入大量的电
源开关来满足时序要求。

(这一部分介绍了支持粗粒度电源开关低功耗设计对单元库的要求,可以看到在标准单元库的基础上还是有大量的工作要
作的,增加了若干种不同功能、尺寸的单元,增加的低电压时的单元时序信息等。下一部分介绍了具体保持寄存器和数
据保持存储器的设计)
 楼主| 发表于 2010-5-7 13:19:40 | 显示全部楼层
第十三部分 保持寄存器设计
  这一部分内容比较独立,介绍了三种最常见的保持寄存器的设计方法、各自优缺点和两种低功耗保持存储器的实现
方法。
 
保持寄存器一:单控从锁存保持(自己翻译的,原文是single pin live slave)。
      使用单一保持/恢复控制引脚,对原触发器改动最小。如下图:

  图一
  这是一个具有扫描控制端的D触发器设计。其中输入有深色条的器件为低域值器件。其中前级的主锁存器在CK为低时
采样输入数据,低域值管可以优化setup/hold要求。在CK反相时,从锁存器锁存主锁存器的输出。最后一级反相器的尺寸
决定了寄存器的输出驱动能力。
  为了实现下电数据保持,进行了如下改动:
  *保持信号与时钟"与"操作,保证下电时,时钟是关闭的。
  *从锁存器由主电源网络供电,其余部分由虚拟电源网络供电,因此从锁存器数据得以保存。
  *主电源网络供电部分电路用高域值管实现,以降低漏电流。
  
  这种方式的优点:
  *对原寄存器结构改动最小
  *只有一个控制端口
  缺点:
  *从锁存器的性能有下降,性能与低漏电流功耗有折衷
  *时钟信号上引入高域值与门,对hold约束不利。而且这个与门尺寸不能太小,要保证后级低域值管输入的
transition时间
  *在保持和恢复时,要保证时钟电平状态为低。

保持寄存器二:双控扩展保持寄存器(dual control signal "balloon" retention register)
    这种保持寄存器保持了原先寄存器的性能,增加了一个连接在主电源网络上的高域值管锁存器(影子锁存器或气球
锁存器)来保持原寄存器中的数据。如下图:

  图二
  当"SAVE"使能,从锁存器的数据被保存在影子寄存器中。"NRESTORE"为低时,保持的数据恢复到主锁存器中。这种结
构下,数据保存时,时钟应先停止。图中这种结构的保持寄存器在数据恢复时,可以不管时钟的工作相位。如果时钟为
低,主锁存器打开并采样,则待恢复的数据恢复到从锁存器中。如果时钟为高,待恢复数据则可恢复到主锁存器中,在
下一时钟反转时存入从锁存器中。
  这种方式的优点:
  *最小的静态功耗,用于保持的锁存器可以设计得漏电流尽量小
  *对原寄存器的性能影响最小
  *数据恢复时可以不依赖于时钟相位
  缺点:
  *寄存器面积相对增加大
  *使用了两个控制信号,增加了额外的缓冲路径
  *双端口控制增加了一些系统设计复杂度
  另外由于复位信号(同步或异步)网络的电源也会关断,因此要保证复位信号只用于主/从锁存器上。在恢复数据前
复位信号要先稳定下来。

保持寄存器三:单控扩展保持寄存器(single control signal "balloon" retention register)
  相对于前一种保持寄存器,两个控制信号变为一个,即在控制信号一个电平时保持,另一个电平时恢复。如下图:
 
  图三
  与前一种结构类似,不同的是在"NRETAIN"为高时保持锁存器一直对从锁存器采样,"NRETAIN"为低时保持锁存器保
持数据并对向主/从锁存器恢复数据。
  这种方式的优点:
  *最小的静态功耗
  *对原寄存器的性能影响最小
  *恢复时不依赖于时钟相位(有利于复杂时钟设计)
  *单控制信号,降低了控制信号路径上的动态功耗和面积
  缺点:
  *相对原寄存器,面积增大了一个保持锁存器
  *正常工作时,动态功耗会略微增大(因为保持寄存器一直在对从锁存器数据采样)
  最后,从版图上看,增加了一个保持锁存器,相对原始标准寄存器,面积增加了30%-40%。

存储器保持数据设计
  在一些要求快速上电的应用中,存储器中的数据需要保持住。有几种存储器保持数据的方法。这些方法的原则就是
在不破坏数据的前提下尽可能降低工作电压。
  在存储器中使用前面提到的保持锁存器的方法是不现实的。经常使用的方法包括VDD保持法和源极偏置法。
  VDD保持法
  这种方法就是在存储器原先的电源网络基础上再增加一条电源网络(或者可缩放的电源)。存储器正常工作时使用标
准的电压,在需要数据保持时,电平降至0.5-0.6V,以降低静态功耗。
这种方法不用修改存储器电路,但需要精心设计
的电源网络。
  
  源极二极管偏置法
  这种方法的原理就是在降低工作电压的基础上再加上衬底的反偏电压的作用,进一步降低漏电流。源极偏置最简单
的方法就是源极二极管偏置法。如下图所示:

  图四
  一个由开关控制的二极管接法的MOS管连接在存储器cell和VSS之间。在正常工作时,开关关闭,存储器在满电压幅
度下工作。在保持模式时,开关打开,则存储器工作电压降为VDD-VT,同时存储器cell上的NMOS管也加上一个衬底反偏
电压,进一步减小静态漏电流。
  同样的原理也适用于cell中的PMOS管。可以同时在VDD、VSS上串接一个二极管。进一步降低电压,这样会使工作电
压降低2个VT。在90nm下,工作电压本身只有小于1.2v,不适用同时串接两个二极管。因此多数情况下,只在VSS上使用
一个二极管。一般来说二极管的开关由一个高域值的NMOS管实现,二极管由一个二极管接法的NMOS管实现。
  这种方法的优点是容易实现,不需要一个额外设计的偏置电压。缺点是偏置电压不可调,不易实现最优的电压条件。

  源偏置的方法
  二极管偏置只能提供固定的偏置电压,如果需要精度更高的偏置电压,则需要提供一个独立的偏置电压源来替代二
极管。如下图:

  图五
  这个独立的偏置电压可以通过简单的片上分压器实现。

  减小存储器恢复时间的方法
  一些应用对存储器要求快速的访问,因此要求尽量短的存储器恢复时间,有两个办法可以实现这一点:基于块的
(block-based)保持唤醒和基于行的(row-based)保持唤醒。
  基于块的保持唤醒是将存储器分成若干小块,平时存储器整体处于省电保持模式中,一旦有访问请求,则译码单元
得到所有访问的块地址,并将该块恢复至正常模式,供外界访问。访问完毕后,再立刻将该块设于省电保持模式。由于
存储器被分为了小块,因此模式恢复的时间可以大大缩短。
  如果存储器块粒度划分得太细,则增加的面积和额外功耗会使这一方法得不偿失。因此建议块划分时统筹考虑存储
器类型、工作频率、访问速度等要求,得到最合适的方案。


  基于行的保持唤醒是按存储器中的行来分别进行模式切换,利用存储访问时,地址总会先于数据到达总线上,则该
方法只激活要访问的地址对应的行,其余的行仍处于保持模式。这种模式不用再将存储器分为任意大小的块,减小了面
积和功耗开销。根据不同要求,这种方法还可以扩展为基于多行的模式转换。

(这一部分比较好理解,要实现低功耗设计流程,库中需要支持这些单元和存储器模块。下一部分,也是本书最后一部
分,介绍了开关网络的设计)
发表于 2010-5-7 15:35:20 | 显示全部楼层
hao!!!!!!!!!
发表于 2010-5-8 22:44:46 | 显示全部楼层
thanks
发表于 2010-5-13 14:01:54 | 显示全部楼层
不愧是大虾阿
发表于 2010-6-8 17:50:56 | 显示全部楼层
LZ讲解的太好了
好好拜读下
发表于 2010-6-12 16:20:26 | 显示全部楼层
总结的太好了
发表于 2010-6-16 13:39:52 | 显示全部楼层
好文章,实在是受益匪浅!


1# eewater
发表于 2010-6-26 10:28:49 | 显示全部楼层
LZ太好了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /1 下一条

×

小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-11-20 02:37 , Processed in 0.022860 second(s), 5 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表