Pecoug
Pecoug
Pecoug
Contents
New in This Release . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .6
Related Products, Publications, and Trademarks . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
Conventions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
Customer Support . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
1. Introduction to PrimeECO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
The PrimeECO Tool . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
Running the PrimeECO Tool . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .11
The PrimeECO Flow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .13
PrimeECO Flow Options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
Physical Implementation Options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
RC Extraction Options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
RC Extraction in a DMSA Run . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
Levels of What-If Analysis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
3
Feedback
Contents
4
Feedback
Contents
5
Feedback
You might also want to see the documentation for the following related Synopsys products:
• PrimeTime User Guide – Static timing analysis and ECO tool
• IC Compiler II User Guide – Placement and routing tool
• StarRC User Guide – Parasitic extraction tool
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
Introduction to PrimeECO
The PrimeECO tool supports automatic and manual engineering change orders (ECOs) to
fix timing, design rule, and noise violations, and to optimize power and parametric yield. It
performs multi-scenario signoff timing, placement legalization, routing, and RC extraction
in a single shell environment. You can complete incremental ECO iterations and signoff
without leaving the PrimeECO shell.
The following topics provide more information about the PrimeECO tool:
• The PrimeECO Tool
• Running the PrimeECO Tool
• PrimeECO Flow Options
• Levels of What-If Analysis
NDM design,
fixed & optimized
Figure 2 and Figure 3 compare the discrete-tool ECO flow and the PrimeECO flow.
Design library
(chip layout)
Parasitic extraction
Parasitic data
StarRC
ECO scripts
Static timing analysis
PrimeTime
Timing reports
PrimeECO
Physical implementation
by IC Compiler II
NDM design,
placed & routed
Incremental ECOs
NDM design,
fixed & optimized
Static timing analysis
by PrimeTime
The PrimeECO tool combines the timing analysis, physical implementation, and parasitic
extraction ECO functions of the PrimeTime, IC Compiler II, and StarRC tools into a single
integrated environment. The PrimeECO tool performs multiple ECO fixing iterations
without the need for pausing between iterations or transferring data between tools, and
without concern for keeping data files and libraries aligned between iterations.
The PrimeECO hybrid timing view handles an unlimited number of scenarios while using
a limited number of machines, and finds optimal tradeoffs between compute resources
and the required timing accuracy. The tool uses real-time updates on accuracy-critical
scenarios while ensuring complete visibility of coverage-critical scenarios through efficient
static views. This efficiency allows up to thousands of timing scenarios to be loaded into a
single machine, allowing task completion with limited compute resources.
The PrimeECO tool offers the following features not available from the individual tools:
• Integrated ECO implementation and co-optimization using placement, legalization,
routing, extraction, and multi-scenario timing analysis in one shell
• Single-machine ECO that performs timing ECOs using any number of scenarios
• Multiple iterations of incremental ECO timing analysis, physical implementation, and
extraction to achieve ECO closure in a single operation
• Manual ECOs in the physical layout GUI with multi-scenario path-based timing analysis
and advanced features such as legal site location display and cross-probing
• Access to both physical and logical databases at the same time, allowing operations
such as region and layer queries of netlist elements
The PrimeECO tool supports the ECO flow only at the block level, without hierarchy.
At the eco_shell prompt, you can perform a new PrimeTime analysis or restore a
previously saved PrimeTime session. However, running PrimeECO requires block-level
physical design data: an NDM database from the IC Compiler II or Fusion Compiler tool or
LEF/DEF files from a third-party layout tool.
The commands to perform a full ECO iteration, including implementation, extraction, and
timing signoff, are similar to the PrimeTime commands that create an ECO change script.
The following example compares the ECO flow using discrete tools with the PrimeECO
flow.
PrimeTime + ICC2 + StarRC Flow PrimeECO Flow
set_eco_options \ set_eco_options \
-physical_icc2_lib my_NDM \ -physical_icc2_lib my_NDM \
-physical_icc2_blocks CPU_routed -physical_icc2_blocks CPU_routed
check_eco set_implement_options \
fix_eco_timing -icc2_exec icc2_shell \
report_global_timing -starrc_exec StarXtract ...
If you direct the PrimeECO tool to perform changes incrementally, the final results might
vary slightly from full-design RC extraction and timing analysis. To ensure accurate signoff
analysis, perform a full StarRC extraction and PrimeTime timing analysis.
During ECO analysis, the tool creates subdirectories named eco, icc2, lef, and starrc
in the working directory specified by the set_implement_options -work_dir command.
The tool uses these directories to store intermediate data files and log files.
If an error occurs during the ECO implementation step, the PrimeECO tool saves the
physical implementation work so that you can correct the error and resume the flow from
the point at which it stopped.
For a DMSA run, use the remote_execute command to run the set_eco_options
command remotely, then run the set_implement_options command at the master
process:
remote_execute {
set_eco_options \
-physical_icc2_lib Design.nlib \
-physical_icc2_blocks Block_pre_eco
}
set_implement_options \
-icc2_exec /myexec/icc2_shell \
-starrc_exec /myexec/starrc \
-starrc_cmd_files /mydata/mycmds.cmd \
-work_dir $curr_dir/dcs_work_dir \
-parasitic_corners { {setup1 typ_worst} {hold1 typ_best} }
This opens the block, creates a temporary working view of the block, and runs a
StarRC extraction to establish a baseline for subsequent incremental extraction.
4. Enter the ECO fixing command:
eco_shell> fix_eco_timing ...
You can also perform a legality and routing check by using the check_legality and
check_route commands.
-icc2_exec path
[-icc2_max_cores core_count]
[-icc2_post_link_script file]
[-icc2_pre_legalize_script file]
[-icc2_pre_route_script file]
[-icc2_pre_extract_script file]
[-icc2_eco_legalize_script file]
[-icc2_eco_route_script file]
-starrc_exec path
[-starrc_cmd_files file_list]
[-starrc_mode mode]
[-parasitics_extractor mode]
[-parasitic_corners list]
[-insert_fillers]
[-work_dir path]
For details, see the man page for the set_implement_options command.
The tool performs incremental metal fill insertion by running IC Validator In-Design
inside the IC Compiler II executable. If the design has metal fill, the tool inserts metal
fill incrementally by removing existing metal fills in the changed region and refills it
incrementally.
If the design does not already have metal fill, you can set up the following script and
specify it with the -icc2_post_link_script option of the set_implement_options
command. Suppose the script icv_setup.tcl contains the following:
# Setup or run ICV
# This script is called right after ICC2 open_block is executed
#
set env(ICV_HOME_DIR) /global/apps/icv_2019.06-SP1-2
set target_arch "LINUX.64"
set env(PATH) "$env(ICV_HOME_DIR)/bin/$target_arch:$env(PATH)"
signoff_create_metal_fill -track_fill generic
You can specify this script file to perform initial metal fill with IC Validator tool:
# Run IC Validator before ECO
#
set_implement_options -icc2_post_link_script ./icv_setup.tcl
check_eco
If the area of change is greater than 20 percent, IC Validator abandons incremental metal
fill and performs full metal fill instead. To configure the script to run in the PrimeECO tool:
# IC Compiler II Metal fill script invocation
#
set_implement_options -icc2_pre_extract_script ./incr_metal_fill.tcl
implement_eco
RC Extraction Options
The tool supports both incremental and full extraction. The default is full. Use the following
command to specify incremental extraction:
eco_shell> set_implement_options -starrc_mode incremental
Full extraction is recommended for signoff timing accuracy after extensive changes made
by running the fix_eco_timing or fix_eco_power commands. Incremental extraction
is recommended when you make a small number ECO changes manually and you need
quick feedback to assess the effects of those changes.
The PrimeECO RC extraction process uses the StarRC command file specified by the
-starrc_cmd_files option of the set_implement_options command. However, the
tool ignores certain StarRC commands and adds others before performing extraction. The
changes are necessary to configure the extraction according to the PrimeECO operating
mode, such as full or incremental extraction, and configure NDM-related information.
• The PrimeECO tool ignores the following StarRC commands in the StarRC command
file:
STAR_DIRECTORY
GPD
ECO_MODE
NETLIST_INCREMENTAL
NDM_DATABASE
BLOCK
COUPLING_REPORT_FILE
SUMMARY_FILE
• The PrimeECO tool adds the following StarRC commands to the command file:
NDM_DATABASE
BLOCK
ECO_MODE: YES
NETLIST_INCREMENTAL: YES
GPD
Each command file can be associated with one or more extraction corners:
$ grep SELECTED_CORNERS *.cmd
starrc.cold.corners.cmd: SELECTED_CORNERS: cold.BC.corrner
starrc.hot.corners.cmd: SELECTED_CORNERS: hot.BC.corner hot.WC.corner
During fixing, the tool performs extraction at the required corners, grouped by the
command files associated with each corner:
Information: Extraction starting at [Thu Jan 9 02:09:23 2020]
Information: Executing 'StarXtract .../starrc.hot.corners.cmd/starrc.cmd'
Information: Executing
'StarXtract .../starrc.cold.corners.cmd/starrc.cmd'
...
Information: '.../ecoBlock_pid123_1.starrc.hot.corners.cmd.gpd' has been
generated
Information: '.../ecoBlock_pid123_1.starrc.cold.corners.cmd.gpd' has been
generated
...
Information: Reading parasitics from
'.../ecoBlock_pid123_1.starrc.hot.corners.cmd.gpd'
for scenario(s) 'hot.BC hot.WC' at [Thu Jan 9 02:13:26 2020]...
Information: Reading parasitics from
'.../ecoBlock_pid123_1.starrc.cold.corners.cmd.gpd'
for scenario(s) 'cold.BC' at [Thu Jan 9 02:13:31 2020]...
The resulting parasitics are used in the DMSA scenarios according to the mapping
specified by the -parasitic_corners options of the set_implement_options command.
2
PrimeECO Technologies
The PrimeECO tool offers the following advanced ECO technology features for fast
turnaround and high quality of results:
• Co-Optimization
• Incremental ECO Quality of Results
• Manual ECOs in the GUI
• Custom ECO Scripts
• Hybrid Timing View ECO
Co-Optimization
The PrimeECO timing analyzer, placement legalizer, and router work together as a single
tool to perform several types of optimization. For example, cells with the most critical path-
based timing have higher priority for legalization with minimal displacement. This allows
buffer insertion in high-density regions with little timing degradation.
Another example is the optimization of wires with critical timing. The router uses layer
promotion, increased wire spacing, and detour route removal to fix critical timing.
The PrimeECO tool places and legalizes ECO cells to minimize displacement and
unexpected timing changes. If the tool cannot find good places for ECO cells, it moves
neighboring cells that have positive slack to create the needed space. When neighboring
cells are moved, the legalizer and timer work together to avoid creating new timing
violations.
You can specify the maximum allowed cell displacement to control unexpected timing
changes. For example, the following command limits cell movement to a distance no
greater than 2.5 times the minimum site row height:
eco_shell> implement_eco -max_displacement_in_site_rows 2.5
This is a soft displacement limit. The tool tries to honor the limit but does not guarantee it.
When you apply an ECO change, the path timing is updated incrementally for immediate
evaluation. If you want to see signoff timing, you can implement the change with the
implement_eco command to get final signoff timing after ECO legalization and routing.
When you run the implement_eco command, the tool sources the respective configuration
scripts at the times indicated in the option names: after linking, before legalizing, and
before routing.
Instead of allowing PrimeECO to control placement legalization and routing, you can direct
the tool to use custom scripts to perform these steps, as shown in the following command:
eco_shell> set_implement_options \
-icc2_eco_legalize_script ./my_legalize.tcl \
-icc2_eco_route_script ./my_route.tcl
Suppose there are 100 scenarios, S1 to S100, and each scenario uses 10 GB of memory.
To run all scenarios live, you would need 100 host processes and 1,000 GB of memory.
The hybrid timing view feature allows you to reduce the number of live scenarios, which
reduces the resource requirements.
The hybrid timing view feature supports setup, hold, maximum transition, and noise fixing.
The resulting quality of results is very similar to using full DMSA ECO.
The following topics provide more information about the PrimeECO hybrid timing view
feature:
• Exploring Live View Configurations
• Running ECO Fixing With Hybrid Timing Views
• Configuring Live Views by Target Coverage
Each report shows the total number of scenarios, the selected number of live ECO
scenarios, the number of remaining scenarios, and the coverage resulting from this
selection, as shown in the following examples:
eco_shell> report_eco_scenarios -num_live_views 10
The report shows that using 20 live views achieves 95 percent scenario coverage.
The start_eco_scenarios command starts running PrimeECO fixing using 20 live views,
providing 95 percent scenario coverage, with periodic merging of data from the remaining
static view scenarios.
You might want to include specific scenarios in live views to make sure they are fully
covered. The following example shows how to include scenarios S56 and S74 in live
views:
eco_shell> set_host_options -num_processes 20 ...
...
eco_shell> start_eco_scenarios -include_scenarios {S56 S74}
...
The following session explores the usage of different numbers of live views, reporting the
timing and other data coverage versus the machine resource usage. Then it performs
ECOs using 20 live views running on 20 host processes:
remove_multi_scenario_design
stop_hosts
remove_host_options
create_scenario -name S1 \
-specific_data {specific_S2.tcl} -eco_data S1/eco_data
create_scenario -name S2 \
-specific_data {specific_S2.tcl} -eco_data S2/eco_data
create_scenario -name S3 \
-specific_data {specific_S3.tcl} -eco_data S3/eco_data
report_eco_scenarios -num_live_views 15
report_eco_scenarios -num_live_views 20
report_eco_scenarios -num_live_views 30
set_host_options -num_processes 20
start_eco_scenarios
fix_eco_timing -type setup ...
Here is a comparison of conventional versus hybrid timing view ECO DMSA scripts:
Conventional DMSA script: Hybrid timing view DMSA script:
The tool starts the number of live scenarios required to achieve the coverage for each
analysis type considered by the hybrid timing view analysis. In the preceding example,
each of the default analysis types, which are setup, hold, max_transition, and
max_capacitance, must meet 90% coverage.
You can also use the -type option to explicitly specify which violation types to consider
during coverage evaluation:
eco_shell> start_eco_scenarios \
-coverage_live_views 0.90 \
-type {setup hold max_transition}
If you include the noise analysis type in live view selection, then the within-rail and
beyond-rail coverages must both meet the requirement.
The tool starts only the number of hosts required for the specified coverage, adjusting
the set_host_options configuration accordingly. For example, consider the following
resource configuration:
set_host_options -name HOST_A -num_processes 10
set_host_options -name HOST_B -num_processes 10
set_host_options -name HOST_C -num_processes 10
• If more hosts are needed, the tool increases the quantity of the last set_host_options
command to meet the required total.
If 34 hosts are needed, the configuration is adjusted as follows:
set_host_options -name HOST_A -num_processes 10
set_host_options -name HOST_B -num_processes 10
set_host_options -name HOST_C -num_processes 14
3
ECO Flows and Fixing Methods
If your design has timing, design rule, or noise violations, or you want to optimize area
or power, you can use the engineering change order (ECO) flow to fix the violations,
implement the changes, and rerun timing analysis.
• ECO Fixing Commands
• Setting the ECO Options
• Physical Data Files
• ECO Fixing Methods
• HyperTrace ECO Fixing
• Reporting Unfixable Violations and Unusable Cells
• Freeze Silicon ECO Flow
• Manual Netlist Editing
• Layout View and ECOs in the GUI
• Writing ECO Change Lists for Third-Party Place-and-Route Tools
Before you attempt ECO fixing, ensure that the design is fully placed and routed, with
generated clock trees.
The fix_eco_drc command attempts to fix violations by sizing cells and inserting buffers
or inverter pairs, while minimizing the impact on area. By default, it does not consider
timing effects.
The fix_eco_drc command has options to specify the following parameters:
• The type of violation to fix and the target amount of slack to achieve
• The scope of the design to fix (a list of pins or ports, or the whole design)
• The fixing methods (cell sizing, buffer insertion, or inverter pair insertion)
• The list of library cells to use for buffer or inverter pair insertion
• Whether to modify cells in data paths or clock networks
• Whether to consider timing constraints during fixing, and if so, the required setup and
hold timing margins
• The physical placement and sizing mode (none, open site, occupied site, or freeze
silicon)
For example, the following command fixes maximum transition time design rule violations
using cell sizing:
eco_shell> fix_eco_drc -type max_transition -methods {size_cell}
The following command fixes noise violations using both cell sizing and buffer insertion.
eco_shell> fix_eco_drc -type noise \
-methods {size_cell insert_buffer} \
-buffer_list {BUFX1 BUFX2 BUFX3} \
-physical_mode open_site
The command specifies the list of library cell buffers to use and selects the “open site”
physically aware fixing mode, which restricts cell sizing and buffer insertion to occur only
where there is already enough room for the change.
The fix_eco_drc command performs multiple fixing iterations until all violations are
fixed or it determines that further fixing is not worth the runtime cost, based on the current
quality of results and fixing option settings.
Upon completion, the fix_eco_drc command shows the remaining violations and the
number of unfixable violations. To generate a report on the reasons for the unfixable
violations, use the -verbose option.
This command performs cell sizing and buffer insertion on victim nets to reduce crosstalk
delays. It targets all victim nets that have a delta delay cost exceeding 0.05 time units and
that belong to a timing path with negative slack.
Because there is no constraint that limits the allowable delta delay and therefore no “delta
delay slack,” you must specify a delta delay threshold for fixing. Specify the threshold as
a positive value greater than zero. The same threshold applies to both slowdown and
speedup delta delays.
Delta Delay Fixing and Path Slack
By default, delta delay fixing considers only the nets that belong to paths with a negative
timing slack. You can change this behavior by using the -slack_lesser_than option of
the fix_eco_drc command:
eco_shell> fix_eco_drc -type delta_delay -verbose \
-delta_delay_threshold 0.05 -methods {size_cell insert_buffer} \
-buffer_list {BUFX1 BUFX2 BUFX3} -physical_mode open_site \
-slack_lesser_than 0.05
The command targets nets for fixing that belong to paths with a slack less than the
specified value. Specify a positive value to achieve a positive timing margin, or a negative
value to perform less fixing.
SI Bottleneck Optimization and Reporting
The fix_eco_drc -type delta_delay command chooses the nets to fix
based on SI bottleneck analysis. To preview the nets targeted for fixing, run the
report_si_bottleneck command first. For example,
eco_shell> report_si_bottleneck -cost_type delta_delay \
-min -max -slack_lesser_than 0.0 -all_nets
...
Bottleneck Cost: delta_delay
net scenario cost
----------------------------------------------
DX23[17] scen1 0.4597
REG_ADDR[2] scen2 0.3671
REG_DATA[5] scen1 0.2921
RE_RDY scen1 0.0934
...
This command reports the highest-cost nets first, considering both max and min analysis
types together. The “cost” value in the report shows the absolute value of the delta delay
on the net (negative delta delays are shown as positive). For a DMSA analysis, the report
shows the merged results across all scenarios.
You can use the report_si_bottleneck command to preview and check the results of
delta delay fixing in the same way that you use report_constraints for DRC fixing or
report_timing for timing fixing.
To use this feature, configure the cell electromigration analysis and run the update_power
command, then target the cell_em fixing type of the fix_eco_drc command:
# perform power/electromigration analysis
set_app_var power_enable_analysis true
set_app_var power_enable_em_analysis true
update_power
The cell_em fixing type can use the sizing and buffering methods to fix cell
electromigration violations.
The cell_em fixing type supports only a single iteration. To fix additional violations, run the
update_power command, then rerun the fix_eco_drc -type cell_em command again.
The following command fixes hold violations throughout the design using both cell
sizing and buffer insertion, and using exhaustive path-based analysis for reduced timing
pessimism:
eco_shell> fix_eco_timing -type hold -pba_mode exhaustive \
-buffer_list {BUFX2 DLY1X2 DLY2X2}
Each time you use the fix_eco_timing command, you must specify the fixing type, either
setup or hold, because of the different nature of these violations. By default, 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.
The command performs multiple fixing iterations, starting with the worst violations. It
repeats fixing iterations until all violations are fixed or it determines that further fixing is not
worth the runtime cost, based on the current quality of results and fixing option settings.
Setup fixing seeks to avoid introducing design rule checking (DRC) violations, but it is
allowed to introduce hold violations because setup violations are harder to fix. Hold fixing
seeks to avoid introducing both setup and DRC violations.
Upon completion, the fix_eco_timing command shows the remaining violations and
the number of unfixable violations. To generate a report on the reasons for the unfixable
violations, use the -verbose or -estimate_unfixable_reasons option.
The following command recovers leakage power by swapping out cells with higher
leakage and replacing them with cells that have lower leakage, using the library cell name
prefixes to determine which cells are preferred.
eco_shell> fix_eco_power -pattern_priority {HVT MVT LVT}
The following command recovers area and power by downsizing cells and analyzing the
timing effects using path-based analysis.
eco_shell> fix_eco_power -pba_mode path
The following command removes buffers in paths with positive hold slack.
eco_shell> fix_eco_power -methods {remove_buffer}
You can apply multiple fixing methods by running the fix_eco_power command
repeatedly with different option settings.
Power Recovery Operation
Power recovery is an iterative process. The fix_eco_power command starts by making
the targeted changes and then analyzes the design for new timing and DRC violations
(or worsening of existing violations) caused by the changes. It incrementally backs out
of previous changes to meet the timing and DRC constraints, and also explores further
changes for improved power recovery. It analyzes the design again and repeats this
process until it determines that the cost of further progress exceeds the potential benefit.
For all of the cell replacement methods, replacement occurs only when the following
conditions are met:
• The change does not introduce or worsen any timing violations or DRC violations
• The replacement cell has the same logical function as the original cell and meets any
usage restrictions defined by the eco_alternative_cell_attribute_restrictions
and/or eco_alternative_cell_instance_based_restrictions variables
• The replacement cell is preferred over the original cell in one of the following ways,
depending on the option settings: less area, smaller power attribute value, higher-
priority name or attribute string, or less power based on PrimePower analysis data
Wire Optimization
When the PrimeECO tool modifies cells during ECO fixing operations, timing might be
adversely affected due to changes in the routing of related wires. With wire optimization,
the tool can analyze the routing and the timing of target nets and perform wire routing
ECO changes.
Wire optimization performs the following functions:
• Provides wire ECO solutions by using timing analysis simultaneously with the router for
selected nets
• Optimizes selected nets by using a combination of techniques, including wire spacing,
wire widening, wire rerouting, and layer changes
• Allows the tool to degrade the timing of noncritical nets to improve the routing of critical
nets
• Provides timing estimates for wire ECO fixing
• Implements automatic filtering for negative routing changes
The fix_eco_wire command provides the wire ECO solutions to be invoked by a
subsequent implement_eco command. You must specify the nets to evaluate with one of
the following mutually exclusive options:
• Use the -nets option to specify nets explicitly.
• Use the -path_selection_options option to provide a string that serves as argument
for the get_timing_paths command.
You can optionally specify the types of wire fixes to consider by setting the -methods
option to a list of allowable methods. The default includes the space_wire, widen_wire,
and reroute_wire settings. You can also enable layer changing by specifying the
change_layers setting. If you select this method, you can restrict the layers to use for
rerouting by using the -min_routing_layer and -max_routing_layer options. Without
these options, the tool uses the available low-resistance layers.
For example, Figure 6 contains a timing-critical path (shown in red) that has negative slack
and is affected by crosstalk from neighboring nets. The neighboring nets have positive
slack and are candidates for modification.
During wire optimization, the tool reroutes the neighboring nets to fix the timing violation
on the critical net, as shown in Figure 7. As a result, the slack of one of the neighboring
nets has been reduced, but is still positive.
In the following example, the fix_eco_wire command specifies different fixing methods
for several nets. The reset_eco_wire command resets netA to its pre-ECO state and
the report_eco_wire command lists all of the changes specified by fix_eco_wire
command.
fix_eco_wire -methods {reroute_wire} -nets {netA}
fix_eco_wire -methods {space_wire} -nets {netB netC}
fix_eco_wire -methods {space_wire widen_wire} -nets {netD}
fix_eco_wire -methods {reroute_wire change_layer} -nets {netE} \
-min_routing_layer M5 -max_routing_layer M6
reset_eco_wire "netA"
report_eco_wire -verbose
In the following example, the fix_eco_wire command considers all fixing methods for the
10 worst violating paths and the report_eco_wire command lists the proposed changes.
The report_global_timing command estimates the global timing before and after ECO
wire optimization occurs at the implement_eco command.
fix_eco_wire -methods {reroute_wire space_wire widen_wire change_layer} \
-path_selection_options {-max_paths 10}
report_eco_wire -verbose
report_global_timing
implement_eco
report_global_timing
Use the -rule option to specify a routing rule, which must already exist. Alternatively, use
the -default_rule option to specify the default rule or the -no_rule option to remove
any existing rules for the specified nets. These three options are mutually exclusive.
To specify the minimum and maximum routing layers, use the -min_routing_layer and
-max_routing_layer options. Use the layer names from the technology file to specify the
routing layers.
For example, to use layers M2 through M7 when routing the n1 net, use the following
command:
eco_shell> set_routing_rule [get_nets n1] \
-min_routing_layer M2 -max_routing_layer M7
By default, net-specific minimum layer constraints are soft constraints, while net-specific
maximum layer constraints are hard constraints. You can change the default behavior as
follows:
• To change the constraint strength for a single net-specific layer constraint, use the
-min_layer_mode and -max_layer_mode options when you define the constraint with
the set_routing_rule command.
Set these options to soft to specify a soft constraint, allow_pin_connection to allow
the use of lower layers only for pin connections, or hard to specify a hard constraint.
• To set the cost of violating soft constraints for a single net-specific layer constraint, use
the -min_layer_mode_soft_cost and -max_layer_mode_soft_cost options when
you define the constraint with the set_routing_rule command.
Set these options to low, medium (the default), or high. The cost setting controls
the effort expended by the router to avoid violations. The high setting can reduce
violations at a cost of increased runtime. The low setting can reduce runtime at a cost
of increased violations.
For example, the following command specifies that ECO fixes for netA and netB must use
a routing rule named eco_ndr. In addition, the ECO fixes are limited to routing layers M8
and M9 and the fixing mode is allow_pin_connection.
eco_shell> set_routing_rule -rule eco_ndr "netA netB" \
-min_routing_layer M8 -min_layer_mode allow_pin_connection \
-max_routing_layer M9 -max_layer_mode allow_pin_connection
To report the nondefault routing rules present in the design, use the
report_routing_rules command. To remove specific routing rule constraints, use the
set_routing_rule -clear command. To reset all routing rules to their pre-ECO values,
use the reset_routing_rule command.
Step1: Power recovery fix_eco_power Cell sizing, buffer Does not introduce new timing or
removal DRC violations
Step 2: Fix DRC and fix_eco_drc Buffer insertion, cell Alters setup and hold slacks as
noise violations sizing needed
Step 3: Fix timing fix_eco_timing Buffer insertion, cell Setup fixing honors DRC and
violations sizing alters hold slack if needed; hold
fixing honors setup slack and DRC
Step 4: Final leakage fix_eco_power Threshold voltage Does not introduce new timing or
recovery swapping DRC violations; does not change
layout
Step 5: Wire fixing fix_eco_wire Wire spacing, wire Does not introduce new timing or
widening, wire DRC violations
rerouting, layer
changing
See Also
• DRC, Crosstalk, and Cell Electromigration Violation Fixing
• Timing Violation Fixing
• Power Recovery Fixing
• Setting the ECO Options
5. Run the set_eco_options command with the relevant options for your design.
To verify the ECO options, run the report_eco_options command. To reset the ECO
options, run the reset_eco_options command.
Table 3 Commonly Used Options for the set_eco_options Command
Command Description
To include reporting of the dont_touch attribute and similar attributes in timing reports, set
the timing_report_include_eco_attributes variable:
eco_shell> set_app_var timing_report_include_eco_attributes true
true
You can set the variable to a list of one or more of the following strings:
• is_level_shifter – Consider level shifters for resizing during ECO
When a library cell’s attribute of the specified name (such as is_isolation) is set to
true, that cell is considered for resizing.
Physical ECO
To perform physical ECO fixing:
1. Enable the reading of parasitics with location data by setting the
read_parasitics_load_locations variable:
eco_shell> set_app_var read_parasitics_load_locations true
• To specify the area in which the tool searches for an open site for buffer insertion:
set_app_var eco_insert_buffer_search_distance_in_site_rows n
3. Configure the physical design data location and configuration by using the
set_eco_options command.
• For an NDM design database from the IC Compiler II or Fusion Compiler tool, the
required set_eco_options command options are:
set_eco_options
-physical_icc2_lib icc2_lib_path
-physical_icc2_blocks icc2_blocks
• For LEF/DEF files from a third-party layout tool, the required and optional
set_eco_options command options are:
set_eco_options
-physical_tech_lib_path tech_LEF_files
-physical_lib_path LEF_files
-physical_design_path DEF_files
-physical_constraint_file par_files
|| -physical_rules_file_path rules_file_path
-tech_file_path tech_file
-logical_design_path verilog_file
-technology_node node_value
-ndm_design_name design_name
[-icc2_ref_lib ref_lib]
[-routing_rule_file rule_file]
[-upf_for_ndm upf_file]
• In both the NDM and LEF/DEF flows, you can use the following additional
set_eco_options command options as needed:
set_eco_options
[-physical_constraint_file list]
[-physical_lib_constraint_file list]
[-log_file string]
[-mim_group object]
[-filler_cell_names list]
[-programmable_spare_cell_names list]
[-drc_setup_margin float]
[-drc_hold_margin float]
[-timing_setup_margin float]
[-timing_hold_margin float]
[-power_setup_margin float]
[-power_hold_margin float]
[-physical_enable_clock_data]
[-physical_enable_all_vias]
[-keep_site_names site_name_list]
[-power_ground_net_layer layer_name_list]
[-enable_pin_color_alignment_check]
[-allow_missing_lef macro_name_list]
[-convert_sites site_name_list]
[-enable_via0_alignment_check]
[-cell_em_profile string]
5. (Optional) Preserve specific cells, nets, designs, and library cells by using the
set_dont_touch command, which applies the dont_touch attribute to the specified
objects.
6. Check your LEF/DEF files for missing, incomplete, or problematic data by running the
check_eco command. If the check_eco command reports issues with the LEF/DEF
files, resolve the issues, and rerun check_eco on the updated LEF/DEF files.
7. Run ECO fixing with these commands:
• fix_eco_drc -physical_mode ...
• fix_eco_power ...
To choose the -physical_mode setting, consider the design characteristics and ECO
objectives:
• occupied_site – Places or resizes cells even if no open sites are available;
appropriate for an early-stage ECO or a high utilization design; results in higher fix
rates due to more aggressive placement.
• open_site – Places cells only in open sites; appropriate for a late-stage ECO or a
low utilization design; results in smaller cell displacement due to more conservative
placement.
• freeze_silicon – Places new cells only on spare cells to preserve the silicon
layers.
8. Generate the block-level and top-level ECO change list files by using the
implement_eco command.
implement_eco
...
Script and setup files Files to configure SDC, UPF, DMSA, analysis setup
StarRC extraction script Must be the same extraction script used to generate the initial
parasitics in the preceding item
Physical design information NDM design database from IC Compiler II or Fusion Compiler,
(NDM or LEF/DEF) or LEF/DEF from a third-party layout tool
(LEF/DEF must be consistent with netlist and parasitics files;
reextract if necessary)
Additional physical constraints Supplemental voltage area definitions and placement blockage
constraints outside of NDM, if applicable
The design must be free of legality and routing violations. Otherwise, when the layout tool
fixes these violations, it invalidates the initial state given to the PrimeECO tool. In the IC
Compiler II or Fusion Compiler tool, use the following commands to check the design.
To ensure that the design files are consistent with each other, generate them by following
these steps in this order:
1. Open the block NDM in the IC Compiler II or Fusion Compiler tool.
2. Ensure that there are no legality or routing violations.
Later DEF and physical constraint file specifications overwrite previous file specifications
applied to that same block:
set_eco_options \
-physical_design_path BLOCK.def \
-physical_constraint_file BLOCK_phys.tcl
-physical_design_path NEW_BLOCK.def \
-physical_constraint_file NEW_BLOCK_phys.tcl
Physical constraint file specifications remain until replaced or explicitly removed with an
empty string ({}) specification:
set_eco_options \
-physical_design_path BLOCK.def \
-physical_constraint_file BLOCK_phys.tcl
In this example, physical ECO operations ignore macro models X2 and Y2. The ignored
components are omitted from the GUI layout display.
Because the tool ignores these components entirely, the physical spaces that they occupy
are treated as empty. You can add placement blockages to these areas to prevent ECO
commands from inserting or moving anything there. To report ignored macro models, use
the report_eco_options command.
If you specify the names of macro models that have LEF or DEF data, the tool overrides
your directive to ignore them, proceeds with using the data, and issues a warning
message.
Va
default_Va
The tool aims to fix late-stage violations with minimal changes to the existing layout and
without generating new electrical rule checking (ERC) violations. To achieve this, you need
a physical constraint file that defines voltage areas and placement blockages with these
commands:
• create_placement_blockage – Creates a placement blockage.
set_spacing_label_rule
-labels {label_name_list}
{ minimum maximum }
designs containing mixed single-height and double-height cells in the same placement
region.
You can restrict usage of specific multiple-height ECO cells to specific site rows, for
example, usage of cell BUFFLVT only in site rows of type 2Tunit, as shown in the following
figures.
VSS
VDD
Site row
type 2Tunit
VSS
Note that physical ECO sizing only changes cells widths, not heights.
The multiple-height site row feature requires an exact match between the library cell LEF
site name and the corresponding design DEF site row name. For example, here is a library
cell definition in a LEF file that specifies the site name 2Tunit for the cell:
MACRO BUFLVT1
CLASS CORE ;
ORIGIN 0 0 ;
Here are site row definitions in a design DEF file that specify the same T2unit name:
ROW _row_1 unit 1500 1488 FS DO 4080 BY 1 STEP 96 0 ;
ROW _row_2 unit 1500 1872 N DO 4080 BY 1 STEP 96 0 ;
...
ROW 2Xrow_1 2Tunit 1500 1680 N DO 4080 BY 1 STEP 96 0 ;
ROW 2Xrow_2 2Tunit 1500 2448 N DO 4080 BY 1 STEP 96 0 ;
ROW 2Xrow_3 2Tunit 1500 3216 N DO 4080 BY 1 STEP 96 0 ;
...
When the variable is set to true, ECO cell sizing and buffer insertion place the BUFLVT1
macro cell only in 2Tunit type rows.
You can change the eco_physical_match_site_row_names variable setting at any time
to enable or disable the feature for successive open site ECO fixing operations. In the
following example, ECO fixing is performed first in default mode using single-height cells,
followed by site-aware ECO fixing performed on double-height cells in 2Tunit rows.
set_eco_options \
-physical_tech_lib_path technology.lef.gz \
-physical_lib_path library.lef.gz \
-physical_design_path design.def.gz \
-physical_lib_constraint_file icc2_adv_tech_rule.gz \
-log_file lef_def.log
# Keep 2Tunit site name data when reading LEF/DEF physical data
set_eco_options -keep_site_names {2Tunit}
The site-aware feature can be used only when the ECO fixing command is invoked with
the -physical_mode open_site option.
Weak driver
Critical load
Critical load
is fixed
In load shielding, the tool inserts buffers to shield critical loads from noncritical loads. The
tool automatically chooses the best available location for buffer insertion while considering
placement blockages, as shown in the following example.
Available sites
for buffer
insertion
Critical load
Inserted
buffer
Critical load
is fixed
To fix setup violations with load buffering and shielding, use the fix_eco_timing -type
setup command with the -methods insert_buffer option:
fix_eco_timing -type setup
-methods insert_buffer
-buffer_list {list_of_buffers}
...
You can use the insert_buffer and size_cell methods at the same time. If you use
them separately for setup fixing, it is recommended to use size_cell first, and then
insert_buffer and other methods to gain incremental improvements.
This command performs setup timing fixing as shown in the following figure.
1. Downsize
2. Upsize cells in side-load cells Improved slew
critical path
Use the following ECO command options to perform clock network ECO fixing:
fix_eco_timing
-type setup | hold
-cell_type clock_network
[-clock_fixes_per_change integer]
[-clock_max_level_from_reg integer]
fix_eco_drc
-type max_transition | max_capacitance | max_fanout
-cell_type clock_network
[-methods {size_cell | insert_buffer | insert_inverter_pair}]
...
fix_eco_power
-power_mode dynamic
-cell_type clock_network
...
Clock network ECO fixing can affect clock arrival skew in clock trees. To minimize changes
to the arrival skew, perform data path ECO fixing first, then apply clock network ECO fixing
to fix the remaining violations. For example,
eco_shell> fix_eco_timing -type setup -cell_type combinational ...
...
eco_shell> fix_eco_timing -type setup -cell_type clock_network ...
...
With the -cell_type clock_network option, the command fixes setup violations by
resizing and inserting buffers throughout the clock network. For example, it can upsize
buffers in the launch clock path and insert or downsize buffers in the capture clock path.
With the bypass_buffer method, the tool adjusts the launch or capture path delay by
bypassing one or more buffers that exist in the launch or capture paths.
For example, the circuit in Figure 14 has a setup violation with a slack of -10 ps. The
following command is applied:
eco_shell> fix_eco_timing -type setup -cell_type clock \
-methods {insert_buffer bypass_buffer}
With the bypass_buffer method, the tool inserts a net in the launch path that bypasses
buffer cell C2, which reduces the launch path delay. With the insert_buffer method, the
tool inserts a new buffer in the capture path, which increases the capture path delay. The
changes are shown in Figure 15. As a result, the setup slack improves to +1 ps.
The following reasons for unfixable problems appear in the fix_eco_timing report:
• C1: New net length after net switching is too long
• C2: Bypassed delay is too large after net switching
• C3: No nets available to switch
• C4: No nets to switch because parent nets have more violations in their fanout
• C5: The current net has pins across hierarchy and cannot be changed.
D Q D Q
U1 FF1 FF2
Buffer cannot
Setup slack = 3 be inserted Setup slack = 2
Hold slack = –4 Hold slack = –2
D Q D Q
Hold TNS = –13
Hold WNS = –4
FF9 FF3
D Q D Q
U1 FF1 FF2
D Q FF3
Hold TNS = –11
Hold WNS = –4
FF9 Setup slack = 1
Hold slack = –1
fix_eco_timing -type hold
-cell_type clock_network \ D Q
-methods {insert_buffer} \
-buffer_list {buf1 buf2 buf3} \
-target_violation_type tns FF4
D Q D Q
U1 FF1 FF2
In Figure 16, the three hold violations at FF2, FF3, and FF4 could be fixed by inserting
a single buffer in the clock network at inverter U1. However, this would worsen the hold
violation at FF1, which is not allowed by default.
In Figure 17, ECO fixing inserts a buffer with a delay of 1, which improves the TNS from
-13 to -11 while allowing the negative slack at FF1 to worsen from -3 to -4. The WNS is not
allowed to become any worse than the existing WNS, -4.
In Figure 18, the WNS limit is explicitly set to -5, so ECO fixing inserts a buffer with a delay
of 2. This improves the TNS to -9 while allowing the negative slack at FF1 to worsen to -5.
You can set the -wns_limit option to a value larger or smaller than the existing WNS.
Clock network timing fixing respects the specified limit in either case.
With the -cell_type clock_network option, the command fixes maximum transition
violations in the clock network by upsizing buffers and inserting buffers. The default
behavior is to fix violations only in data paths.
To enable hold fixing for paths that use clock signals as data, set the following variable:
eco_shell> set_app_var eco_enable_fixing_clock_used_as_data true
...
Figure 19 Hold Fixing Using Buffer Insertion and Load Cell Insertion
Hold slack +5 ps
Setup slack -1 ps
Hold fixing using
buffer insertion
Hold slack -2 ps
Setup slack +6 ps
Delay 7 ps
Area = 5.0
Hold slack +1 ps
Setup slack +3 ps
Delay 3 ps
Area = 1.2
Instead, inserting a load cell that increases the path delay by 3 ps, resulting in a positive
hold slack of 1 ps while maintaining a positive setup slack. An additional benefit is the
smaller area of the load cell compared to the buffer.
To insert load cells, use the fix_eco_timing -type hold command with the
-load_cell_list option. You can fix small hold violations using load cells and then fix the
remaining hold violations using buffers, as shown in the following script:
# Fix small hold violations by inserting load cells
fix_eco_timing -type hold -methods insert_buffer -load_cell_list $clist \
-slack_lesser_than 0.000 -slack_greater_than -0.003
Alternatively, you can allow the tool to insert both load cells and buffers in a single
operation:
# Fix hold violations by inserting load cells and buffers
fix_eco_timing -type hold -methods insert_buffer \
-load_cell_list $clist -buffer_list $bflist
In this case, the tool automatically fixes small hold violations by inserting load cells, and
larger hold violations by inserting buffers.
For load cell insertion by the fix_eco_timing command, the library must have load cells
available. These cells have the following attributes:
Attribute Name Type Value
-----------------------------------------
function_id string unknown
is_black_box boolean true
is_combinational boolean true
number_of_pins int 1
In the physical ECO flow, the fix_eco_timing command limits the search area for an
available site by considering the eco_insert_buffer_search_distance_in_site_rows
variable setting, for both buffer insertion and load cell insertion.
Power Recovery
The fix_eco_power command tries to recover power and area by downsizing cells in
paths with positive setup slack or by removing buffers from paths with positive hold slack,
without introducing or worsening timing violations or DRC violations. The command
options let you specify any one of the following power recovery methods:
• Replace cells to minimize area (the default)
• Replace cells to minimize a library cell numeric attribute (use the -power_attribute
option)
• Replace cells based on library cell preference, as specified by an explicit string priority
list (use the -pattern_priority option)
• Replace cells to minimize switching, leakage, or total power using power analysis data
generated by the PrimePower update_power command (use the -power_mode option)
• Remove buffers from paths with positive hold slack (use the -methods
remove_buffer option)
• Replace cells in the clock network to specifically minimize dynamic power (use the
-cell_type clock_network option)
2. (Optional) List the alternative library cells for ECO by using the
report_eco_library_cells command. For example:
eco_shell> report_eco_library_cells
****************************************
Report : eco_library_cells
...
****************************************
Alternative library cells:
Attributes:
u - dont_use or pt_dont_use
d - dont_touch
3. (Optional) Report the cells used in the design with the report_cell_usage command.
For example:
eco_shell> report_cell_usage
****************************************
Report : cell_usage
...
****************************************
Cell Group Count Area
----------------------------------------------------------
Combinational 3977357 ( 85%) 5496541.50 ( 22%)
Sequential 667986 ( 14%) 9514767.00 ( 38%)
Clock 42891 ( 1%) 2975476.75 ( 12%)
Others 973 ( 0%) 6873247.50 ( 28%)
----------------------------------------------------------
Total 4689207 (100%) 24860032.00 (100%)
5. Report the power recovery results by using the PrimePower report_power command.
For example:
eco_shell> set_app_var power_enable_analysis true
eco_shell> report_power -groups {register combinational sequential}
To quantify the power reduction, compare the report_power results before and after
the using fix_eco_power command.
The following topics describe additional power recovery features:
• Power Recovery Based on Library Cell Names
• Power Recovery Based on a Library Cell String Attribute
• Power Recovery Based on a Library Cell Leakage Attribute
• Power Recovery Based on PrimePower Data
• Accelerated Power Recovery Using Machine Learning
• Excluding I/O Paths From Power Recovery
Figure 20 Library Cell Naming Example for Power Recovery Cell Swapping
Variable string that represents different values for a
characteristic such as threshold voltage
Fixed string
HVT_BUF1X
NVT_BUF1X
LVT_BUF1X
For example, these buffer cell names indicate high, normal, and low threshold voltages.
To perform cell replacement based on these library cell names, use the fix_eco_power
command with the -pattern_priority option. For example:
fix_eco_power -pattern_priority {HVT NVT LVT}
Be sure to list the variable name prefixes in order of priority, lowest-power cells first.
INV1XH INV1X_best
INV1XN INV1X_ok
INV1X INV1X_worst
To perform cell replacement based on a priority list for a user-defined string attribute, use
commands like the following:
define_user_attribute vt_swap_priority -type string -class lib_cell
set_user_ attribute -class lib_cell lib/INV1XH \
vt_swap_priority INV1X_best
set_user_attribute -class lib_cell lib/INV1XN \
vt_swap_priority INV1X_ok
set_user_ attribute -class lib_cell lib/INV1X \
vt_swap_priority INV1X_worst
...
fix_eco_power -pattern_priority {best ok worst}
-attribute vt_swap_priority
Be sure to list the attribute strings in order of priority, lowest-power cells first.
In this example, the fix_eco_timing command chooses library cells that minimize
leakage power. It only replaces existing cell instances that have the leak_attr attribute with
other library cells that also have the leak_attr attribute; it ignores cells that do not have the
attribute.
Instead of assigning the leakage values explicitly, you can import the attribute values from
the cell library database. For details, see SolvNet 2371111, “Extracting Leakage Power for
Library Cells”; and SolvNet 2040404,”PrimeTime J-2014.12 Update Training,” Module 8:
ECO - Power Recovery.
In distributed multi-scenario analysis, the respective library cells in different libraries must
be assigned matching leakage power values.
The -power_mode option specifies the types of power recovery to consider: dynamic
power only, leakage power only, or both (total). The -power_mode option cannot be used
with the -power_attribute or -pattern_priority option.
In distributed multi-scenario analysis (DMSA) flow, the tool gets its dynamic power data
from exactly one scenario, which you specify with the -dynamic_scenario option.
Similarly, it gets its leakage power data from exactly one scenario, which you specify with
the -leakage_scenario option. These options are used only in a DMSA flow.
In general, you should specify the scenario showing the worst dynamic power and worst
leakage power, respectively, for these two options. They could be the same scenario or
two different scenarios. You should continue to analyze all scenarios for their timing and
DRC constraints, which are honored by the power recovery command.
If the machine learning feature is enabled, when the fix_eco_power command finishes
power recovery, it saves its cell replacement decisions in a file called the training data
file. The decision data includes the cell instance replacements, as well as decisions not to
replace, and the associated timing and circuit topology conditions that led to the decisions.
The next time you perform power recovery, the fix_eco_power command reads the
previous training data files, trains the machine learning model, and looks for cells and
subcircuits that match the conditions of the earlier sessions that can be provided to the
trained model.
Where matching conditions are found, the tool makes the same cell replacement decisions
based on the machine learning model, avoiding the time-consuming detailed analysis
already performed.
Using this feature requires a PrimeTime-ADV-PLUS license.
Machine Learning Runtime Benefit
The amount of runtime reduction depends on the similarity between the current design and
the designs used during training, with respect to timing environment and circuit topology.
For example, you are likely to see a large runtime benefit under the following conditions:
• Same design or similar design type
• Same or similar clock characteristics
• Same or similar layout and parasitic data
On the other hand, you are likely to see little or no runtime benefit under the following
conditions:
• Different design type (CPU versus modem; latches versus flip-flops)
• Different clock characteristics (period, uncertainty)
• Different operating conditions (voltage, temperature)
• Different technologies or process nodes
ECO Machine Learning
To enable machine learning for faster power recovery by the fix_eco_power command,
set the training_data_directory variable to the name of a directory. No other user
action is needed. For example,
eco_shell> set_app_var training_data_directory ./train_dir
The fix_eco_power command uses the specified directory to retrieve the training data
from previous power recovery sessions and to store the learning data from the current
session. The fix_eco_power command performs these actions automatically when the
training_data_directory variable is set to a directory name.
The first time you do power recovery with the machine learning enabled, there is no
training data available, so power recovery takes the same amount of time as usual.
However, upon completion, the fix_eco_power command writes out what it has learned to
a file in the training directory.
eco_shell> read_verilog my_design1.v
...
eco_shell> set_app_var training_data_directory ./train_dir
...
eco_shell> fix_eco_power -power_mode total ...
Information: Machine learning enabled ...
...
Training coverage 0.0%
...
Information: Completed
Information: Writing training data train_dir/tr1.td
Information: Elapsed time [ 4280 sec]
The next time and subsequent times that you do power recovery, the tool reads in all
training data from the directory and applies what it can.
eco_shell> read_verilog my_design2.v
...
eco_shell> set_app_var training_data_directory ./train_dir
...
eco_shell> fix_eco_power -power_mode total ...
Information: Machine learning enabled ...
Information: Reading training data train_dir/tr1.td
...
Machine Learning Summary:
-------------------------------------------------------
Total number of cells 10272492
Cells eligible for power recovery 4788129
Trained cells 4106599
Adjusted cells 2109
Untrained cells 679421
Training coverage 85.0%
Training adjustment 0.0%
Retraining scope 15.0%
...
Information: Completed
Information: Writing training data train_dir/tr2.td
Information: Elapsed time [ 998 sec]
Each usage of the fix_eco_power command reads all of the machine learning files from
the specified directory and writes out any new learned data to a new file in the directory.
Training Coverage
When you use training data, the fix_eco_power command reports the usability of the
available data as the “training coverage.” This is the percentage of cells eligible for power
recovery that use the learned optimization actions. For example,
eco_shell> fix_eco_power -power_mode total ...
Information: Machine learning enabled ...
Information: Reading training data train_dir/tr1.td
...
Training coverage 85.0%
...
In this example, the training coverage is 85%, which means that 85% of the cells eligible
for power recovery matched the timing and topology conditions available from the training
data generated by previous runs, and the tool applied the learned optimization actions to
those cells. The remaining 15% of these cells did not match previous conditions and were
analyzed in detail for power recovery, the same as using no training data.
If you perform power recovery on a design and save the training data, performing another
power recovery on the same design under the same timing conditions results in 100%
coverage and greatly increased performance, for example, 5X faster. On the other hand,
performing power recovery on a very different type of design or a very different clock
period may result in 0% coverage and no runtime benefit.
The best runtime benefit comes from training coverage in the 90% to 100% range. You
might see very little runtime benefit for training coverage below 50%.
Training Data Files
The fix_eco_power command reads training data files from the directory specified by
the training_data_directory variable and writes out new training data to the same
directory.
The file format is binary and you cannot read or edit the contents. However, you can copy
and delete these files to modify the training data set. The files are named according to the
design from which the data originated and the date and time at which they are generated.
Generally, you should allow the fix_eco_power command to read all of the files in
the training directory, so that it can find the most suitable data to match the current
design. The runtime and memory overhead for reading many files is minor. However, if
you wish to read only a subset of the files in the directory, you can do so by using the
-training_data option of the fix_eco_power command.
After all four runs finish, the training data directory contains four different sets of training
data created from different stages of the design cycle. When you start working on a new
revision of the design, you are likely to get high training data coverage due to matching of
current timing and topology conditions with one or more of the previous training sessions,
resulting in greatly reduced runtime during power optimization.
User-Scripted ECO Machine Learning
If you have created custom scripts to perform power optimization, you can direct the tool
to learn from these strategies and apply them in future execution of the fix_eco_power
command. To do this, use the record_training_data and write_training_data
commands as shown in the following example.
# Machine learning session
...
record_training_data # Start recording training data
...
source my_eco_changes.tcl # User’s power optimization script
...
write_training_data -output my_training.td # Generate training data
...
In a later session, the fix_eco_power command uses the training data when you specify
the training data directory with the -training_data option.
# Machine learning usage
...
fix_eco_power -training_data my_training.td # Use training data
...
In this machine learning flow, the PrimeECO tool does not check or evaluate the quality
of the power optimization script. It simply accepts the changes made by the user script
as beneficial and saves the timing and topological conditions surrounding the changes
performed by the script. It writes the training data to the specified file.
When you later use the fix_eco_power command with the -training_data option,
the command reads in the training data and applies the changes where it finds cells
with similar timing and topological conditions, without performing a detailed analysis.
Where there is no match with the learned timing and topological conditions, the command
performs normal power optimization using detailed analysis, the same as using no
machine learning.
For power reduction, a cell is considered “internal” if there are no paths, constrained or
unconstrained, that reach the cell from an I/O port. Case analysis and disabled timing arcs
are considered during the check.
In a DMSA analysis, the cell is excluded if it reaches an I/O port in any scenario, as shown
in Figure 21.
Z Z
0 1
Cells that reach I/O ports are left untouched, even if their slack is less than the setup
or hold margin used for fixing. They are reported with reason code “V” in the unfixable
reasons report.
Note:
Using the -mim_group option might use more runtime and memory during
ECO because it separately analyzes each MIM group.
To report the defined MIM groups, use the report_eco_options command:
eco_shell> report_eco_options
...
Instance groups:
Group Module Instances
---------------------------
1 CPU CPU1 CPU2
2 CPU CPU3 CPU4
• -pba_mode ml_exhaustive
In particular, you must ensure that the refinement slack thresholds bound the implicit or
explicit -slack_lesser_than value of the fix_eco_timing command.
To use HyperTrace ECO fixing with the fix_eco_timing command,
1. Enable HyperTrace ECO fixing:
eco_shell> set_app_var eco_enable_graph_based_refinement true
Note that this variable setting (for HyperTrace ECO fixing) is independent from the
timing_enable_graph_based_refinement variable (for HyperTrace reporting).
2. If you are fixing setup violations to a slack value other than zero (positive or negative),
set the HyperTrace max-delay slack threshold to your target slack value:
eco_shell> # the default max-delay threshold is 0
eco_shell> set_app_var timing_refinement_max_slack_threshold 0.05
...
eco_shell> fix_eco_timing -type setup -slack_lesser_than 0.05
3. (Optional) If you are fixing hold violations, note that HyperTrace is disabled for min-
delay paths by default because hold violations are typically short paths that do not
benefit from HyperTrace acceleration.
If your design has complex violating min-delay logic cones (such as I/O or memory
interfaces) that benefit from HyperTrace acceleration, set the min-delay slack threshold
to your target slack value:
eco_shell> # the default min-delay threshold is 'disabled'
eco_shell> set_app_var timing_refinement_min_slack_threshold 0
...
eco_shell> fix_eco_timing -type hold
4. (Optional) Look for the following message to confirm that HyperTrace ECO fixing is
being used:
Information: Using HyperTrace to accelerate PBA-based ECO fixing.
(PTECO-116)
• -pba_mode exhaustive
• -pba_mode ml_exhaustive
The fix_eco_power command incorporates HyperTrace algorithms and data directly into
its ECO fixing algorithms. As a result, the graph refinement variables used by HyperTrace
reporting are not used or needed:
timing_refinement_max_slack_threshold
timing_refinement_min_slack_threshold
timing_refinement_maximum_critical_pin_percentage
Note that this variable setting (for HyperTrace ECO fixing) is independent from the
timing_enable_graph_based_refinement variable (for HyperTrace reporting).
3. (Optional) Look for the following message to confirm that HyperTrace ECO fixing is
being used:
Information: Running HyperTrace-based ECO fixing (PTECO-115)
The following options of the fix_eco_power command are unsupported for HyperTrace
ECO fixing:
fix_eco_power -start_end_type reg_to_reg
fix_eco_power -pba_path_selection_options
You can then include the reasons in the command output, write them to a file, or estimate
the reasons without fixing (for timing ECO fixing only):
Table 5 Reporting Unfixable Timing and DRC Violations
For example,
eco_shell> set_app_var eco_report_unfixed_reason_max_endpoints 50
50
eco_shell> fix_eco_timing -type setup -estimate_unfixable_reasons
Information: Using option -estimate_unfixable_reasons. ...
Information: The design will not be changed.
Information: 22 violating endpoints located... (PTECO-022)
Information: 22 endpoints are being considered for fixing... (PTECO-027)
...
Unfixable violations:
A - There are available library cells outside area limit
B - Delay improvement is too small to fix the violation
C - The violation is in clock network
I - Buffer insertion with given library cells cannot fix the violation
S - Cell sizing with alternative library cells cannot fix the violation
T - Timing margin is too tight to fix the violation
U - UPF restricts fixing the violation
V - Net or cell is invalid or has dont_touch attribute
W - Fixing the violation might degrade DRC violations
1
Final ECO Summary:
--------------------------------------------------------
Number of size_cell commands 276
Total number of commands 276
Area increased by cell sizing 128.50
Total area increased 128.50
For detailed information about unfixable violation reports, see the man page for the
fix_eco_timing or fix_eco_drc command.
For timing ECO fixing, the estimation report can guide you in fine-tuning the command
options without actually performing ECO changes. This report provides guidance on how
to address the unfixable violations. For example, the report can help you decide between
modifying the buffer list, relaxing area constraints, or relaxing margins before you perform
actual fixing. Generating the report is faster than actual fixing.
Estimation of unfixable violation reasons is compatible with all the other fix_eco_timing
command options. For example, to restrict the report to specific paths, specify those paths
using -from or -to, as in the following example.
eco_shell> fix_eco_timing -type setup -estimate_unfixable_reasons \
-from I_ORCA_TOP/I_PCI_CORE/pad_en_reg/Q -to pad[1]
You can then include the reasons in the command output, write them to a file, or both:
Table 6 Reporting Unusable Cells for Power Reduction
For example,
eco_shell> set_app_var eco_power_report_max_unusable_cells 8
8
eco_shell> fix_eco_power -verbose
...
Unusable Cells:
B - Power benefit is too small
L - Physical constraints restrict sizing
S - Cell has no alternate library cell with better power
T - Sizing cell might degrade timing
U - UPF restrictions prevent sizing
V - Cell is invalid or has dont_touch attribute
W - Sizing cell might degrade DRC
X - Cell is unusable for ECO
Z - Cell is sized
The reported cells are ordered by (and thus truncated to the limit by) the type of power
fixing being performed:
Leakage swapping In order of pattern priority (lowest to highest), with the name as a
tiebreaker
Attribute-based downsizing By decreasing order of library cell attribute value, with the name
as the tiebreaker
LEF/DEF
Technology rules
physical layout data
PrimeTime
Freeze silicon ECO
set_eco_options ...
Programmable fix_eco_timing ...
spare cells (PSCs) fix_eco_drc ...
The following figure shows the commands typically used in the IC Compiler II and
PrimeTime tools in the freeze silicon flow.
set_eco_options ...
fix_eco_drc -type ... -physical_mode freeze_silicon
fix_eco_timing -type ... -physical_mode freeze_silicon
write_changes -format icctcl -output pt_eco.tcl
• The applicable spacing rules used for cell placement must be available in a file. You
can provide this file in any of the following ways:
◦ In the IC Compiler II tool, use the export_advanced_technology_rules
command, which writes out the technology rules in a binary encrypted format.
◦ Write a script file containing a set of set_lib_cell_spacing_label and
set_spacing_label_rule commands that define the rules.
◦ Provide the rules in Synopsys technology file format, as described in the Synopsys
Technology File and Routing Rules Reference Manual.
In the PrimeTime tool, use the set_eco_options command to choose the freeze silicon
ECO flow, specify the spare cell names, specify the spacing-rule constraint file, and
specify the physical design (LEF/DEF) files. For example,
eco_shell> set_eco_options \
-programmable_spare_cell_names {PSC1 PSC2 PSC3 PSC4 PSC5 PSC6} \
-physical_lib_constraint_file ../tech_data/my_spacing_rules \
-physical_tech_lib_path {../phy_data/my_tech.lef} \
-physical_lib_path {../phy_data/my_lib.lef ../phy_data/my_design.def} \
-log_file my_lef_def.log \
...
The -log_file option causes the tool to write out LEF/DEF processing messages (errors
and warnings) into the specified log file.
ECO
Buffer Buffers
FILL1 PSC3 PSC4
B1 A1 & A2
As a result of applying an ECO, the PSC1 spare cell is replaced entirely by a large buffer,
B1. The space originally occupied by the PSC2 spare cell is used to implement two
buffers, A1 and A2. Only part of this space is used, so the tool backfills the remaining
available parts of the original PSC2 spare cell with two new spare cells, PSC3 and PSC4,
which are available to be used in later ECOs.
In the description of a PSC instance in a DEF file, the COMPONENTS section must contain
SOURCE DIST (because the instance is not defined in the netlist) and PLACED (because it
has a physical location); and it cannot contain FIXED or COVER. For example,
# DEF instantiation of Programmable Spare Cell
-xofiller!ECO_DECAP_FILLER_!e0hd_cap12x!179638
e0hd_cap12x + SOURCE DIST + PLACED (264300 624100) N ;
You can check the validity of LEF/DEF descriptions of PSCs by using the -log_file
option of the set_eco_options command. For example,
set_eco_options \
-programmable_spare_cell_names {PSC1 PSC2 PSC3 PSC4 PSC5 PSC6} \
-physical_lib_constraint_file my_spacing_rules \
-physical_tech_lib_path {../phy_data/my_tech.lef} \
-physical_lib_path {my_lib.lef my_design.def} \
-log_file lef_def_info.log
fix_eco_timing -type hold -physical_mode freeze_silicon \
-buffer_list $hold_buffer_list
After you run the fix_eco_timing command, the lef_def_info.log file shows PSC
identification messages:
...
Information: Reading LEF file my_lib.lef
Information: Information: Identified programmable spare cell PSC1 at
lineNumber 1238.
Information: Information: Identified programmable spare cell PSC2 at
lineNumber 1279.
...
Information: Reading DEF file my_design.def
Physical Information Summary:
Identified programmable spare cells PSC1 ...
...
The following script performs freeze silicon ECO hold fixing in multiple scenarios.
# Create scenarios
...
set_app_var read_parasitics_load_locations true
# Update timing with pin slack and arrival info
remote_execute {
set_app_var timing_save_pin_arrival_and_slack true;
update_timing -full }
Automated ECO implementation is not supported in the freeze silicon ECO flow. Instead,
use the write_changes command to write out the ECO change list for IC Compiler II. For
details, see the freeze silicon ECO flow documentation in the “ECO Flow” chapter of the
PrimeTime User Guide.
need to fix many violations or make substantial changes, you should use PrimeECO fixing
commands.
To manually edit the netlist, follow these steps:
1. If you need to replace or resize cells, find alternative library cells by running the
get_alternative_lib_cells -base_names command:
eco_shell> get_alternative_lib_cells -base_names U135
AN2 AN2i
• insert_buffer, remove_buffer
• set_coupling_separation, remove_coupling_separation
• create_cell, remove_cell
If you use other netlist editing commands, the update_timing command performs a full
(not incremental) timing update.
For an incremental update, PrimeECO does the following:
1. Identifies the nets that are directly affected by the “what-if” changes, and their
aggressors.
2. Performs electrical filtering of the affected nets.
3. Performs the first update iteration on the fanout cone of the affected nets, with the
depth of the update cone limited to changes in slew.
4. Performs the second and any subsequent iterations on the nets in the affected cone.
After you decide on a set of changes, you can generate a change list file for the physical
implementation tool.
The results of a “what-if” crosstalk analysis can be slightly different from a full analysis
because of the iterative nature of the analysis and the interdependence of timing windows
and crosstalk delay results. For final signoff of the design, perform a full analysis using
complete GPD or SPEF parasitic data and netlist data from the physical implementation
tool.
To list designs created by automatic uniquifying, use the list_designs -all command.
These designs become real only when you relink the design.
When a block is edited, it is uniquified, along with all blocks above it, up to the first singly-
instanced block. Messages are generated when uniquifying occurs. For example, if you
use the size_cell command to change the size of cell i1/low/n1, it causes multiple cells
to be uniquified:
eco_shell> size_cell i1/low/n1 class/NR4P
Uniquifying 'i1/low' (low) as 'low_0'.
Uniquifying 'i1' (inter) as 'inter_0'.
Sized 'i1/low/n1' with 'class/NR4P'
1
As soon as you edit a block, its parent and ancestor blocks up to the top level are edited.
This information is available from a Boolean attribute, is_edited, which is available on a
design and on hierarchical cells. In the foregoing example, after you use the size_cell
command, the is_edited attribute is true on i1/low block:
eco_shell> get_attribute [get_cells i1/low] is_edited
true
You can resolve library cell base names from the cell’s current library or from a specific
library by using the -current_library or -library option, respectively:
• Use the -current_library option with the size_cell,
get_alternative_lib_cells, and report_alternative_lib_cells commands.
This option instructs the tool to resolve the library cell base name using the currently
linked library.
• To specify a list of libraries to resolve a specified library cell name, use the -libraries
option of the size_cell, insert_buffer, and create_cell commands. The tool
searches the list of libraries in the order that you specify.
In the absence of these options, the PrimeECO tool resolves library cell base names from
libraries in the following order:
• Link library of the current cell for the size_cell, get_alternative_lib_cells, or
report_alternative_lib_cells command
The estimate_eco command is fast but the results are not guaranteed to be exact, so you
should use this command only to explore different ECO options. For full accuracy, analyze
the final results using the report_timing command.
When using the estimate_eco command, follow these steps:
1. Show the available options.
In this stage, you evaluate possible ECO options. For example,
eco_shell> estimate_eco -type size_cell -max -rise CPU2/U93
This report shows alternative library cells and the timing that would result from using
each library cell. The current library cell is marked with as asterisk (*).
2. Estimate the stage delay improvements.
After you deciding on the change, analyze the delay effects at the stage where the
netlist change will occur. For example, to insert a buffer at a specified pin and estimate
the stage delay change, use this command:
eco_shell> estimate_eco -type insert_buffer -inverter_pair \
-max -rise -verbose -lib_cells {INVD2} CPU2/U25/Y
Sizing Cells
To replace an existing cell with a new cell of a different size, use the size_cell command.
A library might contain several alternative library cells. For example:
eco_shell> get_alternative_lib_cells CPU2/reg318
{"class/FD2P1", "class/FD2P2", "class/FD2P3"}
If you do not know which cell to use for replacement, you can obtain the slack at the
outputs of the leaf cell by using this command:
eco_shell> report_alternative_lib_cells CPU2/reg318
...
Report : alternative_lib_cells
CPU2/reg318
-delay_type max
...
Alternative Slack
Library Cells
------------------------------------------
class/FD2P3 1.88(r)
class/FD2 * -1.02(r)
class/FD2P1 -2.88(r)
class/FD2P2 -2.98(r)
The report indicates that the class/FD2P3 cell would produce a positive slack at the output
of the leaf cell. Therefore, you would choose class/FD2P3 to size the leaf cell:
eco_shell> size_cell CPU2/reg318 class/FD2P3
Information: Sized 'CPU/reg318' with 'class/FD2P3'
1
u2 u5 u2 u5
Z ICLK A Z ICLK A
The insert_buffer command creates a new buffer “U1” and a new net “net1.” The input
of the new buffer is the existing net “ICLK” and the output is the new net “net1.”
To change the prefix name of newly inserted buffers, set the eco_instance_name_prefix
variable. By default, this variable is set to U.
To enable the undo feature, make sure the Enabled option has a check mark. If you do not
plan to use the feature, you can disable it to save memory.
Swapping Cells
To replace the cells in the specified cell list with a different design or library cell, use the
swap_cell command.
Note:
The swap_cell command is intended for swapping complex cells or
hierarchical cells. When cells are swapped, a full timing update is incurred. For
simple cell resizing, use the size_cell command instead.
Before performing the swap, the tool verifies that the pins of the replacement cell are
equivalent to the pins of the original cell. For every pin of the cell you are swapping out,
there must be a pin with the same name in the cell you are swapping in.
The swap_cell command always relinks the part of the design that has been replaced. Do
not use the link_design command after you have used a swap_cell command; doing so
often undoes the work of the swap_cell command.
The PrimeECO data model is instance based. When you use the swap_cell command,
an instance is modified. For example, U2/U0 is an instance of design X, and you swap U2/
U0 for a different design. PrimeECO did not modify the design X; it modified the instance
U2/U0. Therefore, an initial link reverts to the old design.
PrimeECO does not save information about cells that were swapped; that information is
maintained only until the next link. However, the change list for the design records the fact
that the swap occurred, and you can export this information using the write_changes
command.
By default, the swap_cell command restores the constraints that were on the design
before the swap occurred. If you are doing multiple swaps, saving the constraints using
the write_script command is far more efficient, and then use the swap_cell command
with the -dont_preserve_constraints option.
When you have completed the swaps, restore the constraints by sourcing your script that
you had written with the write_script command. If you are swapping one library cell
for another, consider using the size_cell command, which is much more efficient. For
example, to replace cells u1, u2, and u3 in TOP with the A design (in A.db), enter
eco_shell> read_verilog A.v
eco_shell> current_design TOP
eco_shell> swap_cell {u1 u2 u3} A.db:A
To replace cells u1, u2, and u3 in TOP with an LC3 lib_cell in the misc_cmos library, enter
eco_shell> swap_cell {u1 u2 u3} [get_lib_cells misc_cmos/LC3]
This example renames a net at a level below the current instance. In this example, u1 and
u1/low are instances of designs that have multiple instances, so they are uniquified as part
of the editing process.
eco_shell> rename_net [get_nets u1/low/w1] u1/low/netA
Uniquifying 'u1/low' (low) as 'low_0'.
Uniquifying 'u1' (inter) as 'inter_0'.
Information: Renamed net 'w1' to 'netA' in 'blkA/u1/low'. (NED-009)
1
The write_changes command writes out the name changes using the rename_cell and
rename_net commands.
By using the remote_execute command, you can execute the following commands in a
worker process and apply them to all scenarios in the command focus:
• set_coupling_separation – Creates a separation constraint on nets in all the
scenarios in command focus.
• remove_coupling_separation – Removes the coupling separation from all scenarios
in command focus.
• read_parasitics -eco – Reads StarRC ECO parasitic files to all scenarios in
command focus.
To use the layout view, you need to specify the physical data by using the
set_eco_options command. The physical data can be in IC Compiler II or LEF/DEF
format. To check for the presence of valid physical data, use the check_eco command.
You can generate and view ECOs in the GUI, including inserting buffers, removing buffers,
and sizing cells. A PrimeTime-ADV-PLUS license is required. After you make a change,
you can easily undo it.
To perform an ECO operation in the GUI, use the menu options under ECO, shown in the
following figure.
To enable the undo feature, make sure the Enabled option has a check mark. If you do not
plan to use the feature, you can disable it to save memory.
You can highlight a timing path and show only the actual net shapes traversing the path,
including relevant vias, without including the unrelated fanout of each driver in the path.
To control the net-shape-only path display mode, use the option settings in the View
Settings box under the Objects tab.
When you perform manual ECO operations using the ECO > Insert Buffer or ECO >
Size Cell command (insert_buffer or size_cell), the tool automatically performs an
incremental path-only timing update in memory so that you can immediately determine the
timing effects of the change.
Physical on-route
pin buffering
User-selected
Location guidance location
based on selected
buffer size
With this feature disabled, you can initiate a regular incremental or full timing update when
needed, and using the estimate_eco command or querying design attributes triggers a
timing update.
To display color-coded cell density maps and pin density maps in the layout window,
choose View > Map > Cell Density or View > Map > Pin Density. A PrimeTime-ADV-PLUS
license is required.
To display a color-coded power density map in the layout window, choose View > Map >
Cell Power Density. Viewing the power map requires PrimePower analysis data generated
by the update_power or report_power command.
Figure 35 View > Map > Cell Power Density in Layout View
The header of the change list file includes a version string so that external parsers can
adapt to changes in the format over time. Currently, the only possible version value is 1.0.
It is recommended that parser scripts check this version for an expected value, so that
future syntax upgrades do not cause unexpected behavior.
A
Legacy Flow Topics
This appendix includes older topics that documented deprecated legacy flows:
• Block-Level LEF Library Data
• DEF Files or IC Compiler II Database Files
open_lib lib2
write_lef -include {cell} lib2.lef
close_lib
open_lib lib3
write_lef -include {cell} lib3.lef
close_lib
To include via definitions that might not be part of the via definitions in the technology LEF,
use the write_def -all_vias command.
For more information, see the “Writing the Floorplan to a DEF File” section in the
IC Compiler Design Planning User Guide.