芯片低功耗计划实现upf编写指南(附低功耗项目案例)

[复制链接]
发表于 2025-12-30 02:41:38 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
这里提供一个DEMO(pl8051_extend_chip),可以使读者更快的明白低功耗计划的底子。下图所示,是该计划的功能布局图:

图 41 pl8051_extend_chip功能布局图
更多关于数字IC低功耗计划实现upf教程,可从前往社区星球查阅。

由图 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举行一些特别的计划,也就是对整个计划举行低功耗计划,如下所示:

图 42 低功耗计划方案示例
低功耗IC后端培训 | 盘货Power Switch Cell在现实项目中应用留意事项
上图重要形貌以下信息:

    1. 2个电压域,TOP以及DES_DOMAIN。
    复制代码
    1. 电源设计外部提供,分1.2V的VDD12和1.0V的VDD10
    复制代码
    1. 设计中除DES电路几乎所有电路工作在1.0V的VDD电压域。
    复制代码
    1. U_Des由于工作速度要求较高,工作在1.2V的VDD12电压域DES_DOMAIN,但由于不使用的时候需要关断,以降低静态功耗,因此,通过一组PowerSwitch进行控制,控制信号来源为U_Pcu的PcuSfrDatOut[0]输出。该电压域与TOP电压域共用VSS地信号。
    复制代码
    1. 由于U_Des电路处于VDD12电压域,而U_Pcu处于VDD电压域,因此需要添加Level Shifter进行电平转换。
    复制代码
    1. U_Des电路输出信号,需要通过一个Isolation Cell,在关断电源时提供稳定电平,而该电平为1.2V,因此还需要利用Level Shifter转换成1.0V电压域信号,Isolation Cell的Enable信号来自于U_Pcu模块的PcuSfrDatOut[1]信号。
    复制代码
    1. 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
根据上述指令,工具会辨认出如下图所示中画圈的信息,电压域及假造电压端口开始出现:

图 43 电压域及假造电压端口信息
低功耗计划实现中secondary power pin的毗连方法汇总
必要留意的是电压端口只不外是假造存在的,并不是肯定在顶层毗连。
4.2 阐明电源网络
接着阐明每个电压域中的电源网络,发起从顶层往底层举行阐明,如起首阐明TOP的VSS,VDD。:
create_supply_net VDD
create_supply_net VSS
以上语句添加下图中画圈部分:

图 44 产生顶层电源网络
接着阐明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
以上语句添加下图中画圈部分:

图 45 子电路的电源网路阐明
然后将电源网络和电源端口毗连起来:
connect_supply_net VDD12 –port {VDD12}
connect_supply_net VDD –port {VDD}
connect_supply_net VSS–port {VSS}
以上语句添加下图中画圈部分:

图 46 毗连电源网络和电源端口
末了为每个电源域阐明主电源网络泉源,主电源就是该电压域平常逻辑工作利用的电源:
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句下令的效果表现在下图画圈中:

图 47 添加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内里
如许就可以产生如下图所示画圈部分电路:

图 48 插入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属性中看到。
根据以上形貌,会按照下图画圈表现图形貌电路:

图 49 更换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后产生的电路变革表现图如下图画圈地方示:

图 410 插入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                               N                      E                      T                      L                      I                      S                               T                         P                              A                      T                      H                          {NETLIST_PATH}               NETLISTP​ATH{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 >                               R                      E                      P                      O                      R                               T                         P                              A                      T                      H                          {REPORT_PATH}               REPORTP​ATH{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                               D                      D                               C                         P                              A                      T                      H                          {DDC_PATH}               DDCP​ATH{top}_noscan${VER}.ddc
write -format verilog -hierarchy -output                               N                      E                      T                      L                      I                      S                               T                         P                              A                      T                      H                          {NETLIST_PATH}               NETLISTP​ATH{top}_noscan${VER}.v
set write_sdc_output_lumped_net_capacitance false
set write_sdc_output_net_resistance false
write_sdc -version 1.5                               S                      D                               C                         P                              A                      T                      H                          {SDC_PATH}               SDCP​ATH{top}_cons${VER}.sdc
check_design >                               R                      E                      P                      O                      R                               T                         P                              A                      T                      H                          {REPORT_PATH}               REPORTP​ATH{top}_check_design_postcomp.rpt
report_area >                               R                      E                      P                      O                      R                               T                         P                              A                      T                      H                          {REPORT_PATH}               REPORTP​ATH{top}_area.rpt
check_mv_design –verbose >                               R                      E                      P                      O                      R                               T                         P                              A                      T                      H                          {REPORT_PATH}               REPORTP​ATH{top}_check_mv_design.rpt
report_constraint -all >                               R                      E                      P                      O                      R                               T                         P                              A                      T                      H                          {REPORT_PATH}               REPORTP​ATH{top}_all_vio.rpt
report_clock_gating -gating_elements >>                               R                      E                      P                      O                      R                               T                         P                              A                      T                      H                          {REPORT_PATH}               REPORTP​ATH{top}_icg.rpt
report_operand_isolation -verbose -isolated >                               R                      E                      P                      O                      R                               T                         P                              A                      T                      H                          {REPORT_PATH}               REPORTP​ATH{top}_opiso.rpt
report_threshold_voltage_group >                               R                      E                      P                      O                      R                               T                         P                              A                      T                      H                          {REPORT_PATH}               REPORTP​ATH{top}_VT.rpt
report_threshold_voltage_group -verbose >>                               R                      E                      P                      O                      R                               T                         P                              A                      T                      H                          {REPORT_PATH}               REPORTP​ATH{top}_VT.rpt
save_upf                               N                      E                      T                      L                      I                      S                               T                         P                              A                      T                      H                          {NETLIST_PATH}               NETLISTP​ATH{top}${VER}_dc.upf #upf’ for next part of flow
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表