Wednesday, April 13, 2022

UPF1.0 Basic Syntax Part#1



Here, are the examples of UPF1.0 basic syntax.


1) Create Supply Ports & Supply Nets & Connect Supply Nets

create_supply_net VCCL

create_supply_port VCCL

connect_supply_net VCCL -ports VCCL




create_supply_net VCCH

create_supply_port VCCH

connect_supply_net VCCH -ports VCCH




2) Create Supply Domains. If you have multiple power domains

create_power_domain DOMAIN_ON

create_power_domain PD_TEST -include_scope

create_power_domain DOMAIN_OFF -elements {A B} -update




3) upf_netlist : if use -scope and set_scope in create_power_domain

create_power_domain PD_MAIN -scope x0

create_supply_net VCCA -domain x0/PD_MAIN

set_scope x0

create_supply_port VCCA -direction in

connect_supply_net VCCA -ports VCCA




create_supply_net VSS_LA -domain DOMAIN_ON

create_supply_net VSS_LA -domain DOMAIN_OFF -reuse

Notice the use of reuse here if you list the VSS_LA twice for the create_supply_net

Note: If the domain is not used in the above 2 lines, then the VSS_LA will automatically be available to both DOMAIN_ON and DOMAIN_OFF

create_supply_port VSS_LA -domain DOMAIN_ON

connect_supply_net VSS_LA -ports VSS_LA




4) If you have a switch supply include the foolowing lines:

create_supply_net vcchmc_pg1_la -domain PD_LA_LAB -resolve parallel

Note: The resolve option specifies how the state and voltage of a supply net are resolved when the supply net is driven by one or more power switches.

'parallel = multiple drivers allowed'




5) if the port direction is not specified, it is considered to be input

6) If you have power ports that are output (power mux outputs, power regulator outputs etc)

create_supply_port VCCHG_BG -domain BIASGEN_TOP -direction out




7) Define connect supply nets for all the power switch instances and level shifters

connect_supply_net VCCH_PM -ports { xreg/VCCH_PM }

connect_supply_net VCC_TX -ports { xreg/VCCL_PM }

connect_supply_net VSSA -ports { xreg/VSS_PM }

Note: How do I connect 100 level shifters (LVL_SHIFTER) VCCL_PWR power ports to the VCCL_PWR port at the block level?

set PORT_VCCL [find_objects . -object_type port -pattern LVL_SHIFTER*/VCCL_PWR]

if {$PORT_VCCL != ""} {

connect_supply_net VCCL_PWR -ports $PORT_VCCL

}

#####If else for negative voltages####################

if { [catch { set negative_voltage $::env(NEGATIVE_VOLTAGE) }] } {

add_port_state vssaddg_la -state {DSPSUB_VSSADDG 0.0}

} else {

add_port_state vssaddg_la -state {DSPSUB_VSSADDG -0.13 -0.1 -0.07}

}

8) If VCCL_LA and VCC_PG_LA is functionally equivalent ##########

set_equivalent -function_only -nets {VCCL_LA VCC_PG_LA}




10) To correlate the corners of voltage triplets please add the following to your UPF file:

set_design_attributes -elements {.} -attribute correlated_supply_group "{VCCA VCCB} {VCCL VCCL_PG}"

This are two correlated groups. This first is between VCCA and VCCB supplies. while the second is correlate between VCCL and VCCL_PG.

Note: Please do not use asterisk like below as it will correlated all the available supplies, which means level shifter violation coverage may lose for unintended correlated supplies.

set_design_attributes -elements {.} -attribute correlated_supply_group "*"




11) Next step is to define the power domain for every port. You have 2 options

Option 1: Use set_related_supply_net for each of the ports in the block

Option 2: Define the default power domain using set_domain_supply_net . Then use set_related_supply_net for only ports which have different power domains compared to the default.




set_domain_supply_net DOMAIN_ON -primary_power_net VCCL_LA -primary_ground_net VSS_LA

set_related_supply_net -power VCCHG_LA -ground VSS_LA -object_list DL_TOP

set_domain_supply_net DOMAIN_OFF -primary_power_net VCCH_PG1_LA -primary_ground_net VSS_LA

set_related_supply_net -power VCCH_LA -ground VSS_LA -object_list DLB_BOT




Note: That the object list can be a wild card. if you have a 15 bit bus fusebit<0:15> the way to define it is -

set_related_supply_net -power vcchg_la -ground vss_la -object_list fusebit*

Note: That you can also define multiple ports with a single command

set_related_supply_net -power vcc_pm -ground vssexbxy_pm -object_list {lf_reset cr_k_ready cr_ecn_test cr_ecn_bypass cr_dsm_mode cr_dlta_sgma}




12) Next step is to define power switches, isolation buffers/cells and level shifter cells

Power Switch:

create_power_switch power switch name \

-domain domain_where_power_switch_exists \

-input_supply_port {port_name net_name_used_to_generate_the_power gate} \

-output_supply_port {port_name net_name_for_the_generated_power} \

-control_port {port_name net_name_of_control_signal_for_the_mux} \

-on_state {state_name input_supply_port {boolean_function}} \

-error_state {state_name {boolean_function}}




Sample Example:

create_power_switch pg_sw1 \

-domain PG_NONCORE_HMCCTRL \

-input_supply_port {vcc_in vccl_la} \

-output_supply_port {vccpg_la vcchmc_pg1_la} \

-control_port {ctrl pg_en_b} \

-on_state {on_state vcc_in {!ctrl}}




Two-Input Mux Example:

create_power_switch sw1 \

-domain PD_LA_LAB \

-output_supply_port {vout vcc_rxcx_crg_la} \

-input_supply_port {vin1 vccl_la} \

-input_supply_port {vin2 vcchg_la} \

-control_port {ss frzlogic} \

-on_state {full_s1 vin1 {ss}} \

-on_state {full_s2 vin2 {!ss}}




Isolation Buffer:

set_isolation isolation_strategy_name \

-domain power_domain_where_isolation_exists \

-clamp_value value_of_the_isolation_cell_output:_0/1/z/latch \

-isolation_power_net power_of_the_isolation_cell \

-isolation_ground_net ground_of_the_isolation_cell \

-applies_to outputs parts_of_the_power_domain_that_are_isolated:inputs/outputs/both \

-elements objects \

-no_isolation \

-diff_supply_only true

Note: if -no_isolation is specified, it means that the elements in the -elements list will not be isolated.

Example of no_isolation: set_isolation iso_strategy_name -domain domain_name -no_isolation -elements port_names_to_be_included

Note: diff_supply: Indicates whether ports connected to other ports with the same supply should be isolated. The default is -diff_supply_only FALSE if the option is not specified at all; if -diff_supply_only is specified without a value, the default value is TRUE.




Sample Example:

set_isolation hmcctrl_output \

-domain PG_NONCORE_HMCCTRL \

-clamp_value 0 \

-isolation_power_net vcc \

-isolation_ground_net vss \

-applies_to outputs \

-elements element_list \

-exclude_elements exclude_list \

-location self/parent

Isolation control:

set_isolation_control isolation_strategy_name \

-domain power_domain_where_isolation_exists \

-isolation_signal isolation_signal_name \

-isolation_sense logic_state_of_the_isolation_control_signal:low/high \

-location self/parent

Note: Better to use parent option as the powers in the parent are always on. also helps to save area.




Sample Example:

set_isolation_control hmcctrl_output \

-domain PG_NONCORE_HMCCTRL \

-isolation_signal pg_en_b \

-isolation_sense low \

-location parent

Note: if -no_shift is specified, it means that the elements in the -elements list will not be level shifted.

Example of no_shift:

set_level_shifter ls_strategy_name -domain domain_name -no_shift -elements port_names_to_be_included




Level Shifter Strategy:

set_level_shifter strategy_name \

-domain domain_name \

-applies_to inputs/outputs/both \

-location self \

-elements objects \

-exclude_elements objects \

-rule low_to_high/high_to_low/both




Sample Example:

set_level_shifter io_hmc_ls \

-domain AO_NONCORE \

-applies_to inputs \

-location self \

-elements {.} \

-exclude_elements list \

-rule low_to_high




13) Map the power switch/isolation buffers/ level shifters to the actual standard cell name

map_* strategy_name -domain power_domain_name [-lib_cells list]




Sample Example:

map_power_switch pg_sw1 -domain PG_NONCORE_HMCCTRL -lib_cells {d04pws00wd8b0}

map_isolation_cell hmcctrl_output -domain PG_NONCORE_HMCCTRL -lib_cells {d04swa00wd0b0}

map_level_shifter_cell io_hmc_ls -domain AO_NONCORE -lib_cells {d04slgn*}

map_power_switch pg_sw1 -domain PG_NONCORE_HMCCTRL -lib_cells {*psbf10a*}

map_isolation_cell hmcctrl_output -domain PG_NONCORE_HMCCTRL -lib_cells {*psan02a*}

map_level_shifter_cell io_hmc_ls -domain AO_NONCORE -lib_cells {*sg00nda*}




14) Power States:

List all the power supplies here. ON should be the nominal voltage. Off state should exist for all the powers as initially all powers are off.

Also include power gated supplies and muxed supplies in this list

add_port_state power_supply_name -state {ON 'value'} -state {OFF 'value'}




Sample Example:

add_port_state vccl_la -state {ON 0.73 0.9 0.98}

add_port_state vss_la -state {ON 0.0 0.0 0.0}

add_port_state pg_sw1/vccpg_la -state {ON 0.73 0.9 0.98} -state {OFF off}




Power State Table:

create_pst table_name -supplies {supply1 supply2}

add_pst_state name -pst table_name -state {supply1_state_name supply2_state_name}




Sample Example:

create_pst table1 -supplies {vccl_la pg_sw1/vccpg_la vss}

add_pst_state state1 -pst table1 -state {ON ON ON}

add_pst_state state2 -pst table1 -state {ON OFF ON}

add_pst_state state3 -pst table1 -state {OFF OFF ON}

0 Comments:

Post a Comment