FCMV
FCMV
FCMV
Guide
Version T-2022.03, March 2022
Copyright and Proprietary Information Notice
© 2022 Synopsys, Inc. This Synopsys software and all associated documentation are proprietary to Synopsys, Inc.
and may only be used pursuant to the terms and conditions of a written license agreement with Synopsys, Inc. All
other use, reproduction, modification, or distribution of the Synopsys software or the associated documentation is
strictly prohibited.
Destination Control Statement
All technical data contained in this publication is subject to the export control laws of the United States of America.
Disclosure to nationals of other countries contrary to United States law is prohibited. It is the reader’s responsibility to
determine the applicable regulations and to comply with them.
Disclaimer
SYNOPSYS, INC., AND ITS LICENSORS MAKE NO WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
WITH REGARD TO THIS MATERIAL, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
Trademarks
Synopsys and certain Synopsys product names are trademarks of Synopsys, as set forth at
https://www.synopsys.com/company/legal/trademarks-brands.html.
All other product or company names may be trademarks of their respective owners.
Free and Open-Source Licensing Notices
If applicable, Free and Open-Source Software (FOSS) licensing notices are available in the product installation.
Third-Party Links
Any links to third-party websites included in this document are for your convenience only. Synopsys does not endorse
and is not responsible for such websites and their practices, including privacy practices, availability, and content.
www.synopsys.com
Contents
New in This Release . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .9
Related Products, Publications, and Trademarks . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
Conventions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
Customer Support . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
3
Feedback
Contents
4
Feedback
Contents
5
Feedback
Contents
6
Feedback
Contents
7
Feedback
Contents
8
Feedback
You might also want to see the documentation for the following related Synopsys products:
• PrimeTime® Suite
TM
• Library Compiler
Conventions
The following conventions are used in Synopsys documentation.
Convention Description
Courier bold Indicates user input—text you type verbatim—in examples, such
as
prompt> write_file top
Edit > Copy Indicates a path to a menu command, such as opening the Edit
menu and choosing Copy.
Customer Support
Customer support is available through SolvNetPlus.
Accessing SolvNetPlus
The SolvNetPlus site includes a knowledge base of technical articles and answers to
frequently asked questions about Synopsys tools. The SolvNetPlus site also gives you
access to a wide range of Synopsys online services including software downloads,
documentation, and technical support.
To access the SolvNetPlus site, go to the following address:
https://solvnetplus.synopsys.com
If prompted, enter your user name and password. If you do not have a Synopsys user
name and password, follow the instructions to sign up for an account.
If you need help using the SolvNetPlus site, click REGISTRATION HELP in the top-right
menu bar.
1
Multivoltage Design Concepts
A method for reducing power is using multivoltage design. In multivoltage designs, the
subdesign instances operate at different voltages. In multisupply designs, the voltages
of the various subdesigns are the same, but the blocks can be powered on and off
independently. In this user guide, unless otherwise noted, the term multivoltage includes
multisupply and mixed multisupply-multivoltage designs.
This section covers the following topics:
• Multivoltage and Multisupply Designs
• IEEE 1801 UPF Support
• Power Intent Concepts
• Power Domains
• Voltage Areas
• Power Network Example
step the voltage up or down from the input side of the cell to the output side. The isolation
cells isolate the power domain. Note that an enable-type level shifter can be used as an
isolation cell.
said to be “reused” in multiple domains. A supply port is a power supply connection point
between two adjacent levels of the design hierarchy, between the parent and child blocks
of the hierarchy. A supply net that crosses from one level of the design hierarchy to the
next passes through a supply port.
A supply set is an abstract collection of supply nets, consisting of two supply functions,
power and ground. A supply set is domain-independent, which means that the power and
ground in the supply set are available to be used by any power domain defined within the
scope where the supply set was created. However, each power domain can be restricted
to limit its usage of supply sets within that power domain.
You can use supply sets to define power intent at the RTL level, so you can synthesize
a design even before you know the names of the actual supply nets. A supply set is an
abstraction of the supply nets and supply ports needed to power a design. Before such a
design can physically implemented (placed and routed), its supply sets must be refined, or
associated with actual supply nets.
A supply set handle is an abstract supply set created for a power domain. By default,
a power domain has supply set handles for the domain’s primary supply set, a default
isolation supply set, and a default retention supply set. These supply set handles let you
synthesize a design even before you create any supply sets, supply nets, and supply ports
for the power domain. Before such a design can be physically implemented, its supply
set handles must be refined, or associated with actual supply sets; and those supply sets
must be refined so that they are associated with actual supply nets.
A power switch (or simply switch) is a device that turns on and turns off power for a supply
net. A switch has an input supply net, an output supply net that can be switched on or off,
and at least one input signal to control switching. The switch can optionally have multiple
input control signals and one or more output acknowledge signals. A power state table
lists the allowed combinations of voltage values and states of the power switches for all
power domains in the design.
A level shifter must be present where a logic signal leaves one power domain and enters
another at a substantially different supply voltage. The level shifter converts a signal from
the voltage swing of the first domain to that of the second domain.
An isolation cell must be present where a logic signal leaves a switchable power domain
and enters a different power domain. The level shifter generates a known logic value
during shutdown of the domain. If the voltage levels of the two domains are substantially
different, the interface cell must be able to perform both level shifting (when the domain
is powered up) and isolation (when the domain is powered down). A cell that can perform
both functions is called an enable level shifter.
In a power domain that has power switching, any registers that must retain data during
shutdown must be implemented as retention registers. A retention register has a separate,
always-on supply net, sometimes called the backup supply, which keeps the data stable in
the retention register while the primary supply of the domain is shut down.
Power Domains
Multivoltage designs contain design partitions which have specific power behavior
compared to the rest of the design. A power domain is a basic concept in the low-power
infrastructure, and it drives many important low-power features across the flow.
By definition, a power domain is a logical grouping of one or more logic hierarchies in a
design that share the same power characteristics, including:
• Primary voltage states or voltage ranges (that is, the same operating voltage)
• Process, voltage, and temperature (PVT) operating condition values (all cells of the
power domain except level shifters)
• Power net hookup requirements
• Power down control and acknowledge signals, if any
• Power switching style
• Same set or subset of nonlinear delay model (NLDM) target libraries
Thus, a power domain describes a design partition, bounded within logic hierarchies, that
has a specific power behavior with respect to the rest of the design. A power domain is
strictly a synthesis construct, not a netlist object.
Each power domain has a supply network consisting of supply sets, supply nets, and
supply ports and might contain power switches. The supply network is used to specify the
power and ground net connections for a power domain. When used together, the power
domain and supply network objects allow you to specify the power management intentions
of the design.
Every power domain must have one primary power supply and one primary ground. In
addition to the primary power and ground nets, a power domain can have any number of
additional power supply and ground nets.
A power domain has the following characteristics:
• Name
• Level of hierarchy or scope where the power domain is defined or created
• The set of design elements that comprise the power domain
• Associated set of supply nets that are allowed to be used within the power domain
• Primary power supply and ground nets
• Synthesis strategies for isolation, level-shifters, always-on cells, and retention registers
Voltage Areas
Corresponding to the power domains of logic synthesis, you define voltage areas in
physical synthesis as placement areas for the cells of the power domains. Except for level-
shifter cells, all cells in a voltage area operate at the same voltage.
There must be a one-to-one relationship between logical power domains and physical
voltage areas. A voltage area is the physical implementation of a power domain. A voltage
area is associated with a power domain in a unique, tightly bound, one-to-one relationship.
A voltage area is the area in which the cells of specific logic hierarchies are the be placed.
A single voltage area must correspond to another single power domain, and vice versa.
The power domains of a design are defined first in the logical synthesis phase and then
the voltage areas are created in the physical implementation phase. All the cells that
belong to a given voltage area have the power behavior described by the power domain
characteristics.
save
Retention
Power- Register
restore
domain
controller Enable level
block shifter
This chip is designed to operate with three power supplies that are always on, at three
different voltage levels. The top-level chip occupies the top-level power domain, PD_TOP.
The domain PD_TOP is defined to have four supply ports: VDD1, VDD2, VDD3, and GND.
The black squares along the border of the power domain represent the supply ports of that
domain. Note that this diagram shows the connections between power domains and is not
meant to represent the physical layout of the chip.
In addition to the top-level power domain, PD_TOP, there are three more power domains
defined, called PD1, PD2, and PD3, created at the levels of three hierarchical blocks,
Block1, Block2, and Block3, respectively. Each block has supply ports (black squares in
the diagram) to allow supply nets to cross from the top level down into the block level.
In this example, PD_TOP, PD2, and PD3 are always-on power domains that operate at
different supply voltages, VDD1, VDD2, and VDD3, respectively. PD1 is a power domain
that has two supplies: a switchable supply called VDD1g and an always-on supply from
VDD1. The always-on power supply maintains the domain’s retention registers while
VDD1g is powered down.
A power switch shuts off and turns on the power net VDD1g, either by connecting or
disconnecting VDD1 and VDD1g. A power-down controller logic block at the top level
generates the control signal for the switch. It also generates the save and restore signals
for the retention registers in domain PD1 and the control signals for the isolation cells
between domain PD1 and the always-on domains PD2 and PD3. These isolation cells
generate known signals during times that VDD1g is powered down.
Because domains PD1, PD2, and PD3 operate at different supply voltages, a level shifter
must be present where a signal leaves one of these domains and enters another. In the
case of the signals leaving PD1 and entering PD2 or PD3, the interface cells must be able
to perform both level shifting and isolation functions, because PD1 can be powered down.
2
Library Requirements for Multivoltage Designs
To work with multivoltage designs, the logic libraries must conform to the Liberty syntax.
The libraries should also contain special cells such as clock-gating cells, level-shifter
cells, isolation cells, retention registers, and always-on buffers and inverters. The tool also
supports multiple libraries characterized at different voltages.
For more information, see the following topics:
• Liberty PG Pin Syntax
• Power Management Cells
• Suppressing Power Management Cell Insertion
• Power Management Cell Insertion and Bias Supplies
inserted during synthesis as part of compilation or by manually instantiating the cells in the
RTL.
Multivoltage designs typically use the following types of power management cells:
• Isolation Cells
• Level-Shifter Cells
• Retention Register Cells
• Power-Switch Cells
• Always-On Logic Cells
• Repeater Cells
Name-Based Association of Power Management Cells
Synopsys tools use a specific naming style for power management cells. The name-based
associations follow these conventions for power management cells:
• Isolation cells
<name_prefix>_snps_<power_domain_name>__<iso_strategy_name>_
snps_<pin_name>_<inst_index>_<name_suffix>
• Level-shifter cells
<name_prefix>_snps_<power_domain_name>__<ls_strategy_name>_
snps_<net_name>_<inst_index>_<name_suffix>
• Level shifters and isolation cells are selected from the target libraries. Therefore, at
least one of the libraries must contain these required cells.
• Level-shifter and isolation cells can only be inserted on unidirectional ports.
Inserting Power Management Cells
You can optionally insert power management cells by running the create_mv_cells
command after loading the power intent with the load_upf command.
By default, the command inserts mapped power management cells only if all instances
are mapped. If the design includes any unmapped instances, the tool inserts power
management cells from the GTECH generic library.
If you use the -mapped option with the create_mv_cells command, the command inserts
cells only from the user-provided logic library and issues an error message if a suitable cell
is not available.
To insert multibit power management cells from the logic library, set the
mv.cells.enable_multibit_pm_cells application option to true.
Isolation Cells
Isolation cells are required when a logic signal crosses from a power domain that can
powered down to a domain that is not powered down. The cell operates as a buffer when
the input and output sides of the cell are both powered up, but provides a constant output
signal when the input side is powered down.
A cell that can perform both level-shifting and isolation functions is called an enable
level-shifter cell. This type of cell is used when a signal crosses from one power domain
to another, and the two voltage levels of the power domains are different, and the first
domain can be powered down.
An isolation cell is needed when a logic signal crosses from one power domain that can
be powered down to one that is not powered down. The cell operates as a buffer when
the input and output sides of the cell are both powered up, but provides a constant output
signal when the input side is powered down.
For more information about creating and using isolation cells and enable level-shifter cells,
see the Library Compiler User Guide.
This section covers the following topics:
• Implementing Isolation Cells
• Using Latch-Type Isolation Cells
An isolation cell with a clamp value set to latch might have an asynchronous set or reset
pin. To insert this type of isolation cell with the set_isolation command, you must use
the -async_set_reset option to specify the net name of the asynchronous control signal
and its sensitivity (high or low).
For example, the following command creates isolation strategy ISO1 for a latch-type
isolation cell. The command specifies that net RS1 is an asynchronous set or reset control
signal that is active in the high state:
fc_shell> set_isolation ISO1 -domain PD1 \
-clamp_value latch -async_set_reset {RS1 high}
You can optionally use the -async_clamp_value option to specify whether the pin is a
set input (with an argument of 1) or a reset input (with an argument of 0). The following
command specifies that the asynchronous control pin on the isolation cell is a reset pin:
fc_shell> set_isolation ISO1 -domain PD1 \
-clamp_value latch -async_set_reset {RS1 high} \
-async_clamp_value 0
You might not want to specify whether the asynchronous pin should act as a set or
reset pin at the time of isolation strategy definition. In this case, use the set_isolation
command without the -async_clamp_value option. Then you can later use the
set_port_attributes command to set the UPF_async_clamp_value attribute on specific
ports outside the isolation strategy to 1 for set or 0 for reset, as shown in the following
example:
fc_shell> set_port_attributes {port1 port2} \
-attribute {UPF_async_clamp_value 0}
The Fusion Compiler tool executes the set_isolation command options as follows:
• If either or both of the -async_clamp_value or -async_set_reset options are
specified for an isolation strategy but the -clamp_value option is not set to latch, the
tool issues an error message.
• If a net name is specified with the -async_set_reset option but the sensitivity is not
set for that signal, the tool issues an error message.
• If a conflict exists between the -async_clamp_value option of the set_isolation
command and the UPF_async_clamp_value attribute for a specific pin, the tool honors
the attribute setting and issues a warning.
• If the set_isolation command uses the -async_set_reset option but there is no
clamp value set on the specified pin using either the -async_clamp_value option or
the UPF_async_clamp_value attribute, the tool ignores the -async_set_reset option
with a warning.
• If the -async_set_reset option is not used, the tool ignores and drops the
-async_clamp_value option with a warning when the tool executes an action
command such as the compile and create_mv_cells commands. In this case, the
strategy becomes a normal isolation latch strategy.
• If the -async_set_reset option is not defined for the isolation strategy associated with
the port, the tool ignores the UPF_async_clamp_value attribute.
For more information about creating this type of isolation cell, see the Library Compiler
User Guide.
Note:
Because the empty isolation supply set {} indicates that the isolation cell has
no power supply when operating in isolation mode, the tool uses a clamp-to-
zero isolation cell (or a NOR-type isolation cell).
When possible, the tool optimizes the design using NOR-type isolation cells. For example,
the following command optimizes the implemented isolation cell to use the domain’s
primary supply (PD_BLK.primary) by using a NOR-type isolation cell:
fc_shell> set_isolation ISO1 -domain PD_BLK \
-isolation_supply {TOP_AO_SS} -clamp_value 0 \
-applies_to outputs
For more details on modeling and using NOR-style isolation cells, see SolvNetPlus article
2370685, “Single-Rail Clamp-to-0 NOR-Type Isolation Cells.”
Level-Shifter Cells
In multivoltage designs, a level-shifter cell is usually required when a signal crosses
from one power domain to another. The level shifter operates as a buffer with one supply
voltage at the input and a different supply voltage at the output. The level shifter converts
a logic signal from one voltage level to another, with a goal of having the smallest possible
delay from input to output.
Level shifters can convert from one voltage to a lower voltage, to a higher voltage, or both.
The Fusion Compiler tool supports level-shifter cells with different PG pin configurations as
specified by the Library Compiler models:
• Single-rail level shifter
• Dual-rail level shifter with two power pins
• Level shifter with a feedthrough standard cell main rail PG pin that enables the shifting
of always-on signals between shutdown power domains
• Level shifter inside a macro cell connected directly to the macro cell’s input pins, which
eliminates the need to insert external level shifters
• Enable level shifter, which performs both level shifting and isolation functions
For more information about modeling level shifters, see the Library Compiler User Guide.
PD_TOP
1.1V
PD_A
0.9V
LS_H2L LS_L2H
User-specified level-shifter strategies have the highest priority; the tool tries to implement
as many user-specified strategies as possible.
The tool also attempts to minimize the total number of inserted level shifters.
VDD VDD_SLEEP
State-Saving
Regular Flip-Flop
D Latch (high Q
(low voltage)
voltage)
See Also
• Checking Zero-Pin Retention Registers
• Implementing Retention Registers
RESTORE Balloon
SAVE Logic
D Q
D
Flip-Flop
CLOCK
VDD VSS
Triggering the save pin puts the register in the active mode, in which case the register
works as a regular D flip-flop. Triggering the restore pin puts the register in sleep mode, in
which case the register works as a state-saving latch.
Balloon
SAVE_RESTORE Logic
D Q
D
Flip-Flop
CLOCK
VDD VSS
Always-
Master On
Latch Slave
Latch
VSS
The subordinate latch maintains the data during both normal operation and shutdown, so
no save or restore signal is needed. In this type of retention register, the subordinate latch
of the register remains alive during shutdown to maintain the data. Retention occurs when
an isolation circuit holds the clock signal in an inactive state. For a rising edge clock, the
inactive state is low or zero.
Clamping the Clock Net and Asynchronous Input Pins
To maintain the clock input pins in the inactive state during shutdown, the tool inserts an
isolation clamp circuit in the clock network to hold the clock signal in the inactive state
for zero-pin retention registers. The clamp cells are placed close to the leaf retention
registers.
If you are using retention registers with asynchronous reset or clear input pins to initialize
or clear the register contents, these pins must also be prevented from floating during
shutdown. The tool inserts an isolation clamp circuit in the asynchronous path to hold the
signal while in the inactive state.
Figure 7 shows a typical clock net clamping circuit inserted by the tool. Similar clamping
circuits are also inserted on asynchronous pins.
0-pin
enable
retention
clk clamp
0-pin
retention
retain
By default, the tool buffers the net between the clamp cell and the register's clock or
asynchronous pin using an always-on supply. You can disable the buffering using the
application option as follows:
fc_shell> set_app_options -name \
mv.upf.no_buffering_after_retention_clamp_cell -value true
• report_mv_cells -retention_clamp
PD_TOP
VDD_TOP SS_RET
D Q
save
restore RDFF1
VSS
PD_TOP
VDD_TOP SS_RET
D Q
retain
RDFF1
VSS
In this example of a single-pin retention register with balloon logic, the pin named retain
functions as the save and restore pin. The following UPF command illustrates the
implementation for the single-pin retention register:
fc_shell>set_retention my_ret -domain PD_TOP \
-retention_supply SS_RET \
-elements {*RDFF*} \
-save_signal {retain high} \
-restore_signal {retain low} \
-retention_condition {retain}...
The tool reads and saves the -retention_condition option, but does not process it.
Verification tools use this option.
Figure 10 is an example of implementation of a zero-pin retention register.
PD_TOP
VDD_TOP SS_RET
D Q
retain
RDFF1
clock
VSS
Power-Switch Cells
In a design with power switching, the power-switch cells provide the supply power for cells
that can be powered down. The library description of a power-switch cell specifies the
input signal that controls power switching, the pin or pins connected to the power rail, and
the pin or pins that provide the virtual or switchable power.
There are two types of power-switch cells, the header type and the footer type. A header
type power switch connects the power rail to the power supply pins of the cells in the
power-down domain. A footer type power switch connects the ground rail to the ground
supply pins of the cells in the power-down domain.
For more information about power-switch cells, see the Library Compiler User Guide.
Backup
Power
Primary
Power
IN OUT
Ground
The tool performs always-on optimization only when the target library contains always-on
inverters and buffers. To use a specific library cell in the optimization of always-on paths,
mark the cell with the always_on attribute. The tool uses the always-on cells to optimize
the always-on paths within shutdown power domains.
For more information about modeling these cells, see the Library Compiler User Guide.
Repeater Cells
If the distance between a driver and a receiver is long, a repeater cell might be needed to
strengthen the signal. Repeaters are usually simple buffer cells. The UPF provides a way
to specify repeaters strategies. Repeater strategies apply to ports of a power domain.
Preinstantiated level-shifter, isolation, and retention cells still exist in the netlist.
Preinstantiated GTECH cells of power management cells are not mapped.
The check_mv_design command reports missing level shifter and isolation cells for any
electrical violation. The tool considers most electrical violations to be error conditions.
However, some isolation strategies contain rules that prevent the tool from fixing these
violations. The tool issues a warning message instead of an error message in the following
cases:
• The set_level_shifter command is used with the -rule low_to_high or -rule
high_to_low option, which prevents level shifter insertion.
• The set_level_shifter command is used with the -no_shift option, which prevents
level shifter insertion.
• You can use predefined supply set handles as defined by the IEEE 1801 standard
such as default_isolation. For instance, for domain PD1, you can use the
PD1.default_isolation handle.
• You can use the predefined supply set handle default_retention, as defined by the
IEEE 1801 standard. For example, PD1.default_retention refers to the retention
register's default supply.
• You cannot use the -retention_power_net and -retention_ground_net options on
bias-enabled domains.
3
Defining the Power Intent in the UPF
The Fusion Compiler tool supports UPF commands to define, review, and examine the
power intent specification. You can use the Fusion Compiler GUI to examine the power
intent specification.
This section discusses how to use UPF commands to specify the power intent and how
the tool implements the UPF directives.
The section covers the following topics:
• Multivoltage Design Overview
• Naming Rules for UPF Objects and Attributes
• Setting the Scope for UPF Commands
• Preserving Logic Port and Logic Net References
• Creating Power Domains
• Creating Atomic Power Domains
• Multiple Power Domains in a Single Voltage Area
• Creating Supply Ports
• Creating Supply Nets
• Specifying Supply Sets
• Refining Supply Sets
• Querying for Related Supply Sets
• Comparing Voltage Levels and Voltage Status
• Specifying Level-Shifter Strategies
• Specifying Isolation Strategies
• Specifying Retention Strategies
• Specifying Repeater Strategies
Read RTL
load_upf
Read Constraints
create_mv_cells
check_mv_design
compile_fusion
Check Reports
save_upf
some time and provide some early feedback regarding the feasibility of your power
intent. The create_mv_cells command does the following:
• Inserts mapped level shifters, isolation cells, and repeaters based on the defined
UPF strategies only if all instances are mapped. If the design includes any
unmapped instances, the tool inserts power management cells from the GTECH
generic library.
• Issues the commit_upf command. The commit_upf command is optional, but
running this command performs some conflict resolution between the power intent
and PG net connections.
• Traces power management cells to establish drivers and loads
4. (Optional) Execute the check_mv_design command to check the electrical correctness
of the design. Although this command is optional, it takes less time to run than the
compile_fusion command and performs some early checking.
5. Run the compile_fusion command to insert mapped power management cells and
perform always-on synthesis.
6. Use the save_upf command to write out the UPF commands to a specified file. The
output UPF file captures tool-derived and user-specified UPF commands. Use the
following command for the golden UPF flow:
fc_shell> save_upf -format supplemental my_supplemental.upf
To remove the UPF constraints after reading the UPF file, use the reset_upf command.
This command removes all UPF constraints and UPF data-dependent constraints from the
current design. The design is restored to a default single-voltage UPF condition.
The reset_upf command does not affect the netlist. Any commands that might have
changed the netlist after the load_upf command are not reversed by the reset_upf
command.
UPF Flows
The Fusion Compiler tool supports both the traditional UPF flow and the golden UPF
flow. The golden UPF flow is an optional method of maintaining the UPF multivoltage
power intent of the design. It uses the original “golden” UPF file throughout the synthesis,
physical implementation, and verification steps, along with supplemental UPF files
generated by the Fusion Compiler tool.
Figure 13 compares the traditional UPF flow with the golden UPF flow.
In the traditional flow, also known as the UPF prime (UPF') flow, the RTL and UPF files
are read by the Fusion Compiler tool. The RTL file is the design intent and the UPF file
is the power intent. During synthesis, the tool might insert special cells such as isolation
or level-shifter cells into the design to fulfill the UPF power intent. When logic synthesis
is complete, the tool writes out a gated netlist and a UPF prime (UPF') file. The UPF' file
contains any changes to the power intent that occurred during synthesis. The UPF' file is a
mixture of original UPF commands and new or modified commands.
The golden UPF flow maintains and uses the original UPF file throughout the flow. The
Fusion Compiler tool writes power intent changes into a separate supplemental UPF file.
Downstream tools and verification tools use a combination of the golden UPF file and the
supplemental UPF file, instead of a single UPF’ or UPF’’ file.
The golden UPF flow offers the following advantages:
• The golden UPF file remains unchanged throughout the flow, which keeps the form,
structure, comment lines, and wildcard naming used in the UPF file as originally
written.
• You can use tool-specific conditional statements to perform different tasks in different
tools. Such statements are lost in the traditional UPF-prime flow.
• Changes to the power intent are easily tracked in the supplemental UPF file.
To enable the golden UPF flow, use the following application option setting before you load
the UPF:
fc_shell> set_app_options -as_user_default \
-list {mv.upf.enable_golden_upf true}
To load supplemental UPF files, use the -supplemental option with the load_upf
command.
For more information about using the golden UPF flow, see SolvNetPlus article 1412864,
“Golden UPF Flow Application Note.”
Name-Mapping File
Sometimes the synthesis and physical implementation tools change the object names as a
result of optimization or ungrouping of objects. In the UPF' flow, these name changes are
written out explicitly to the UPF' and UPF'' files. In the golden UPF flow, the tool writes out
a supplemental UPF file with only the power intent changes. Object names in the golden
UPF file might not match the corresponding objects in the generated Verilog netlist.
If you are using the UPF prime mode, the file written by the tool is referred to as the UPF'
file. If you are using the golden UPF mode, the tool writes a supplemental UPF file that
contains only the changes to the UPF. The original UPF (or golden UPF) is not altered.
The UPF' file (or the combination of the golden UPF and supplemental UPF files) is used
as input to downstream tools, such as the PrimeTime, PrimePower, and Formality tools.
The UPF’ file first contains the following information:
• A banner at the top of the file, as shown in the following example:
#############################################################
#
# Created by ... (R-2020.09) save_upf on ....
#
#############################################################
Returns a list of instances at or below the active scope of the design that use the
named cell or module. Duplicate module or cell names that exist in different libraries
are not distinguished.
• query_cell_mapped
Returns a list of ports logically connected to the specified net. By default, the command
returns only the ports present at the level of the current scope, but you can choose to
return leaf cell ports or intermediate hierarchical ports. The command does not report
hidden ports or the ports of synthetic netlist objects.
• query_port_net
Returns the name of the net logically connected to the specified port. If no net is
connected, the command returns a null string.
• query_port_state
Returns information about port states defined using the add_port_state command.
• query_pst
Returns information about power state tables defined with the create_pst command.
• query_pst_state
Returns information about power states defined for a specific power state table with the
add_pst_state command.
• query_power_switch
Returns information about power switch library cells mapped to UPF power switches
with the map_power_switch command.
For more information, see the command man pages.
Design top Current scope Command Design top Current scope after
instance before before command instance after command
command command
Design top Current scope Command Design top Current scope after
instance before before command instance after command
command command
Block1 Block2
U1 U4 U7
U2 U5 U8
U3 U6 U9
To create the PD1 and PD2 power domains, use the following commands:
fc_shell> create_power_domain -elements {U1 U2 U3} -scope Block1 PD1
fc_shell> create_power_domain -elements {U4 U5 U6} -scope Block1 PD2
Alternatively, you can use the set_scope command to set the scope, and then create the
power domain, as shown in the following example:
fc_shell> set_scope Block1
fc_shell> create_power_domain -elements {U1 U2 U3} PD1
fc_shell> create_power_domain -elements {U4 U5 U6} PD2
You can use the -elements {.} option if the scope is defined. The -elements {.}
option includes the current scope as well as all elements in that scope. For example, the
following commands create the PD3 power domain in Figure 14:
fc_shell> set_scope Block2
fc_shell> create_power_domain PD3 -elements {.}
You can define a power domain with an empty elements list and defer the definition of the
element list. For example,
fc_shell> create_power_domain D1 -elements {}
Later, you can add to the elements list using the -update option as follows:
fc_shell> create_power_domain D1 -elements e1 -update
In general, the upper boundary of a power domain is its interface with power domains that
are higher in the design hierarchy. You can control how the lower boundary of a power
domain is defined.
For more information about power domain boundaries, see Lower-Domain Boundary
Support.
For example, the following command creates a power domain that contains cells A and B,
but subsequently excludes cell B. The result is a power domain that contains only cell A.
fc_shell> create_power_domain -elements {A B} -exclude_elements {B}
In the following example, the command creates a power domain that contains cells A
and B and all elements in the first level of B's hierarchy (wildcards are supported). The
-exclude_elements option excludes only element B/b1. The result is a power domain
whose element list is {A B/b2 B/b3 …} and so on, containing all elements in the first level
of hierarchy under B except for b1.
fc_shell> create_power_domain -elements {A B/*} -exclude_elements {B/b1}
In this case, the tool does not exclude element B/b1 because it is not included in the scope
of the argument list of the -elements option. The power domain contains only the top
levels of cells A and B.
The following conditions apply to the -exclude_elements option:
• The argument list can be empty.
• The tool does ignores duplicate elements in the argument list.
• The argument list cannot contain elements that are not part of the current design.
• A child element does not inherit power domain membership from its parent. For
example, consider the following commands:
fc_shell> create_power_domain PD_TOP -elements {.}
fc_shell> create_power_domain PD_A -elements {A A/a*} \
-exclude_elements {A/a1}
The tool reports an error because element A/a1 does not belong to any power domain.
The -exclude_elements option excludes A/a1 from the PD_A power domain.
In addition, element A/a1 does not belong to the PD_TOP power domain. The {.}
argument of the -elements option of the create_power_domain command means that
the PD_TOP power domain includes only the logic hierarchy level where the domain is
created (the scope).
• The tool ignores duplicate -exclude_elements options.
• The split_constraints command does not write -exclude_elements
options because the effective element list is explicitly defined in the generated
create_power_domain commands.
When you use the -exclude_elements option with the -update option, the power domain
is updated to exclude instances in the -exclude_elements argument list. The tool
computes the effective element list after reading all UPF commands. For example, the
following commands create an empty power domain, then make changes to it, resulting in
an effective element list of {A}:
fc_shell> create_power_domain PD -elements {}
fc_shell> create_power_domain PD -exclude_elements {B} -update
fc_shell> create_power_domain PD -exclude_elements {C} -update
fc_shell> create_power_domain PD -elements {A B C} -update
Before you execute a commit_upf command, all instances in the design must belong to a
power domain.
If a power domain exists in the scope of a model, its excluded elements do not exist and
the tool does not issue any warning or error messages.
You must specify the -atomic option when you first define the power domain. The tool
does not allow updating a non-atomic power domain as atomic, that is, option -atomic
cannot be specified with -update.
You can, however, update the extent of an atomic power domain, that is, updating the lists
for -elements and -exclude_elements are allowed.
You can define an empty power domain as atomic. However, you must update the empty
power domain with elements before running any action command.
The tool always creates atomic power domains first, independent of the order in which
the power domains are defined. Because atomic power domains are processed first, their
extents are determined and the tool can identify all the power domains that share extent.
The tool does not allow any instance in the descendant subtree of an atomic power
domain to be included in the extent of another power domain, unless:
• the instance name is excluded from the atomic domain or
• the instance name is in the descendant subtree of an instance which is excluded from
the atomic domain
The tool has checks in place to verify and report any violations for the preceding cases.
Note:
It is not mandatory to add an instance excluded from a power domain as
the root cell of another power domain. There can be cases where the power
domain cannot be determined for a few elements in the design. The tool
provides an error message for such elements.
Examples
Example 2
create_power_domain PD_TOP
-elements {m2 m1/b1} -include_scope
create_power_domain PD_MID -atomic
-elements {m1}
-exclude_elements {m1/b1}
In Example 1, PD_MID is an atomic power domain which is created first. Excluding m1/b1
from the atomic domain allows it to be used in PD_TOP.
Example 3
create_power_domain PD_EMPTY -elements {} -atomic
You can define an empty power domain as atomic, as in Example 2. Before you run
any action command, you must ensure to update the empty domain so that the domain
contains elements.
Example 4
create_power_domain PD_TOP -elements {.} -include_scope
-exclude_elements {i_core} -atomic
As shown in Example 3, excluding the element on which PD_CORE will be created from
atomic PD_TOP is allowed.
In this case, during constraint propagation, the atomic power domain from BLOCK
PD_MID gets propagated to the TOP design. The following is the full UPF post constraint
propagation:
create_power_domain PD_TOP -include_scope
This full UPF does not violate any rule of atomic power domains. So, during the execution
of the synthesis command, the tool does not generate any warning/error messages related
to atomic power domains.
Error Case Example
Consider another example:
In this case, during constraint propagation, the non-atomic power domain from BLOCK
PD_MID gets propagated to the TOP design. The following is the full UPF post constraint
propagation:
create_power_domain PD_TOP -include_scope -atomic
This full UPF violates the rule (of atomic power domains) that elements in the extent of
an atomic power domain cannot be defined as the root cell of another power domain. The
element mid_inst, part of atomic power domain PD_TOP (it is not excluded in PD_TOP),
is the root cell of a non-atomic power domain mid_inst/PD_MID. During constraint
propagation, the tool reports the following warning message and continues the flow:
Warning: Element mid_inst in the extent of atomic power domain PD_TOP has
been defined as root cell of another power domain mid_inst/PD_MID
You must fix the UPF by excluding mid_inst from the atomic power domain PD_TOP. The
tool then allows mid_inst to be the root cell of mid_inst/PD_MID.
2. Domain Merging
The following table describes the four possible combinations of TOP and BLOCK power
domains, for domain merging during constraint propagation, and the tool behavior in all
these combinations:
Non-atomic power domain Existing behavior Domain merging fails; both TOP
in TOP and BLOCK power domains are
retained in the final UPF. See
Scenario 1: TOP is Non-Atomic
and BLOCK is Atomic.
Atomic power domain in Domain merging fails; both TOP • Matching domains:
TOP and BLOCK power domains are Only TOP atomic power domain
retained in the final UPF. See is retained in the final UPF. See
Scenario 2: TOP is Atomic and Scenario 3: TOP and BLOCK
BLOCK is Non-Atomic. are Atomic and Domain Merging
Succeeds.
• Non-matching domains:
Domain merging fails; both TOP
and BLOCK power domains are
retained in the final UPF. See
Scenario 4: TOP and BLOCK
are Atomic and Domain Merging
Fails.
In this scenario, during constraint propagation, the tool compares the atomic power
domain from BLOCK with the non-atomic power domain in the TOP design and the power
domains do not match. So, domain merging fails with the following message and the tool
retains both the domains:
Error: Unable to merge domain PD_TOP and mid_inst/PD_TOP because
mid_inst/PD_TOP is atomic but PD_TOP is not atomic. (UPF-168)
Since the tool generated an error message during constraint propagation, you must
update the UPF before proceeding with the flow.
In this scenario, during constraint propagation, the tool compares the non-atomic power
domain from BLOCK with the atomic power domain in the TOP design and the power
domains do not match. So, domain merging fails with the following message and the tool
retains both the domains:
Error: Unable to merge domain PD_TOP and mid_inst/PD_TOP because PD_TOP
is atomic but mid_inst/PD_TOP is not atomic. (UPF-168)
In this scenario too, since the tool generated an error message during constraint
propagation, you must update the UPF before proceeding with the flow.
Scenario 3: TOP and BLOCK are Atomic and Domain Merging Succeeds
Consider the following example:
In this scenario, during constraint propagation, the tool compares the atomic power
domain from BLOCK with the atomic power domain in the TOP design and the power
domains and say all their properties match. So, domain merging succeeds and the tool
drops the domain from BLOCK.
The following is the full UPF post constraint propagation:
…
set_design_attributes -elements {mid_inst} -attribute merge_domain TRUE
This full UPF does not violate any rule of atomic power domains. So, during the execution
of the checker/synthesis commands, the tool does not generate any warning/error
messages related to atomic power domains.
Scenario 4: TOP and BLOCK are Atomic and Domain Merging Fails
Consider the following example:
In this scenario, during constraint propagation, the tool compares the atomic power
domain from BLOCK with the atomic power domain in the TOP design and say some
of their properties do not match. So, domain merging fails and the tool retains both the
domains.
The following is the full UPF post constraint propagation:
In this scenario too, since there is an error during constraint propagation, you must update
the UPF before proceeding with the flow.
of power domains for the shared_voltage_area attribute. In any set of shared power
domains, one power domain is defined as the primary power domain.
One power switch can be implemented for each shared voltage area. Use the
create_power_switch, create_power_switch_array, or create_power_switch_ring
command as appropriate for the design. Then use the connect_power_switch command
to connect power switch cells based on the shared_voltage_area attribute.
The control signals (sleep and acknowledge or ack signals) of power switches can be
defined in the RTL (preferred) or in UPF commands such as the create_logic_port or
connect_logic_net commands.
• internal specifies an internal port. Use this value for ports that connect virtual nets in
the design. If a UPF supply net only connects to leaf ports with the internal direction,
the tool recognizes that this net should not exist in the physical implementation. An
example usage is to connect block supplies that are known to switch together. Using
the internal designation allows you to provide a name that can then be referenced by
other commands such as the connect_supply_net or find_objects commands.
The following examples show how to create the ports in Figure 1. The following
commands create supply ports VDD1, VDD2, VDD3, and GND at the top level of the
design hierarchy (PD_TOP):
fc_shell> create_supply_port VDD1
fc_shell> create_supply_port VDD2
fc_shell> create_supply_port VDD3
fc_shell> create_supply_port GND
The following commands create supply ports VDD1, VDD1g, and GND in power domain
PD1:
fc_shell> create_supply_port VDD1 -domain PD1
fc_shell> create_supply_port VDD1g -domain PD1
fc_shell> create_supply_port GND -domain PD1
The following commands create supply ports VDD2 and GND in power domain PD2 and
VDD3 and GND in power domain PD3:
fc_shell> create_supply_port VDD2 -domain PD2
fc_shell> create_supply_port GND -domain PD2
fc_shell> create_supply_port VDD3 -domain PD3
fc_shell> create_supply_port GND -domain PD3
After an implicit supply net is created, the net and the port that created it do not retain
an association. You can perform operations on the supply port and implicit supply net
independently, such as renaming or deleting the objects.
Adding Port State Information to Supply Ports
The add_port_state command adds state information to a supply port. This command
specifies the name of the supply port and the possible states of the port. The first state
specified is the default state of the supply port. The port name can be a hierarchical name.
Each state is specified as a pair of arguments: the state name and the voltage level for
that state. The voltage level can be specified as a single nominal value, set of three values
(minimum, nominal, and maximum), or 0.0, or the keyword off to indicate the off state. The
state names are also used to define all possible operating states in the power state table.
Supply states specified at different supply ports are shared in a group of supply nets and
supply ports directly connected together. However, this sharing does not happen across a
power switch.
The following command is an example of the definition of states for power nets:
fc_shell> add_port_state header_sw/VDD -state {HV 0.99} \
-state {LV 0.792} -state {OFF off}
The following command is an example of the definition of states for ground nets:
fc_shell> add_port_state footer_sw/VSS -state {LV 0.0} \
-state {OFF off}
The following command defines two states (HV1 and HV2) with the same voltage (1.2 V)
on the VDD1 supply port. The duplicate port states are useful in a hierarchical flow, where
the top level and block-level ports have different state names but the same voltage.
fc_shell> add_port_state VDD1 -state {HV1 1.2} -state {HV2 1.2}
When a supply net is created, it is not considered a primary power supply or ground net.
To make a specific power supply or ground net of a power domain, the primary supply or
ground net, use the set_domain_supply_net command.
All supply nets, including the ground, must be assigned an operating voltage. If any
supply net does not have an assigned operating voltage, the tool issues a UPF-057 error
message during the execution of the compile_fusion command. Before compiling the
design, use the check_mv_design -pg_netlist command to ensure that operating
voltages are defined for all the supply nets.
The operating voltage that you have already set cannot be removed. However, you can
override the existing settings by using the set_voltage command again.
When the create_supply_port command is used, the Fusion Compiler tool automatically
creates a supply net connected to the port and with the same name as the port. If you
subsequently use the create_supply_net command and specify the same net name, the
tool checks to determine if the automatically-generated net is used. If the automatically-
generated net is not used, the tool creates the manually-specified net. Otherwise, the tool
issues an error message about a naming conflict.
The tool considers an automatically-generated net to be in use in the following conditions:
• The net is referenced in the power or ground supply of an isolation or retention
strategy.
• The net is referenced in the output or input supply of a power switch.
• The net is referenced in the primary power or ground supply of a domain.
• A supply state is set on the net.
• The net is part of a supply set.
• The net is connected to a PG pin or supply port other than the supply port that
generated it.
Note:
If you use supply sets to define the primary supply and ground, the supply nets
that you specify must belong to the same supply set. For more information, see
Specifying Supply Sets.
You can also use the function of a supply set with the connect_supply_net command, as
shown in the following example:
fc_shell> create_supply_set ss
fc_shell> connect_supply_net ss.ground -ports {B1/GND}
Note:
The connect_supply_net command ignores connections to the pins of
physical-only cells.
In order for the tool to allow the PG net in the RTL, include the following command in the
UPF specification:
create_supply_net my_vdd
The tool then writes the following connections in the output UPF:
create_supply_port my_vdd
connect_supply_net my_vdd -ports {my_vdd}
connect_supply_net my_vdd -ports {U1/VDD}
You must also specify the my_vss supply net in a similar manner.
The tool issues an error message if there is an explicit call to the connect_supply_net
command or a tool-derived connect_supply_net command in the UPF, but the
PG netlist contains a conflicting connection. To override these errors, use the
mv.pg.continue_infer_pg_with_conflict application option. Setting this application
option to true gives preference to the explicit or tool-derived UPF connections, and the
tool issues a warning message to inform you that the UPF has preference over the netlist.
By default, resolution of PG nets occurs when you use the commit_upf command,
unless you specify the commit_upf -skip_resolve_pg_net option or set the
mv.upf.auto_resolve_pg_net application option to false.
As shown in Figure 18, the supply network view displays all the supply nets in the current
design and the current design’s subdesigns, and their supply net connections.
The location of the supply nets in the diagram is based on the location of the power
domains where they belong and also on the type of the supply net. Each power domain
that a supply net belongs to contains a line segment indicating the supply net.
Horizontal segments represent supply nets inside the power domain. Vertical segments
represent nets that are reused in multiple power domains and that are connected to
another object, such as a supply port or a power switch.
Power supplies extend down from the top of the power domain, and ground nets extend
up from the bottom of the power domain. Figure 19 and Figure 20 show an expanded view
of the connection to the power supplies and ground.
In Figure 19, the VDD2 net is the primary supply net of the PD2 power domain. However,
it is not the primary supply net of the power domain TOP. VDD is the primary supply net of
domain PDTOP.
In Figure 20, VSS is the primary ground net of both the power domains PD2 and PDTOP.
You can access the functions of the supply set by using the name of the supply set and
the name of the function. To access the power function of the supply set SS, specify
SS.power. To access the ground function of the supply set SS, specify SS.ground.
Creating Supply Sets
To create a supply set, use the create_supply_set command. The supply set is created
in the current logic hierarchy or the scope.
The UPF standard requires a simple name for the supply_set_name argument.
The following example shows how to create a supply set and associate it with the primary
power supply of a power domain:
fc_shell> create_supply_set primary_supply_set
fc_shell> create_power_domain PD_TOP
fc_shell> set_domain_supply_net PD_TOP \
-primary_power_net primary_supply_set.power \
-primary_ground_net primary_supply_set.ground
Note:
When you specify a supply set as the primary power and ground supply of the
power domain, both the primary and the ground supply must belong to the
same supply set.
Reference-Only Supply Sets and Supply Nets
When using the hierarchical flow and separating blocks, you might have supply sets or
nets that reside outside the current block. In order to refer to these supply sets or nets
outside the block after you run the split_constraints command, the tool creates a
reference-only supply set or supply net. This supply is meant only to resolve supply
references in strategies when using the hierarchical flow. You cannot use the supply to
power actual cells.
For the example in Figure 21, the U2 power domain has an isolation strategy that refers to
a local supply in U2 as a sink supply. If you split U1 into a separate block, the UPF for U1
would need to replace the U2/SS2 in the U1 UPF since U2/SS2 is not valid anymore when
the UPF for each block is separated. Meanwhile, the real supply that powers U2/SS2 is
only available to power cells in U2 and is not visible outside of U2. After you integrate the
design with U1, there needs to be a way to reestablish U2/SS2 to whatever it is replaced
with in U1. To do this, the tool creates a reference-only supply for U1.
U1(PD1) U2
out1 U2/SS2
create_power_domain Top
set_scope U2
create_supply_set SS2
set_scope
create_power_domain PD1 -scope U1 -elements U1
set_isolation iso -domain U1/PD1 -sink U2/SS2
To create a reference-only supply, the tool creates the supply set and then marks it as
reference-only using the design attribute reference_only. For example,
create_supply_set SS2'
set_design_attributes -elements . -attribute reference_only {SS2'}
The power states of U2/SS2 are also copied to SS2' in the UPF for U2. The receiver
supply of the out1 port is also set to SS2' as follows:
set_port_attributes -elements out1 -receiver_supply SS2'
These additions to the U1 UPF ensure that when U1 is optimized separately, it has all the
information for correct multivoltage cell insertion in U1. In the Top UPF, a set_equivalent
command is added to establish the relationship between SS2’ and U2/SS2:
set_equivalent -sets {U1/SS2' U2/SS2}
Because the reference_only attribute can also apply to supply nets, the tool must add
the power state table behavior of the original supply net to the reference-only supply net.
To do this, the tool adds the add_supply_state command to the block UPF.
Note:
The add_supply_state command can only be used with the add_pst_state
command and not the add_power_state command.
• default_isolation
• default_retention
In addition to these predefined supply set handles, you can define supply set handles by
using the -supply option of the create_power_domain command. To associate multiple
supply sets with a power domain, use the -supply option multiple times.
Supply set handles are created at the scope of the power domain and are available for use
in the power domains that are at the same or lower scope than the power domains where
they are created. Use the following naming convention to refer to a supply set handle:
power_domain_name.supply_set_handle. When a power domain is deleted, its supply set
handles are also deleted.
You can also specify the extra_supplies_# keyword with the -supply option of
the create_power_domain command to restrict the availability of the supplies in the
power domain. For more information about using the extra_supplies_# keyword, see
Restricting Supply Sets.
The following script example shows how to create a power domain and associate a supply
set with the power domain:
# Create the supply sets
create_supply_set primary_supply_set
# Create power domain and associate it with the supply set
create_power_domain PD1 -supply {primary primary_supply_set}
Alternatively, if you do not want the power domain to use extra supply nets other than
those that are already defined in other strategies, specify the extra_supplies ""
keyword (without the index) with the -supply option of the create_power_domain
command, as shown in the following example:
fc_shell> create_power_domain PD_MID -scope mid1 \
-supply {extra_supplies ""}
The following rules apply when you update a supply set with a supply net:
• Voltage rule
The voltage of the supply set handle must match with the voltage of the supply net with
which the supply set is updated.
If voltage is not specified for the supply net, then after the update, the voltage on the
supply set handle is inferred as the voltage of the supply net.
• Function rule
The supply set function must match with the function of the supply net with which the
supply set is updated.
The tool issues an error message when,
◦ The ground handle of a supply set is used to update power handle of another
supply set and vice versa.
◦ The supply net updated with the ground handle of a supply set is connected to
a power supply port or pin of a power object, such as a power domain, and vice
versa.
◦ Scope rule
The scope of supply set must match with the scope of the explicit supply net with which
the supply set is updated.
• Availability rule
The explicit supply net with which the supply set is updated, must be domain-
independent.
• Connection rule
The explicit supply net with which the supply set is updated, should not be connected
to a driver port when the supply set handle is connected to a driver port unless a
resolution function is defined for the explicit supply net.
• Conflicting supply state names rule
A supply set handle cannot be updated with a supply net or supply set if their power
states are not identical.
• Valid power-state-table rule
When a number of supply sets are updated to the same supply net, only one supply set
can be present in the power state table.
Defining the Power States for a Supply Set
Power states are attributes of a supply set. Using the add_power_state command, you
can define one power state for all those supply nets of the supply set that always occur
together. For each power state of the supply set, you must use one add_power_state
command. By default, the undefined power states are considered illegal states. You can
define multiple power states for a supply set to form a power state table.
For more information on power states and power state tables, see Power State Tables.
Each of the supply set functions (power, ground, nwell, and pwell) of the supply sets are
treated as the same supply net or connected supply net.
Associating supply sets with an unequal number of functions causes the supply set with
the lesser functions to inherit the remaining functions from the associated supply set.
The following example first creates a two-function supply set (SS1), then creates a four-
function supply set (PD1), and finally promotes the SS1 supply set to a four-function
supply set.
set_design_attributes -elements {.} -attribute enable_bias TRUE
create_supply_set SS1
create_power_domain PD1
associate_supply_set {SS1 PD1.primary}
You can associate supply sets across different scopes. Figure 22 illustrates the three
scopes.
PD_TOP
PD_MID
PD_BOT
The following example associates the supplies across the three scopes in Figure 22:
create_power_domain PD_TOP -supply {primary SSTop}
create_power_domain PD_MID -supply {primary SSMid}
create_power_domain PD_BOT -supply {primary SSBot}
associate_supply_set {SSTop mid/SSMid mid/bot/SSBot}
For example, the following command groups SS1 and SS2 supply sets into a correlated
supply group and sets the supply voltages as correlated triplets:
fc_shell> set_design_attributes -elements {.} \
-attribute correlated_supply_group "{SS1 SS2}"
The tool analyzes the design behavior with correlated SS1 and SS2 supplies, without
mixing between minimum, nominal, and maximum voltages.
For more information about using the set_design_attributes command, see Setting
UPF Attributes on Hierarchical Cells.
For more information on power states and power state tables, see Power State Tables.
Compares the specified supply to the reference supply and returns: equal, more_on,
less_on, or independent.
• -voltage_level
Compares the specified supply to the reference supply and returns: equal, higher,
lower, or independent.
When the tool compares the voltage levels of two supplies that belong to the same
correlated supply group, the following rules apply:
• If the minimum, nominal, and maximum voltages of the specified supply are equal to
the corresponding voltages of the reference supply, the command returns equal.
• If the minimum, nominal, and maximum voltages of the specified supply are less than
the corresponding voltages of the reference supply, the command returns lower.
• If the minimum nominal, and maximum voltages of the specified supply are greater
than the corresponding voltages of the reference supply, the command returns higher.
• If none of the preceding conditions are true, the command returns independent.
If you compare the voltages of two supplies that are not part of the same correlated supply
group, the following rules apply:
• If the minimum, nominal, and maximum voltages of the two supplies are equal, the
command returns equal.
• If the minimum voltage of the reference supply is greater than the maximum voltage of
the specified supply and rule 1 does not apply, the command returns lower.
• If the maximum voltage of the reference supply is less than the minimum voltage of the
specified supply and rule 1 does not apply, the command returns higher.
• If none of the preceding conditions are true, the command returns independent.
The -input_supply and -output_supply options specify the power and ground supply
connections for inserted level-shifter cells based on the driver and load supplies in the
path and the available supplies in the domain. The default supply is used when the input
or output supply is not specified. If the specified driver and load supplies and an equivalent
supply are not available, the tool does not insert any level-shifter cells.
Use the -update option to add information to a level shifter strategy. You must use either
the -elements or -exclude_elements option with the -update option.
The -name_prefix and -name_suffix options control the naming of the inserted level-
shifter cell instances.
• The -location other setting specifies that the level-shifter cell is placed in the parent
domain for an upper boundary port or in the child domain for a lower boundary port.
The upper boundary port cannot be a port of the design top module and the lower
boundary port cannot be a pin of a leaf cell of a hard macro.
If you use the -location option, you must ensure that the necessary supplies are
available in the specified location. You cannot use the -location option with the -update
option.
For example, consider the power domains in Figure 23.
The following UPF commands cause the tool to insert the level-shifter cells shown in
Figure 24. Strategy LS1 applies to both the upper and lower boundaries of power domain
PDM, for both input and output ports. The tool inserts all level-shifter cells outside the
PDM domain because the location is other. The tool places the level-shifter cells for the
upper boundary ports of domain PDM in the top-level domain and the level-shifter cells for
the lower boundary ports of domain PDM in the bottom-level domain.
create_power_domain PDT
create_power_domain PDM -elements {MID}
create_power_domain PDB -elements {MID/BOT}
set_level_shifter LS1 -domain PDM -applies_to_boundary both \
-applies_to both -location other
The following UPF commands cause the tool to insert the level-shifter cells shown in
Figure 26. Strategy LS1 applies to domain PDT and causes the tool to insert level-shifter
cells at the lower boundary of domain PDT, but the location of those cells is inside the
PDM domain because the location specifies other. Strategy LS2 applies to domain PDM
and specifies no level-shifter cell insertion for ports of domain PDM. Therefore the tool
does not insert any level-shifter cells for strategy LS2, but this strategy does not prevent
implementation of the level-shifter strategy for domain PDT.
create_power_domain PDT
create_power_domain PDM -elements {MID}
set_level_shifter LS1 -domain PDT -applies_to_boundary lower \
-applies_to both -location other
set_level_shifter LS2 -domain PDM -applies_to both -no_shift
In Example 5, strategy LS2 has higher precedence because it uses the -elements option
and applies to a port. The LS1 strategy uses the -sink option, which has lower priority.
In Example 6, both strategies have the same precedence. Therefore the tool issues an
error message because it cannot determine which strategy to use.
PD_TOP
PD_V1 PD_V2
LS
VDD1/VSS VDD2/VSS
VDD1 -> VDD2
LS
VDD3/VSS
VDD1-> VDD3
More than one level shifter can be inserted at a domain boundary pin as shown in
Figure 28. The Fusion Compiler tool can insert one level shifter before the boundary pin
and multiple level shifters after the domain boundary pin.
PD_V1
PD_V2
LS LS
VDD1/VSS VDD2/VSS
VDD1 -> VDD3 VDD3 -> VDD2
LS
VDD4/VSS
VDD3 -> VDD4
The symbol for each level-shifter strategy is located adjacent to the boundary of its parent
power domain. The location depends on whether it shifts inputs or outputs.
Figure 30 shows a domain with level shifters at the input and output of the domain. The
symbol appears at the left edge of the boundary if the strategy applies to input ports. The
symbol appears to the right edge of the boundary if the strategy applies to the output
ports. If the strategy applies to both inputs and outputs, symbols appear at both left and
right edges of the boundary.
While defining the level-shifter strategy, if you specify the location as self, the symbol
appears inside the power domain boundary. If you specify the location as parent, the
symbol appears outside the power domain boundary.
Note:
When you specify a list of elements to the level-shifter strategy using the
set_level_shifter -elements -applies_to command, the GUI positions
the symbol relative to the left or right edge of the power domain boundary,
based on whether the list contains input elements, output elements, or both.
-------------------------------------------
Non-default App. Option Info
mv.upf.insert_ls_on_user_cstr_only true
-------------------------------------------
------------------------------------------------------------------------
Although the power state table can potentially reduce the number of isolation cells
required, isolation synthesis and implementation is entirely based on directives set using
the set_isolation command. Isolation cell insertion does not consider information in
the power state table. If the isolation strategies are not consistent with the allowed states
in the power state table, these inconsistencies are reported using the check_mv_design
command.
Note:
With the -diff_supply_only option, you can use the -source or the -sink
option. You cannot use the -source, -sink, and -diff_supply_only options
simultaneously.
Where the Strategy Applies
By default, the strategy of a set_isolation command applies to all outputs that cross the
boundary of the specified power domain.
To restrict the strategy to specific elements of the domain, use the -elements option.
The specified elements can be ports of the power domain or the pins of root cells on the
boundary of the power domain. You can use the set_isolation command multiple times
to create different isolation strategies for different elements in the power domain. You
can also explicitly identify a set of ports to which the strategy does not apply by using
the -exclude_elements option. If you use the -elements and -exclude_elements
options with the -update option to add information to previous set_isolation commands
issued in the same design scope, the set of instances of ports is the union of all elements
specified with these options.
The -elements and -exclude_elements options support the {.} argument which
includes all elements in the current scope.
The ports of a power domain are the logical ports of the root cells of the power domain,
or in the case of a power domain containing the top-level design, the logical ports of the
design. Input ports of a power domain are the ports defines as inputs in the corresponding
HDL module. Similarly, output ports of a power domain are the ports defines as outputs in
the corresponding HDL module.
The -applies_to option lets you specify explicitly whether to apply the strategy to inputs
only, to outputs only, or to both inputs and outputs of the power domain:
• Applying the strategy to the outputs of a shutdown domain ensures that during
shutdown, the outputs continue to drive the inputs of other domains with a known value
(optionally specified by the -clamp_value option).
• Applying the strategy to the inputs of a power domain might be necessary if another
domain drives the inputs, the other domain can be shut down, and the outputs of the
other domain are not already isolated according to that domain's isolation strategy.
If you do not specify the -applies_to option, the strategy applies to both inputs and
outputs of the domain if you use one or both of the -source and -sink options, or if you
set the -diff_supply_only option to true and the supplies are defined by supply sets
rather than supply nets. Otherwise, the strategy applies to outputs only.
The -applies_to_boundary option allows you to specify which power domain boundary
the strategy applies. This option allows you more flexibility on where to place the isolation
cells. For details, see Overview of Power Domain Boundaries.
The tool, by strictly following the isolation strategies, might insert more isolation cells
than necessary, for example, at both the output of the driver domain and the input of
the receiver domain. You can find such occurrences by using the check_mv_design
command. The tool merges redundant cells during optimization.
Isolation Constraints Based on Source and Sink Supply Sets
The -source, -sink, and -diff_supply_only options restrict the insertion of isolation
cells to only the domain-crossing nets whose driver and receiver cells meet the specified
supply set conditions. These options act as "filters" to reduce the number of ports on the
domain boundary considered for isolation.
• The -source option filters the ports connected to a net that is driven by the specified
supply set. When you use this option, the supply sets that are associated with each
other are considered as connected.
• The -sink option filters the ports driving a net that fans out to the logic driven by the
specified supply set. Supply sets that are associated with each other are considered as
connected. When you specify both the -source and -sink options, isolation is applied
to only those ports that have the specified source and sink.
• The -diff_supply_only option determines the isolation behavior between the driver
and the receiver supply sets or supply nets. This setting prevents isolation when the
driver and receiver cells use matching supplies. When the -diff_supply_only option
is set to true, and the same supply set connects the driver and the receiver of a port
on the interface of the reference power domain, the isolation cell is not added in the
path from the driver to the receiver.
Isolation Cell Supply Set or Supply Nets
The power and ground supplies for the inserted isolation cells must be active while the
driver domain is shut down and the receiver domain is active. For each isolation strategy,
the power supplies for the isolation cells must be specified by one of the following options:
• The -isolation_supply option of the set_isolation command
• The -supply (supply_set_namedefault_isolation ) options of the
create_power_domain command
The isolation signal specified by the -isolation_signal option refers to a port, pin, or
net with the port or pin having higher precedence. The isolation signal can exist outside
the logic hierarchy where the isolation cells are inserted; the synthesis or implementation
tools can perform port-punching to make the connection. These punched ports are not
considered for isolation or level shifting, even though after port creation, they reside within
the coverage of an isolation or level-shifter strategy.
You might have an isolation cell that does not have an enable pin and works as a latch
when the input side supply shuts off. To specify this type of cell in the UPF, use the
-isolation_signal {} option. The UPF should also explicitly indicate whether the cell
is a single-rail or dual-rail cell for simulation modeling. Note that it is an error to specify the
-isolation_signal {} option with the -isolation_sense option.
• You must use the set_isolation -location -update command before the
set_isolation_control command.
• The isolation strategy must have an isolation control signal. However, you
cannot use the set_isolation -location -update command after the
set_isolation_control command. Therefore, you must specify the isolation control
signal with the set_isolation command.
• You cannot use the set_isolation -location -update command if the strategy
already has a location specified by an earlier set_isolation -location command.
• You can use the set_isolation -location -update command only one time.
Isolation Cell Naming Conventions
The -name_prefix and -name_suffix options let you control the naming of the isolation
cell instances inserted into the design that carry out the isolation strategy.
For example, the following command applies the iso1 strategy to all DFT connections from
the PD1 power domain:
fc_shell> set_dft_isolation -ref_strategy iso1 -ref_domain PD1
The following command applies the iso2 strategy to all ScanDataIn connections from the
PD1 power domain to the PD2 power domain:
fc_shell> set_dft_isolation -ref_strategy iso2 -ref_domain PD1 \
-dft_target_domain PD2 -type scan_in
If the set_dft_isolation command is repeated for a given target domain and connection
type, only the first command is honored.
If multiple strategies are specified for the same reference domain, the following
precedence rules apply, from highest to lowest priority:
1. A strategy that includes the -dft_source_domain, -dft_target_domain, and -type
options
2. A strategy that includes the -dft_source_domain and -dft_target_domain options,
with or without the -exclude_type option
3. A strategy that includes the -dft_target_domain and -type options
4. A strategy that includes the -dft_target_domain option, with or without the
-exclude_type option
Inserting isolation cells at DFT ports might result in redundant isolation insertion. You can
reduce or eliminate redundant isolation with the following techniques:
• To specify that the tool should not apply isolation strategies on DFT pins that do
not have isolation violations, set the mv.upf.skip_dft_iso_when_no_violation
application option to true (the default is false).
• Check whether isolation strategies are applied to both the driver domain and the load
domain of DFT paths that have isolation violations.
• The -location fanout option can be used only when you use one of the -source,
-sink, or -diff_supply_only option of the set_isolation command. Similarly,
when you use the -elements and one of -source, -sink, or -diff_supply_only
option, you can only specify fanout with the -location option.
• The -no_isolation option cannot be used when you use -elements and one of
-source, -sink, or -diff_supply_only option of the set_isolation command.
You can use check_isolation_coverage in either of the following two ways, to add
set_isolation or set_dft_isolation strategies to fully cover the isolation requirements
of DFT signal paths:
1. Add appropriate strategies and rerun insert_dft:
Where:
• -dft_isolation: Updates source/sink ISO strategies with DFT crossings
• -output filename: Saves the updated isolation strategies in the specified file
For example, in Figure 33, the isolation cell is inserted on a load with VDD_AO supply and
also a load with VDD_SD supply. The -location option specifies where the isolation cell
is placed.
PD_SD/ PD_SD/
VDD_SD VDD_SD
PD_AO/
VDD_AO
ISO
Isolation cell insertion supports name-based association. The tool can optimize the source
or sink logic since the association is name-based. A buffer inserted on a path can use a
different supply than the isolation cell.
The tool obtains the related supply of the literal constant from a set_port_attributes
-literal_supply command specified for the constant. If that specification is not
available, the tool uses the primary supply of the power domain in which the literal
constant is located.
You can prevent the Fusion Compiler tool from inserting isolation cells on constants
(literals, such as 1’b0 and 1’b1) that drive macro cell input and primary output ports when
the clamp value of the isolation strategy matches the logic value of the constant. For these
cases, the tool propagates the constant across the domain boundary and an isolation cell
is not needed.
To prevent isolation cell insertion, set the following design attribute:
fc_shell> set_design_attributes -attribute \
relax_constant_corruption_for_macro_inputs_and_primary_outputs \
true
If the clamp value does not match the value of the constant, the tool inserts an isolation
cell if a strategy is defined.
the UPF files. This command has no effect on domain boundary pins that already have
isolation cells inserted. When you use the -no_isolation option, you must specify the
-elements option.
You must specify at least the -output or -apply option with the -no_isolation option.
If you do not specify the -apply option, you must load the output UPF file manually. For
example,
fc_shell> generate_mv_constraints -no_isolation -output no_iso.upf
The strategy ISO1 has higher priority since its isolation element is not a control signal for
any isolation strategy as shown in Figure 34.
D1 ISO1
Ctrl1
Ctrl2
Isolation strategy ISO2 has the next higher priority since its isolation element, Ctrl1, is
already implemented as the control signal of ISO1. This is shown in Figure 35.
D1 ISO1
Ctrl1 ISO2
Ctrl2
Isolation strategy, ISO3, can be implemented since the isolation element, Ctrl2, is already
implemented as the control signal of ISO. This is shown in Figure 36.
D1 ISO1
Ctrl1 ISO2
Ctrl2 ISO3
In the smart approach, tool first checks whether the control path has an isolation violation.
Only if it finds that there is no isolation violation, the -no_isolation strategy is derived for
the new ports.
Note:
This feature is currently supported only for new punched pins on the retention
control path.
Example
Consider the following example:
PST:
VDDT | VDDC
Pst1: vdd_on | vddc_on
Pst2: vdd_off | vddc_on
Pst3: vdd_on | vddc_off
After compile, the tool punches the new port for save signal C/save. There
is an ISO violation on the new port C/save because of Pst2 status. So, with
mv.cells.smart_derive_iso_strategy_on_new_control_ports set to true, the tool
does not derive the -no_isolation strategy on pin C/save, applies ISO1 strategy, and
inserts the isolation cell on the path of C/save.
Macro Cell
related_power_pin: VDD
alive_during_paritial_power_down: true
When you use this model, the tool treats the macro cell as if the output pin has an
is_isolated : true Liberty attribute set. The tool also assumes the following:
◦ The enable pin and output pin have the same related_power_pin attribute value
◦ The enable pin and output pin have the alive_during_partial_power_down
attribute set to true
◦ The output pin must have the isolation_enable_condition attribute set to a
single primary input
• The isolation_enable_condition attribute of the macro cell is an equation of all
primary inputs to the macro.
The tool assumes that the output pin has the alive_during_partial_power_down
attribute set to true
• The isolation enable condition is missing, but the
alive_during_partial_power_down attribute is set to true.
The tool assumes that the output is connected to an ideal always-on supply and does
not perform checks on the output pin.
If the alive_during_power_up attribute is set to true at the macro input pin, the tool
performs electrical checks at the macro input pin. If this attribute is false, the checks are
not performed.
Voltage Checking
To control the voltage checks that the tool performs, use the following application options:
• mv.upf.nor_iso_macro_allow_enable_supply_check
By default, this application option is true. If set to false, the tool issues a warning
message if all the supplies of the enable pins are less on than the sink supply.
• mv.upf.allow_is_isolated_output_check
By default, this application option is true. If set to false, the tool does not perform
voltage checking for isolated output pins with respect to the load supply.
isolates. When the -no_isolation option is specified, a straight line is used to show the
continuation of the inputs.
The symbol is located adjacent to the boundary of its parent power domain. The location
also depends on whether the strategy isolates inputs or outputs.
Figure 39 shows all possible combinations of isolation strategy symbols and locations,
based on the value of the -applies_to option of the set_isolation command and the
value of the -location option of the set_isolation_control command used in defining
isolation strategy.
The symbol appears to the left edge of the power domain boundary if the strategy applies
to the input ports. The symbol appears to the right edge of the boundary if the strategy
applies to the output ports.
If the strategy applies to both input and output ports, the symbol appears at both left and
right edges of the boundary.
While defining the isolation strategy, if you specify the location as self, the symbol
appears inside the power domain boundary. If you specify the location as parent, the
symbol appears outside the power domain boundary.
Note:
If you specify a list of elements using the set_isolation -elements
command, the UPF diagram ignores the -applies_to option and positions the
isolation symbol relative to the left or right edge of the power domain boundary,
based on whether the list contains input elements or output elements or both.
The set_retention_elements command defines a list of critical elements that can later
be used in a set_retention command. The list of elements applies to the scope where
the set_retention_elements is defined. You must retain all of the elements in the list or
none of them. It is an error to have a partially retained list of elements.
The -exclude_elements option takes the same types of arguments as the -elements
option. The specified elements must be part of the domain extent.
Use this option to exclude elements from the retention strategy before implementation,
such as when you first create a retention strategy with the set_retention command. For
example, the following command applies the RET1 retention strategy to all registers in the
PD1 power domain except for the reg1 register:
fc_shell> set_retention RET1 -domain PD1 -exclude_elements {reg1}
You can also use the -exclude_elements option during successive strategy refinement
when you use the set_retention -update command before implementation. In the
following example, strategy RET1 is applied to register u1/reg1 and strategy RET2 is
applied to register u1/reg2 and all other registers in hierarchical cell u1:
fc_shell> set_retention RET1 -domain PD1 -elements {u1/reg1 u1/reg2}
fc_shell> set_retention RET2 -domain PD1 -elements {u1}
fc_shell> set_retention RET1 -domain PD1 -exclude_elements {u1/reg2} \
-update
If you write a UPF file before executing an action command, the UPF contains the
excluded elements even if they are not in the domain extent. After an action command, the
UPF contains only those excluded elements that are in the domain extent.
4. Strategies that apply to registers implied by specifying only the power domain name
Precedence rules apply to strategies on the same power domain. Retention strategies with
the -no_retention option have higher precedence than strategies without this option.
If strategies conflict, the tool retains the strategy that was created first and removes those
elements from any subsequent strategy definitions. In the following example, strategies
RET1 and RET2 are both defined for element p1. To resolve the conflict, the tool applies
strategy RET1 to element p1 because strategy RET1 was created first. Strategy RET2
then applies only to element p2.
set_retention RET1 -domain PD1 -elements {p1}
set_retention RET2 -domain PD1 -elements {p1 p2}
In Example 7, RET1 has the granularity of an instance and RET2 has the granularity of a
register. For inst1/reg1, even though RET1 has the -no_retention option, it has lower
precedence than RET2.
sink analysis during level-shifter, isolation, and repeater cell insertion since the driver or
receiver supply uses the retention supply.
When a retention strategy has the -use_retention_as_primary option specified, the tool
only uses library cells specified in the map_retention_cell command that have output
pins related to the backup PG pin.
• The argument of the command must be a list of retention strategies that are defined
for the power domain specified by the -domain option. The retention strategies and the
-domain option are mandatory.
• You must specify either one or two instances of the -lib_cells option to specify the
library cells that can be used for retention clamp cells.
• The argument of the -lib_cells option must consist of a keyword that specifies a
path type followed by a list of library cells that can be used on that path. The valid
keywords are as follows:
◦ The UPF_GENERIC_CLOCK keyword indicates that the specified library cells must be
used for mapping zero-pin register clamp cells on clock paths.
◦ The UPF_GENERIC_ASYNC_LOAD keyword indicates that the specified library cells
must be used for mapping zero-pin register clamp cells on asynchronous set/reset
paths.
• The specified library cells must be isolation or enable level-shifter library cells.
• If you specify the -lib_cells option more than one time, the options must specify
different keywords.
In the following example, the LC1 and LC2 library cells are used for mapping zero-pin
retention clamp cells inserted on clock paths that belong to retention strategies RET1 and
RET2. In addition, the LC3 and LC4 library cells are used for mapping zero-pin retention
clamp cells inserted on asynchronous set/reset paths that belong to retention strategies
RET1 and RET2.
fc_shell> map_retention_clamp_cell {RET1 RET2} -domain PD1 \
-lib_cells {UPF_GENERIC_CLOCK {LC1 LC2}} \
-lib_cells {UPF_GENERIC_ASYNC_LOAD {LC3 LC4}}
• Library cells with dont_touch attributes are not used for mapping.
• The operating conditions of the target library cells must match the design environment.
• If none of the specified library cells are suitable, the tool leaves the cells as GTECH
isolation cells in the final netlist.
• If a mapping constraint is not specified, the tool selects library cells from the target
library in the following order:
◦ NOR isolation cells
◦ Dual-rail isolation cells
◦ GTECH isolation
• If you specify a mapping command more than one time, the tool honors the last
successfully accepted command.
• Cell mapping is discarded only if the applicable power domain is removed.
Consider the following example:
fc_shell> map_retention_clamp_cell {RET1 RET2} -domain PD1 \
-lib_cells {UPF_GENERIC_CLOCK {LC1 LC2}} \
-lib_cells {UPF_GENERIC_ASYNC_LOAD {LC3 LC4}}
fc_shell> map_retention_clamp_cell {RET2 RET3} -domain PD1 \
-lib_cells {UPF_GENERIC_CLOCK {LC5 LC6 LC7}}
In this example, clamp cells that belong to the RET1 strategy of domain PD1 and are
inserted on clock paths use library cells LC1 and LC2. Similarly, clamp cells in the same
strategy and domain that are inserted on asynchronous set/reset paths use library cells
LC3 and LC4.
However, the second map_retention_clamp_cell command modifies some of the
instructions for the clamp cells that belong to the RET2 strategy of domain PD1. The
clamp cells that are inserted on clock paths use library cells LC5, LC6, and LC7 because
the second command overrides the first command. The clamp cells inserted on the set/
reset paths continue to use library cells LC3 and LC4 because the second command does
not include a -lib_cells option with the UPF_GENERIC_ASYNC_LOAD keyword.
Finally, clamp cells that belong to the RET3 strategy of domain PD1 and are inserted on
clock paths use library cells LC5, LC6, and LC7. However, clamp cells for this strategy
do not have a mapping constraint for set/reset paths. In this case, the tool selects NOR
isolation cells or dual-rail isolation cells if they are available, or leaves them as GTECH
isolation cells if no suitable library cells are found.
To specify that certain NOR-type library cells should be used only for zero-
pin retention clamp cells and not for any other isolation strategies, set the
mv.upf.iso_map_exclude_zpr_clamp_lib_cells application option to true.
The default is false. However, if you specify the same library cells in both
the map_retention_clamp_cell and map_isolation_cell commands, the
map_isolation_cell command has higher precedence than the global control provided
by the application option.
You can obtain information about retention cell clamp constraints by using the
report_mv_cells -retention_clamp and report_power_domains commands.
Usually, the Liberty models of complex sequential cells have pin names that match the pin
names of complex retention sequential cells (except for the save and restore pins).
If you have the following in your UPF:
set_retention -elements {complex_nonretention_cell}
map_retention_cell -lib_cells {complex_retention_library_cell}
The tool tries to infer a complex retention cell during synthesis based on pin name
matching. The tool performs the following steps:
1. Matches the pin names of the nonretention cell to the pin names of the retention library
cells specified in the map_retention_cell command.
2. Chooses the first retention library cell with names that match exactly and uses these in
place of the nonretention cells.
3. If no matching retention library cell is found, the tool issues a warning message.
With the pin name matching approach, the tool selects the first matching retention library
cell from the map_retention_cell command.
If there are multiple matches and if you want to select a particular retention library cell,
you should define the retention_equivalent attribute first, then set the attribute on the
library cells. For example,
fc_shell> define_user_attribute -type string -classes lib_cell \
-name retention_equivalent
fc_shell> set_attribute -objects {nonretention_library_cell} \
-name retention_equivalent \
-value {retention_library_cell}
If this attribute is set, a retention library cell can be used in place of a nonretention
library cell if the retention library cell is valid. A valid retention library cell has the
retention_cell attribute, is present in the list of target libraries, and is listed as a library
cell in the map_retention_cell command. If the library cell is not a valid retention library
cell, the tool reverts to pin name matching.
If you have library cells that do not have matching pin names, you can use the
retention_equivalent attribute to specify the pin mappings. For example,
fc_shell> set_attribute -objects {nonretention_library_cell} \
-name retention_equivalent \
-value {retention_library_cell {pin1 pin2} {pin3 pin4}}
Pin1 of the nonretention library cell corresponds to pin2 of the retention library cell. Pin3
of the nonretention library cell corresponds to pin4 of the retention library cell. If the pin
mapping is not valid, then the tool falls back on pin name matching. Figure 40 shows how
the tool infers complex retention cells.
Does the
No Find a matching library cell specified
nonretention library
by the map_retention_cell
cell have the
command and based on pin name
retention_equivalent
matching
attribute set?
Yes
No
Issue a warning
Matching library cell found?
message
Confirm that the retention
library cell is listed in the
map_retention_cell command
and then infer the retention Yes
library cell
the member cells of the HDL groups that are nested in the specified HDL group. The tool
writes out all the leaf-level sequential cells in the element list of the retention commands.
By default, you can reference HDL block names in the UPF. To enable hierarchical naming
for HDL block names, set the hdlin.naming.hierarchical application option to true.
For example, if you have the following Verilog RTL:
module top (a, clk, q, gate);
input clk, gate;
input [1:0]a;
output [1:0]q;
reg [1:0]q;
always @ (posedge clk) begin : block_1
reg[1:0]tmp;
if (gate)
q = tmp;
else
tmp = a;
end
endmodule
cells in the generate block. To enable generate block statement support, set the
hdlin.naming.upf_compatible application option to true.
When you enable the application option, the tool does the following:
• Sets the hdlin.naming.hierarchical application option to true
• Sets the hdlin.naming.structs_records application option to "%s.%s"
To refer to a cell inside a generate statement, specify the generate block name with the
index followed by the cell name. For example, if your input UPF has the following:
set_retention ret1 -domain Top -elements {mygenblk[0].myblk.myreg_reg}
In this example, there is no change in the output UPF since the input UPF specifies a leaf-
level cell.
Note:
If a generate block is not given a name, the tool creates a default name of
the format genblk%d where "%d" represents a nonnegative integer number.
If the generate block was not named in Example 9, the tool would use
genblk1[1].myblk.myreg_reg and genblk1[0].myblk.myreg_reg.
All retention symbols are located at the center of their parent power domains. The diagram
displays the supply nets connected to the retention strategy, the domains to which the
strategy belongs and their save and restore signals.
p2 PD_Blue R1
R1 R2
R2 R1
p1
R1
R1 R1
ISO1 ISO2
PD_Blue
PD_Orange
For the example in Figure 43, the following isolation strategies apply:
set_repeater R1 -domain PD_Blue -repeater_supply SS_Blue
set_isolation ISO1 -domain PD_Blue -isolation_supply SS_Orange \
-applies_to inputs -sink SS_Blue
set_isolation ISO2 -domain PD_Blue -isolation_supply SS_Blue \
-applies_to outputs -source SS_Blue
The UPF standard requires a simple name for the power switch in a
create_power_switch command. By default, the tool checks this requirement. To allow
the use of hierarchical names, set the mv.upf.input_enforce_simple_names application
option to false.
You can override the location of the power switch by using the contains_switches
attribute of the set_design_attributes command. For the following example, even
though you are in scope U0, the power switch is placed in scope U2.
set scope U0
create_power_switch SW1 ...
set_design_attributes -elements {U2} -attribute contains_switches {S1}
You can use the contains_switches attribute more than one time on a hierarchical cell.
If you do, the power switches are added to the list of switches related to a hierarchical cell.
For example,
set_design_attributes -elements {U2} -attribute contains_switches {S1}
set_design-attributes -elements {U2} -attribute contains_switches {S2}
The symbol indicates the input and output supply ports, the control ports, and the control
signals. The arrows represent the direction of the ports.
As shown in Figure 44, a power switch can have single or multiple control signals. The
power switches are located within the boundaries of their parent power domain. Because
power switches have supply nets as input and output, they are located between the power
supply nets as shown in Figure 45.
The tool also accepts the UPF 2.0 version of the command as follows:
add_power_state [-supply | -group | -domain] object_name
[-simstate simstate]
[-update]
[-state {state_name [-supply_expr supply_expression]
[-logic_expr logic_expression]
[-simstate simstate]
[-illegal]}]*
In the UPF 2.0 format, the state_name value can be specified either inside or outside the
curly braces.
You can mix different versions of the add_power_state command. However, you must
use the same style for the same objects. For example, if you specify one state for the
SS1 supply set using UPF 2.1 style, you can use only the UPF 2.1 style for specifying the
states for SS1. For example, the following is not allowed:
add_power_state SS1 -state S1 {-supply_expr {power == {OFF}}}
add_power_state SS1 -state {S2 -supply_expr {ground == {OFF}}}
Use the -state option to specify the name of the power state of the supply set.
Use the -supply_expr option to specify the power state and the voltage value for the
supply net components of the supply set.
The UPF standard requires a simple name for the object_name argument.
The implementation tools do not use the information specified using the -simstate
option. The tool reads this option and preserves them in the output UPF. The tool accepts
all seven possible simulation states, as specified in the IEEE 1801 language reference
manual.
Topics in this section:
• Default Power States
• Power State Propagation
• Specifying Supply Expressions
• Specifying Logic Expressions
• Successive Refinement of Power States
You can choose to use the ON and OFF names for other power state definitions.
The following example uses the default state ON in the definition of the new state NOR.
create_power_domain TOP -elements {.} -supply {primary}
add_power_state -domain TOP \
-state {NOR -logic_expr {TOP.primary==ON && ... }
You must fully define the default ON and OFF states before performing any action
commands or checking commands. For example:
add_power_state TOP.primary \
-state {ON -supply_expr {power=={FULL_ON 1.08} \
&& ground=={FULL_ON 0.0}} -update
• You can subsequently use the net and the supply set state in the create_pst and
add_pst_state commands.
• You cannot use the && operator in the -supply_expr option of the add_power_state
command.
When the attribute is false, the following conditions apply:
• The tool does not propagate the name of the supply set state specified in the
add_power_state command to the functional nets.
• You cannot use the net and the supply set state in the create_pst and
add_pst_state commands. To create power state tables, you must use the
create_power_state_group command and refer to the supply set state names in the
group definition.
• You can use the && and the || operators in the -supply_expr option of the
add_power_state command.
The voltage values that you specify with a power state are interpreted as follows:
• When you specify no voltage value, the tool assumes that the value is specified at a
later time with the add_power_state -update command.
• When you specify a single voltage value, this value is the nominal voltage of the
associated state.
• When you specify two voltage values, the first value is the minimum voltage and the
second value is the maximum voltage. The average of the two values is considered to
be the nominal voltage of the power state.
• When you specify three voltage values, the first value is the minimum voltage, the
second value is the nominal voltage, and the third value is the maximum voltage of the
power state.
• If you specify more than one voltage value, you must list them in increasing order.
The following example shows the use of the add_power_state command to define two
power states of the PD1_primary supply set:
add_power_state PD1_primary -state HVp \
{ -supply_expr {power == {FULL_ON, 1.08, 2.05, 3.0}}}
add_power_state PD1_primary -state HVg \
{ -supply_expr {ground == {FULL_ON, 0.0}}}
The tool supports parentheses in the Boolean supply expression. For example,
add_power_state SS_AO -state {ON -supply_expr {(power == {FULL_ON 1.0}) \
&& (ground == {FULL_ON 0.0})}}
states to the PST. The multiple derived states will achieve the same OR logic specified.
These internal derived states will not be written to in the output UPF and will be used only
for internal purposes.
Example 1
In the following example, the -supply_expr contains one || operator of two == operations:
add_power_state sst -state SST_OFF
{-supply_expr { power == {OFF} || ground == {OFF} } }
Two hidden power states SST_OFF and SST_OFF_snps_1 will be created, one for each ==
operation:
• Hidden state SST_OFF: power == OFF
• Hidden state SST_OFF_snps_1: ground == OFF
Example 2
In this example, the -supply_expr contains two || operators and one && operator:
add_power_state sst -state SST_HI
{-supply_expr { (power == {FULL_ON 1.2} || power == {FULL_ON 0.7}) &&
(ground == {FULL_ON 0.0} || nwell == {FULL_ON 0.5}) } }
After conversion, the input is equivalent to following four hidden power states OR-ed
together:
• Hidden state SST_HI: power == 1.2 && ground == 0.0
• Hidden state SST_HI_snps_1: power == 0.7 && ground == 0.0
create_power_state_group PSG
The following table shows the internal representation of the derived PST.
Operator Precedence
The supply expression will follow the operator precedence as described in the IEEE
1801-3.1 standard. See the following tables. The precedence between the same class of
operators will follow operator precedence mentioned in the SystemVerilog LRM.
Table 6 Boolean Operators
== == = Equal
!= != /= Not equal
|| || or Logical disjunction
Operator Precedence
!~ Highest
== != Next highest
|| Lowest
Reporting Support
report_pst, report_supply_sets, and save_upf will report original power state names
and voltage values corresponding to those states.
See the following report_pst -derived example:
# User input
add_power_state SS1 -state NORMAL
{-supply_expr {(power == {FULL_ON 1.2} || power == {FULL_ON 1.1})
&& ground == {FULL_ON 0.0}}}
create_power_state_group PSG
-----------------------------------------------------------
States
------------------------------------------------------------
Only binary values (0 or 1) are allowed as logic signals. In addition, the use of parentheses
is supported. For example:
add_power_state -domain PD1
-state {ON -logic_expr {(SS1 == ON) && (nPWRUP == 1)}}
If the -logic_expr option is used with supply sets, you can use all operators listed in the
IEEE 1801 language reference in the Boolean expression, as shown in Table 8.
Table 8 Boolean Operators
Operator Meaning
! Logical negation
~ Bitwise negation
Operator Meaning
== Equal
!= Not equal
| Bitwise disjunction
|| Logical disjunction
You can also use the || (OR) operator for operands of type logic control signals in the
-logic_expr of add_power_state for supply set objects. See the following example:
add_power_state ss_peri_sw
-state ON {-logic_expr {RET_A == 1'b1 || PDW_A == 1’b1} }
-state OFF {-logic_expr {RET_B == 1'b0 || PDW_B == 1’b0} }
Note:
The || operator involving supply set states is not supported in -logic_expr of
add_power_state. Only || operators involving logical pins/ports are supported
in -logic_expr.
Logic Expressions With add_power_state -group
If add_power_state -group involves a power state from which hidden power states
are created (due to the use of the || operator in -supply_expr, see Specifying Supply
Expressions), all of these hidden power states will be used to create the internally derived
PST. See the following example:
# User input
add_power_state ss1 -state SS1_HI {-supply_expr
{ (power == {FULL_ON 1.2} || power == {FULL_ON 0.7}) &&
ground == {FULL_ON 0.0} } }
add_power_state ss2 -state SS2_HI {-supply_expr
{ (power == {FULL_ON 1.2} || power == {FULL_ON 0.7}) &&
ground == {FULL_ON 0.0} } }
create_power_state_group psg
add_power_state -group psg -state FAST {-logic_expr
{ ss1 == SS1_HI && ss2 == SS2_HI } }
The power state group psg will remain as is with no internal conversion. When the tool
processes SS1_HI for power state group psg, both the SS1_HI and SS1_HI_snaps_1
hidden power states will be added to the derived PST. The same is true for SS2_HI.
Supply and Logic Expressions With add_power_state -update
When a power state for a supply is defined with a -supply_expr and -logic_expr, and
subsequently updated using -update, its definition becomes the conjunction of two:
supply_expr' = (previous supply_expr) && (-update supply_expr)
The general rules for refinement using the -update option are as follows:
• The initial definition of the state can contain just the name of the state. It might or might
not specify any additional information.
• If a state defined with the -supply_expr option is updated with another -supply_expr
option, the new definition is the conjunction of the two definitions.
You can update the supply expression in the following two ways:
◦ If the initial definition contains just the netstate (FULL_ON or OFF) for a functional net
without voltage, you can update the definition with the voltage.
add_power_state -supply SS1 -state ON \
{-supply_expr {power == FULL_ON}}}
add_power_state -supply SS1 -state ON \
{-supply_expr {power == FULL_ON 1.0}}} -update
◦ The initial definition might be one or more functional nets. You can update the
definition by specifying more functional nets.
add_power_state -supply SS1 -state ON \
{-supply_expr {power == FULL_ON 1.0}
add_power_state -supply SS1 -state ON \
{-supply_expr {ground == FULL_ON 0.0}}} -update
• If a state defined with the -logic_expr option is updated with another -logic_expr
option, then the new definition is interpreted as the conjunction of the two expression.
For example, the following statements
add_power_state SS1 -state ON {-logic_expr {net1}}
add_power_state SS1 -state ON (-logic_expr {net2}} -update
are interpreted as
add_power_state SS1 -state ON {-logic_expr {net1 && net2}}
• If the simstate is specified as NOT_NORMAL, you can update it to any simstate other than
NORMAL.
Assuming that the supply sets are already defined, create power states for each supply
set:
add_power_state \
-supply SS1 -state ON {-supply_expr {power == {FULL_ON 0.8} \
&& {ground == {FULL_ON 0}}}
add_power_state \
-supply SS2 -state ON {-supply_expr {power == {FULL_ON 0.8}}} \
-state OFF {-supply_expr {{power == {OFF}}}
add_power_state \
-supply SS3 -state ON {-supply_expr {power == {FULL_ON 0.8}}}} \
-state OFF {-supply_expr {{power == {OFF}}}
Finally, build the power state table using the specified states and the power state group:
add_power_state -group MY_PST \
-state RUN12 {-logic_expr {SS1 == ON && SS2 == ON && SS3 == ON}} \
-state RUN1 {-logic_expr {SS1 == ON && SS2 == ON && SS3 == OFF}} \
-state RUN2 {-logic_expr {SS1 == ON && SS2 == OFF && SS3 == ON}} \
-state SLEEP {-logic_expr {SS1 == ON && SS2 == OFF && SS3 == OFF}}
RUN12 ON ON ON
RUN1 ON ON OFF
RUN2 ON OFF ON
Using internal state names, the tool builds the actual power state table as shown in
Table 10.
RUN12_NORM GND ON ON ON ON ON
The new power state table can be built hierarchically using the existing MY_PST table and
creating a new power state table with new states.
First, create a new power group:
create_power_state_group MY_PST2
Next, create the power states for the supplies in the new power group:
add_power_state -group MY_PST2 \
-state NORM {-logic_expr {SS4==ON && SS5==ON}} \
-state OVD {-logic_expr {SS4==OVD && SS5==ON}} \
-state UND {-logic_expr {SS4==ON && SS5==OFF}} \
-state OFF {-logic_expr {SS4==OFF && SS5==OFF}}
These power states combine to form a new power state table as shown in Table 12.
Table 12 Power State Table MY_PST2
NORM ON ON
OVD OVD ON
UND ON OFF
The power state table, SYSTEM_PST, is shown in Table 13. This table is equivalent to the
power state table in Table 11.
Table 13 Power State Table SYSTEM_PST
Example 10 mid1.upf
add_power_state SST -state ON1
{-supply_expr {power == `{FULL_ON, 1.0} &&
ground == `{FULL_ON, 0.0}}
add_power_state SS1 -state SNPS_mid1_ON1
{-supply_expr {power == `{FULL_ON, 0.9} &&
ground == `{FULL_ON, 0.0}}}
add_power_state SS1 -state SNPS_mid2_ON1
{-supply_expr {power == `{FULL_ON, 0.9} ||
power == `{FULL_ON, 1.0}}}
add_power_state -group GRP -state S1
{-logic_expr {SST == ON1 && SS1 == SNPS_mid1_ON1 &&
SS1 == SNPS_mid2_ON1}}
Example 11 mid2.upf
add_power_state SST -state ON1
{-supply_expr {power == `{FULL_ON, 1.0} &&
ground == `{FULL_ON, 0.0}}
add_power_state SS2 -state SNPS_mid1_ON1
{-supply_expr {power == `{FULL_ON, 0.9} &&
ground == `{FULL_ON, 0.0}}}
add_power_state SS2 -state SNPS_mid2_ON1
{-supply_expr {power == `{FULL_ON, 0.9} ||
power == `{FULL_ON, 1.0}}}
add_power_state -group GRP -state S1
Note:
• Supply sets mid1/SS1 and mid2/SS2 are associated in the top.
• The effective power state on this supply net group has this supply
expression:
◦ {power == `{FULL_ON, 0.9} && ground == `{FULL_ON, 0.0}}
• If power states on mid1/SS1 and mid2/SS2 have different names, block UPF
will use their original power state names.
• If power states on mid1/SS1 and mid2/SS2 have the same names,
block UPF will use the tool-generated power state names in the format
SNPS_block name_original power state name to distinguish them.
• In mid1.upf, supply set SS1 has two power states with tool-genenrated
names SNPS_mid1_ON1 (which comes from power state ON1 on mid1/SS1)
and SNPS_mid2_ON1 (which comes from power state ON1 on mid2/SS2).
• In mid1.upf, power state group GRP has a logic expression with two SS1 ==
xxx operands in the && expression. The intersection is exactly {power ==
`{FULL_ON, 0.9} && ground == `{FULL_ON, 0.0}}.
• Hidden power state names should not appear in the block UPF.
• -supply_expr with OR operators should appear in the block UPF in exactly
in the same way as in the original UPF.
Groups, however, cannot refer to port states added using the add_port_state command
and net states added using the add_supply_state command. You must use create_pst
to refer to port states or net states.
Defining domain states in TOP is identical to defining group states. You can create domain
states too in TOP UPF similar to group states.
Example
The following example shows how to create a power state group in TOP and define the
relationship between group state of BLOCK and TOP PST states.
Block has group state GS in group GROUP_B.
Top has PST TOP_PST having power state PS1.
The group GROUP_T in top is referring to block’s group state GS and top’s PST state PS1
in power state ST1.
# BLOCK.upf
set_design_attributes –elements {.} -attribute
enable_state_propagation_in_add_power_state FALSE
...
add_power_state SS –state ON {-supply_expr {power=={FULL_ON 1} &&
ground=={FULL_ON 0}}}
...
create_power_state_group GROUP_B
add_power_state GROUP_B –state GS {-logic_expr {SS==ON && SS1==ON}}
# TOP.upf
set_design_attributes –elements {.} -attribute
enable_state_propagation_in_add_power_state TRUE
...
create_pst TOP_PST –supplies {VDD VDD1}
add_pst_state PS1 –pst TOP_PST –state {ON ON}
create_power_state_group GROUP_T
add_power_state GROUP_T –state ST1 {-logic_expr {TOP_PST==PS1 &&
BLOCK/GROUP_B==GS}}
# TOP.upf
set_design_attributes –elements {.}
-attribute enable_state_propagation_in_add_power_state TRUE
create_power_domain PDTOP
set_design_attributes –elements {MID} –attribute merge_domain TRUE
During propagate_constraints, the PDTOP domain of BLOCK is merged with the TOP
level PDTOP domain and the group states of BLOCK are propagated to TOP.
The domain states of BLOCK's domain are retained in BLOCK by creating another power
state group called PDTOP.
# TOP.upf [full chip UPF]
create_power_domain PDTOP
set_scope MID
set_design_attributes –elements {.}
-attribute enable_state_propagation_in_add_power_state TRUE
...
create_pst MID_PST
add_pst_state s0 –pst MID_PST
set_scope BOT
set_design_attributes –elements {.}
-attribute enable_state_propagation_in_add_power_state FALSE
...
add_power_state SS –state ON
{-supply_expr {power=={FULL_ON 1} && ground=={FULL_ON 0}}}
...
This specification takes precedence over any block-specific attributes and thresholds. The
tool considers every hierarchical boundary to be a reconciliation boundary. In a top-down
flow, the power states of the higher scope power state table are pushed to the lower scope
power state tables. In a bottom-up flow, the tool checks consistency between attributes
pushed from the block level to the top level.
To specify voltage reconciliation for specific block boundaries, set the
upf_reconcile_boundary design attribute to mark the block boundaries. You can then
specify that the tool skip all power state table checking below the boundary hierarchy, as
shown in the following command:
fc_shell> set_design_attributes -models IP1 \
-attribute upf_reconcile_boundary "skip"
Alternatively, you can specify that the tool reconcile voltages for the power state tables.
For example, the following command marks a block boundary for voltage reconciliation on
all power state tables below the boundary hierarchy:
fc_shell> set_design_attributes -models IP1 \
-attribute upf_reconcile_boundary "reconcile_voltages"
If you reconcile the voltages, you can set a voltage tolerance threshold that defines a
range of acceptable voltages for block-level states. For example, the following command
specifies a single threshold tolerance on a supply:
fc_shell> set_variation -supply {BLK/VDD} -tolerance {0.2}
The following voltage threshold variations is set for the block-level states:
set_variation -tolerance {0.1}
The top-level S0 state is aligned with the block-level S0 state. The top-level S1 state is
dropped due to a conflict in the block-level S1 state's VDD2. Top-level S2 is aligned with
block-level S2; and top-level S3 is dropped due to a conflict in VDD1. The final system
power state table is shown in Table 17.
Table 17 Final System Power State Table
After Voltage Reconciliation
state names. However, if you use the -supplies option with the report_pst command,
the report displays tool-derived power state names for the specified supply nets.
fc_shell> report_pst -verbose -reconcile
------------------------------------------------------
Reconciliation skipped blocks
: N/A
------------------------------------------------------
Reconciliation on blocks
: mid
------------------------------------------------------
Reconciliation thresholds
Global : (-, -)
Threshold applied on supplies :
SS1.power : (-0.10, +0.10)
SS1.ground : (-,-)
SS2.power : (-0.10, +0.10)
SS2.ground : (-,-)
------------------------------------------------------
Scope : top
------------------------------------------------------
Supply names : SS1, SS1, SS2, SS2
Resulting power states in this scope:
You can display the power state table by choosing View > Multivoltage Views > Power
State.
The Power State Table view provides the following types of analysis:
• Always-on analysis compares the on-off states between a supply (highlighted in dark
blue) and the rest of the supplies in the power state table. In this figure, all the supplies
are compared to VDD. VDD_LOW is equally on while p0pwr.power is less on than
VDD.
• The supplies are highlighted in the supply network view with the corresponding colors.
Power Models
The Fusion Compiler tool supports the IEEE 1801 construct called a power model.
A power model allows you to define the UPF for a hard macro in a self-contained
environment. Each time this macro is instantiated, the power model is loaded from
memory instead of calling the load_upf command and connect_supply_net commands.
You define power models using the define_power_model command. The
apply_power_model and add_parameter commands are also used when defining or
specifying the use of power models.
To check your power models, use the report_power_model command. This command
displays information including where the power models are defined and applied.
Topics covered in this section:
• Configuring Fusion Compiler for Power Models
• Defining and Applying a Power Model
• Excluding Designs From Using Power Models
Specifies a list of search paths that the tool uses to find the UPF power model
or
set_design_attributes -models model_list \
-attribute UPF_is_hard_macro false
Attribute name Attribute value Ports where the Use of the attribute
attribute can be
specified
Attribute name Attribute value Ports where the Use of the attribute
attribute can be
specified
iso_sink Name of the supply set, Output Identifies the actual off-chip
DERIVED_DIFF_ONLY, load of a primary output
DERIVED_DIVERSE port.
iso_source Name of the supply set, Input Identifies the actual off-chip
DERIVED_DIFF_ONLY, driver of a primary input
DERIVED_DIVERSE port.
related_supply_defaul Boolean Top level input and Indicates that, when the
t_primary output ports related supply net is not
specified, the primary
supply of TOP domain is
assumed as the related
supply.
Used by the verification
tools so that no assumption
is made about the default
power supply.
repeater_power_netrep Name of the supply net Input and output Specifies a repeater (buffer)
eater_ground_net ports and pins. should be inserted to drive
Cannot be specified the specified port. The
on bidirectional inserted buffer is powered
ports by the specified supply net.
Attribute name Attribute value Ports where the Use of the attribute
attribute can be
specified
Note:
When you specify the set_port_attributes command multiple times on the
same object, the last setting overrides the previous settings.
The following example shows how to set the iso_source and iso_sink attributes on the
input and output ports, respectively.
fc_shell> set_port_attributes -ports {in1 in2} -attribute iso_source SS1
fc_shell> set_port_attributes -ports {out1 out2} -attribute iso_sink SS2
You can specify attributes using either the UPF 2.0 or 2.1 syntax. For example, either
version is acceptable:
set_port_attributes -ports {in1 in2} -attribute iso_source SS1
set_port_attributes -ports {in1 in2} -attribute {iso_source SS1}
If the tool encounters an unrecognized port attribute when reading the UPF, it preserves
the attribute in the output UPF.
correlated_supply_gro Supply net names or Top scope of the Indicates that the supply
up wildcard (*) character design nets of the port state or
power state triplets should
be considered as correlated
voltage range.
derived_external and Name of the supply set Hierarchical cell Indicates that the supply
external_supply_map sets are reference-only
supply sets. These are
used with ports with the
iso_source and iso_sink
attributes. These attributes
establish a one-to-one order
dependent mapping of the
supply sets..
lower_domain_boundary true | false Top scope of the When set to true, the
design and any boundary of the power
hierarchical cell domain extends up to the
boundary of the power
domain below it
You can specify design attributes using either the UPF 2.0 or 2.1 syntax. For example,
set_design_attributes -elements {m1} -attribute terminal_boundary true
set_design_attributes -elements {m1} -attribute {terminal_boundary true}
If the tool encounters an unrecognized design attribute when reading the UPF, it preserves
the unrecognized attribute in the output UPF.
When the tool considers power intent logic insertion outside a black box cell, the receiver
supply of an input port on the black box cell is determined in the following order of
decreasing priority:
1. A set_port_attributes -receiver_supply command specified at the HighConn
side of the port
2. A set_related_supply_net command specified at the HighConn side of the port
3. A set_port_attributes -receiver_supply command specified at the LowConn
side of the port
4. A set_related_supply_net command specified at the LowConn side of the port
5. The primary supply of the power domain
The tool also checks any set_port_attributes -driver_supply commands specified
at the HighConn side of the port for electrical violations.
If a discrepancy exists between the actual supply and the supply specified in
set_port_attributes or set_related_supply_net commands, the tool issues one or
more warning messages.
Legacy Blocks
A legacy block is a block designed before the introduction of supply sets, using only
domain-dependent supply nets. A legacy block does not use or define any domain-
independent supply nets or supply sets.
A conflict can arise when a legacy block is used in a design with domain-independent
supply nets. To prevent such a conflict, set the block’s legacy_block design attribute
to true. This converts all power domains of the legacy block to be fully restricted, so
the legacy block can no longer use any domain-independent supply nets declared in the
scopes above the block.
A domain-independent supply net is a supply net that is available to any power domain
defined at or below the scope of the supply net, as long such domains are not restricted. In
other words, the supply net was created by a create_supply_net command without the
-domain option. For example,
fc_shell> create_supply_net SN1
The supply net is created in the PD2 power domain and cannot be used in other domains.
A restricted power domain is a power domain that is restricted to use only certain supply
sets. This restriction results from usage of the extra_supplies keyword with the -supply
option of the create_power_domain command. For example,
fc_shell> create_power_domain PD3 -elements U3 \
-supply {extra_supplies_0 SS1}
The PD3 power domain is restricted to using only the SS1 supply set.
When a legacy block is used in a newer design containing supply sets, a conflict can arise
with a situation like the one shown in Figure 48.
TOP
SN1
U1 SN2
U2
This command converts all power domains of the U1 block to fully restricted domains so
that those domains can no longer use the domain-independent supply nets declared in
scopes above the block. The tool achieves this effect by using the -supply option of the
create_power_domain command when the block is read.
Because there are no supply sets listed between the quotation marks in the -supply
option, the domain becomes fully restricted and does not allow the usage of any supply
sets defined at higher levels of the design, thereby preventing any supply set availability
conflict from arising.
No domain-independent supply nets or supply sets can be defined or used inside a legacy
block or any of its lower-level blocks, and no supply set handles can be used. Any lower-
level blocks below a legacy block must also be legacy blocks.
The following table provides details on the attributes that can be queried using
get_upf_design_attribute:
The following table provides details on the attributes that can be queried on pin and port
objects of the design using get_upf_port_attributes:
-clamp_value UPF_clamp_value Object has a valid clamp value The clamp value
setting attributed:
0 | 1 | latch
ETM
(.lib file)
Block Synthesis
(compile_fusion)
Library Manager
Block
Netlist SDC SPEF
UPF
For the example in Figure 50, the U1 block is an ETM. You might have the following UPF
for the top-level design:
create_power_domain PD_TOP -include_scope
create_supply_net VDD_AO
...
load_upf block.upf -scope U1
...
connect_supply_net VD_AO -ports U1/VDD_AO
Top
(PD_TOP)
U1
(PD_U1)
VDD_SW
O1
When you load the block UPF at the scope of the ETM, macro, or module, the UPF
commands that refer to logic objects nested within the ETM or macro design are ignored.
is_macro_cell attribute is treated as a hard macro. A hard macro has one of the
following:
• No UPF specification
• A self-contained UPF specification
• A UPF specification that does not define its own top-level domain
A soft macro always has a self-contained UPF. A hard macro might or might not have a
UPF because it is not separately implemented by the tool.
For UPF processing, the tool performs checks for terminal boundaries on both hard and
soft macros. The tool checks for a self-contained UPF for soft macros.
By default, the find_objects command considers all instances of hard and soft macros
as leaf cells. The -traverse_macros option allows the command to traverse the macro
terminal boundaries.
The default mode, in which the tool checks only for voltage range matching. For this
check, the voltage specified by the set_voltage command must fall within the range
of the minimum and maximum voltages of the library cell for each corner.
• exact_match
For each timing corner, the tool checks the following criteria:
◦ The process label of the library pane must match the set_process_label
setting and the process number of the same library pane must match the same
set_process_number setting.
◦ For each supply net connected to the voltage rail of the library cell, the voltage of
the rail in the same library pane must match the set_voltage setting of the supply
net.
◦ The temperature of the same library pane must match the set_temperature
setting.
• range_match
For each timing corner, the tool checks the following criteria:
◦ The voltage specified by the set_voltage command must fall within the range of
the minimum and maximum voltages of the library pane.
◦ The temperature specified by the set_temperature command must fall within the
range of the minimum and maximum temperatures of the library pane.
• closest_match
For each timing corner, the tool chooses the closest match based on the following
conditions, from highest to lowest priority:
1. All PVT settings exact match
2. Process label exact match
3. Process number exact match
4. Voltage exact match
5. Voltage range match
6. Temperature exact match
• buf (buffer)
To specify the power management cell type, append the application option setting with an
equal sign (=) followed by the identifier. If you do not specify a cell type, the setting applies
to all power management cells.
For example, the following command specifies exact PVT matching for level-shifter cells:
fc_shell> set_app_options -name opt.common.pvt_setting \
-value "exact_match=ls"
You can combine multiple settings in one command. For example, the following command
specifies exact PVT matching for level-shifter cells and range matching for isolation cells:
fc_shell> set_app_options -name opt.common.pvt_setting \
-value "exact_match=ls, range_match=iso"
4
Lower-Domain Boundary Support
You can control many aspects of power management cells insertion with respect to power
domain boundaries.
For more information, see the following topics:
• Overview of Power Domain Boundaries
• Applying Isolation, Level-Shifter, and Repeater Strategies
in2
Power domain boundary when the
-applies_to_boundary lower
in3
By default in Figure 53, the tool considers only in1, in2, and in3 ports of the PD_TOP
domain to be at the domain boundary. This is also the case if the -applies_to_boundary
option is set to upper.
When the -applies_to_boundary option is set to both, the tool considers the in1,
in2, in3, MID/in1, and MID/in2 ports to be at the power domain boundary. However, the
boundary does not extend to the interface of the BOT design or the PD_BOT power
domain.
When the -applies_to_boundary option is set to lower, the tool considers the MID/in1
and MID/in2 ports to be at the power domain boundary.
Note that the boundary does not extend to the interface of the BOT design or the PD_BOT
domain.
To set the lower boundary of a power domain at the HighConn side of all hard macros
included within the power domain, you must set the macro_as_domain_boundary design
attribute to true. This is a scope-level attribute that indicates whether macros at or below
that scope need to be considered as design boundaries. Use the -elements option to
apply the attribute to specific elements. In addition, you must execute one of the following
actions:
• Set the design attribute lower_domain_boundary to true for the top-level scope or a
block-level scope.
• Specify the -applies_to_boundary lower or -applies_to_boundary both option of
the set_isolation, set_level_shifter, or set_repeater commands.
In the following example, the lower domain boundary of power domain PD_TOP includes
the ports of all macros, with the exception of macros contained in cell U2. As a result, the
tool inserts isolation cells at the input ports of all macros except macros contained in cell
U2.
When the macro_as_domain_boundary attribute is set to true for specific hard macros,
the terminal_boundary attribute is allowed on the pins of the specified macros. In
addition, you can specify pins or instances of the macros by using the -clamp_value and
-repeater_supply options of the set_port_attributes command, or by setting the
repeater_power_net and repeater_ground_net attributes with the same command.
PD_BOT
b_out1
b_in1
b_in2
b_in3
b_out2
in2 out2
The strategies that apply to the input pins of the power domain also apply to the output
pins of the root cell of the power domain nested inside the power domain. Similarly, the
strategies that apply to the output pins of the power domain also apply to the input pins of
the root cells of the power domains nested inside the domain.
For Figure 54, the following table shows which pins apply to the specified boundary
crossing for a strategy defined at PD_TOP.
Table 20 Pins Considered for Boundary Crossings
-applies_to_boundary Pins
both in1, in2, out1, out2, b_in1, b_in2, b_in3, b_out1, b_out2
In Example 12, the out_iso strategy defined for the PD_TOP power domain applies to
the b_in1, b_in2, and b_in3 pins, which are the lower-domain boundary output pins of the
PD_TOP power domain.
In Example 13, the boundary specification is both and both_iso strategy for PD_TOP
applies to out1 and out2, which are the upper-domain boundary output pins.
Defining Cell Placement With the -location Option
When you define a strategy using the set_isolation or set_level_shifter commands,
the tool supports both the -location parent or -location self options. You can use
the location placement along with the -applies_to option for added flexibility in placing
your isolation or level-shifter cells.
Figure 55 illustrates how the tool applies the isolation strategies for Example 14.
ISO2 PD_TOP
in1 out1
ISO1 PD_BOT ISO2
b_in1 b_out1
For the example in Figure 55, the isolation cells are placed in domain PD_TOP because
the strategies are defined for domain PD_TOP and the -location option is not specified.
By default, the location is self.
PD_MID
in1 (A)
PD_BOT
(B) out1
in2
The tool applies ISO1 strategy to ports A/in1, A/in2, and A/B/out1.
Suppose for Figure 56, you have the following:
create_power_domain PD_TOP
create_power_domain PD_MID -elements {A}
create_power_domain PD_BOT -elements {A/B}
set_isolation ISO1 -domain PD_MID -applies_to inputs \
-applies_to_boundary both -location parent
The tool implements ISO1 only on A/in1 and A/in2 at the parent location PD_TOP.
However, the tool does not apply the strategy to port B/out1 because the parent domain
for PD_MID is PD_TOP and the tool cannot place the isolation cell there. In this case, the
tool issues a warning message.
5
Always-On Logic
Generally, multivoltage designs have some power domains (shutdown domains) that are
shut down and powered up during the operation of the chip, while other power domains
remain powered up at all times (always-on domains). The control nets that connect cells
in an always-on power domain to cells within a shutdown domain must remain on during
shutdown. These paths are referred to as always-on paths.
This section covers the following topics:
• Always-On Design
• Voltage-Aware Always-On Synthesis
• Always-On Block Synthesis
• Specifying Secondary PG Constraints
• Always-On Cells Without Primary PG Pins
• Always-On Legalization of Preinstantiated RTL Buffers and Inverters
Always-On Design
Shutdown domains usually contain objects that must stay active, such as retention
registers, isolation cells, retention control paths, and isolation enable paths. These objects
are referred to as always-on. For example, if a save signal or restore signal passing
through a shutdown voltage area needs buffering, an always-on buffer cell must be used.
This type of logic is called always-on logic, which is built with always-on library cells.
Compared to an ordinary cell, a functionally equivalent always-on cell has a backup power
supply that operates continuously, even during the shutdown mode.
Figure 57 shows an example of a feedthrough net that crosses a shutdown domain.
Figure 58 shows an example of control signals for a retention register, which must always
be active. Control signals for isolation cells must also remain active at all times.
Always-On
(AO) Domain
AO AO AO
Shutdown Domain
Shutdown Domain
Retention
Register
save AO AO
AO
restore AO
Always-on optimization occurs automatically during synthesis. The tool uses dual-rail or
single-rail buffers, depending on the cell availability and physical constraints.
UA UB
The tool uses the supply of either the load pin or the driver pin to power the buffer
because those supplies are always on. If both the driver and load supplies are not
available in the feedthrough domain, the net is marked with the dont_touch attribute.
The power and ground supplies of the buffer are connected to the SS_A.power and
SS_A.ground supplies. The backup power pin of buffer U1 uses the bias supply from
PD_TOP.primary.nwell (or PD_TOP.primary.pwell) if the bias supply is more on or equally
on compared to SS_A.
In general, for an always-on cell, the tool tries to use the bias supplies of the local
domain for the buffer's backup pin, provided that the bias supply is more on or equally on
compared to the corresponding driver or load power supply.
You can use the get_cells command with these attributes to query the always-on cells in
a design. For example, the following command finds all of the always-on cells:
fc_shell> get_cells -filter is_always_on_logic==true -hierarchical
Feedthrough Buffering
The Fusion Compiler tool optimizes always-on feedthrough nets that cross voltage areas
due to differences in the logical and physical view of the design. However, the tool inserts
regular buffers on always-on feedthrough nets, if doing so does not introduce electrical
violations. Inserting regular buffers instead of always-on buffers improves QoR and
reduces congestion.
By default, the tool inserts regular buffers on always-on feedthrough nets, instead of
always-on buffers, if the primary supply of the feedthrough voltage area is more on than
the sink supply and the primary supply is off when the source supply is off.
PD2
B2 PD2
VA2 VA1 B2 PD1
For example, in Figure 61, if the PD2 power domain is created at a scope B2 and it is
below the net's logical hierarchy, the buffer cannot be logically placed in the PD1 domain
because it belongs to the PD2 domain. The PD1 domain is not visible to the PD2 domain.
In this case, the tool implements a logical feedthrough buffer in which the buffer is placed
in the PD2 domain. The tool punches ports to enable the net to traverse the PD2 domain.
No isolation cells can be inserted at the punched ports.
B2 PD2
PD2
B2 PD1
When using logical feedthrough buffering for physical synthesis, you should run
the create_voltage_area_rule command before you run the commit_upf or
create_mv_cells commands. For logical synthesis, the commit_upf command is
performed automatically as part of the compile_fusion command.
Driver1 Load1
PD2
Driver2 Load2
In Figure 62, the buffer can be inserted in the PD3 domain and placed in the
DEFAULT_VA voltage area because PDTOP and PD3 have the same primary supply. The
buffer can also be inserted in PD2 because that domain has a defined voltage area.
The cost considerations are as follows, from lowest cost to highest cost:
• A single-rail buffer that uses the primary supply without introducing a multivoltage
violation
• A dual-rail buffer that uses available supplies without introducing a multivoltage
violation
• An isolation or level-shifter cell and a single-rail buffer that use the primary supply
without introducing a functional issue; isolation or level-shifter violations might occur
• An isolation or level-shifter cell and a single-rail buffer that use the primary supply, but
introducing a functional issue; isolation or level-shifter violations might occur
A functional issue occurs if the feedthrough path goes through cells with supplies that
might shut down even when the feedthrough driver and load are powered on.
The types of feedback and the keywords used to describe them in reports are shown in
Table 21.
Table 21 Feedback Types for Multivoltage Violations
Feedback Keyword
You can save the feedback to a file by using the -output option of the
generate_mv_feedback command.
For each net or pin specified in the generate_mv_feedback command, the report includes
one or more strategy recommendations. Each type of feedback is reported in a slightly
different format. For example, feedback for the move_iso_strategy type is as follows:
Begin_driver_pin: pin_name1
FeedbackType: move_iso_strategy
from_pd_boundary_pin: pin_name2
to_pd_boundary_pin: pin_name3
Targets of to_pd_boundary_pin: list_of_pins
End_driver_pin: pin_name1
The report also includes the related supply information on the feedthrough block.
For example, consider the feedthrough in Figure 63.
In block B, the available supply PG1 is used for buffering because using the primary
supply PG2 causes a functional issue, which has a higher cost than using the available
supply.
PD_sw
For the example in Figure 64, some cells in PD_ao reside in the same voltage area as
PD_sw. The power grid of this voltage area, VA1, matches the primary supply of PD_sw.
When you use the main_rail supply handle, the primary_power PG pin of the cell is
implicitly connected to the main_rail supply.
VDD VDD_Backup
Dual-rail library cells must be included in your reference libraries for the tool to use during
mapping and optimization.
Implementing Always-On Blocks
To merge domains to a common voltage area in Figure 64, domain PD_ao is synthesized
using dual-rail cells. Use the supply handle named main_rail to model the supply that
matches the power grid of this common voltage area.
Domains that you want to merge to a common voltage area should have the same
main_rail supply. For domains that do not specify the main_rail as a supply, the
main_rail supply is assumed to be the domain's primary supply. For example:
create_supply_set SS_sw
create_supply_set SS_ao
create_power_domain PD_ao -supply {primary SS_ao} \
-supply {main_rail SS_sw}
create_power_domain PD_sw -supply {primary SS_sw}
The following commands associate domains PD_sw and PD_ao to the same voltage area:
create_voltage_area -power_domains PD_sw
set_voltage_area -add_power_domains {PD_ao}
By default, the tool does not capture the supply net connections for the backup
power PG pin that is implicitly connected to the domain's primary supply. To
force the tool to write out these supply net connections to the output UPF, set the
mv.upf.write_csn_for_dual_rail_cells_in_ao_domain application option to true.
You can specify secondary PG constraints manually. However, this effort might be difficult
for a design with many supplies and voltage areas. Alternatively, the Fusion Compiler tool
can evaluate the design and automatically derive secondary PG constraints.
The advanced legalizer is required to support secondary PG constraints. For advanced
technology nodes, the advanced legalizer is enabled when you set the technology node,
as follows:
fc_shell> set_technology -node node_number
Alternatively, if you know that the advanced legalizer supports a specific older technology
node, set the following application option:
fc_shell> set_app_options -name place.legalize.enable_advanced_legalizer\
-value true
The tool determines the secondary power supply regions based on the route shapes of
the specified supply and layers.
• -region
You specify the regions where the secondary power straps are available.
After you create all of the secondary PG placement constraints, apply them by using
the commit_secondary_pg_placement_constraints command. If you change
secondary PG placement constraints, the floorplan, or the UPF, you must run the
commit_secondary_pg_placement_constraints command again.
If voltage areas are specified with the -exclude_supply option, the supply is unavailable
only in the specified voltage areas. The -exclude_supply option does not affect layers or
regions.
For example, suppose your UPF file has the following supplies:
create_power_domain PD1 -available_supplies {secpg0 secpg1} ...
Later, if only secpg0 is available and secpg1 is not available, use the following commands:
create_voltage_area -name VA1 -power_domains PD1 ...
create_secondary_pg_placement_constraints -name secpg0 \
-supply secpg0 -voltage_areas VA1 ...
create_secondary_pg_placement_constraints -name secpg1 \
-exclude_supply secpg1 -voltage_areas VA1 ...
• If PG straps are not found on the specified layers for supplies listed in the UPF, the
tool generates create_secondary_pg_placement_constraints commands with the
-exclude_supply option for those supplies.
• You can optionally use the -margin option to define the extent of secondary PG
voltage area shapes based on the pitch of the secondary PG straps.
Voltage area shapes created from the secondary PG placement constraints have the
following attributes:
• The is_secondary_pg_region attribute is set to true if the constraint is created by
secondary PG placement constraints.
• The secondary_pg_nets attribute specifies the names of the secondary nets.
Checks for conflicts between secondary PG constraints and the UPF or netlist,
between user-specified secondary PG constraints and the strap availability, and
between user-specified and tool-derived secondary PG constraints.
• report_secondary_pg_placement_constraints
Reports both committed and uncommitted constraints and indicates if the constraint is
user-specified or tool-derived.
• save_secondary_pg_placement_constraints
Writes an ASCII file that contains all user-specified and tool-derived secondary PG
constraints.
• check_legality
Checks the cell placement and identifies cells that violate placement constraints.
• check_bufferability
Determines whether the voltage area shape has straps available for buffer insertion.
An excluded supply in a constraint is used in a The tool ignores the constraint and
power management cell strategy in the UPF issues a warning
An excluded supply in a constraint is connected The tool ignores the constraint and
to a leaf pin or top-level port in the netlist issues a warning
User-specified constraints specify the The tool honors the constraint with the
same supply with both -supply and -supply option and issues a warning
-exclude_supply options
Multiple user-specified constraints with the The tool creates simplified voltage
-supply option exist for the same supply area shapes to cover the union of the
user-specified shapes
4. Create the PG straps at the block level by using the compile_pg command.
5. Create secondary PG constraints for each block and commit the constraints.
6. Create secondary PG constraints at the top level and commit the constraints.
When you commit the constraints at the top level of the design, use the
commit_secondary_pg_placement_constraints -commit_subblocks command. The
-commit_subblocks option checks all block-level secondary PG constraints and commits
any uncommitted constraints. The tool then creates voltage area shapes based on the
secondary PG constraints and keeps track of supplies available in or excluded from each
voltage area shape.
To list the constraints, use the report_secondary_pg_placement_constraints
-all_blocks command. To check for consistency and error conditions in specific blocks,
use the check_secondary_pg_placement_constraints -blocks command with a list of
blocks.
For more information, see the Fusion Compiler Design Planning User Guide.
The fix_mv_design -buffer command can replace preexisting dual-rail repeaters with
secondary-supply-only repeaters. However, bias designs are not supported.
• In compile_fusion
• In create_mv_cells
In compile_fusion
During MV cell insertion, to enable AO legalization of preinstantiated RTL buffers and
inverters, set the application option mv.upf.ao_legalize_gtech_buf option to true,
before running the compile_fusion command.
set_app_options -as_user_default
-name mv.upf.ao_legalize_gtech_buf -value true
When the option is enabled, during compile_fusion, the tool performs the following
steps:
• Runs the AO legalization of buffers/inverters after isolation cell insertion, so that the AO
legalization will not affect isolation source/sink strategies.
• Runs the AO legalization at the same time as level-shifter insertion. This means greater
flexibility to insert a new level shifter, convert a single-rail GTECH buffer/inverter into
dual-rail, or do both. This flexibility will help to fix voltage violations which could not be
solved previously because buffers/inverters act as hard terminals with fixed supplies.
The flexibility allows to change supplies to these buffers/inverters by converting them
into dual-rail.
• Converts single-rail buffers/inverters into dual-rail user lib cells, not dual-rail GTECH
lib cells. This is done to preserve connect_supply_net (CSN) of secondary supplies
to these dual-rail user lib cells; otherwise, the new CSN may be lost during comb tech
mapping and MV mapping.
• Prints the information message MV-055 to show the number of buffers/inverters
converted from single-rail to dual-rail and vice versa.
Information: Total 6 GTECH buffers have been converted from
single-rail to dual-rail. (MV-055)
Information: Total 1 GTECH buffer has been converted from dual-rail to
single-rail. (MV-055)
In create_mv_cells
To enable the AO legalization of GTECH buffers/inverters, at the same time as auto level-
shifter insertion, set the application option mv.upf.ao_legalize_gtech_buf is set to true,
before running the create_mv_cells.
set_app_options -as_user_default
-name mv.upf.ao_legalize_gtech_buf -value true
When the is option enabled, during create_mv_cells, the tool performs the following
steps:
• Runs the AO legalization at the same time as level-shifter insertion. This means greater
flexibility to insert a new level shifter, convert a single-rail GTECH buffer/inverter into
dual-rail, or do both. This flexibility will help to fix voltage violations which could not be
solved previously because buffers/inverters act as hard terminal with fixed supplies.
The flexibility allows to change supplies to these buffers/inverters by converting them
into dual-rail.
• Converts single-rail buffers/inverters into dual-rail user lib cells, not dual-rail GTECH
lib cells. This is done to preserve connect_supply_net (CSN) of secondary supplies
to these dual-rail user lib cells; otherwise, the new CSN may be lost during comb tech
mapping and MV mapping.
• Prints the information message MV-055 to show the number of buffers/inverters
converted from single-rail to dual-rail and vice versa.
Information: Total 6 GTECH buffers have been converted from
single-rail to dual-rail. (MV-055)
Information: Total 1 GTECH buffer has been converted from dual-rail to
single-rail. (MV-055)
In this case, you need not set the application option mv.upf.ao_legalize_gtech_buf to
true.
The create_mv_cells -always_on command runs only the AO legalization of buffers/
inverters. No other MV cells will be inserted.
Running create_mv_cells -always_on -level_shifter runs the AO legalization of
buffers/inverters at the same time as auto level-shifter insertion. The will insert new level
shifters, convert single-rail buffers/inverters into dual-rail, or both, to fix voltage violations.
This flexibility allows create_mv_cells to fix voltage violations that could not be solved
previously.
By default, create_mv_cells -always_on -level_shifter gives a higher priority to
minimizing the total number of level shifters over the total number of dual-rail buffers/
inverters.
6
Well Biasing
Some process technologies allow dedicated voltage supplies, instead of normal rail
voltages, to be applied to n-well and p-well regions of the chip. Applying a bias voltage to
a well changes the threshold voltage for transistors in the well, affecting the performance
and leakage current.
The synthesis and physical implementation tools offer an optional mode to specify the n-
well and p-well bias supply infrastructure using UPF commands. In this mode, the tool
automatically makes supply connections to the n-well and p-well bias pins.
This topic contains the following:
• Purpose of Well Bias
• Library Modeling
• Enabling Well Bias
• Creating Bias Supplies
• Bias Design Rules
• Bias Blocks
The p-type substrate is connected to the ground voltage, which prevents the p-n junctions
from becoming forward biased between the p-type substrate and each of the n-type
terminals of the NMOS transistor.
Similarly, the n-well is connected to the positive rail voltage, which prevents the p-n
junctions from becoming forward biased between each of the p-type terminals of the
PMOS transistor and the n-well. The n-well is reverse biased with respect to the p-type
substrate.
Figure 71 shows how to build NMOS transistors in p-wells and PMOS transistors in n-
wells, where the n-well and p-well voltages can be independently controlled. This type of
construction requires the use of an advanced process technology.
As in simpler CMOS technologies, the n-well can be connected to the rail voltage and the
p-well can be connected to ground. However, the technology can allow different voltages
to be applied to the wells to modify the behavior of the transistors, using the terminals
labeled VNB (voltage n-well bias) and VPB (voltage p-well bias) in the figure.
For example, applying a voltage slightly above ground to the p-well using the VPB pin
lowers the NMOS transistor threshold voltage, resulting in faster switching at the cost of
higher leakage current. Conversely, applying a voltage slightly below ground on the same
pin raises the NMOS transistor threshold voltage, reducing leakage current at the cost of
speed.
Similarly, applying a voltage slightly above or below the rail voltage to the n-well using the
VNB pin modifies the threshold voltage of the PMOS transistors to achieve better speed or
less leakage.
The well voltages can be modified dynamically to increase the speed when needed or
to reduce leakage during standby mode. Alternatively, the bias voltage might be applied
statically to compensate for process variations or for other adjustment purposes.
See Also
• Enabling Well Bias
Library Modeling
In the Liberty-format description of a bias library cell, the UPF-based well bias mode
allows only the following attribute definitions for bias supply pins:
• pg_type: nwell or pwell
Within each power domain, it is recommended that you consistently use library cells that
have their physical_connection attribute set to either routing_pin or device_layer,
not a mixture of both. When different physical connection parameters are defined in
different libraries, you can use the set_target_library_subset command to restrict the
selection of cells to specified libraries.
For more information about defining well bias PG pins, see the “PG Pin Syntax” section in
the Library Compiler User Guide.
Library Cells With Only N-well Bias PG Pins
The tool supports library cells that only have n-well-biased PG pins. In this case, the tool
behaves in the following way:
• Supply sets are created with p-well functions
• Standard power management cells with p-well PG pins are handled normally - power
and ground pins of cells are implicitly connected to the respective supply set functions
of primary, isolation, and retention supplies
• Cells with only n-well PG pins do no make the implicit connection to the p-well supply
set functions
• Only the n-well connections are written out in the PG netlist
• Bias continuity and rail order checks are suppressed for p-well, if the p-well supply set
function is not connected to PG pins
• The check_mv_design command warns you if the libraries have a mix of cells (some
with the n-well PG pin only and other with both PG pin connections)
When using the check_mv_design command, you do not need to set the voltage on the p-
well functions if it is not connected to any PG pins. If your libraries have standard cells with
p-well PG pins, the tool requires that you set the voltage on p-well functions since these
cells might be used during optimization.
You can selectively disable the well bias feature for lower-level blocks as follows:
fc_shell> set_design_attributes -elements {blkA blkB} -attribute
enable_bias false
All supply sets created under the scope of a bias block include n-well and p-well functions.
This is also true for implicit supply sets created for a power domain under the scope of a
bias block.
Although you can disable the well bias feature for a block in a design where the feature is
enabled, you cannot enable the well bias feature for a block in a design where the feature
is disabled (either explicitly or by default). In other words, to enable this feature for a block,
the feature must also be enabled for all parent blocks up to the top level.
Power SS_AO.power
Ground SS_AO.ground
Nwell PD_TOP.primary.nwell
Pwell PD_TOP.primary.pwell
A nonbias block inside a bias design cannot use a bias supply set from a higher level
of the design. It is restricted to using its own domain-dependent supply set, for example
a domain created with the {extra_supplies ""}create_power_domain -supply
command.
The tool performs the following checks:
• Rail Order Checks
◦ The bias supply on a logic element must be more on than its related primary power
supply
• Continuity Checks
◦ All cells in a power domain must use the same bias supply (macros are an
exception)
• Connectivity Checks
◦ A power PG pin and a p-well PG pin cannot be connected to the same supply
◦ A ground PG pin and an n-well PG pin cannot be connected to the same supply
◦ An N-well PG pin and a p-well PG pin cannot be connected to the same supply
• Other Checks
◦ Negative voltages are not allowed on n-well supply nets. They are permitted on p-
well supply nets.
Bias Blocks
A bias block has the following characteristics:
• Any supply set (including an implicit supply set) created in the scope of the bias block
has up to four supply functions: power, ground, nwell, and pwell. Some bias blocks
use only the power, ground, and nwell functions.
• Some commands, such as create_power_domain and create_supply_set, treat the
additional nwell and pwell supply functions like power and ground. Other commands,
such as set_domain_supply_net, do not support the nwell and pwell functions and
therefore cannot be used in the scope of the bias block.
• The target library must contain bias library cells. Nonbias library cells cannot be used in
the bias block. However, nonbias macro cells are allowed, including pad cells.
• During linking and optimization, the tool matches the voltages set on the supply
functions (power, ground, nwell, and pwell) of the standard cells with the voltage
map of the logic library cells.
• The connections to bias PG pins of standard cells are implicit. If you make an explicit
connection to a bias PG pin of a bias cell using a supply other than the domain’s
default bias supply, you get a warning message with the check_mv_design command
or a compile operation.
• During insertion of power management cells (isolation, level shifting, and retention), the
tool considers the bias supplies in addition to power and ground.
The tool handles each nonbias block without considering any bias pins, even when the
block exists in a bias design. During linking and optimization in a nonbias block, the tool
ignores any bias pins in bias library cells.
In a nonbias design, the tool can use bias library cells because it only verifies that the
power and ground supply functions of the cell match the design requirements; it ignores
the bias supply pins of the cells. To ensure that only nonbias library cells are used in a
nonbias design, use the set_target_library_subset command to restrict the selection
of cells to nonbias libraries.
See Also
• Library Modeling
• Power Management Cell Insertion and Bias Supplies
7
Multivoltage Reporting and Debugging
The Fusion Compiler tool provides several commands that analyze and report multivoltage
and power aspects of your design. See the following topics for more information:
...
In this case, the check_mv_design command issues an error message for a power cell. To
get a full report on the details of the specified cell, run the report_mv_path command with
the -cell option:
fc_shell> report_mv_path -cell u0_0/pd_switch/DATA_UPF_ISO
Other options of the report_mv_path command provide a wide range of information. For
example,
• The -net option reports the conditions on a path that includes the specified net.
• The -pin option reports the conditions on a path that includes the specified pin.
The feasibility analysis is available for isolation cells (by using the -isolation option),
enable level-shifter cells (by using the -enable_level_shifter option), and retention
cells (by using the -retention option). In the absence of these options, the tool analyzes
all three types of cells.
The recommended procedure is to use the analyze_mv_feasibility command
after you read the RTL and load the UPF, but before you perform synthesis with the
compile_fusion command. If you use the analyze_mv_feasibility command after
power management cell insertion, the tool performs the analysis based on the current
status of the netlist. The analysis results might be different in these two use cases
because optimizations performed during the synthesis operation might prevent specific
library cells from being used.
Complete sequential cell mapping (retention cells) is possible only after the compile
operation. Before the compile operation, the analyze_mv_feasibility command reports
whether any retention strategies do not define the control signals correctly. After the
compile operation, the command generates a complete mapping report.
If any power management cells cannot be mapped, the tool issues a UPF-909 error
message and returns a Tcl status of 0. In addition, the tool provides a text report about
cells that cannot be mapped. The text report is similar to the following:
Iso/Els cell mapping failures:
------------------------------------------------------------------------------
Library cell checking sequence: Cell association with strategy
Library cells set from strategy
Dont_touch set by user or in library
Site definition matching
Purpose matching
Process matching
Voltage matching
Temperature matching
Bias matching
Data inversion matching
NOR inference rules
Clamp value matching
Sense value matching and phase
correction checking for mismatch
Element(s) Reside Strategy Strategy Clamp Sense Failure Reason
Domain Domain
------------------------------------------------------------------------------
pin1 PDtop iso1 PD1 1 high Not included in strategy
(boundary mapped library
port) cells (114/115)
Data inverted mismatch
(1/1)
pin2 PD2 iso2 PD2 0 low Not included in strategy
(boundary mapped library
port) cells (113/115)
PVT mismatch (2/2)
------------------------------------------------------------------------------
The text report provides the number of library cells that were analyzed for mapping but
does not report details about each of the individual library cells. To obtain more details
about the mapping failures, use the -format html option to create detailed HTML reports.
When HTML reporting is enabled and the design has unmapped power management cells,
the tool creates a directory named pm_map.x in the run directory. The directory name
x is an integer index that starts with 0 for the first report and increments by 1 for each
additional report. Each execution of any of the listed commands generates a new report,
which results in a new directory for that report.
In each pm_map.x directory, the tool writes an HTML file named pmMapper.html. The file
is a top-level summary page with links to the details about unmapped cells.
Figure 73 is an example of the top-level summary page and Figure 74 is an example of the
unmapped cell detail page. Many entries in the table are links to additional information.
In the Fusion Compiler session, execute the following commands to set all data check
policies to their most lenient settings, read the UPF, and commit the UPF:
fc_shell> set_early_data_check_policy -policy lenient
...
fc_shell> load_upf top.upf
fc_shell> commit_upf
The action of committing the UPF causes the tool to evaluate some data checks. The tool
finds a problem and issues the following statement:
Information: Policy for early data check 'mv.pst.conflict_supply_state'
is 'tolerate'. (EDC-001)
Alternatively, you can set a more strict policy for this data check with the following
command:
fc_shell> set_early_data_check_policy \
-checks mv.pst.conflict_supply_state -policy error
For more information about the Early Data Check Manager, see the Fusion Compiler Data
Model User Guide.
This section contains the following topics:
• Multivoltage and Power Data Checks in the Early Data Check Manager
• Reporting Data Checks
The tool sets all available data checks to the highest severity of policy, as supported by
the individual data check.
• lenient
The tool sets all available data checks to the lowest severity of policy, as supported by
the individual data check.
To set a policy for one or more specific data checks, use the -policy option with the
-checks option. Individual data check might not support all of these policy settings and the
behavior of each data check might be different when a violation occurs. The policy settings
are as follows, from most severe to least severe:
• error
• tolerate
• repair
After you set a policy, you cannot change the policy to a more strict setting unless you first
execute the reset_upf command. The only exception is the mv.va.missing_voltage_area
check.
The following tables describe the data checks, their supported policy settings, and the tool
behavior when a violation is encountered. Table 23 describes data checks for supplies.
Table 24 describes data checks for power strategies. Table 25 describes data checks
for power state tables. Table 26 describes data checks for hierarchical flows. Table 27
describes miscellaneous data checks. Table 28 describes how the tool infers supplies for
power management cells. Table 29 describes the tool behavior for missing voltage areas.
Table 23 Data Checks for Supplies
mv.pst.port_state_redefined error UPF-037 error (the same port state has been
defined with different voltages)
mv.pst.conflict_power_state error UPF-056 error (the same power state has been
defined with different voltages)
You can use the -filter option to filter the collection and the -hierarchical option to
traverse the entire design.
Unable to derive power and ground type for Ignores this only if the supply net is not used in the
supply net current design
Inconsistent resolution type on supply net Uses the first resolution type
Port state already defined Uses the first port state defined and applies the
voltage to all equivalent supplies
Conflicting power states Uses the first power state defined and applies the
voltage to all equivalent supplies
Power state not fully included in a lower-level Ignores the conflicting states or the entire block
power state table power state table
Power cell is not associated with any power Derives the supply net for this cell based on other
strategies or supply net connections UPF constraints
Bias block defined under a nonbiased block Ignores bias block definition
• The report_pst command displays the power state table for the design.
• The report_supply_ports command reports detailed information about supply port
connectivity.
• The report_supply_nets command reports detailed information about a supply net,
such as its states and connected ports.
• The report_supply_sets command reports detailed information about the specified
supply sets in the current scope.
• The check_equivalent_power_domains command checks whether specified power
domains are equivalent.
• The get_equivalent_power_domains command displays a list of equivalent power
domains.
The following ECO commands are supported for netlist and UPF changes:
create_port, remove_ports, create_net, remove_nets, create_port_bus,
remove_port_buses, create_net_bus, remove_net_buses, connect_net,
disconnect_net, remove_buffers, create_cell, remove_cells, change_link, and
connect_supply_net.