http://www.synopsys.com.cn/information/snug/2009/low-power-implementation-flow-based-ieee1801-upf 基于IEEE1801(UPF)标准的低功耗设计实现流程
Low-power Implementation Flow Based IEEE1801 (UPF)
郭军, 廖水清, 张剑景 华为通信技术有限公司 jguo@huawei.com liaoshuiqing@huawei.com zhangjianjing@huawei.com
Abstract
Power consumption is becoming an increasingly important aspect of ASIC design. There are several different approaches that can be used to reduce power. However, it is important to use these low-power technology more effectively in IC design implementation and verification flow. In our latest low-power chip, we completed full implementation and verification flow from RTL to GDSII successfully and effectively by adopting IEEE1801 Unified Power Format (UPF). This paper will focus on UPF application in design implementation with Synopsys low power solution. It will highlight that how to describe our low-power intent using UPF and how to complete the design flow. This paper first illustrates current low-power methodology and UPF?s concept. Then, it discussed UPF application in detail. Finally, it gives our conclusion.
Key words: IEEE1801, UPF, Low-Power, Shut-Down, Power Gating, Isolation, IC-Compiler
摘要
目前除了时序和面积,功耗已经成为集成电路设计中日益关注的因素。当前有很多种降低功耗的方法,为了在设计实现流程中更加有效的利用各种低功耗的设计方法,我们在最近一款芯片的设计实现以及验证流程中,使用了基于IEEE1801标准Unified Power Format(UPF)的完整技术,成功的完成了从RTL到GDSII的全部过程,并且芯片制造回来成功的完成了测试。本文就其中的设计实现部分进行了详细探讨,重点介绍如何用UPF把我们的低功耗意图描述出来以及如何用Synopsys工具实现整个流程,希望给大家以启发。本文先介绍目前常用的低功耗设计的一些方法特别是用power-gating的方法来控制静态功耗以及UPF的实现方法,然后阐述UPF在我们设计流程中的应用,并在介绍中引入了一些我们的设计经验,最后给出我们的结论。
关键字:IEEE1801, UPF,低功耗, 电源关断,Power-Gating, Isolation, IC-Compiler
1. 简介
1.1 深亚微米设计面临的挑战
随着工艺特征尺寸的缩小以及复杂度的提高,IC设计面临了很多挑战:速度越来越高,面积不断增大,噪声现象更加严重等。其中,功耗问题尤为突出,工艺进入130nm以下节点后,单位面积上的功耗密度急剧上升,已经达到封装、散热、以及底层设备所能支持的极限。随着工艺进一步达到90nm以下,漏电流呈指数级增加(如图1所示),在某些65nm设计中,漏电流已经和动态电流一样大,曾经可以忽略的静态功耗成为功耗的主要部分。功耗已成为继传统二维要素(速度、面积)之后的第三维要素。
图1: 静态功耗与工艺特征尺寸的关系
另外,目前飞速发展的手持电子设备市场,为了增强自身产品的竞争力,也对低功耗提出了越来越高的要求;其次散热问题、可靠性问题也要求IC的功耗越小越好;最后全球都在倡导绿色环保科技理念,保护环境,节约能源。这些都要求IC设计时必须采用低功耗技术,以有效应对这些挑战。
1.2 目前低功耗设计常用的方法
如图2所示,影响功耗的因素有电压、漏电流、工作频率、有效电容等。可以通过降低工作电压、减少翻转负载以及降低电路翻转率等来降低动态功耗;通过减少工作电压以及减少漏
图2: 影响功耗的因素
电流来降低静态功耗。当前,业界采用了各种方法来降低芯片的动态功耗和静态功耗。如图3所示,传统的低功耗技术有时钟关断(Clock-Gating),多域值电压库(Multi-threshold libraries)等;较新的技术有多电压(Multi-Voltage),电源关断(MTCMOS Power Gating),带状态保持功能的电源关断(Power Gating with State Retention),动态电压频率调整(Dynamic Voltage and Frequency Scaling),低电压待机(Low-Vdd Standby)等。
图3: 低功耗技术示例
1.3 控制静态漏电的方法
1.3.1 电路优化(Gate-level Optimization)
在设计实现过程中,自动化的综合和布局布线工具可以根据电路的时序特征,来综合优化每条路径中用到的所有标准单元的时序,面积以及功耗。根据负载将非关键路径中的标准单元切换到具有较小驱动能力的单元,由于输出电容减小,可以减小动态功耗;同时,由于标准单元MOS管和电容变小,静态漏电流也同时减小。除了变化驱动能力之外,还可以通过优化电路中的逻辑单元、移动单元物理位置等方法来达到降低功耗的目的。
1.3.2 多域值电压库 (Multi-Threshold)
如图4所示,高域值电压的标准单元漏电流小但速度慢,低域值电压的标准单元则速度快但漏电流大。所以采用多域值电压库作为设计实现的目标库,在设计中尽可能多地用高域值电压的标准单元,仅在关键路径上为了满足时序要求采用低域值电压的标准单元,这样就可以最大限度地减小标准单元的漏电流,从而降低静态功耗。
图4: 漏电流、单元速度与阈值电压三者之间的关系
1.3.3 电源关断 (Power-Gating)
芯片中某些模块在不工作时,可以关断其电源,在需要工作时,再将其电源导通,这就是电源关断技术。它可以使电源关断区域的漏电流降至接近零,极大的减小芯片的静态功耗。现在电源关断的技术也很多,有片内关断、片外关断。顾名思义,片外关断就是在芯片外部通过切断电源来关断芯片内部的某些模块。片内关断又分为精细关断(fine-grain)和粗糙关断(coarse-grain),精细关断需要特别库的支持,可以实现每
个标准单元的精细关断;而粗糙关断只需要一些门控单元就可以实现对某些模块的电源或地的控制,如图5所示,用pmos来控制电源,用nmos来控制地。
图5: 电源关断(Power-Gating)的原理图
2. UPF的设计实现流程
IEEE1801标准Unified Power Format(UPF)是一个真正意义统一的,被广泛采用的低功耗实现标准。它用一些标准的语句描述用户的低功耗设计意图(Power Intent)。如图6所示,
图6: UPF的应用流程
有了这样一个统一的UPF文件,逻辑综合、物理实现、仿真验证、等效性检查以及最后的sign-off流程就可以按照UPF中对低功耗设计意图的描述来完成整个IC设计实现验证流程。这样贯穿于整个流程的低功耗意图来源于同一个文件,这种一致性可以大大降低低功耗设计的风险性。并且UPF对低功耗设计提供了开放的,多厂商工具支持的流程和解决方案。众多支持UPF标准的EDA供应商的产品证明了它是一个互操作性强的标准。
2.1 Synopsys基于UPF的低功耗设计流程
Synopsys公司提供了完整的基于UPF的低功耗综合、物理实现和验证流程,如图7所示。该流程始于寄存器传输级(RTL)描述的逻辑设计,加上一个独立的描述低功耗设计意图的UPF文件。RTL和UPF描述分别放在独立的文件中,使他们可以单独维护和修改。在这个示例中,最初的UPF文件标志为UPF。
图7: UPF Flow With Synopsys Tools
Design Compiler读入RTL和初始UPF描述文件,基于它们综合出门级网表并产生一个更新了的UPF文件,这个Design Compiler输出的UPF文件在示例图中标志为UPF?。UPF?文件中包含了原始UPF文件的内容,并添加了综合时加入的对某些特殊cell(比如isolation cells、level shifters)的电源和地的连接关系。综合输出的门级网表已经被工具根据UPF的相应描述插入了一些低功耗所需的特殊电路单元,比如Level-Shifter,Isolation cells,Retention Register等。
IC Compiler读入综合输出的门级网表和UPF?描述文件,基于它们进行物理实现,包括:布局和布线以及电源关断特殊单元(Power-Gating cell)的插入、摆放和控制信号线的连接等步骤。输出一个新的门级网表,一个包括所有cell的电源和地连接关系的网表(俗称pg网表),以及一个更新了的UPF文件,标志为UPF??。UPF??文件包含了UPF?的内容,并添加了在物理实现阶段对低功耗电路结构的改变,比如添加了Power Switches(俗称MTCMOS)的连接关系。
这个flow中产生的数据可以用于做功能仿真(利用MVSIM、VCS),插入的低功耗单元的正确性检查(利用MVRC),形式验证(利用Formality),以及时序功耗检查(利用Prime Time-PX)和电压降(IR-Drop)(利用Prime Rail)的验证。
VCS仿真器和MVSIM多电压仿真工具可以在几个阶段用来做多电压的功能仿真:RTL级,综合后加入了低功耗相关器件(比如Isolation cell)的门级,以及PR之后加入了Power Switches的门级。MVRC用于检查多电压设计的规则是否正确实现,包括电源连接关系、电源结构、电源一致性等等,也适用于流程中的各个步骤。
Prime Time读入DC或ICC输出的门级网表以及对应的UPF文件。它利用UPF文件中的信息建立一个虚拟的电源网络模型,并将电压值反标到每个器件的电源端口,进行带电源信息的时序检查。
Prime Rail是基于带UPF信息的版图进行电压降以及电迁移的分析。如果设计中有电源关断单元,它还可以分析相关关断电路的瞬态电流以及动态的电压降分布。来帮助判断这些电源关断单元是否插入合理以及是否需要插入De-cap单元。
2.2 UPF所需要的特殊单元库
基于UPF的设计流程与传统流程相比,需要一些库中特殊单元的支持以及对传统的DB时序库添加电源地的信息。特殊单元包括Level-shifter,Isolation Cell,电源关断单元(Power Gating, 也叫MTCMOS),Retention-Register,以及Always-on单元。下面分别阐述:
2.2.1 Level-Shifter和Isolation Cell
对于多电压设计,需要用Level-shifter来实现不同电压域之间信号的电平转换。根据信号电平由高到低和由低到高的转换,Level-shifter分为两类,其结构分别如图8和图9所示。
图8: High to Low Level-shifters
图9: Low to High Level-shifters
对于电源关断技术,电源关断区域的输出信号在电源关断时处于不定态,这种不定态会导致其负载单元出现内部电流,从而导致不期望的功耗。所以需要在电源关断区域的输出信号上插入Isolation Cell来实现对不定态的隔离。Isolation cell根据钳位值不同分为与型和或型结构,其结构如图10所示。
图10: Basic Isolation Cells
2.2.2 Power-Gating cell,Retention-Register和 Always-on单元
对于电源关断技术,需要Power-Gating Cell(也称MTCMOS)来实现电源的关断。可以选择断开电源(VDD)或地(VSS)的连接来实现Power-Gating,这两种Power-Gating Cell被形象的称为Header-Switch和Footer-Switch。它们的结构如图11所示。
图11: Basic Header-Switch structure and Footer-Switch structure
在电源关断模块有可能要求register对关断前的数据进行锁存或者在电源打开后要求对锁存的数据进行恢复,这就需要特殊的单元Retention-Register。如图12所示,它有两个电源,一个用于模块电源未关断时的工作用电,一个用于模块电源关断时的用电。它还有两个控制信号save和restore,用于控制是否锁存数据或者恢复数据。
图12: Retention-Register
在电源关断模块还有可能需要有些信号线或逻辑长期工作,比如MTCMOS单元的控制信号线,Retention-register的save/restore控制信号,isolation cell的控制信号等。为了实现这种功能,这就需要另外的特殊单元叫always-on cell。如图13所示。
图13 Aways-on单元的应用场合
2.2.3 PG library的准备
除了上述这些特殊单元外,UPF流程的实现还需要用到的logical library(db库)是带PG(Power&Ground)信息的,与传统流程相比要多出下面与PG相关的信息: ? pg_pin 的名称,pg_pin 的类型 (如primary, backup 等); ? 每个信号管脚(signal pin)与pg_pin的对应关系; ? 每个输出信号管脚中power_down_function的定义; ? 每个pg-pin的电压数值。
有了上述信息,工具就可以根据UPF里面的描述自动地完成电源网络的连接,电源关断电路的验证,基于UPF里面电源状态表的综合和优化,以及最后输出带PG信息的网表的验证等。其直接带来的好处就是使得流程更完整,更简单,更自动化。
由于UPF应用还不是很普及,Foundry及第三方IP提供商目前提供的db库基本上还没有完全更新到带PG信息的版本,所以需要用户在使用前先转换。ICC和DC都提供了转换PG db库的命令:add_pg _pin_to_db,可以将不带PG信息的db库转换成带PG信息的db库。ICC0809以上版本还提供了add_pg
_pin_to_lib命令,可以将不带PG信息的lib库转换成带PG信息的lib库,这样可以更清晰的知道PG库中具体都添加了什么信息。
3. UPF在本芯片设计实现中的应用
本款芯片的设计实现以及验证流程完全采用了如图7中所示的所有Synopsys工具,并且所有实现和验证流程都使用了基于IEEE1801标准Unified Power Format(UPF)的完整技术,成功的完成了从RTL到GDSII的全部过程,并且芯片制造回来成功的完成了功能测试以及低功耗测试。本篇文章着重介绍实现流程中基于UPF的应用,对于验证流程的应用我们不作介绍。在实现过程中我们主要完成了下列工作,如图14所示。
图14: 本芯片实现流程图
? PG library的准备; ? UPF文件的准备;
? 有了UPF以及PG library,先用Design Compiler对RTL 综合,综合后产生的netlist里面就包含了low-power设 计中除了电源关断单元(MTCMOS)之外的所有的特 殊cell,如:level-shifter, isolation cell等等;
? 综合完成后,作了DFT的工作,在这一步骤如果DFT设计中要引入一些特殊单元,工具会自动插入; ? DFT之后我们在IC-Compiler完成了所有的布局布线工作,包括:整体规划(floorplan),电源关断单元MTCMOS的插 入、布局以及控制信号的连接,电源网络综合和分析,布局,时钟树综合,布线以及最后一些提高良率方面的工作。
? 布局布线完成后,我们还对timing,SI,Power,IR-DROP等进行了Sign-off分析。
? 在流程中经过每一步我们都用formality对包含了UPF的设计作了形式验证,既保证了功能的一致性,也保证了含有低功 耗信息的实现一致性。
下面我们对每一步骤进行详细介绍,其中PG library的准备在2.2章节中已经作了介绍,这里就不再说明。
3.1 本芯片中用到的low power设计意图
在我们最近的这款芯片中,采用了时钟关断(Clock-Gating),多域值电压库(Multi-threshold libraries),电源关断(MTCMOS Power Gating),低电压待机(Low-Vdd Standby)等低功耗技术。
图15和图16分别是芯片电源分区拓扑图和floorplan截图,芯片划分成3个power domain,分别为PD_1、PD_2、PD_TOP。其中PD_1是掉电区,PD_2是降压区,PD_TOP是常开区;PD_2的hierarchy嵌套在PD_1内部,当PD_1掉电时,PD_2可以降压保持数据即可。VDD和VDD_2是芯片外部提供的两个电源,分别提供给PD_TOP和PD_2;而VDD_1是PD_1的内部电源,由VDD经过MTCMOS产生,可以通过控制MTCMOS关断使PD_1掉电。
在进行芯片设计之前,我们要先对芯片的低功耗意图用UPF描述出来,下面的章节做详细的阐述。
图15: 芯片电源分区拓扑图
图16: 芯片floorplan截图
3.2 用UPF对本芯片设计意图的描述
在UPF中,包含了所有对low-power设计意图的描述,比如:芯片中有哪些相对独立的电源模块;每个电源模块中用到哪些电源或地;如果有电源关断模块的话还要描述其关断的方式及控制;每一个电源的各种工作模式(工作电压或是否关断);特殊单元的规划等。下面章节将根据本芯片中用到的low-power意图(如图15和图16所示)分别介绍如何用UPF描述这些意图。
3.2.1 UPF对Power Domain的描述
在UPF中,首先要对所有的Power domain进行定义。先设定顶层的power domain,然后描述PD_1和PD_2这两个power domain。如下所示:
# power domain definitions
create_power_domain PD_TOP –include_scope create_power_domain PD_1 –elements BLOCKA create_power_domain PD_2 –elements BLOCKB
3.2.2 UPF对Power Network的描述
然后根据电源分区拓扑图,要清晰地描述各个power domain里面的电源网络(Power Network),如下所示,详细的定义了每个domain里面的电源线的名称以及和芯片原始电源输入端口的连接关系。 # supply nets definitions
create_supply_net VDD –domain PD_TOP create_supply_net VDD –domain PD_1 –reuse create_supply_net VDD_2 –domain PD_TOP create_supply_net VDD_2 –domain PD_1 –reuse create_supply_net VDD_2 –domain PD_2 –reuse create_supply_net VDD_1 –domain PD_1 create_supply_net VSS –domain PD_TOP create_supply_net VSS –domain PD_1 –reuse create_supply_net VSS –domain PD_2 –reuse #define the primary power/ground for power domains
set_domain_supply_net PD_TOP –primary_power_net VDD –primary_ground_net VSS set_domain_suupply_net PD_1 –primary_power_net VDD_1 –primary_ground_net VSS set_domain_supply_net PD_2 –primary_power_net VDD_2 –primary_ground_net VSS # power ports definitions
create_supply_port VDD –domain PD_TOP –direction in create_supply_port VDD_2 –domain PD_TOP –direction in
create_supply_port VSS –domain PD_TOP –direction in #connect the supply net to power port connect_supply_net VDD –ports VDD connect_supply_net VDD_2 –ports VDD_2 connect_supply_net VSS –ports VSS
3.2.3 UPF对Power Gating的描述
本设计中含有电源关断模块,需要在UPF中定义电源关断单元(Power Gating cell),描述该单元的电源输入输出,以及控制信号的连接。如下所示。
create_power_switch SW1 –domain PD_1 –output_supply_port {VDD_OUT VDD_1} \\ –input_supply_port {VDD_IN VDD} –control_port {PW_CTRL pd1_pw_en} –on_state \\ {PW_ON VDD_IN {PW_CTRL}} –ack_port {{PW_ACK pd1_pw_ack}
该条命令中VDD_1是VDD经过该单元后的电源名称,pd1_pw_en是控制信号,当该控制信号为高的时候,VDD_1接通VDD使电路处于开启状态。除了该控制信号,该单元还输出一个叫pd1_pw_ack的响应信号。
至于如何在物理上实现Power Gating cell的插入以及控制信号的连接,这个要在IC Compiler里面完成,后面的章节里面有详细的介绍。
3.2.4 UPF对Isolation的描述
因为芯片中有关断模块,从功能上为了处理模块关断后信号输出的稳定性,还需要增加关断电源模块处于关断时如何插入isolation单元的描述。如下所示,以PD_1的边界信号定义为例:
指定其所有输入信号都不插入isolation cell,输出信号默认插入箝位到0的isolation cell,对其中两个特殊信号插入箝位到1的isolation cell。并且定义了Isolation cell的控制信号,以及插入的位置是在PD_TOP domain。
set_isolation pd1_iso_in –domain PD_1 –no_isolation –applies_to inputs
set_isolation pd1_iso_low –domain PD_1 –isolation_power_net VDD –isolation_ground_net \\ VSS –clamp_value 0 –applies_to outputs
set_isolation_control pd1_iso_low –domain PD_1 –isolation_signal iso_en –isolation_sense high \\ –location parent
set_isolation pd1_iso_high –domain PD_1 –isolatioin_power_net VDD –isolation_ground_net \\
VSS –elements {BLOCKA/pin1 BLOCKA/pin2} –clamp_value 1
set_isolation_control pd1_iso_high –domain PD_1 –isolation_signal iso_en –isolation_sense \\ high –location parent
3.2.5 UPF对Power State的描述
在UPF里面,还有一个非常重要的部分,那就是描述电源状态表(Power State Table),简称PST,也就是说要描述各个电源有哪些工作模式。有了这个表格,工具就可以判断是否需要在各个电源模块之间插入特殊的单元。
本芯片共有三种工作模式,pst_pd1_ON是正常模式,三个domain都是1.2V供电;pst_pd1_OFF是掉电模式,PD_1掉电,其他两个domain是1.2V供电;pst_pd2_LOW是掉电降压模式,PD_1掉电,PD_2降压到0.8V供电,仅保持数据。
add_port_state VDD –state {NOR_VOL 1.2} add_port_state VDD_1 –state {NOR_VOL 1.2} add_port_state VDD_1 –state {OFF_VOL off} add_port_statte VDD_2 –state {NOR_VOL 1.2} add_port_state VDD_2 –state {LOW_VOL 0.8} create_ps top_pst –supplies [list VDD VDD_1 VDD_2]
add_pst_state pst_pd1_ON –pst top_pst –state {NOR_VOL NOR_VOL NOR_VOL} add_pst_state pst_pd1_OFF –pst top_pst –state {NOR_VOL OFF_VOL NOR_VOL} add_pst_state pst_pd2_LOW –pst top_pst –state {NOR_VOL OFF_VOL LOW_VOL} 完整的UPF请参考附件7.1。
3.3 UPF在Design Compiler中的应用
根据图14中的流程介绍,UPF准备好就可以进行综合和DFT的工作了。在这一步,Isolation cell、level shifters、Retention Registers等特殊单元都要正确的实现插入,而且也要插入clock gating来优化动态功耗以及用多个阈值电压的库来优化静态功耗。
如图17所示,在DC中,首先把所有不同阈值电压的标准单元库都设置到target_library以及link_library里面去,工具在综合优化的时候,就可以根据路径上timing的是否关键来尽量平衡标准单元速度与静态功耗的关系,关键路径上,尽量选择低阈值电压/速度快的单元,但在非关键路径上,就尽量选择高阈值电压/静态功耗小的单元。
在读入RTL后,需要用load_upf的命令读入 UPF文件,然后在compile时,工具会根据UPF的设置,自动插入Isolation cell、level shifters、Retention Registers等特殊单元(在我们这个设计中,仅需插入Isolation cells),并正确连接这些特殊单元的控制信号。
另外,为了优化动态功耗,我们在综合阶段让DC自动插入了Clock Gating。设置也很简单,只要在 compile_ultra命令后面加上clock_gating的选项就可以了。
图17: UPF flow in Design Compiler
综合完成后,除MTCMOS没有插入外,其他特殊单元都已经按UPF描述的设计意图插入并连接。 综合后我们还要插入DFT相关结构,再做一个增进式的优化。在这两个过程中,如果DFT引入的电路根据UPF的要求需要插入特殊单元的话,工具会自动判断并在insert_dft或者compile命令执行的时候自动插入。比如,DFT插入的扫描链从电源关断模块连接到了其它非关断模块,这个时候根据UPF里面的规定,从关断区到非关断区要经过isolation cell的过渡,工具会自动判断到这一点,在需要的地方插入这些单元。
在综合和DFT的各个阶段,可以利用DC提供的命令check_mv_design对低功耗设计进行规则检查,确保没有违反UPF里面定义的相关规则。
最后,DC输出网表和UPF。也可以直接输出DDC或者直接写入到Milkyway数据库里面去,这两种方式都包含了网表和UPF信息,可以直接作为物理实现工具ICC的输入。
在综合前后我们都用Formality对输入和输出的RTL或netlist进行了带UPF的比对,以确保每一步骤电路在形式上没有发生改变。
3.4 UPF在IC Compiler中的应用
图18: UPF flow in IC Compiler
IC Compiler的UPF流程如图18所示,可以直接用DC输出的mw库或ddc文件,里面已经包含了UPF信息。我们采用的是读入网表加UPF的方式。
首先我们需要在读入verilog网表以后,把UPF文件导入到ICC中: load_upf $ICC_IN_UPF_FILE
读入netlist以及upf后就可以作整体规划(floorplan)了,在这个阶段主要有下面的工作:
? 在floorplan之前,要正确设置芯片的工作条件(operating_condition)以及用set_voltage命令对所有的电源和地设置正确的工作电压值。工具会根据这些设置来选择正确的单元进行时序计算。
? 读入UPF之后,ICC已经知道设计中有哪些power domain以及每个power domain里面有哪些电源、地。但这个时候ICC还没有把各个power domain里面所有cell中电源、地的端口与UPF里面定义的电源、地连接起来。需要运行下面的命令,所有power net会根据UPF中的描述自动创建,所有cells的电源也会根据UPF中的描述自动连接:
derive_pg_connection –create_net derive_pg_connection –reconnect
另外derive_pg_connection命令在ICC每一次优化后都要执行一次,以对新加入的cell进行电源、地的连接。
? UPF里面虽然已经有了power domain的定义,但在物理上这些不同的电源域还没有固定的位置和形状。这就需要创建voltage area,每一个power domain都对应一个voltage area。但如何根据UPF文件中描
述的power domain创建Voltage Area呢?我们这里也有些经验,在创建voltage area之前,我们可以用ICC里virtual-flat placement对全芯片进行一个快速的布局,然后根据布局的结果就可以知道与各个电源域相对应的各个模块的大体物理分布,从而帮助我们在这些区域来创建相应的voltage area。在UPF里面定义了三个power domain(PD_TOP, PD_1和PD_2),不过对于PD_TOP,ICC会自动的创建一个默认的Voltage Area(DEFAULT_VA), 对于另外两个Power domain,我们利用create_voltage_area命令创建Voltage Area。Voltage area的位置确定了,但其形状也与很多因素有关,可以是矩形也可以是多边形,总之,其位置和形状的最后确定可能会经过一些反复,因为这与设计最终布局布线的结果息息相关,创建不好,可能影响设计的时序,也可能影响设计的布线等。
? 所有voltage area都创建好后,就可以对关断电源区域插入电源关断单元(power gating cell)了。在我们这个设计里,PD_1是电源关断域,需要在这个电源模块里面插入MTCMOS(power gating cell)。在插入之前,用map_power_switch命令指定要使用的MTCMOS单元名称及相对应的power domain名字。然后用add_header_footer_cell_array命令按指定的阵列插入MTCMOS单元,如图19所示。设计中有可能因为voltage area形状的原因或者因为macro的影响,可能要求按不规则阵列插入MTCMOS单元,可以通过多个add_header_footer_cell_array命令叠加来实现,或者手动移动MTCMOS的位置,然后再将其位置固定。如图22所示,在我们的设计中电源关断区域就有个非常大的macro,为了照顾这个大macro上的供电充足,我们就在其周围插入了密度比较大的MTCMOS单元。所以MTCMOS的插入和摆放跟整体规划中voltage area以及属于这个区域的macro的规划都有紧密关系。我们使用的是有一组控制信号(NSLEEPIN和NSLEEPOUT)的MTCMOS单元,其结构如图20所示:NSLEEPIN是MTCMOS打开或者关断的控制输入信号,NSLEEPOUT是NSLEEPIN信号经过MTCMOS单元后输出的响应信号。这些控制和响应信号在MTCMOS插入后还需要把他们都互相连接起来。连接的方法也有很多种,我们采用的是链状的连接方法。如图21所示。ICC提供了命令connect_power_switch来自动的实现这个功能。
图19 Column placement of MTCMOS cells
图20: Single input header control signal connections
图21: MTCMOS cells chain connections
最后,MTCMOS单元在版图中的位置及控制信号连接关系如图22所示:
图22: MTCMOS placement in the layout map
? 现在voltage area已经创建,MTCMOS单元也已经摆放连接好了。下一步就开始做power plan了,也就是电源网络的规划。由于VSS在每个power domain都是一样的。所以三个power domain的VSS mesh是连在一起。True VDD(VDD)在所有的power domain都会用到,所以在每个power domain都需要加上power mesh。而在掉电区PD_1,VDD通过MTCMOS得到VDD_1,由VDD_1来给掉电区供电。所以VDD_2在PD_2和VDD_1在PD_1的power mesh不能连接到一起。ICC里面提供一个自动的电源网络综合的功能,用户可以告诉工具一些电源网络的约束以及要达到的电压降的目标,工具就可以自动产生符合要求的电源网络。而且,它是支持带MTCMOS的综合,也可以一次综合多个电源、地。用户只要根据产生的电源网络作些精细的修改就可以了。电源网络做好后,还要把MTCMOS的辅助电源连接好,如图23所示。连接辅助电源的方法主要有两种:一种是在“True” PG正好在MTCMOS上方的情况下,可以用create_preroute_vias命令来直接用过孔把MTCMOS的电源端口与”True” PG连接起来;另一种就是如果“True” PG不在MTCMOS上方,那就要用preroute_standard_cells命令里net连接的模式物理连接起来。至此,所有的电源、地网络都连接好了,还可以借用ICC提供的PNA(Power Network Analysis)的功能对包含MTCMOS的电压降进行分析,以帮助判断MTCMOS单元数量是否足够以及其位置是否合理。
图23: MTCMOS辅助电源的连接
? 如果voltage area位置形状、macro的摆放以及电源网络都合理了,而且用check_mv_design来检查低功耗的规则还有电源、地的连接都没有问题了,floorplan阶段的工作也就结束了。自此,设计中所有因为低功耗设计要引入的新的cell都已经插入到设计中了。在综合及DFT阶段插入了isolation cell,在floorplan阶段我们又插入了MTCMOS。
Floorplan结束后,ICC里面的布局、时钟树综合以及布线都和传统非UPF流程没有太大区别了。这些步骤工具都是可以自动理解low-power要求的,并会自动把isolation单元放到相对应的voltage area的边界。在我们这个设计中,我们还用到了ICC对动态功耗和静态功耗的电路优化能力,只要把相应开关打开工具就可以自动进行电路方面的功耗优化了。同样,在各个阶段都可以通过check_mv_design命令来检查是否有违反低功耗设计规则。
自此,在ICC里面的主要工作就结束了,为了给sign-off工具提供数据,我们还要写出带PG信息的netlist以作理解low-power的形式验证、要写出最后的UPF以及不带PG信息的netlist以作最后的时序、SI及功耗分析。PrimeRail作IR-drop分析可以直接读取Milkyway的设计库。Star-rcxt作参数提取也可以直接读取Milkyway的设计库。
3.5 经验介绍
在上一节中已经介绍了一些物理实现的经验,比如如何确定Voltage Area的位置和形状,如何合理摆放MTCMOS等等。下面再就我们在实现过程中遇到的一些问题,以及一些需要注意的地方,在这里和大家分享:
1. UPF里面特殊cell的控制信号(比如Isolation cell和MTCMOS的控制信号)最好定义在leaf pin上,不要定义在hierarchy pin上,否则ICC可能不能正确的识别该控制信号。
2. DFT设计阶段会在UPF里定义的特殊cell的控制信号上插入mux,用于测试时控制这些信号,如果UPF里面定义的控制信号在插入的mux之前,则ICC也会找不到这些特殊cell的控制信号。比如Isolation cell的控制信号,如图24所示,UPF中本来定义的Isolation cell控制信号是func_iso_en,但是加了DFT mux之后,UPF中就需要将Isolation cell的控制信号定义在iso_en上才行。
图24: DFT模式下的Isolation控制信号
3. 关于Isolation cell的插入有一个需要注意的问题,power domain的某些接口信号在网表中可能是直接接电源或地的,如果在这些信号上插入了Isolation cell,在ICC中不能正确derive出这些Isolation cell的power连接关系。会报告这样的告警”The isolation cell ?xxx? does not have any associated UPF isolation strategy ”。解决的方法就是在UPF中指定对这些信号不要插入Isolation cell,或者在ICC中直接指定这些Isolation cell的电源和地。
4. 需要在Voltage Area的边界用hard blockage留出足够的间隙或者在创建voltage area的时候加上guard_band的选项,工具就不会在这些区域摆放cell,否则如果voltage area边界内外cell紧密摆放的话,不同电源、地的cell就物理连接到一起了,就会有电源或地的短路出现。具体需要留多少间隙,要根据不同工艺的design rule来计算。
5. 关于MTCMOS的插入数量,可以先根据该模块的功耗大致估算一下。首先通过功耗分析估算出掉电区的功耗P,根据P=VI,及电源电压,计算出供电电流I;再根据foundry提供的MTCMOS的电阻值R,可以计算出并联n个MTCMOS的IR drop大致为IR/n;这样就可以根据期望达到的IR drop值,计算出需要插入多少MTCMOS了。当然最后还需要通过更精确的IR drop分析工具(比如Prime Rail)来分析IR drop是否满足要求。
6. 关于MTCMOS的摆放和分布,则需要考虑掉电区的功耗分布,功耗密度大的地方电流密度也大,所以MTCMOS摆放密度要高一些,以减小IR drop。比如在我们的设计中,掉电区有个大块的Macro(见图22左上),且它的时钟频率比其他部分高,功耗密度比其他部分大很多,所以我们在其外围放了一圈紧挨着的MTCMOS,而在其他部分,则是按阵列形式摆放了几列MTCMOS,每列MTCMOS都是隔行摆放。 7. 掉电区的电源网络规划、以及MTCMOS的电源连接也是需要特别考虑的地方。掉电区有三个PG nets(True VDD、Virtual VDD和VSS),在做电源网络规划时,建议对三个PG nets都画一个密度相当的电
源网格。True VDD和Virtual VDD的网格通过MTCMOS连接,MTCMOS处是电流密度最大的地方,所以为了减小IR drop,在MTCMOS上方尽量用宽金属走Power Strap。这样做出来的电源网络,一般不会有IR drop的问题。
4. 结论及建议
利用Synopsys基于UPF标准的低功耗流程,帮助我们在设计的整个流程(从前端到后端,以及验证)中,达成对低功耗设计意图描述上的连贯性、简洁性与一致性,并提供各方面的验证功能,极大的提高了设计实现的效率,并保证了设计的正确性。
对于设计实现工程师来说,UPF流程仅比传统流程增加了如何用UPF来描述自己设计中的低功耗意图,工具就可以根据UPF里面的约束,自动实现低功耗设计。而且实现与验证可能要用到多个工具,传统流程中,每个工具都要求有自己独立的低功耗设计命令,这样很难保证各个工具之间的描述是否一致,有了UPF,这个问题就彻底解决了,各个工具都使用统一的UPF文件来得到一致的低功耗设计要求。另外,低功耗设计需要的特殊单元,如Isolation cells和Level Shifters在前端综合时工具会根据UPF的描述自动插入,MTCMOS在后端实现工具中插入以及连接,整个过程中复杂及容易出错的Power连接、控制信号连接等步骤都由工具根据UPF的描述自动实现了,操作简单方便,且不容易出错。
觉得需要增强的是,当我们在作这个项目的时候,Synopsys的低功耗流程还不支持在优化的中间过程对UPF进行修改。比如在物理实现的后期,想对power domain做些微小的修改,又不想从头开始重做,要是UPF也能像SDC一样可以remove后再load就更方便了。但是令人振奋的是,当前ICC0906的版本提供了一个叫reset_upf的新命令,已经可以实现这个功能了。
5. 致谢
UPF流程对于我们是一个全新的低功耗流程,完成本设计,离不开华为通信芯片团队的集体智慧和不懈的努力。在此,要特别感谢张方、张小珏、吕忠华、宋隽、乐彬、戴方明、余剑锋,以及各位同事的大力协助。另外,还要感谢Synopsys工程师杜广山、黄秋儿,他们提出了很多宝贵的意见和建议,并现场支持,及时解答每一个疑问,给予了我们极大的支持和帮助。
6. 参考文献
[1] Synopsys Low-Power Flow User Guide, Version B-2008.09, September 2008 [2] Synopsys? Low Power Solution white paper, December 2008
[3] Michael Keating, David Flynn, Robert Aitken, Alan Gibbons, Kaijian Shi, “Low Power Methodology Manual For System-on-Chip Design”
7. 附件
7.1 UPF范例
# create power domains
create_power_domain PD_TOP –include_scope create_power_domain PD_1 –elements BLOCKA create_power_domain PD_2 –elements BLOCKB # supply nets definitions
create_supply_net VDD –domain PD_TOP create_supply_net VDD –domain PD_1 –reuse create_supply_net VDD_2 –domain PD_TOP create_supply_net VDD_2 –domain PD_1 –reuse create_supply_net VDD_2 –domain PD_2 –reuse create_supply_net VDD_1 –domain PD_1 create_supply_net VSS –domain PD_TOP create_supply_net VSS –domain PD_1 –reuse create_supply_net VSS –domain PD_2 –reuse #define the primary power/ground for power domains
set_domain_supply_net PD_TOP –primary_power_net VDD –primary_ground_net VSS set_domain_suupply_net PD_1 –primary_power_net VDD_1 –primary_ground_net VSS set_domain_supply_net PD_2 –primary_power_net VDD_2 –primary_ground_net VSS # power ports definitions
create_supply_port VDD –domain PD_TOP –direction in create_supply_port VDD_2 –domain PD_TOP –direction in create_supply_port VSS –domain PD_TOP –direction in #connect the supply net to power port
connect_supply_net VDD –ports VDD connect_supply_net VDD_2 –ports VDD_2 connect_supply_net VSS –ports VSS #create the power switch
create_power_switch SW1 –domain PD_1 –output_supply_port {VDD_OUT VDD_1} –input_supply_port {VDD_IN VDD} –control_port {PW_CTRL pd1_pw_en} –on_state {PW_ON VDD_IN {PW_CTRL}} –ack_port {{PW_ACK pd1_pw_ack} #define the isolation cell rules
set_isolation pd1_iso_in –domain PD_1 –no_isolation –applies_to inputs
set_isolation pd1_iso_low –domain PD_1 –isolation_power_net VDD –isolation_ground_net VSS –clamp_value 0 –applies_to outputs
set_isolation_control pd1_iso_low –domain PD_1 –isolation_signal iso_en –isolation_sense high –location parent
set_isolation pd1_iso_high –domain PD_1 –isolatioin_power_net VDD –isolation_ground_net VSS –elements {BLOCKA/pin1 BLOCKA/pin2} –clamp_value 1
set_isolation_control pd1_iso_high –domain PD_1 –isolation_signal iso_en –isolation_sense high –location parent
set_isolation pd2_iso_out –domain PD_2 –isolation_power_net VDD_1 –isolation_ground_net VSS –clamp_value 0 –applies_to outputs
set_isolation_control pd2_iso_out –domain PD_2 –isolation_signal iso_en –isolation_sense high –location parent
set_isolation pd2_iso_high –domain PD_2 –isolation_power_net VDD_2 –isolation_ground_net VSS –elements {BLOCKB/pin1}
set_isolation_control pd2_iso_high –domain PD_2 –isolation_signal iso_en –isolation_sense high –location self
set_isolation zsp_tcm_iso_en –domain PD_2 –no_isolation –elements BLOCKB/iso_en #create the state table
add_port_state VDD –state {NOR_VOL 1.2}
add_port_state VDD_1 –state {NOR_VOL 1.2} add_port_state VDD_1 –state {OFF_VOL off} add_port_statte VDD_2 –state {NOR_VOL 1.2} add_port_state VDD_2 –state {LOW_VOL 0.8} create_ps top_pst –supplies [list VDD VDD_1 VDD_2]
add_pst_state pst_pd1_ON –pst top_pst –state {NOR_VOL NOR_VOL NOR_VOL} add_pst_state pst_pd1_OFF –pst top_pst –state {NOR_VOL OFF_VOL NOR_VOL} add_pst_state pst_pd2_LOW –pst top_pst –state {NOR_VOL OFF_VOL LOW_VOL}