logo资料库

数字集成电路低功耗物理实现技术与UPF.docx

第1页 / 共28页
第2页 / 共28页
第3页 / 共28页
第4页 / 共28页
第5页 / 共28页
第6页 / 共28页
第7页 / 共28页
第8页 / 共28页
资料共28页,剩余部分请下载后查看
数字集成电路低功耗物理实现技术与UPF
摘要
1.0  概述
2.0  CMOS电路的低功耗设计原理
3.0  低功耗设计手段及Library需求
3.1    0.18um及以上工艺
3.1.1      静态功耗可以忽略 
3.1.2      时钟门控减小不必要的动态功耗 
图 31 时钟门控原理图
3.1.2.1.  Clock Gating Cells
3.1.3      使用低电压的库进行设计 
3.2    90nm及以下工艺
3.2.1      切断未使能电路的电源减小不必要的静态功耗 
3.2.1.1.                  Power Switching Cells
图 32 Power Switching Cell电路结构示意图
3.2.1.2.  Isolation Cells
图 33 逻辑门组成的Isolation Cell
利用逻辑门组成的Isolation Cell是常见的Cell,下面所示是一个Isolation Ce
   cell(isolation_cell) {  is_isolation_cell : tru
pg_pin() { #电源Pin定义
pg_type : primary_power;
}
pg_pin() { #地Pin定义
pg_type : primary_ground;
}
pin (data) {
direction : input;
isolation_cell_data_pin : true ; #被控制的输入Pin
}/* End pin group */
pin (enable) {
isolation_cell_enable_pin : true ; #控制信号
}/* End pin group */
pin (output) { #输出信号
direction : output;
power_down_function : (!pg_pin_name_P + pg_pin_nam
}/* End pin group */
}/* End Cell group */
 
3.2.1.3.  Retention Register Cells
对于寄存器来说,当电源关闭后,其保存的数据也就不存在了,如果有些寄存器的数据,希望在断电后继续保持,
 
 
图 34 Retention Register Cell基础结构图
图 35 Retention Cell的电路结构示意图
图 36 Retention Register工作时序示意图
 
retention_cell_style主要是定义一个器件识别名,不同功能名字不能一样。这里所说的功
retention_pin是的定义表示该pin是与retention cell功能有关的,其中pin
 
3.2.1.4.                  Always-On Logic Cells
 
3.2.2      利用不同VT值的库,实现静态功耗和时序的平衡(Multi-VT) 
随着工艺尺寸的减小,Oxide层厚度的减少,VT值也一直在减少,这是为了在驱动电压较低的情况下,提高
3.2.2.1.                  常用EDA工具中Multi-VT的实现方法
由于综合时,时序信息并不完全准确,特别是setup类的时序。因此可以对setup时序做稍紧一些的约束
如在IC Compiler里,在布线后优化时可以使用如下语句来进行优化:
3.2.4      多供电电压,实现动态功耗与时序的平衡(Multi-Voltage) 
这里check_mv_design主要是检查UPF对设计的描述是否正确,在compile之后再做一次
接着,需要在不同电压电路之间,添加Level_shifters,进行电压转换。如下所示:
3.2.4.1.   常用EDA工具中Multi-VT的实现方法 
3.2.4.2.                  Liberty PG Pin格式 
3.2.4.3.                  电压和频率的Scaling分析 
3.3    其他未提及工艺
4.0  一个低功耗设计实现的例子
图 41 pl8051_extend_chip功能结构图
图 42 低功耗设计方案示例
4.1    申明电压域以及虚拟电压接口
根据上述指令,工具会识别出如下图所示中画圈的信息,电压域及虚拟电压端口开始出现:
 
图 43 电压域及虚拟电压端口信息
以上语句添加下图中画圈部分:
图 44 产生顶层电源网络
create_supply_net VDD12 –domain DES_DOMAIN –reuse
create_supply_net VDD12G
create_supply_net VDD12G –domain DES_DOMAIN -reuse
create_supply_net VSS –domain DES_DOMAIN –reuse
create_supply_net VDD –domain DES_DOMAIN –reuse
图 45 子电路的电源网路申明
图 46 连接电源网络和电源端口
4.3    添加Power Switch
图 47 添加Power Switch Cell
4.4    建立电源状态表格(Power State Table, PST)
4.5    插入Isolation Cell
  
 
 
图 48 插入Isolation Cell
4.6    替换Retention Register Cell
图 49 替换Retention Register Cell
4.7    插入Level Shifters
图 410 插入Level Shifters
4.8    UPF Demo
4.9    DC UPF Flow Script Demo
source -e ../scr/ variable.tcl
set_clock_gating_style -min ${CG_MIN_BITWIDTH} -ma
                             -sequential_cell ${CG
                             -positive_edge_logic
                             -negative_edge_logic
                             -control_point ${CG_C
                             -control_signal ${CG_
                             -setup ${CG_SETUP_VAL
set_operand_isolation_style -logic adaptive
set_operand_isolation_slack 0.1
set_svf ${NETLIST_PATH}${top}${VER}.svf
read_verilog ${RTL_INCLUDE}
current_design $top
uniquify
link
load_upf ${SCRIPT_PATH}power.upf
set auto_insert_level_shifters_on_clocks all ;#can
set_voltage 1.08 -object_list {VDD12 VDD12G}
set_voltage 0.84 -object_list VDD
set_voltage 0.0 -object_list VSS
source -e -v ${SCRIPT_PATH}timing.tcl
#M1~M9 are avaliable, M1 will be used by STD
#set_ignored_layers -min_routing_layer M4
set_ignored_layers -max_routing_layer M7
report_ignored_layers > ${REPORT_PATH}${top}_ignor
set_clock_gating_check -setup ${CG_SETUP_CHECK} -h
set_fix_multiple_port_nets -feedthroughs -outputs
set_attr -type string tcbn90lphpwc0d70d9_pg.db:tcb
set_attr -type string tcbn90lphphvtwc0d70d9_pg.db:
set_attr -type string tcbn90lphpwc0d7_pg.db:tcbn90
set_attr -type string tcbn90lphphvtwc0d7_pg.db:tcb
set_attr -type string tcbn90lphpwc_pg.db:tcbn90lph
set_attr -type string tcbn90lphphvtwc_pg.db:tcbn90
set_attr -type string tcbn90lphphvtcgwc_pg.db:tcbn
set_attr -type string tcbn90lphphvtwc0d90d9_pg.db:
set_attr -type string tcbn90lphphvtwc0d90d7_pg.db:
set_attr -type string tcbn90lphpwc0d90d7_pg.db:tcb
check_mv_design -verbose
 compile_ultra -scan -no_autoungroup -no_boundary_
change_names -rules verilog -hierarchy
write -format ddc -hierarchy -output ${DDC_PATH}${
write -format verilog -hierarchy -output ${NETLIST
set write_sdc_output_lumped_net_capacitance false
set write_sdc_output_net_resistance false
write_sdc -version 1.5 ${SDC_PATH}${top}_cons${VER
check_design > ${REPORT_PATH}${top}_check_design_p
report_area > ${REPORT_PATH}${top}_area.rpt
check_mv_design –verbose > ${REPORT_PATH}${top}_ch
report_constraint -all > ${REPORT_PATH}${top}_all_
report_clock_gating -gating_elements >> ${REPORT_P
report_operand_isolation -verbose -isolated > ${RE
report_threshold_voltage_group > ${REPORT_PATH}${t
report_threshold_voltage_group -verbose >> ${REPOR
save_upf ${NETLIST_PATH}${top}${VER}_dc.upf #upf’
5.0  总结
 [1] Page 14, “Low Power Methodology Manual For Sy
[2] Page 42, “Low Power Methodology Manual For Sys
[3] Page 2-29, “Library Compiler™ User Guide: Mode
[4] Page 2-32, “Library Compiler™ User Guide: Mode
[5] Page 46, “Low Power Methodology Manual For Sys
[6] Page 2-23, “Library Compiler™ User Guide: Mode
[7] Page 55, “Low Power Methodology Manual For Sys
[8] Page 2-46, “Library Compiler™ User Guide: Mode
[9] Page 2-11, “Library Compiler™ User Guide: Mode
[10]Page 2-2, “Library Compiler™ User Guide: Model
数字集成电路低功耗物理实现技术与 UPF 孙轶群 sun.yiqun@nationz.com.cn 国民技术股份有限公司 Nationz Technologies Inc 摘要 本文从 CMOS 电路功耗原理入手,针对不同工艺尺寸下数字集成电路的低功耗物理实现方法进行描述, 并着重描述了 Synopsys UPF(Unified Power Format)对低功耗设计的描述方法。UPF 是 Synopsys 公司 提出的一种对芯片中电源域设计进行约束的文件格式。通过与 UPF 格式匹配的 Liberty 文件,UPF 约束文 件可以被整套 Galaxy 物理实现平台的任何一个环节直接使用,并将设计者的电源设计约束传递给设计工具, 由工具完成设计的实现工作,从而实现整套数字集成电路低功耗物理实现的流程。 1.0 概述 本文从数字集成电路低功耗设计原理下手,对设计中低功耗的实现技术进行描述,包括完成低功耗设计需 要的库资料以及常用 EDA 工具对低功耗技术实现的方法。 2.0 CMOS 电路的低功耗设计原理 CMOS 电路功耗主要分 3 种,静态功耗主要与工艺以及电路结构相关,短路电流功耗主要与驱动电压、 p-MOS 和 n-MOS 同时打开时产生的最大电流、翻转频率以及上升、下降时间有关,开关电流功耗主要与 负载电容、驱动电压、翻转频率有关。做低功耗设计,就必须从这些影响功耗的因素下手。 3.0 低功耗设计手段及 Library 需求 0.18um 及以上工艺 低功耗的设计手段较为复杂,但对于不同的设计,或者不同的工艺,实现的方法却各不相同。 3.1 0.18um 及以上工艺,在低功耗设计手段上较为有限,主要原因在于,静态功耗很小,基本不用关心。 动态功耗方面,主要的功耗来自于 Switching Power,即与负载电容、电压以及工作中的信号翻转频率相关。 减小负载电容,就必须在设计上下功夫,减少电路规模。减少信号翻转频率,除了降低时钟频率外,只有 在设计上考虑,能不翻转的信号就不翻转。至于电压,由于 0.18um 及以上工艺的阈值电压有一定的限制, 因此,供电电压降低,势必影响工作频率。 一般说来,在 0.18um 工艺下设计电路,主要有以下几种对低功耗设计的考虑。 3.1.1 静态功耗可以忽略 根据现有项目经验可知,利用 0.18um 工艺 Standard Cell 设计出来的某芯片,数字逻辑加上 Ram 和 Rom 约 40 万门的电路,在完全静止的状态下,功耗约 200uA 左右(实测数据为 400uA 左右,包括了 50uA Flash, 30uA 的 PHY,113uA 的 VR,其他模拟部分漏电不大,因此这里估算为 200uA)。这样的功耗,我们是 可以接受的。如果非要减少静态功耗,则可以参照 90nm 工艺的设计思路,专门设计高阈值电压的 MOSFET, 或者专门设计切断电源所需的元件,但由此带来设计的复杂性,对 0.18um 工艺的影响还是很大的。如果 设计规模没有那么大,且可以满足应用,往往还是可以忽略这个结果的。 3.1.2 时钟门控减小不必要的动态功耗
在寄存器的电路设计中,时钟输入端都会有一个反向器负载,就算输入端不发生变化,时钟的变化也会造 成该反向器的变化,由此产生动态功耗。因此在如果该寄存器输入在某种条件下等于输出(即输出保持) 时,可以将时钟门控住,以减少无效的时钟翻转。 时钟门控的实现原理如下图所示: 图 3- 1 时钟门控原理图 如上图所示,由于现在的设计方式,大多数是同步设计,设计人员只考虑数据路径,时钟往往是不做处理 的。因此如果要实现门控,只需要在设计电路时提供可以识别的控制信号,在综合的时候,EDA 工具就可 以自动插入时钟门控。 利用 Design Compiler 进行时钟门控单元插入,在读入设计以及时序约束后,需要做以下设置: 1. set_clock_gating_style,设置时钟门控单元插入的约束 2. insert_clock_gating –global,开始插入时钟门控单元; 3. uniquify,将所有时钟门控单元做 uniquify 操作,以便后续 PR 4. hookup_testports -se_port ATPGSE_Pad -se_pin uPad/uATPGSE_Pad/C –verbose,将所有时钟门 控单元的 scan_enable 信号与测试用 SE 信号连接起来。如果没有 ATPG,可以不用该句命令。 5. propagate_constraints -gate_clock,将门控单元信息传递给整个电路。 6. report_clock_gating 可以查看时钟门控单元插入的情况,以便做电路修改,或插入时钟门控单元设置 的修改。 完成这些设置后,只需要和平常一样做系统综合即可。而在 DC 2008.09 版本以后,第 2~5 的步骤都可以 省略,在利用 compile_ultra 进行优化时,第 2、3 步骤都会被自动执行,第 4、5 步骤会在 insert_dft 时被 执行。 形式验证工具 Formality,在进行形式验证,需要设置 verification_clock_gatie_hold_mode 为 low、high 或者 any,Formality 就可以识别出时钟门控单元,并与 RTL 进行形式验证了。 3.1.2.1. Clock Gating Cells 这里所说的 Clock Gating Cell 是指专门设计的,集成式时钟门控单元(Integrated Clock Gating Cell,简 称 ICG),就是利用 Latch 和与门/或门实现的一个独立的 Standard Cell,其优势在于以硬 IP 实现,时序 易于掌握,物理实现中对布局布线有帮助。当然如果单元库中不提供专门的时钟门控单元,EDA 工具也可 以利用与门、或门、Latch 甚至是寄存器等进行门控单元的实现,但效果都没有 ICG 好用。这里针对 ICG 的插入进行描述。 图 3- 1 中的门控单元是一种典型的,利用负沿使能 Latch 以及与门组成的上升沿有效时钟门控单元,只有 时钟下降沿后才会将时钟门控住,保证不产生时钟毛刺。 在 Liberty 格式文件中,某个 Cell,需要有 clock_gating_integrated_cell,才能让 EDA 工具认识到,该 Cell 是一种 ICG。不同的 clock_gating_integrated_cell 的设置,需要在 DC 设置 set_clock_gating_style 时做 相应的设置,才可能被使用到,下面列举一些常用的设置:
同时,在 ICG 的不同 Pin 上,必须有以下属性,来告诉 DC 该 Pin 在 ICG 的使用中是什么功能(这里只列 举常用的信息): clock_gate_enable_pin clock_gate_out_pin clock_gate_clock_pin clock_gate_test_pin 3.1.3 使用低电压的库进行设计 该 pin 是时钟使能控制信号 该 pin 是时钟输出信号 该 pin 是时钟输入信号 该 pin 是 scan_enable 或 test_mode 信号 由于动态功耗中,驱动电压对功耗的影响也相当大,因此,如果能有一套电压只有 1V 的标准单元库,进 行设计,仍然可以达到降低动态功耗的目的。但电压的降低,势必引起元件延时的增加,且由于 0.18um 工艺下,阈值电压一般在 0.4V 左右,驱动电压的稳定性需求也相当大,否则,可能会导致致命性的错误。 法国的 Dolphin 公司是一家致力于低功耗设计的 IP 提供商,在 TSMC、SMIC 等 Foundry 的 0.18um 工艺 下都提供了 1V 的逻辑单元库。下面列出 Dolphin 在 SMIC 0.18um 工艺下设计的一套 1V 逻辑单元库,和 SMIC 0.18um 工艺 Metro 标准单元库进行比较。比较中 Metro 标准单元库使用 1 个门的 BUFX2M,而 Dolphin 使用最小的 Buffer ni01d1 进行比较。 area (um*um) Average leakage(nW) 0.048 Rise delay (0.04pf,ns) 0.182256 Typical Rise Energy (0.04pf,pJ) 0.0266 SMIC18 METRO BUFX2M 8.7808 Dolphin 1V for SMIC 0.18um 由比较中可以看出,当电压下降到 1V 后,Rise Energy 下降了 80%以上,除了由于电压下降引起的功耗 降低外,Dolphin 应该在电路结构等方面也做了处理,因此不但动态功耗减少了,而且静态功耗也减少了很 多。但延时却大了很多,因此如果设计需要翻转的频率不高时,可以考虑利用低功耗的库进行设计,达到 10.3488 ni01d1 0.005 0.01 0.6 90nm 及以下工艺 降低功耗的目的。如果速度要求很高,这个方法是不可行的。 3.2 从 3.1.3 可以知道,降低驱动电压,可以减少动态功耗,但由于电压降低,驱动能力也同时被减弱,因此 元件延时较大。为了解决这个问题,工艺尺寸开始减小,以便在减小驱动电压的情况下,增加宽长比(aspect ratio),以达到提高驱动电流的目的,保持元件延时。 同时进入更低尺寸的工艺,氧化层厚度也随之减小,以便减少阈值电压,进一步提高速度。但因为氧化层 厚度在减小,漏电电流也变大了。在 90nm 及以下工艺中,漏电电流开始被设计人员关注。 下面对在 90nm 工艺下进行低功耗设计及实现的一些手段结合常用 EDA 工具进行描述。 3.2.1 切断未使能电路的电源减小不必要的静态功耗 针对 SMIC 0.18um 工艺 Metro 标准单元库以及 TSMC 90nmLP 工艺高密度标准单元库 (dbtcbn90lphdbwptc)进行比较,以一个门的 Buffer 来举例: Average leakage(nW)Incremental SMIC18 METRO 0.048 TSMC 90LP Biased WellBUFFD1BWP0.214 可以看出,90nm 工艺下的静态功耗,已经是 0.18um 工艺下功耗的 3.5 倍左右了。根据 3.1.1 可知,利用 0.18um 设计出来的,约 40 万门的电路,静态功耗,大约是 200uA(360uW,0.18um 工艺按 1.8V 供电 Incremental - -89.77% Typical Rise Energe (0.04pf,pJ) - 0.0266 345.83% 0.00272 BUFX2M
电压计算)。如果同样规模的电路,放在 90nm 工艺下,则可能达到 1.26mW 左右,即 1.05mA 左右的静 态功耗(90nm 工艺按 1.2V 供电电压计算)。 既然,静态功耗这么大,那么在静止时,怎样才能将这些功耗减小呢?一个非常彻底的方法就是将静止状 态电路的电源关断。 为了关断电源,就需要在电源网络和电路之间建立一个电源控制电路,他们被称为电源开关单元(Power Switching Cell),在需要关断时,控制 Power Switching Cell 将电路的供电关闭,否则打开,提供电源。 由于电源关断后的电路,其输出信号就没有电路驱动,对于其驱动的电路来说,就会出现输入浮空的状态。 为了解决这个问题,就需要在关闭电源的电路输出端添加一个额外的保持电路,当其电源关闭后保持输出, 而电源打开时,保持电路则表现的像一个 Buffer,输出等于输入即可。同时,如果被关闭电源地电路输入 固定电压,也可能产生对地的电流,就需要一个特别的单元对该部分电流进行保护。这样的单元被称为隔 离单元(Isolation Cell)。一般来说 Isolation Cell 的输出部分有较大的电容负载,也就是说 Isolation Cell 的延时将会比较大,对时序有一定的影响,是需要注意的。 当然,对于寄存器来说,如果断电,则原有的数据就无法保存,重新打开电源后,就一定会出现原有数据 丢失的情况。因此可以为一些必须保持数据的寄存器建立一个备份设备,电源关闭前,将寄存器的数值保 存到备份设备上,电源打开后从备份设备上将数据重新写入寄存器中。这种备份设备叫做保存寄存器单元 (Retention Register Cells)。 对于 Power Switching Cell、Isolation Cell 以及 Retention Register Cell,他们在上电之后是不能关闭的, 因此使用的电源也和正常功能不同,这些单元被成为常开逻辑单元(Always-On Logic Cells) 下面就各种不同的 Cell,描述其原理、库中保存的信息、以及实现流程。 3.2.1.1. 原理上说,Power Switching Cell 结构如下图所示: Power Switching Cells 图 3- 2 Power Switching Cell 电路结构示意图 从图中可以看到,Power Switching Cell 的设计原理非常简单,VDD 的控制(被称为 Header Switch), 利用一个 P-MOSFET 来控制,当 TURN_OFF 信号为高时表示电路关闭,P-MOSFET 关闭,GATED_VDD 就不供电了,而 TURN_OFF 信号为低时表示电路打开,P-MOSFET 打开,GATED_VDD 等于 VDD_SUPPLY。同理,利用一个 N-MOSFET 来控制 VSS 电源是否供电,被称为 Footer Switch。 一般来说,只需要使用 Header Switch 或者 Footer Switch 就可以实现电路关断,其中 Header Switch 结构 漏电较小,而 Footer Switch 结构控制效率高,且面积较小。 虽然原理非常容易理解,但电路设计起来非常复杂,需要考虑控制单元对电路供电的能力,考虑不能产生 过大的功耗,等等。这里不详细介绍控制单元的设计,详细设计方法可以参看 Synopsys 公司和 ARM 公司 联合出版的“Low Power Methodology Manual For System on Chip Design.”。 将 Power Switch Cell 设计成单独的器件,在实现时,控制某一块电路,叫做 Coarse Grain Power Switch Cell。 下面是一个 Coarse Grain Power Switch Cell 的 Liberty 格式描述 library() { #library 描述开始 … lu_table _template ( template_name ) #电压状态 template 描述,dc_current 组中会使用 variable_1 : input_voltage; variable_2 : output_voltage;
index_1 ( , … ); index_2 ( , … ); } … cell() { #某个 Power Switching Cell 描述开始 switch_cell_type : coarse_grain; #Switching Cell 类型是 coarse_grain,暂时 只支持该类型 … pg_pin ( ) { #申明电源和地的 pg_pin 格式 pg_type : primary_power | primary_ground; #他们是主电源和主地 direction : input ; #方向是输入 … } /* Virtual power and ground pins use “switch_function” to describe the logic to shut off the attached design partition */ pg_pin ( ) { #申明内部电源和地,这就是输出电 源/地的端口 pg_type : internal_power | internal_ground; direction: output; #方向是输出 … switch_function : “”; #定义开断控制功能,例如 SLEEP pg_function : “”; #内部电源或地功能与输入的 pg_pin 一致, 对于 header switch 来说就是 premary_power 的 Pin Name,对于 Footer Switch 来说就是 primary_ground 的 Pin Name } dc_current ( ) { #定义不同条件下输出 Pin 的稳定电流 值,EDA 工具利用该数据计算 IR Drop,并进行 Switch 的优化。 related_switch_pin : ; #定义控制开断的 Pin related_pg_pin : ; #定义可以被控制开断的电源 Pin,如果 是 Footer Switch 则是地 Pin related_internal_pg_pin : ; #定义不会被关闭的内部电源 Pin, Footer Switch 则是地 Pin values(”, …”); #定义不同状态下的该 Cell 输出的电流值 } pin (SLEEP) { #Pin SLEEP 定义开始,SLEEP 只是举例 direction : input; switch_pin : true; #表示该输入 Pin 是 switch pin,控制电源/地的开断 … /* The acknowledge output pin uses “function” to represent the propagated switching signal */ pin() { #定义应答输出 Pin 开始,完成开断 后,与 switch pin 状态一致,有的 Switch Cell 可能没有该 pin
… function : “”; #功能定义,应该与 SLEEP 状态一致 power_down_function : “function_string”; #定义关断后电源状态,如对于 Header switch 来说可以是!VDD+VSS,而 Footer Switch 来说可以 是!VSS+VDD direction : output; … } /* end pin group */ } /* end cell group */ 另外,为了更好的控制电源通断控制,可以专门设计带有电源控制的逻辑单元,实现时,不需要添加额外 的控制电路,这种电源开关结构叫做 Fine Grain Power Switch Cell,结构简单,但每个单元都有一个控制 器,面积比较大。 下面是一个 Fine Grain Power Switch Cell 的 Liberty 格式描述 cell() { #Fine Grain Power Switch Cell 都是某个 Cell 内的一部 分,不单独出现 is_macro_cell : true; #定义是不是 macro cell switch_cell_type : coarse_grain | fine_grain; #多数设置为 fine_grain pg_pin ( ) { #定义电源信号,primary_是可以断开 的,backup_是不会断开的。 pg_type : primary_power | primary_ground | backup_power | backup_ground; direction: input | inout | output; … } /* This is a special pg pin that uses “switch_function” to describe the logic to shut off the attached design partition */ pg_pin ( ) { #定义内部电源/地 direction: internal | input | output | inout; pg_type : internal_power | internal_ground; switch_function : “”; pg_function : “”; … } pin () { direction : input | inout; switch_pin : true | false; #如果是 switch pin 就是 true … } … pin() { direction : output | inout; power_down_function : ; …
} /* end pin group */ } /* end cell group */ 3.2.1.2. 我们知道,在 CMOS 数字逻辑电路当中,当某根信号为 VDD 时,我们认为是逻辑 1,如果为 GND,则认 为是逻辑 0。但当某块电路不供电后,其输出就失去了驱动,输出网络如果没有其他信号驱动,其电平就 会为高阻态,换句话说,就是不知道电压是多少。 Isolation Cells 因此,在低功耗设计中,如果需要切断某块电路电源的话,则该电路的输出就会出现不定值,而与这些输 出连接的电路也就出现输入浮空的状态,因此就需要在关断电路的输出及其连接的模块之间加一个 Isolation Cell,在电源关闭时,将输出网络固定在某一个电平上,而打开电源后,该电路的输出等于输入, 不影响电路功能。 Isolation Cell 可以利用逻辑门来实现,利用与门实现可以使输出在关闭电源时为 0,被称为 Low Clamped Isolated Signal,利用或门实现可以使输出在关闭电源时为 1,被称为 High Clamped Isolated Signal,如 下图所示,X 是输出信号,“ISOLN”和”ISOL”分别是开关控制信号: 图 3- 3 逻辑门组成的 Isolation Cell 利用逻辑门组成的 Isolation Cell,会产生延时,对速度很快的电路来说可能会有所影响,因此也可以利用 一个 N-MOS 或者一个 P-MOS 以 Pull-Up 和 Pull-Down 电路实现,但这会产生多驱动问题,不是常用的方 法。 利用逻辑门组成的 Isolation Cell 是常见的 Cell,下面所示是一个 Isolation Cell 的 Liberty 格式描述: cell(isolation_cell) { is_isolation_cell : true ; #定义该 Cell 是 isolation_cell … pg_pin() { #电源 Pin 定义 pg_type : primary_power; … } pg_pin() { #地 Pin 定义 pg_type : primary_ground; … } pin (data) { direction : input; isolation_cell_data_pin : true ; #被控制的输入 Pin … }/* End pin group */ pin (enable) { isolation_cell_enable_pin : true ; #控制信号 … }/* End pin group */ … pin (output) { #输出信号 direction : output; power_down_function : (!pg_pin_name_P + pg_pin_name_G); #电源关闭后进入为 power down 状态
… }/* End pin group */ }/* End Cell group */ 3.2.1.3. Retention Register Cells 对于寄存器来说,当电源关闭后,其保存的数据也就不存在了,如果有些寄存器的数据,希望在断电后继续保持, 则需要使用一个专门的 Retention Register Cell,在断电前把寄存器的值锁存起来,重新打开电源后将数值存回 寄存器去。而该寄存器在断电时,会有一部分电源一直有电。 下图所示,是一种常用的 Retention Register Cell 基础结构: 图 3- 4 Retention Register Cell 基础结构图 如上图所示,Master/Slave Latches 是常规的寄存器,工作在 VDD_SW 电压域,也就是可以关断的电压域, D、CLK、RESETN 和 Q 是寄存器的控制和输出信号。RET 电路工作在 VDD 电压域,不会被关闭,当“SAVE” 信号有效,RET 会把寄存器的值保存起来,而 RESTORE 有效,RET 将保存的数值写入寄存器中(“SAVE” 和“RESTORE”具体时序关系需要参考 IP 提供商提供的数据,这里只是说明一下其功能)。 需要注意的是,一个 Retention Register Cell 比普通寄存器面积要大约 20%,如果设计的鲁棒性好一些, 甚至会大超过 50%的面积。 Retention Register Cell 不但是可以保持寄存器的值,还可以保持 Latch 的值,两种不同的结构图如下所示: 图 3- 5 Retention Cell 的电路结构示意图 图中(a)表示寄存器的 Retention Cell,当 Save 和 Restore 都是 0 的时候,使能保持电路不工作,而寄存器 的置位和复位端无效,寄存器正常工作。需要进入 Sleep 模式,首先需要停止寄存器的 Clk(Clk_On 信号 关闭),接着准备进入 Sleep 模式。当 Save 为 1 后,Q 端数据被采集进保持电路中,然后可以关闭电源 (Power_on 关闭)。打开电源后(Power_on 打开),将 Restore 置 1,如果保持电路输出为 1,则对寄 存器做异步置位,否则做异步复位,使寄存器输出与保持电路一致。需要注意的是,Save 为从 0 置 1 后, 不可以再有时钟改变 Q 端输出,且 Save 必须有一定的宽度,保证 Q 端数据被记录下来,同时关闭电源一
分享到:
收藏