Magic Blue Smoke

 

UPF example

Its been a very busy month and could not write as expected. Lately I am getting many questions on a sample power intent diagram and associated UPF. Given below is a sample Power Intent Diagram of a design, which has 4 power domains, followed by How to represent this Intent into UPF.

Power Intent Diagram

Above Power Intent can be represented in UPF as given below

######## Create Power Domains

create_power_domain TOP
create_power_domain TX_AON -elements {transmitter power_controller}
create_power_domain RECIEVER -elements reciever
create_power_domain CRC_GEN -elements checker

## Toplevel Connections

# VDD_HIGH (1.08V)
create_supply_port VDD_HIGH
create_supply_net VDD_HIGH -domain TOP
create_supply_net VDD_HIGH -domain TX_AON -reuse
create_supply_net VDD_HIGH -domain CRC_GEN -reuse
connect_supply_net VDD_HIGH -ports VDD_HIGH

# VDD_LOW (0.864V)
create_supply_port VDD_LOW
create_supply_net VDD_LOW -domain TOP
create_supply_net VDD_LOW -domain RECIEVER -reuse
connect_supply_net VDD_LOW -ports VDD_LOW

# VSS (0.0V)
create_supply_port VSS
create_supply_net VSS -domain TOP
create_supply_net VSS -domain TX_AON -reuse
create_supply_net VSS -domain RECIEVER -reuse
create_supply_net VSS -domain CRC_GEN -reuse
connect_supply_net VSS -ports VSS

### RECIEVER/CRC DOMAIN Power Connections

create_supply_net VDD_LOW_RX_VIRTUAL -domain RECIEVER
create_supply_net VDD_HIGH_CRC_VIRTUAL -domain CRC_GEN

### Associate Supply Nets at the top level

set_domain_supply_net TOP -primary_power_net VDD_HIGH -primary_ground_net VSS
set_domain_supply_net TX_AON -primary_power_net VDD_HIGH -primary_ground_net VSS
set_domain_supply_net RECIEVER -primary_power_net VDD_LOW_RX_VIRTUAL -primary_ground_net VSS
set_domain_supply_net CRC_GEN -primary_power_net VDD_HIGH_CRC_VIRTUAL -primary_ground_net VSS

######### Create Switch to Shut-Down a Block

create_power_switch rx_sw
-domain RECIEVER
-input_supply_port {in VDD_LOW}
-output_supply_port {out VDD_LOW_RX_VIRTUAL}
-control_port {rx_sd power_controller/rx_sd}
-on_state {ON_STATE_RX in {!rx_sd}}

create_power_switch crc_sw -domain CRC_GEN -input_supply_port {in VDD_HIGH} -output_supply_port {out VDD_HIGH_CRC_VIRTUAL} -control_port {crc_sd power_controller/crc_sd} -on_state {ON_STATE_CRC in {!crc_sd}}

##### Isolation Strategy

set_isolation rx_iso_out
-domain RECIEVER
-isolation_power_net VDD_HIGH -isolation_ground_net VSS
-clamp_value 1
-applies_to outputs

#### Retention Register Strategy

set_retention crc_retain -domain CRC_GEN -retention_power_net VDD_HIGH -retention_ground_net VSS
set_retention_control crc_retain -domain CRC_GEN -save_signal {crc_save high} -restore_signal {crc_restore high}

#### Level Shifter Strategy

set_level_shifter tx_aon_ls_out -domain TX_AON -applies_to outputs -location self -rule both

### Create Power State Table

add_port_state VDD_HIGH -state {HighVoltage 1.08}
add_port_state VDD_LOW -state {LowVoltage 0.864}
add_port_state crc_sw/out -state {HighVoltage 1.08} -state {CRC_OFF off}
add_port_state rx_sw/out -state {LowVoltage 0.864} -state {RX_OFF off}

create_pst lvds_system_pst -supplies {VDD_HIGH VDD_LOW VDD_HIGH_CRC_VIRTUAL VDD_LOW_RX_VIRTUAL}
add_pst_state PRE_BOOT -pst lvds_system_pst -state { HighVoltage LowVoltage CRC_OFF RX_OFF}
add_pst_state CRC_ON -pst lvds_system_pst -state { HighVoltage LowVoltage HighVoltage RX_OFF}
add_pst_state RX_ON -pst lvds_system_pst -state { HighVoltage LowVoltage CRC_OFF LowVoltage}
add_pst_state ALL_ON -pst lvds_system_pst -state { HighVoltage LowVoltage HighVoltage LowVoltage}

The above completely represents the intent one would want tools to interpret, while making decisions on verification/implementation strategies.