Verifying UPF Functional Equivalency for Back-to-Back Isolation Cells Using CLP (Conformal Low Power)
When implementing back-to-back isolation cells (e.g., for bidirectional signals or redundant isolation), ensuring functional equivalency between the original design and the UPF-annotated netlist is critical. Here’s how to verify this using Synopsys Conformal Low Power (CLP).

Step 1: Understand Back-to-Back Isolation Cells
- Purpose:
- Used when a signal crosses two power domains (e.g.,
PD_A → PD_B → PD_A
). - Prevents floating values when either domain is powered off.
- Structure:
PD_A (ON) → Isolation Cell 1 → PD_B (OFF) → Isolation Cell 2 → PD_A (ON)
Step 2: UPF for Back-to-Back Isolation
Example UPF Commands
# Define isolation for Domain A (output to Domain B)
set_isolation iso_AB \
-domain PD_A \
-isolation_power_net VDD \
-isolation_ground_net VSS \
-clamp_value 0 \
-applies_to outputs
# Define isolation for Domain B (output back to Domain A)
set_isolation iso_BA \
-domain PD_B \
-isolation_power_net VDD \
-isolation_ground_net VSS \
-clamp_value 0 \
-applies_to outputs
Step 3: CLP Verification Flow
Key Checks
- Isolation Enable Conditions
- Verify isolation cells activate only when their domain is OFF.
- Clamping Behavior
- Ensure outputs are clamped to
0
/1
/Z
as specified.
- Bidirectional Signal Integrity
- No combinational loops or undefined states.
CLP Script Example
# Load reference (RTL) and implementation (UPF-netlist)
read_design -golden ../rtl/top.v -verilog
read_design -revised ../netlist/top_upf.v -verilog
read_upf -golden ../upf/power.upf
# Set power-aware comparison mode
set_low_power_compare -golden -revised
# Map power domains and isolation cells
add_ignore_output iso_AB* # Exclude isolation cells from logic comparison
add_ignore_output iso_BA*
# Verify functional equivalency
verify
# Report mismatches
report_failing_points -verbose
Step 4: Debugging Common Failures
Failure 1: Isolation Cell Not Triggering
- Cause: Incorrect
-isolation_signal
mapping. - Fix:
set_isolation_control iso_AB -domain PD_A -isolation_signal power_enable_AB
Failure 2: Clamping Conflict
- Cause: Back-to-back cells drive conflicting values (e.g.,
0
vs.1
). - Fix:
set_isolation iso_BA -clamp_value Z # High-Z when conflicting
Failure 3: Combinational Loop
- Cause: Bidirectional signal forms a loop when both domains are ON.
- Fix:
set_disable_domain_checking PD_A:PD_B # Allow direct connection when both ON
Step 5: Advanced Checks
Power State-Dependent Verification
# Check behavior when PD_A=ON, PD_B=OFF
set_power_state PD_A -state {ON}
set_power_state PD_B -state {OFF}
verify
# Check behavior when PD_A=OFF, PD_B=ON
set_power_state PD_A -state {OFF}
set_power_state PD_B -state {ON}
verify
Waveform Debugging
# Dump waveforms for failing scenarios
write_waveforms -golden -revised -format VCD -output isolation_debug.vcd

Key Takeaways
Check | CLP Command | UPF Requirement |
---|---|---|
Isolation Enable | set_power_state | Correct -isolation_signal . |
Clamping Value | report_failing_points | Match -clamp_value in UPF. |
Bidirectional Safety | set_disable_domain_checking | Avoid combinational loops. |
Power-State Coverage | verify -power_states | Test all ON/OFF combinations. |
Conclusion
- UPF Must Define:
- Isolation cells for both directions (
iso_AB
,iso_BA
). - Clamping behavior (
0
/1
/Z
).
- CLP Must Verify:
- Functional equivalency per power state.
- No undefined states or loops.
Pro Tip: Use -debug
mode in CLP to trace signal propagation through isolation cells.