DMSA flow
DMSA flow
orders (ECOs).
SYNTAX
status fix_eco_timing
[-methods method_list]
[-slack_lesser_than slack_limit]
[-slack_greater_than slack_limit]
[-group group_name]
[-from from_list]
[-to to_list]
[-setup_margin margin]
[-hold_margin margin]
[-buffer_list list]
[-verbose]
[-current_library]
[-ignore_drc]
[-path_selection_options option_string]
[-timeout seconds]
[-power_attribute power_attribute_name]
[-clock_fixes_per_change violation_limit]
[-clock_max_level_from_reg level_limit]
[-estimate_unfixable_reasons]
[-leakage_scenario scenario_name]
[-dynamic_scenario scenario_name]
[-load_cell_list list]
[-target_violation_type violation_type]
[-wns_limit wns_value]
[-unfixable_reasons_prefix string]
Data Types
method_list list
slack_limit float
group_name string
from_list list
to_list list
margin float
list list
option_string string
seconds integer
power_attribute_name string
violation_limit integer
level_limit integer
scenario_name string
violation_type string
wns_value float
string string
ARGUMENTS
-methods method_list
fer method
specified.
For setup fixing (-type setup), you can specify either size_cell
For hold fixing (-type hold), you can specify one or more of the
driver and load pins, choosing from the inverter library cells
insert_inverter_pair}).
-slack_lesser_than slack_limit
Specifies fixing of only the paths with a slack worse than the
-slack_greater_than slack_limit
Specifies fixing of only the paths with a slack better than the
specified slack limit. By default, the command tries to fix all
violations.
-group group_name
the clock that captures data at the path endpoint; a path group
get_path_groups command.
be fixed.
-from from_list
that start from the specified objects are considered for fixing.
-to to_list
The -from and -to options are like the options of the same name
you can only specify pins or ports, not nets or cells, as the
and to select the path with the worst slack within each path
group.
-setup_margin margin
units. The default margin is zero. This option affects the tar-
the timing and achieve the specified negative slack value. For
paths not already selected for setup fixing (by default, paths
-hold_margin margin
units. The default margin is zero. This option affects the tar-
the timing and achieve the specified negative slack value. For
paths not already selected for hold fixing (by default, paths
user, the tool tries to preserve DRC and timing by default, how-
-buffer_list buffer_list
Specifies the list of library cell buffers that can be used with
list.
names, without the library name. The command gets the buffer
searches the libraries in order and uses the first library cell
The command can use a listed library cell for buffer insertion
the command can insert a buffer from the list and then size it
-verbose
reason that the fix was not performed at the pin, and the fixing
-estimate_unfixable_reasons option.
-current_library
Specifies the usage of library cells from the same library when
must come from the same library as the original cell. This
-ignore_drc
ing fixing is not performed when there are any existing DRC vio-
tional type fixing first and only apply the other types after-
ward if needed.
fers:
o none (the default) - Timing fixing does not use physical data.
new cell without moving nearby cells. This mode retains the
it does not insert new cells or size existing cells. This mode
DESCRIPTION section.
-path_selection_options option_string
-slack_greater_than options.
collection.
values that are suitable for timing fixing unless either the
-timeout seconds
the tool checks the total elapsed wall clock time. If the time
limit is reached, the command stops running and ends with the
-power_attribute power_attribute_name
defines the leakage power of the library cell at the worst oper-
ating condition corner for leakage. When you use this option,
instead of leakage.
-clock_fixes_per_change violation_limit
clock network, closer to the clock source and farther from the
sequential cells.
-clock_max_level_from_reg level_limit
timing fixes can occur. The higher the level is, the closer the
this case, the command can size the immediate driver or insert a
buffer between this driver and the clock pin of the sequential
changes at both the immediate driver and one buffer level above
the immediate driver; and so on for larger settings.
-estimate_unfixable_reasons
fixed and the reasons that they are unfixable. This option is
power only, leakage power only, or total power (both dynamic and
When you use the -power_mode option for setup fixing, the tool
size_cell_side_load option.
cells with lower power during cell sizing and buffer insertion.
-leakage_scenario scenario_name
Specifies the name of the scenario from which to get the leakage
-dynamic_scenario scenario_name
Specifies the name of the scenario from which to get the dynamic
-load_cell_list list
cells, or inverter cells that can be used along the data path
for hold fixing with the insert_buffer method. You can specify
-buffer_list option.
-wns_limit limit_value
Specifies the limit of Worst Negative Slack (WNS) for the -tar-
grams. By default, without this option, both text and csv files
are generated.
-unfixable_reasons_prefix string
prefix "abc" and using the CSV format writes out a file named
ated.
DESCRIPTION
and power.
After the violations are fixed, you can write out the design changes as
a script by using the write_changes command. You can use the script to
(ECO).
parameters:
insertion)
o The list of library cells that can be used for buffer or inverter
pair insertion
clock networks)
exhaustive)
o The physical placement and sizing mode (none, open site, occupied
You must specify the fixing type, either setup or hold, using the -type
setup fixing uses cell sizing alone to reduce data path delays, whereas
hold fixing uses both cell sizing and buffer insertion to increase data
path delays. By default, fixing occurs only in data paths, not in clock
networks.
are fixed or it determines that further fixing is not worth the runtime
cost, based on the current quality of results and fixing option set-
you can target the unfixed violations using another fix_eco_timing com-
Setup fixing seeks to avoid introducing design rule checking (DRC) vio-
both setup and DRC violations. To fix both setup and hold violations,
fix_eco_timing commands.
geted fixing of the design. The -from and -to options restrict fixing
The fix_eco_timing command is intended for the signoff flow using delay
sitic data. If delays and slews are annotated directly (for example, in
Setup Fixing
By default, setup fixing uses cell sizing alone to reduce data path
delays. You can specify the maximum area increase by setting the
able is set to 2, which limits the area increase to twice the area of
the cell before fixing. Note that this limit applies to each iteration
be more than twice the original size. If you set the variable to 0,
For setup fixing using buffer insertion, the -physical_mode option must
depends very much on having empty sites available in the layout. Using
that cover the necessary delay and area range. Be sure to specify buf-
fers with good drive strength and short delays, and omit buffers with
long delays.
Buffers and delay cells placed by the hold fixing tool might hurt setup
paths. To remove the redundant buffers that cause the setup violation,
o It does not worsen existing violations or does not cause the slack to
gin options.
o Removing the buffer does not introduce any new DRC violations:
cells. To also perform cell sizing for setup fixing, use a separate
Hold Fixing
By default, hold fixing uses both cell sizing and buffer insertion to
You can choose to use these methods separately or together. When used
together, the command performs cell sizing first, then buffer inser-
tion, to reduce the number of buffers required and minimize the layout
disturbance. Cell sizing includes downsizing, upsizing, and same-size
buffers that cover the necessary delay range. However, avoid specifying
To fix small hold violations (on the order of 5 ps or less), you can
insert load cells, use the fix_eco_timing -type hold with the
-load_cell_list option with a list of load cells. If you use both the
To prevent the tool from using specific library cells for sizing, apply
command. Note that this usage restriction applies only to cell sizing,
not buffer insertion. The tool uses buffers specified by the -buf-
The fix_eco_timing command does not size any cell with a dont_touch
setting and does not insert a buffer or inverter pair on any net with a
dont_touch setting.
cell. You can override the dont_touch setting for specific lower-level
cells and nets by setting the dont_touch attribute to false for those
objects.
Among the cells, you might want to prevent specific instances from
This command sets the size_only attribute to true for cell instance
U28, which prevents the cell from being removed by ECO commands.
Fixing Margin
does not completely fix the violation but is more likely to be success-
ful.
Note that the margin setting affects only the target slack for viola-
To choose violations for fixing based on existing slack values, use the
You can specify both a setup margin and a hold margin for a fixing
worsen setup timing for the same path. By specifying a setup margin of
zero or more during hold fixing, the tool checks for setup timing
only for the matching fixing type, either setup or hold. For example,
example,
Fixing Summary:
----------------------------------------------
Total violating endpoints found 25
can be less than the number of fixed violations of various types. For
example, when the command fixes rise and fall violations from multiple
sum of all detected and fixed violating endpoints across all scenarios,
even if some endpoints overlap between the scenarios. For example, sup-
pose that scenario S1 has 100 violating endpoints and scenario S2 has
(99+198)/(100+200) = 99.0%.
Remaining Violations
tions. However, some violations can remain unfixed due to the high cost
of fixing.
For example, if a path has a huge hold violation that would require 15
fixing the path because this large number of buffers might cause a
However, if you still want to fix these violations, you can run the
ates a report on unfixable violations when you use the -verbose option.
You can get the same type of report without performing any actual fix-
...
Unfixable violations:
I - Buffer insertion with given library cells cannot fix the violation
L - Available physical area limits the use of one or more library cells
S - Cell sizing with alternative library cells cannot fix the violation
------------------------------------------------------------------
S:U2/Z T P7
U3/Z IW P6
U4/Z U P9
U6/Z U P6
E:U8/I -2.105
C:U3/Z IW P6
U5/Z S P3
U7/Z U P0
E:U9/A -0.307
...
The "Violation" column shows the cell pins where unfixable violations
are located. The letter codes S and E indicate the start and end of a
The "Reasons" column shows the reason or reasons that a violation could
not be fixed at the cell pin, using letter codes from the key shown at
The "Prio/slk" column shows the fixing priority or endpoint slack. For
each pin in a timing path, the fixing priority is ranked from P0 to P9
pins. For each path endpoint ("E" in the Violation column), the total
In the foregoing example, the first entry in the table is pin U2/Z, at
the start (S) of the timing path having the worst slack. The unfixable
reason "T" means that U2/Z was not fixed because the timing margin was
too tight, and fixing the timing at this point has a relatively high
priority (P7).
The entries in the table are organized in order from path startpoint
(S) to path endpoint (E), and the timing paths are shown in order of
slack, worst-slack paths first. The first path sequence shows the full
path from U2/Z through U8/I. At the path endpoint, the path slack is
The second path sequence is reported as starting from U3/Z and ending
at U9/A, omitting the segment of the path from U2/Z and U3/Z already
reported for the first path. The letter C at the begriming of this
with an earlier path, starting with the last shared point, which helps
tleneck ranking. If you are able to fix only some of a large number of
violations, to get the best possible gain from each fix, you can col-
lect stages with higher priorities and try to fix them first.
These are the unfixable reason codes reported in the "Reasons" column:
o A - There are available library cells outside area limit
Library cells that might have been used to fix the violation exceeded
area limit.
delay in this stage. You can improve (but not completely fix) the
violation by setting a negative margin for the target slack using the
can change the clock tree timing and possibly create new timing vio-
lations. If data path fixing and sequential cell fixing are not suc-
II), check the area utilization in that location. Note that when the
sites.
file specified by the set_eco_options command. See if the DEF and LEF
The netlist and physical layout are not consistent, and a buffer can-
inconsistency.
o I - Buffer insertion with given library cells cannot fix the viola-
tion
The violation cannot be fixed using the library cells listed by the
cells
The area of a library cell that could be used for fixing exceeds the
The tool did not perform a fix at this clock network location because
the number of violations that could be fixed in the leaf cells of the
The tool did not perform a fix at this clock network location because
the clock tree level of this location is higher than the threshold
specified by the -clock_max_level_from_reg option. The fix might be
of the violation. Inspect the LEF/DEF file for filler cells and see
empty free sites. Also, you can use the physical implementation tool
used. In that case, you can use the physical implementation tool to
examine the spacing rule constraints and the cells in the vicinity of
Both the capture and launch sides of a flip-flop have timing viola-
ple, suppose that a flip-flop has a setup slack of -2.0 on the D pin
and a hold slack of -1.0 on the Q pin. Changing the clock arrival
time to fix one violation would worsen the other violation, so the
leaf sequential cell in its clock tree has violations on both the
which are required to use the buffer insertion method for setup fix-
o S - Cell sizing with alternative library cells cannot fix the viola-
tion
All alternative library cells have been considered for sizing to fix
the violation, but the violation cannot be fixed by cell sizing. Use
path and the opposite constraint does not have enough timing slack to
Certain UPF cells cannot be sized or buffered. For details, see the
One or more leaf cells or nets under the cell have the dont_touch
Timing fixing would create new DRC violations or worsen existing DRC
format. To specify a prefix for the file name, use the -unfixable_rea-
sons_prefix option.
The CSV report file is compatible with the PrimeTime GUI and spread-
sheet programs. To read the report into the PrimeTime GUI, choose the
Report > ECO Unfixed Violation menu command. You can use the PrimeTime
GUI to investigate and fix the remaining violations. The entries in the
UPF Cells
By default, UPF cells are not considered for sizing. UPF cells are
cells that have one or more of the following attributes set to true:
A buffer inserted into a net must be placed in the same power domain as
the driver and all loads of the net. Buffer insertion is not performed
Writing Changes
After you fix violations using the fix_eco_timing command and other ECO
commands, you can write out the design changes as a script by using the
write_changes command. You can use the script to implement the same
inserts a buffer in the first iteration and then sizes the buffer in
the next iteration, it reports two changes, one buffer insertion and
one sizing. The write_changes command combines these two actions into a
file, and check the final design timing again in the PrimeTime tool.
Multiple Fixing Scenarios With Fewer Hosts with Hybrid Timing View
In the hybrid timing view ECO flow, the tool uses a combination of live
tool.
Suppose you have 50 scenarios for your fixing. If you run ordinary
In the hybrid timing view ECO flow, if you have 15 live-view scenarios
that cover 90 percent of the violations, the tool can merge the remain-
can run fixing with only 15 DMSA worker processes instead of 50. Note
that when the live views have a relatively low coverage of violations
(for example, 80 percent), you might not be able to achieve the desired
fixing coverage. For more information, see the man page for the
If you use the -ignore_drc option, the command ignores DRC violations
for later stages of an ECO cycle, after you have fixed all violations
ing violations can be fixed due to DRC constraints, you can use this
the command to load physical data into memory and use that data while
set_eco_options \
-physical_tech_lib_path LEF_tech_file_list \
-physical_lib_path LEF_lib_file_list \
-physical_design_path DEF_design_file_list
set_eco_options \
-physical_icc2_lib icc2_lib_directory_path \
-physical_icc2_blocks icc2_block_name_list
fied by the set_eco_options command if they are not already read in and
checked by the check_eco command. To view the chip layout in the GUI,
open the GUI with the gui_start command and then choose Window > Layout
Window.
With the physical data loaded into memory, the tool considers physical
constraints such as available free space, cell density, and net topol-
ogy when it sizes cells and inserts buffers. For cell sizing, the tool
selects a library cell that meets both the timing and physical con-
straints. For buffer insertion, the tool searches for the best place-
Early in the ECO cycle, to maximize the fix rate, you can set the
be moved to make space for the changes. Late in the ECO cycle, to mini-
mize layout disturbance, set the option to open_site mode, which pre-
implement the ECO changes. With the physical mode enabled, the com-
command specifies the layout coordinates for the new buffer in the IC
specifies the instance to be sized and the new library cell to be used,
which fits in the available space. It does not specify any location
tion.
After physical data is loaded into memory, the PrimeTime tool keeps
fixing in the whole PrimeTime session. For example, after you have per-
pied_site, do not run the fix_eco_timing command again with the option
set to none. Otherwise, the logic-only fixing changes can corrupt the
changes are made in the physical implementation tool. For the same rea-
son, you should avoid what-if commands such as the size_cell and
insert_buffer commands.
tion using spare cells already implemented in silicon. Only the inter-
connect mask layers are modified, which saves the high cost of modify-
ing the silicon layer masks. Thus, when the -physical_mode option is
In this flow, timing fixing uses spare cells defined in the DEF file or
IC Compiler II database. You must identify the spare cells by using the
You can query the current ECO option settings by using the
report_eco_options command.
the buffer in the programmable spare cell is guided by the layout and
to program the mapped buffer into the spare cell. If the mapped buffer
uses only a portion of a programmable spare cell, the map_freeze_sili-
con command backfills the leftover space with one or more smaller
false), the tool performs the same ECO changes across each set of MIMs.
when they share the same DEF file; in logic-only fixing, it recognizes
them when they share the same parasitics file according to the -path
CPU1, CPU2, CPU3 and CPU4, and the files CPU.def and CPU.SPEF are asso-
ciated with the CPU module. The tool derives the MIM configuration
In physically-aware fixing,
In logic-only fixing,
or
If MIMs are detected, the fix_eco_timing command shows the current MIM
all instances of the MIM set. For example, a buffer insertion in CPU1
is replicated in CPU2, CPU3, and CPU4. Whenever the tool fixes a vio-
lation, it analyzes all MIM instances and makes sure that it does not
a lower fix rate with MIM ECO enabled because timing might be more con-
the changelist file for the associated MIM instances. In the preceding
example, one changelist file is written for the CPU1 through CPU4
instances. For more information, see the man page of the write_changes
command.
changed nets based on net topology, capacitance and net delay change
implement_eco command to implement the changes and get new timing after
lower levels of the clock trees. For example, setting the option to 1
tool does not perform any extra rule checking for the provided buffers.
The PrimeTime tool uses all available alternative library cells to size
cells in the clock network, use a Tcl script similar to the following
example limits the library cells to those that have prefix "CLK" in
their library cell base names.
The tool does not perform fixing on a clock mesh, where multiple driv-
ers drive the same net. However, if the clock mesh is connected to a
normal clock tree, the tool can perform ECO changes in the normal clock
If you want to improve TNS further by allowing WNS degradation, use the
Suppose a design has WNS of -100, and a specific flip-flop has slack
-60 at D pin and -40 at Q pin. The command may degrade slack from -60
-wns_limit option, however, the command only degrades slack from -60 to
-wns_limit option, the command can degrade slack from -60 to -200 as
long as TNS improves.
Leakage Power
If leakage power is more important than area, you can use the
on a library cell attribute that defines the leakage power value for
...
While fixing timing violations, the tool chooses library cells to mini-
mize the increase in leakage power, and does not consider area. It
replaces only the existing cells that have the leak_attr attribute, and
replaces them only with other cells that also have the leak_attr
attribute.
Instead of assigning the leakage values explicitly, you can import the
attribute values from the cell library database. For details, see
Power Recovery.
leakage power of each cell. The tool performs a power analysis when you
Total power (both dynamic and leakage) can increase when cells are
To better manage the total power overhead, you can use PrimePower power
while fixing similar timing violations. For hold fixing, only the leak-
The action chosen can vary depending on the local conditions in the
either upsizing the cell or by lowering the cell threshold voltage, the
buffer insertion. Among the buffers that give similar fix, the ones
With the -power_mode leakage option, the tool fixes setup or hold tim-
power attributes.
its dynamic power data from exactly one scenario, which you specify
data from exactly one scenario, which you specify with the -leak-
general, you should specify the scenario showing the worst dynamic
power and worst leakage power, respectively, for these two options.
Hold fixing can use load capacitance (dummy load) cells along the data
fer method. You can use the -load_cell_list option separately from or
tance_in_site_rows variable.
The -load_cell_list option can use buffer cells, inverter cells, and
dedicated load cells for load cell insertion. Buffer and inverter cells
are smaller single-pin cells that are easier to place. They have the
following attributes:
-----------------------------------------
number_of_pins int 1
commands like the following to set the location and orientation of each
EXAMPLES
than 0.2 to achieve a positive setup slack of 0.2. Note that this over-
tive setup slack of 0.2, while preserving a hold slack of at least 0.1:
The following example fixes setup violations with slack between -2.0
and 0.0 (while ignoring paths with violations worse than -2.0):
The following example fixes hold violations using only cell sizing.
The following example fixes hold violations using only pin buffering.
cells:
-methods size_cell
first.
You can use the attribute directly with the set_user_attribute command,
or for convenience, you can define the following procedure:
set_user_attribute \
-class lib_cell \
pt_dont_use true
and apply the attribute at the scenarios using the remote_execute com-
mand.
open_site mode.
with a variable.
lection:
The following example performs setup fixing by modifying the clock net-
work.
In this example, if the command reports unfixable reason code "I: buf-
fer list with given lib cells cannot fix violation," you can modify the
buffer list to include a larger range of buffer library cells and get a
-estimate_unfixable_reasons
The following example uses the remove_buffer method to fix setup viola-
tions.