How do you tell the tools which supply drives or receives a top-level port?
From PDVerse Low-Power Physical Design Mentor Guide · pdVerse Mentor Guide
Short Answer
Use set_port_attributes (UPF) with -driver_supply on inputs and -receiver_supply on outputs to say which supply set drives or reads a top-level port; set_related_supply_net (UPF) does the same job with supply nets. The tools compare that supply with the domain on the inside to decide whether isolation or a level shifter is needed. Get it wrong and you get missing cells on real crossings, or extra cells on crossings that do not exist.
Technical Explanation
- Default: with nothing set, a top-level port is treated as powered by the primary supply of the top domain.
- Driver vs receiver:
-driver_supplydescribes the logic that drives the port;-receiver_supplydescribes the logic that reads it. - PT precedence:
-portsattributes, then-elementsattributes, thenset_related_supply_net(UPF), then the top domain primary supply. - ICC2 black box input: HighConn
-receiver_supply, then HighConn related supply net, then the same two at LowConn, then the domain primary. - ICC2 hard macro input: HighConn
-receiver_supply, then HighConn related supply net, then the Liberty related_power_port of the pin. - Last wins: repeating
set_port_attributes(UPF) on the same object overrides the earlier setting. - What breaks: an input really driven at 0.9 V but left on the 1.0 V default gets no level shifter, so its 1.0 V load sees a weak high.
# [UPF] design.upf
create_supply_set SS_SNS -function {power VDD0p9} -function {ground VSS}
set_port_attributes -ports {sensor_in} -driver_supply SS_SNS
set_port_attributes -ports {irq_out} -receiver_supply SS_AON
# [ICC2] icc2_shell
get_related_supply_set [get_ports sensor_in]
check_mv_designWhat To Check
- Every top-level input has a driver supply that matches its real source.
- Outputs read by switchable or lower-voltage logic have a receiver supply.
get_related_supply_set(ICC2) returns the intended supply for each boundary port.- No port attribute is overridden by a later line on the same port.
Command Checks & Actions
set_port_attributes -ports {sensor_in} -driver_supply SS_SNSDeclare the supply of the logic driving an input port
set_port_attributes -ports {irq_out} -receiver_supply SS_AONDeclare the supply of the logic reading an output port
get_related_supply_set [get_ports sensor_in]Return the resolved related supply set of the port
check_mv_designCheck isolation and level-shifter needs using the resolved supplies
Healthy, Suspicious & Hard-stop Results
- Healthy (illustrative): sensor_in resolves to SS_SNS at 0.9 V, and one low-to-high level shifter sits between the port and U_PC.
- Suspicious (illustrative): Several inputs resolve to the top primary supply by default; confirm each one really is driven at 1.0 V.
- Hard stop: sensor_in resolves to SS_AON at 1.0 V while the sensor drives 0.9 V: no level shifter, and the load sees a weak high.
Common Mistake
The Trap: Leaving top-level inputs without a driver supply because the top domain is always on.
- Inputs driven at another voltage, or from a source that can switch off, default to the top primary supply, so ICC2 skips the shifter or clamp they need.
What The Interviewer Is Testing
- Do you know what supply a port gets when you say nothing?
- Can you keep driver and receiver supply straight?
Follow-up Question & Model Response
"When would you use set_related_supply_net instead of set_port_attributes?"
Candidate Model Response: Both give a port a related supply, but set_related_supply_net names supply nets while set_port_attributes names a supply set. Older UPF files and PT scripts often use set_related_supply_net, and the PT guide says set_port_attributes can replace it. When both exist, the port attribute wins in the precedence order. Pick one style per design so a reader finds the supply in one place.
Practical Example
Design Scenario: (illustrative) MYCHIP input sensor_in comes from an external sensor running at 0.9 V. With no attribute it defaults to the PD_MYCHIP primary at 1.0 V, so ICC2 sees no voltage crossing. After set_port_attributes -ports {sensor_in} -driver_supply SS_SNS (UPF), get_related_supply_set (ICC2) returns SS_SNS, and create_mv_cells (ICC2) inserts a low-to-high level shifter between the port and U_PC. The shifter cell name LS_LH_X1 is illustrative.
Low-Power & UPF Handbook
Master Low-Power VLSI & Multivoltage Design
Read the complete low-power guide library covering power domains, level shifters, isolation clamps, state retention, and UPF signoff verification.

Continue practising