Synopsys provides a bunch of Tcl scripts as part of their reference methodology (rm) offering. An incomplete view into this flow for the ICC tool is shown below.
This script reads the logic design netlist and constraints, creates the floorplan or reads the floorplan from a DEF or floorplan file, and generates a zero interconnect timing report.
The purpose of this script is to hand off a floorplanned design to the place_opt
step, which is the next step in the flow. Depending on the input format (Milkyway, Verilog, or .ddc), the script reads the appropriate files and includes the floorplan information that already exists in the initial floorplanned design or that is provided in a separate DEF file.
For a Milkyway CEL view or a .ddc file, no SDC constraints are loaded because the constraints are assumed to exist in the CEL view or .ddc file. For a Verilog netlist file, the read_sdc
command is also executed.
If you need to add floorplan constraints such as placement or routing blockages or different multivoltage or multicorner-multimode features, it is recommended that you do this in the file after reading in the design. Comments and commands in the scripts advise you where to specify the floorplan inputs.
The name of the output design saved in this step is: init_design_icc
.
icc_setup.tcl
(in rm_setup): Whole bunch of ICC variables set.make_generated_vars.tcl
: Generated in the Makefile
and defines some basic stuff.common_setup.tcl
(in rm_setup): Basic definitions like VDD and VSS.set_mw_lib_reference $MW_DESIGN_LIBRARY -mw_reference_library *
check_icc_rm_values.tcl
(in rm_icc_scripts): Exits ICC if script error.open_mw_cel
initialize_floorplan
: Make an initial floorplan.$ICC_PHYSICAL_CONSTRAINTS_FILE
(optional)common_optimization_settings_icc.tcl
(in rm_icc_scripts)common_placement_settings_icc.tcl
( in rm_icc_scripts)derive_pg_connection
save_mw_cell
This file runs a flat design planning flow to show routability, timing, and IR drop of the design.
The floorplan describes the size of the core; the shape and placement of standard cell rows and routing channels; standard cell placement constraints; and the placement of peripheral I/O, power, ground, corner, and filler pad cells.
There are two modes controlled by the ICC_DP_EXPLORE_MODE variable in the icc_setup.tcl file.
Baseline mode, which sources baseline.tcl
, serves as a reference and template. All the steps are in the script. It includes detailed comments to describe usage of commands. You have the freedom to further customize the steps based on your design style.
Explore mode, which sources macro_placement_exploration_dp.tcl
, is capable of performing the same flow multiple times automatically, each time with different combinations of settings. It ends by summarizing the results of each run in an HTML table that contains links to logs, reports, and a snapshot of each run. Explore mode runs the same flow as baseline mode. However, it uses a procedure to run multiple times automatically.
icc_setup.tcl
(in rm_setup): Called at the beginning of all scripts.proc_explore.tcl
(in rm_icc_dp_scripts)dp_explore
set_host_options
set_fp_placement_strategy
create_fp_placement
: synthesize_fp_rail
commit_fp_rail
create_fp_virtual_pad
(optional)analyze_fp_rail
optimize_fp_timing
route_zrt_global
OR route_global
remove_route_by_type
extract_rc
create_qor_snapshot
report_timing
report_qor_snapshot
write_floorplan
write_pin_pad_physical_constraints
write_def
gui_set_current_task
common_optimization_settings_icc.tcl
(in rm_icc_scripts): In all scripts.common_placement_settings_icc.tcl
(in rm_icc_scripts): In all scripts.macro_placement_exploration_dp.tcl
OR baseline.tcl
(both in rm_icc_dp_scripts), for baseline…create_fp_placement
: Place the standard cells in your boundary.route_fp_proto
save_mw_cell
remove_route_by_type
extract_rc
create_qor_snapshot
synthesize_fp_rail
: Synthesize the power rails. Can see estimated rail voltage drops.commit_fp_rail
: Commit power plan if power budget is met.analyze_fp_rail
common_optimization_settings_icc.tcl
extract_rc
report_timing
optimize_fp_timing
route_fp_proto
save_mw_cel
remove_route_by_type
extract_rc
create_qor_snapshot
report_qor_snapshot
report_timing
set_dont_touch_placement
save_mw_cel
write_floorplan
write_pin_pad_physical_constraints
This script executes the placement and placement-based optimization steps. After reading the initial design created by init_design_icc.tcl
, the script sources two files, rm_icc_scripts/common_placement_settings_icc.tcl
and rm_icc_scripts/common_optimization_settings_icc.tcl
. These files contain several recommended settings for use during each of the succeeding optimization steps. The name of the output design saved in this step is place_opt_icc
.
icc_setup.tcl
(in rm_setup): Called at the beginning of all scripts.common_optimization_settings_icc.tcl
(in rm_icc_scripts): In all scripts.common_placement_settings_icc.tcl
(in rm_icc_scripts): In all scripts.common_cts_settings.tcl
(in rm_icc_scripts): Clock tree synthesis. Set in place_opt and clock_opt sessions.open_mw_lib
copy_mw_cel
open_mw_cel
place_opt
derive_pg_connection
save_mw_cell
The purpose of this script is to execute the clock tree synthesis and clock tree
optimization steps:
The script sources rm_icc_scripts/common_cts_settings_icc.tcl
, which you must edit when you need to define any clock tree specific requirements, such as nondefault routing rules, layers, constraints, or shielding.
See rm_icc_scripts/common_cts_settings_icc.tcl
for more examples in creating NDR and shielding rules.
To enable interclock delay balancing, use the ICC_INTERCLOCK_BALANCING* variables in rm_setup/icc_setup.tcl
. These variables enable interclock delay balancing during clock tree synthesis.
To enable the update clock latency capability, use the ICC_CTS_UPDATE_LATENCY and ICC_CTS_LATENCY_OPTIONS_FILE variables in rm_setup/icc_setup.tcl
. These variables enable clock latency updates during clock tree synthesis.
To enable the self-gating logic insertion capability, set the ICC_CTS_SELF_GATING_SAIF_FILE variable in rm_setup/icc_setup.tcl
. This variable enables self-gating logic insertion during clock tree synthesis.
The name of the output design saved in this step is clock_opt_cts_icc
.
icc_setup.tcl
(in rm_setup)open_mw_lib
copy_mw_cel
open_mw_cel
common_optimization_settings_icc.tcl
(in rm_icc_scripts): In all scripts.common_placement_settings_icc.tcl
(in rm_icc_scripts): In all scripts.common_cts_settings.tcl
(in rm_icc_scripts): Clock tree synthesis. Set in place_opt and clock_opt sessions.set_app_var
set_delay_calculation
clock_opt -only_cts -no_clock_route
: Perform clock tree synthesis.derive_pg_connection
common_post_cts_timing_settings.tcl
(in rm_icc_scripts)remove_ideal_network
set_fix_hold
save_mw_cel
icc_setup.tcl
open_mw_lib
copy_mw_cel
open_mw_cel
common_optimization_settings_icc.tcl
(in rm_icc_scripts): In all scripts.common_placement_settings_icc.tcl
(in rm_icc_scripts): In all scripts.common_cts_settings.tcl
(in rm_icc_scripts): Clock tree synthesis. Set in place_opt and clock_opt sessions.common_post_cts_timing_settings_icc.tcl (in rm_icc_scripts)
set_app_var
extract_rc
clock_opt -no_clock_route -only_psyn -area_recovery
route_group
derive_pg_connection
same_mw_cel
icc_setup.tcl
(in rm_setup)open_mw_lib
copy_mw_cel
open_mw_cel
common_optimization_settings_icc.tcl
(in rm_icc_scripts): In all scripts.common_placement_settings_icc.tcl
(in rm_icc_scripts): In all scripts.common_cts_settings.tcl
(in rm_icc_scripts): Clock tree synthesis. Set in place_opt and clock_opt sessions.common_post_cts_timing_settings.tcl
common_route_si_settings_icc.tcl
(in rm_icc_scripts)set_si_options
: Turn off SI for clock routingset_delay_calculation
set_route_mode_options
optimize_clock_tree
derive_pg_connection
save_mw_cel
icc_setup.tcl
(in rm_setup)open_mw_lib
copy_mw_cel
open_mw_cel
common_optimization_settings_icc.tcl
(in rm_icc_scripts): In all scripts.common_placement_settings_icc.tcl
(in rm_icc_scripts): In all scripts.common_cts_settings.tcl
(in rm_icc_scripts): Clock tree synthesis. Set in place_opt and clock_opt sessions.common_post_cts_timing_settings.tcl
common_route_si_settings_icc.tcl
(in rm_icc_scripts)set_route_mode_options
: Load route and SI settings.report_preferred_routing_direction
: Check routability.report_tlu_plus_files
route_opt -initial_route_only -num cpus *
: Initial route. CPU count can be set to 1 as a minimum.update_clock_latency
icc_setup.tcl
(in rm_setup)open_mw_lib
copy_mw_cel
open_mw_cel
common_optimization_settings_icc.tcl
(in rm_icc_scripts): In all scripts.common_placement_settings_icc.tcl
(in rm_icc_scripts): In all scripts.common_post_cts_timing_settings.tcl
(in rm_icc_scripts) common_route_si_settings_icc.tcl
(in rm_icc_scripts)set_app_var compile_instance_name_prefix icc_route_opt
: Start post route optimization.set_route_mode_options -zroute false
route_opt -skip_initial_route -effort * -xtalk_reduction
: effort
can be set to “low”derive_pg_connection
save_mw_cel
icc_setup.tcl
(in rm_setup)open_mw_lib
copy_mw_cel
open_mw_cel
common_optimization_settings_icc.tcl
(in rm_icc_scripts): In all scripts.common_placement_settings_icc.tcl
(in rm_icc_scripts): In all scripts.common_post_cts_timing_settings.tcl
(in rm_icc_scripts) common_route_si_settings_icc.tcl
(in rm_icc_scripts): Loads the route and SI settings.set_droute_options -name doAntennaConx -value 4
: Antenna fixing.report_antenna_rules
: Antenna fixingroute_search_repair -rerun_drc -loop 10
: Antenna fixing.report_antenna_ratio
: Antenna fixinginsert_diode -no_auto_cell_selection -diode_cells *
: Antenna fixing.route_search_repair -rerun_drc -loop 3
: Antenna fixing.report_antenna_ration
: Antenna fixing.route_spreadwires
: Wire spreading for shorts.route_widen_wire
: Wire widening for opens.set_app_var droute_optViaTimingDriven 1
: Timing driven redundant via insertion.interst_redundant_vias -auto_mode insert -num_cpus *
insert_stdcell_filler -cell_without_metal $FILLER_CELL -connect_to_power “VDD” -connect_to_ground “VSS”
: $FILLER_CELL defined in make_generated_vars.tcl.route_opt -incremental -size_only
: Incremental timing optimization.route_search_repair -rerun_drc -num_cpus 1 -loop 2
derive_pg_connection
save_mw_cel
icc_setup.tcl
(in rm_setup)open_mw_cel metal_fill_icc -lib *_LIB
change_names -rules verilog -hierarchy
save_mw_cel -as change_names_icc
close_mw_cel
open_mw_cel change_names_icc
write_verilog -diode_ports -no_physical_only_cells *.output.v
write_verilog -no_physical_only_cells *.output.dc.v
write_verilog -diode_ports -pg *.output.pg.lvs.v
set_app_var write_sdc_output_lumped_net_capacitance false
set_app_var write_sdc_output_net_resistance false
write_sdc *.output.sdc
extract_rc -coupling_cap
write_parasitics -format SBPF -output *.output.sbpf
write_def -output *.output.def
save_mw_cel
close_mw_cel
open_mw_cel
create_ilm -include_xtalk
create_macro_fram
set_droute_options -name doAntennaConx -value 4
extract_hier_antenna_property -cell_name *
close_mw_cel
initialize_floorplan
(create_floorplan
): In /rm_icc_scripts/init_design_icc.tcl
Here you can set how close the design comes to your i/o pins.create_rectilinear_rings
(in Preroute → Create Rings…)