A Structured Approach To Instance Cell Resizing Using CUI TCL Procedures
A Structured Approach To Instance Cell Resizing Using CUI TCL Procedures
Explanation of Script
In many situations, physical implementation designers need to modify cells of a design. For example:
Define library rules to be used for resizing (for example, LVT to SVT)
Note that the procedures do not update the placement or routing after the design ECOs and additional steps may be needed (depending on the state of the design). For
example:
place_detail -eco
route_eco
Commands:
It is a one-to-one mapping, one cell can be mapped only to another single cell.
The list of instances being resized can be shown and eventually, some of them can be reset.
Commands:
You can repeat this step many times before proceeding with the actual cell sizing.
Step 3: Apply the planned modifications, it actually runs the eco_update_cell Innovus command.
Commands:
Snapshots
A snapshot mechanism is also provided to save the current instance cell type. A snapshot can be restored any moment. Especially during interactive eco, by using the
snapshot, you can quickly “undo” modifications and go back to a previous good status.
The define_lib_size_rules command gives a lot of versatility to define cell mapping rules.
For more flexibility, you can define an external text file with a specific cell mapping and import it.
define_lib_size_rules -objects …
define_lib_size_rules -objects … -incremental
write_lib_size_rule -out_file my.rule
<< edit the my.rule file >>
reset_lib_size_rules
read_lib_size_rule -in_file my.rule
The package has been tested on Innovus 20.1 and Tempus 20.1.
Usage
The following example shows the use model:
report_lib_size_rules
# example output for the first rule:
BUFX12 CLKBUFX12
BUFX16 CLKBUFX16
...
INVX12 CLKINVX12
...
# //////////////////////////////////////
# 2. Remove forbidden cells
# driving strength X20 not allowed
# /////////////////////////////////////
define_lib_size_rules -objects [get_db base_cells *X20* ] -match X20 -substitute X1
report_lib_size_rules
analyze_path_for_sizing -objects [get_db insts ] ; # all instances
apply_sizing_cells
# //////////////////////////////////////
# 3. Remove weak cells from critical
# paths
# //////////////////////////////////////
reset_lib_size_rules
define_lib_size_rules -objects [get_db base_cells -if { .name==*XL || .name==*XLLVT || .name==*XLHVT } ] -match XL -subs
define_lib_size_rules -objects [get_db base_cells -if { .name==*X1 || .name==*X1LVT || .name==*X1HVT } ] -match X1 -subs
report_lib_size_rules
analyze_path_for_sizing -objects [report_timing -max_paths 100000 -nworst 100 -max_slack 0.5 -collection ] ; # instances
apply_sizing_cells
# //////////////////////////////////////
# Optionally write a script to rerun
# any step of the eco
# //////////////////////////////////////
write_size_snapshot_script -from_snapshot initial -to_snapshot clock -out_file clock.tcl
write_size_snapshot_script -from_snapshot initial -to_snapshot weak_cells -out_file all.tcl
# //////////////////////////////////////
Internally, the package runs eco_update_cell, which will honor any eco_* root attribute settings. For example:
eco_batch_mode(root)
eco_check_logical_equivalence
eco_honor_dont_touch
eco_honor_dont_use
eco_honor_fixed_status
eco_honor_fixed_wires
The following settings should be set to false before applying design modifications:
set_db eco_refine_place false
set_db eco_update_timing false
Depending on the design stage (pre-place, pre-route, post-route) and the type of resize (footprint compatible vs. up-size/down-size), you may need to run
the place_detail -eco and route_eco commands after the ECO activity.
Code
Download and untar the attachment, and follow the instructions in the script explanation section to point to and load the Tcl package.
Internal Notes
None
Return to the top of the page