UPF与低功耗设计实现实例 -- 附UPF与DC综合脚本

科技   2024-09-13 12:20   上海  

知识星球还有分享 3万字-129页的低功耗技术合集 精编版以及56万字+的个人笔记,更多干货知识以及后端笔记、视频教程等,欢迎加入星球进行查看。


《UPF与低功耗设计实现实例 -- 附UPF与DC综合脚本》
本文摘自《数字集成电路低功耗物理实现技术与UPF》
孙轶群  sun.yiqun@nationz.com.cn
国民技术股份有限公司
Nationz Technologies Inc
4.0 低功耗设计实现实例

这里提供一个DEMO(pl8051_extend_chip),可以使读者更快的理解低功耗设计的基础。下图所示,是该设计的功能结构图:

图4.1 pl8051_extend_chip功能结构图

由图41可以看出,整个设计主要是由一个8051控制器,通过SFR总线对其他模块进行控制,U_Des是一个算法模块,U_Pcu是功耗控制单元(Power Control Unit)。整个设计都在Clk的控制下进行工作,只有U_Des工作在ClkF下。

这里假设Clk(28ns)是ClkF(7ns)的4分频时钟,且与ClkF同源同向,这样才可以保证U_Des控制的正确性。

由于U_Des需要在较快的频率下工作,因此需要对U_Des进行一些特殊的设计,也就是对整个设计进行低功耗设计,如下所示:

图4.2 低功耗设计方案示例
上图主要描述以下信息:
1.     2个电压域,TOP以及DES_DOMAIN。
2.     电源设计外部提供,分1.2V的VDD12和1.0V的VDD10
3.     设计中除DES电路几乎所有电路工作在1.0V的VDD电压域。
4.     U_Des由于工作速度要求较高,工作在1.2V的VDD12电压域DES_DOMAIN,但由于不使用的时候需要关断,以降低静态功耗,因此,通过一组PowerSwitch进行控制,控制信号来源为U_Pcu的PcuSfrDatOut[0]输出。该电压域与TOP电压域共用VSS地信号。
5.     由于U_Des电路处于VDD12电压域,而U_Pcu处于VDD电压域,因此需要添加Level Shifter进行电平转换。
6.     U_Des电路输出信号,需要通过一个Isolation Cell,在关断电源时提供稳定电平,而该电平为1.2V,因此还需要利用Level Shifter转换成1.0V电压域信号,Isolation Cell的Enable信号来自于U_Pcu模块的PcuSfrDatOut[1]信号。
7.     U_Des电路中的寄存器需要使用Retention Register,save和restore控制信号分别来自于U_Pcu输出PcuSfrDatOut[2]和PcuSfrDatOut[3]经过Level Shifter产生的信号。
Synopsys公司为低功耗设计提供了一整套的解决方案,即UPF设计流程。UPF(Unify Power Format)是一种描述功耗设计思想的文件,Synopsys Galaxy Implementation Platform只需要读取UPF文件,就可以将低功耗设计思路实现,而Synopsys Discovery Verification Platform读取UPF后,可以对低功耗思路以及最终实现的电路进行验证。
接下来,我们利用UPF描述该DEMO的功耗设计思路。

4.1    申明电压域以及虚拟电压接口
首先申明电压域,并申明VDD、VDD12以及VSS等电压端口:
create_power_domain TOP       
create_power_domain DES_DOMAIN_domain –elements U_Des
create_supply_port VDD
create_supply_port VDD12
create_supply_port VSS
根据上述指令,工具会识别出如下图所示中画圈的信息,电压域及虚拟电压端口开始出现:
图4.3 电压域及虚拟电压端口信息
需要注意的是电压端口只不过是虚拟存在的,并不是一定在顶层连接。

4.2    申明电源网络
接着申明每个电压域中的电源网络,建议从顶层往底层进行申明,如首先申明TOP的VSS、VDD:
create_supply_net VDD       
create_supply_net VSS
以上语句添加下图中画圈部分:
图4.4 产生顶层电源网络
接着申明DES_DOMAIN的电源网络,但需要注意的是,如果需要插入Level Shifter,最好是在与其有连接关系的电源域(TOP)同时申请电源线,并连接起来:
create_supply_net VDD12       
create_supply_net VDD12 –domain DES_DOMAIN –reuse #DES_DOMAIN的VDD12与TOP的VSS共用一个网络,因此需要-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
以上语句添加下图中画圈部分:
图4.5 子电路的电源网路申明
然后将电源网络和电源端口连接起来:
connect_supply_net VDD12 –port {VDD12}       
connect_supply_net VDD –port {VDD}
connect_supply_net VSS–port {VSS}
以上语句添加下图中画圈部分:
图4.6 连接电源网络和电源端口
最后为每个电源域申明主电源网络来源,主电源就是该电压域普通逻辑工作使用的电源:
set_domain_supply_net TOP –primary_power_net VDD –primary_ground_net VSS       
set_domain_supply_net DES_DOMAIN –primary_power_net VDD12G –primary_ground_net VSS
做完这一步,电源网络申明基本完成。

4.3    添加Power Switch
这添加Power Switch主要是2步,第一步创建Power Switch,第二步map Power Switch。可以参看以下脚本进行:
# Power Switch       
create_power_switch des_sw
    -domain DES_DOMAIN
    -input_supply_port {in VDD12}
    -output_supply_port {out VDD12G}
    -control_port {des_po U_Pcu/PcuSfrDatOut[0]}
    -on_state {state_on in {!des_po}}
    -off_state {OFF {des_po}}
map_power_switch des_sw
    -domain DES_DOMAIN
    -lib_cell HDRSIHVTD0
create_power_switch和map_power_switch在综合时只会检查语法,不会有实际效果,但在综合时将该UPF指令读入系统,可以由DC输出相应的UPF给Synopsys的PR工具,PR工具可以自动识别这些指令,到时才会真正添加Power Switch。2句命令的结果示意在下图画圈中:
图4.7 添加Power Switch Cell

4.4    建立电源状态表格(Power State Table, PST)
在Power Switch插入以后,需要对电压域的有效电压,以及不同电压域之间的关系进行设置,同时建立电压分布及关断的情景(scenarios),可以用于静态电压分析、仿真等。
建立电源状态表格,可以参看以下脚本:
add_port_state VDD –state {LV 1.0} #VDD是1.0V,属于低电压域(LV)状态       
add_port_state VDD12 –state {HV 1.2} #VDD12是1.2V,属于高电压域(HV)状态
add_port_state des_sw/out –state {HV 1.2}   #Power Switch输出是1.2V,属于高电压域(HV)状态
                   -state {OFF off}#关闭状态(OFF),无电压(off)
add_port_state VSS –state {ON 0.0} #VSS处于常开状态(ON),电压0V
create_pst design_pst –supplies {VDD VDD12 VDD12G} #建立一个PST,由3个电源状态不同组成
add_pst_state design_work –pst design_pst –state {LV HV HV} #design_work状态下,三组电源都开
add_pst_state stand_by –pst top_pst –state {LV HV OFF} #stand_by状态下,des_sw/out输出电源为关闭状态
需要注意add_pst_state的-state括号里的描述顺序,必须与create_pst的-supplies里一致,选择的状态必须与add_port_state的-state里描述的一致才可以。
这样就建立了下表所示的PST,design_pst:

VDD
VDD12
VDD12G
design_work
LV
HV
HV
stand_by
LV
HV
OF
由此建立了PST,分析工具或仿真工具就知道需要对哪些状态进行分析了。

4.5    插入Isolation Cell
下面需要为DES_DOMAIN输出给TOP的输出信号添加Isolation Cell。脚本如下所示:  
# Isolation Cell       
set_isolation des_iso_out
    -domain DES_DOMAIN
    -isolation_power_net VDD12 -isolation_ground_net VSS  #隔离后只有VDD12供电
    -clamp_value 1  #关电后输出逻辑1
    -applies_to outputs #对于所有输出添加
set_isolation_control des_iso_out
    -domain DES_DOMAIN
    -isolation_signal U_Pcu/PcuSfrDatOut[1]
    -isolation_sense high  #控制信号为高时ISO有效
    -location self # Isolation Cell添加在DES_DOMAIN里面
 
 这样就可以产生如下图所示画圈部分电路:
图4.8 插入Isolation Cell

4.6    替换Retention Register Cell
接着需要使用Retention Register Cell将DES_DOMAIN中在关断电源后需要保留数据的寄存器替换为Retention Register Cell,可以使用如下脚本:
# Retention Register       
set_retention des_ret -domain DES_DOMAIN
    -retention_power_net VDD12G -retention_ground_net VSS #retention_power_net是关电的Power,表示需要保持VDD12G电源域的数据
set_retention_control des_ret -domain DES_DOMAIN
    -save_signal {U_Pcu/PcuSfrDatOut[2] high}
    -restore_signal {U_Pcu/PcuSfrDatOut[3] low}
map_retention_cell des_ret
    -domain DES_DOMAIN
-lib_cell_type RSDFCSD1
#RSDFCSD1是带有异步置位的Retention Register Type,可以从lib文件中retention_cell属性中看到。
根据以上描述,会按照下图画圈示意图描述电路:
图4.9 替换Retention Register Cell

4.7    插入Level Shifters
插入Level Shifters是根据PST的定义进行,根据PST定义看来,DES_DOMAIN和TOP之间需要插入Level Shifters,其中DES_DOMAIN输出的pin(Isolation Cell的输出)需要插入H->L的Level Shifter,而其输入则需要插入L->H的Level Shifter。
插入Level Shifter在Compile过程中自动进行,也可以利用UPF命令set_level_shifter定义插入的规则。
插入Level Shifter后产生的电路变化示意图如下图画圈处所示:
图4.10 插入Level Shifters

4.8    UPF Demo
######################       
## CREATE POWER DOMAIS
######################
create_power_domain TOP
create_power_domain DES_DOMAIN -elements U_Des
#######################
## TOPLEVEL CONNECTIONS
#######################
#VDD
create_supply_port VDD
create_supply_net VDD -domain TOP
create_supply_net VDD -domain DES_DOMAIN -reuse
connect_supply_net VDD -port VDD
#VSS
create_supply_port VSS
create_supply_net VSS -domain TOP
create_supply_net VSS -domain DES_DOMAIN -reuse
connect_supply_net VSS -port VSS
#VDD12
create_supply_port VDD12
create_supply_net VDD12 -domain TOP
create_supply_net VDD12 -domain DES_DOMAIN -reuse
connect_supply_net VDD12 -port VDD12
#VDD12G
create_supply_net VDD12G -domain DES_DOMAIN
create_supply_net VDD12G -domain TOP -reuse
#####################
## PRIMARY POWER NETS
#####################
set_domain_supply_net TOP   -primary_power_net VDD   -primary_ground_net VSS
set_domain_supply_net DES_DOMAIN  -primary_power_net VDD12G -primary_ground_net VSS
###################
## DES_DOMAIN SETUP
###################
# Power Switch
create_power_switch des_sw
    -domain DES_DOMAIN
    -input_supply_port {in VDD12}
    -output_supply_port {out VDD12G}
    -control_port {des_po U_Pcu/PcuSfrDatOut[0]}
    -on_state {state_on in {!des_po}}
    -off_state {OFF {des_po}}
map_power_switch des_sw
    -domain DES_DOMAIN
    -lib_cell HDRSIHVTD0
# Isolation Cell
set_isolation des_iso_out
    -domain DES_DOMAIN
    -isolation_power_net VDD12 -isolation_ground_net VSS
    -clamp_value 1
    -applies_to outputs
set_isolation_control des_iso_out
    -domain DES_DOMAIN
    -isolation_signal U_Pcu/PcuSfrDatOut[1]
    -isolation_sense high
    -location self
# Retention Register
set_retention des_ret -domain DES_DOMAIN
    -retention_power_net VDD12G -retention_ground_net VSS
set_retention_control des_ret -domain DES_DOMAIN
    -save_signal {U_Pcu/PcuSfrDatOut[2] high}
    -restore_signal {U_Pcu/PcuSfrDatOut[3] low}
map_retention_cell des_ret
    -domain DES_DOMAIN
    -lib_cell_type RSDFCRD1
# Level Shifter
set_level_shifter des_ls_lh
    -domain DES_DOMAIN
    -applies_to inputs
    -threshold 0.1
    -rule low_to_high
    -location parent
set_level_shifter des_ls_hl
    -domain DES_DOMAIN
    -applies_to outputs
    -threshold 0.1
    -rule high_to_low
    -location parent
#####################
# ADD PORT STATE INFO
#####################
add_port_state VDD -state {LV 0.84}
add_port_state VDD12 -state {HV 1.08}
add_port_state VSS -state {ON 0.0}
add_port_state des_sw/out -state {HV 1.08}
                          -state {OFF off}
#############
## CREATE PST
#############
create_pst design_pst -supplies {VDD VDD12 VDD12G VSS}
add_pst_state design_work -pst design_pst -state {LV HV HV ON}
add_pst_state stand_by -pst design_pst -state {LV HV OFF ON}

4.9    DC UPF Flow Script Demo
source -e ../scr/synopsys_dc.setup       
source -e ../scr/ variable.tcl
set_clock_gating_style -min ${CG_MIN_BITWIDTH} -max_fanout ${CG_MAX_FANOUT}
                             -sequential_cell ${CG_SEQ_CELL}
                             -positive_edge_logic ${CG_POS_CELL_LIST}
                             -negative_edge_logic ${CG_NEG_CELL_LIST}
                             -control_point ${CG_CONTROL_POINT}
                             -control_signal ${CG_CONTROL_SIGNAL}
                             -setup ${CG_SETUP_VALUE} -hold ${CG_HOLD_VALUE}
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 be added in backend flow
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}_ignored_layers.rpt
set_clock_gating_check -setup ${CG_SETUP_CHECK} -hold ${CG_HOLD_CHECK} [all_clocks]
set_fix_multiple_port_nets -feedthroughs -outputs -buffer_constant
set_attr -type string tcbn90lphpwc0d70d9_pg.db:tcbn90lphpwc0d70d9 default_threshold_voltage_group SVT_LS_LH
set_attr -type string tcbn90lphphvtwc0d70d9_pg.db:tcbn90lphphvtwc0d70d9 default_threshold_voltage_group HVT_LP_LH
set_attr -type string tcbn90lphpwc0d7_pg.db:tcbn90lphpwc0d7 default_threshold_voltage_group SVT_LV
set_attr -type string tcbn90lphphvtwc0d7_pg.db:tcbn90lphphvtwc0d7 default_threshold_voltage_group HVT_LV
set_attr -type string tcbn90lphpwc_pg.db:tcbn90lphpwc default_threshold_voltage_group SVT
set_attr -type string tcbn90lphphvtwc_pg.db:tcbn90lphphvtwc default_threshold_voltage_group HVT
set_attr -type string tcbn90lphphvtcgwc_pg.db:tcbn90lphphvtcgwc default_threshold_voltage_group HVT_CG
set_attr -type string tcbn90lphphvtwc0d90d9_pg.db:tcbn90lphphvtwc0d90d9 default_threshold_voltage_group HVT_ISO
set_attr -type string tcbn90lphphvtwc0d90d7_pg.db:tcbn90lphphvtwc0d90d7 default_threshold_voltage_group HVT_LS_HL
set_attr -type string tcbn90lphpwc0d90d7_pg.db:tcbn90lphpwc0d90d7 default_threshold_voltage_group SVT_LS_HL
check_mv_design -verbose
 compile_ultra -scan -no_autoungroup -no_boundary_optimization
change_names -rules verilog -hierarchy
write -format ddc -hierarchy -output ${DDC_PATH}${top}_noscan${VER}.ddc
write -format verilog -hierarchy -output ${NETLIST_PATH}${top}_noscan${VER}.v
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}.sdc
check_design > ${REPORT_PATH}${top}_check_design_postcomp.rpt
report_area > ${REPORT_PATH}${top}_area.rpt
check_mv_design –verbose > ${REPORT_PATH}${top}_check_mv_design.rpt
report_constraint -all > ${REPORT_PATH}${top}_all_vio.rpt
report_clock_gating -gating_elements >> ${REPORT_PATH}${top}_icg.rpt
report_operand_isolation -verbose -isolated > ${REPORT_PATH}${top}_opiso.rpt
report_threshold_voltage_group > ${REPORT_PATH}${top}_VT.rpt
report_threshold_voltage_group -verbose >> ${REPORT_PATH}${top}_VT.rpt
save_upf ${NETLIST_PATH}${top}${VER}_dc.upf #upf’ for next part of flow

5.0  总结
本文从CMOS电路功耗原理入手,针对不同工艺尺寸下数字集成电路的低功耗物理实现方法进行描述,并通过一个例子介绍了Synopsys UPF(Unified Power Format)文件对低功耗设计的描述原理。UPF是Synopsys公司提出的一种对芯片中电源域设计进行约束的文件格式。通过与UPF格式匹配的Liberty文件,UPF约束文件可以被整套Galaxy物理实现平台的任何一个环节直接使用,并将设计者的电源设计约束传递给设计工具,由工具完成设计的实现工作,从而实现整套数字集成电路低功耗物理实现的流程。

参考文献
[1] Page 14, “Low Power Methodology Manual For System on Chip Design.”, Micheal Keating, David Flynn, Robert Aitken, Alan Gibbons, KaiJian Shi, ISBN 978-0-387-71818-7
[2] Page 42, “Low Power Methodology Manual For System on Chip Design.”, Micheal Keating, David Flynn, Robert Aitken, Alan Gibbons, KaiJian Shi, ISBN 978-0-387-71818-7
[3] Page 2-29, “Library Compiler™ User Guide: Modeling Timing, Signal Integrity, and Power in Technology Libraries Version A-2007.12, December 2007”
[4] Page 2-32, “Library Compiler™ User Guide: Modeling Timing, Signal Integrity, and Power in Technology Libraries Version A-2007.12, December 2007”
[5] Page 46, “Low Power Methodology Manual For System on Chip Design.”, Micheal Keating, David Flynn, Robert Aitken, Alan Gibbons, KaiJian Shi, ISBN 978-0-387-71818-7
[6] Page 2-23, “Library Compiler™ User Guide: Modeling Timing, Signal Integrity, and Power in Technology Libraries Version A-2007.12, December 2007”
[7] Page 55, “Low Power Methodology Manual For System on Chip Design.”, Micheal Keating, David Flynn, Robert Aitken, Alan Gibbons, KaiJian Shi, ISBN 978-0-387-71818-7
[8] Page 2-46, “Library Compiler™ User Guide: Modeling Timing, Signal Integrity, and Power in Technology Libraries Version A-2007.12, December 2007”
[9] Page 2-11, “Library Compiler™ User Guide: Modeling Timing, Signal Integrity, and Power in Technology Libraries Version A-2007.12, December 2007”
[10]Page 2-2, “Library Compiler™ User Guide: Modeling Timing, Signal Integrity, and Power in Technology Libraries Version A-2007.12, December 2007”

相关推文:
1、门控时钟(Clock Gating)
妇孺皆知的低功耗技术 | 门控时钟(Clock Gating, CG)技术
忆往昔--集成门控时钟技术的前世--分离门控时钟技术
Memory门控时钟低功耗 --在Floorplan和Placement阶段有何考虑?
效果贼棒 | 门控时钟低功耗--Auto Bound 与Physical Aware Clock Gating
集成门控时钟 多级门控时钟 层次门控时钟 门控时钟的形式验证
门控时钟的可测性设计(DFT)
门控时钟低功耗--在Placement阶段有什么技巧?

XOR自门控与Design Compiler topo实现 | 送网易云课程优惠券


2、数据门控(Data Gating)
低功耗设计技术之Data Gating(数据门控)与Operand Isolation(操作数分离)

3、多电源电压(Multi VDD Circuit Technology)
低功耗设计技术--Multi VDD
低功耗设计技术--Multi VDD--Level shifter

4、动态电压频率调整(Dynamic Voltage Frequency Scaling, DVFS
电压缩放技术(Voltage Scaling)概述与动态电压频率缩放(DVFS)技术
自适应电压缩放(Adaptive Voltage Scaling, AVS)


星球简介


目前星球中一共分享了20本+系统性的、整理成册的笔记,高达56万字+,2024年星球将分享更多私人笔记,逐步完善整个IC设计生态。
以后知识星球也会陆续会开放:
《Timing/DRV修复的专题笔记》 《ICC2 flow教程》 《Makefile在IC设计中的应用》和 《RedHawk教程笔记》 等等。
目前已上传的笔记有:
  • 低功耗设计技术总结 - 3万字,129页
  • IR drop的分析与修复总结 - 4.3千字,20页
  • 数字后端理论及实践-ICC干货笔记 - 11万字,423页
  • 数字后端理论及实践-Innouvs教程(第4版)- 5.7万字,316页
  • ICC2教程-星球精编版 - 2万字,125页
  • 数字后端理论及实践-Innouvs教程(第5版)- 11.8万字,635页
  • 面试笔试题整理 面试笔试经验分享(第1版)- 1.6万字,48页
  • 面试笔试题整理 面试笔试经验分享(第2版)- 2.3万字,87页
  • ICC2 ICC与Innovus的命令对照(第1版)
  • Tcl与DesignCompiler教程(第1版)- 6.1万字,183页
  • DRC规则讲解、DRC的检查与修复(第1版)- 7.3千字,26页
  • Congestion的分析与修复专题(第1版)- 1.2万字,41页 
  • Perl-Tk教程(第1版)- 1.6万字 73页
  • 星球精华推文分类整理合集(第1版)- 1.8万字,75页
  • 星球精华推文分类整理合集(第2版)- 4.4万字,160页
  • 面试笔试题整理 面试笔试经验分享(第3版)- 2.7万字,96页
  • 星球精华推文分类整理合集(第3版)- 6.6万字,240页
  • 时序分析与sdc专题笔记(第1版) - 3.1万字,115页
  • 星球精华推文分类整理合集(第4版)- 8.4万字,296页
  • 面试笔试题整理 面试笔试经验分享(第4版)- 3.2万字,103页
  • 更多教程、笔记持续更新中。。。 


集成电路设计及EDA教程
知识 前端 后端 DFT 低功耗 验证 EDA 1rtl检查:LEDA 2仿真:VCS 3逻辑综合:DC 4形式验证:Formality 5布局布线:ICC 6STA:PT 7功耗分析:PTPX 8DRC LVS:Calibre
 最新文章