0% found this document useful (0 votes)
645 views5 pages

Clock Opt Opto

The document describes a script for clock tree optimization in IC Compiler. It contains commands for pre-optimization customization, running optimization, and post-optimization customization. The script also handles reporting and configuration options.

Uploaded by

thulasi reddy
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as RTF, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
645 views5 pages

Clock Opt Opto

The document describes a script for clock tree optimization in IC Compiler. It contains commands for pre-optimization customization, running optimization, and post-optimization customization. The script also handles reporting and configuration options.

Uploaded by

thulasi reddy
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as RTF, PDF, TXT or read online on Scribd
You are on page 1/ 5

##########################################################################################

# Tool: IC Compiler II

# Script: clock_opt_opto.tcl

# Version: O-2018.06-SP2 (October 8, 2018)

# Copyright (C) 2014-2018 Synopsys, Inc. All rights reserved.

##########################################################################################

set CURRENT_STEP clock_opt_opto

pd_start_icc2 -stage clock_opt_opto -open_from_stage clock_opt_cts -change_abstracts

if {[file exists ../config/user_config.tcl]} {exec cp -prfL --no-preserve=ownership ../config/user_config.tcl


$REPORTS_DIR/user_config.tcl}

if {[file exists ../config/flow_config.tcl]} {exec cp -prfL --no-preserve=ownership ../config/flow_config.tcl


$REPORTS_DIR/flow_config.tcl}

set REPORT_PREFIX $CLOCK_OPT_CTS_BLOCK_NAME

if {$CLOCK_OPT_OPTO_USER_INSTANCE_NAME_PREFIX != ""} {

set_app_options -name opt.common.user_instance_name_prefix -value


$CLOCK_OPT_OPTO_USER_INSTANCE_NAME_PREFIX

if {[get_app_option_value -name clock_opt.flow.enable_ccd]} {

# If CCD is enabled, set both opt and cts user prefix as CCD can work on both clock and data paths

set_app_options -name cts.common.user_instance_name_prefix -value $


{CLOCK_OPT_OPTO_USER_INSTANCE_NAME_PREFIX}_cts

####################################

## Pre-opto customizations

####################################

if {$pd_config(run,icc2,clock_aware_scan_in_clock_opto) ne ""} {
set_app_option -name opt.dft.clock_aware_scan -value $pd_config(run,icc2,clock_aware_scan_in_clock_opto)

synthesize_clock_trees -propagate_only ;# only works on active scenarios

compute_clock_latency -verbose

if {[file exists [which $TCL_USER_CLOCK_OPT_OPTO_PRE_SCRIPT]]} {

puts "RM-info: Sourcing [which $TCL_USER_CLOCK_OPT_OPTO_PRE_SCRIPT]"

source $TCL_USER_CLOCK_OPT_OPTO_PRE_SCRIPT

} elseif {$TCL_USER_CLOCK_OPT_OPTO_PRE_SCRIPT != ""} {

puts "RM-error: TCL_USER_CLOCK_OPT_OPTO_PRE_SCRIPT($TCL_USER_CLOCK_OPT_OPTO_PRE_SCRIPT) is


invalid. Please correct it."

if {$pd_config(run,icc2,disable_hold_fix) || ([info exists pd_config(run,icc2,disable_hold_fix,clock_opt_opto)] &&


$pd_config(run,icc2,disable_hold_fix,clock_opt_opto))} {

puts "PD-info: disabling all hold scenarios"

set current_active_hold_scenarios [get_object_name [get_scenarios -filter hold&&active]]

if {$current_active_hold_scenarios ne "" } {

set_scenario_status -active false $current_active_hold_scenarios

report_scenarios

if {$pd_config(run,icc2,clock_wide_wire_effort_level) ne ""} {

set pd_config(run,icc2,clock_wide_wire_effort_level,orig) [get_app_option_value -name


route.detail.use_wide_wire_effort_level]

set_app_options -name route.detail.use_wide_wire_effort_level -value


$pd_config(run,icc2,clock_wide_wire_effort_level)

}
####################################

## report_app_options & report_lib_cell_purpose

####################################

#pd_set_dont_use_on_variant_groups

if {[file exists ${REPORTS_DIR}/${REPORT_PREFIX}.report_app_options.start]} {

pd_rm -f ${REPORTS_DIR}/$${REPORT_PREFIX}.report_app_options.start

if {[file exists ${REPORTS_DIR}/${REPORT_PREFIX}.report_lib_cell_purpose]} {

pd_rm -f ${REPORTS_DIR}/$${REPORT_PREFIX}.report_lib_cell_purpose

redirect -tee -file ${REPORTS_DIR}/${REPORT_PREFIX}.report_app_options.start {report_app_options -non_default *}

redirect -file ${REPORTS_DIR}/${REPORT_PREFIX}.report_lib_cell_purpose {report_lib_cell -objects [get_lib_cells]


-column {full_name:20 valid_purposes}}

pd_trace_cmd_end "${CURRENT_STEP}_setup"

####################################

## Post-CTS optimization

####################################

## The following only applies to designs with physical hierarchy

## Ignore the sub-blocks (bound to abstracts) internal timing paths

if {$pd_config(hier,abstraction,design_list) ne ""} {

set_timing_paths_disabled_blocks -all_sub_blocks

if {[file exists [which $TCL_USER_CLOCK_OPT_OPTO_SCRIPT]]} {

puts "RM-info: Sourcing [which $TCL_USER_CLOCK_OPT_OPTO_SCRIPT]"

source $TCL_USER_CLOCK_OPT_OPTO_SCRIPT
} elseif {$TCL_USER_CLOCK_OPT_OPTO_SCRIPT != ""} {

puts "RM-error: TCL_USER_CLOCK_OPT_OPTO_SCRIPT($TCL_USER_CLOCK_OPT_OPTO_SCRIPT) is invalid. Please


correct it."

} else {

puts "RM-info: Running clock_opt -from final_opto -to final_opto command"

clock_opt -from final_opto -to final_opto

####################################

## Post-route clock tree optimization for non-CCD flow

####################################

if {$CLOCK_OPT_OPTO_CTO && ![get_app_option_value -name clock_opt.flow.enable_ccd]} {

if {$CLOCK_OPT_OPTO_CTO_USER_INSTANCE_NAME_PREFIX != ""} {

set_app_options -name cts.common.user_instance_name_prefix -value $


{CLOCK_OPT_OPTO_CTO_USER_INSTANCE_NAME_PREFIX}

save_block -as ${CLOCK_OPT_OPTO_BLOCK_NAME}_pre_cto

synthesize_clock_trees -postroute -routed_clock_stage detail

if {$pd_config(run,icc2,clock_wide_wire_effort_level) ne ""} {

set_app_options -name route.detail.use_wide_wire_effort_level -value


$pd_config(run,icc2,clock_wide_wire_effort_level,orig)

if {$pd_config(run,icc2,disable_hold_fix) || ([info exists pd_config(run,icc2,disable_hold_fix,clock_opt_opto)] &&


$pd_config(run,icc2,disable_hold_fix,clock_opt_opto))} {

puts "PD-info: re-activating hold scenarios"


if {$current_active_hold_scenarios ne "" } {

set_scenario_status -active true $current_active_hold_scenarios

report_scenarios

####################################

## Post-opto customizations

####################################

if {[file exists [which $TCL_USER_CLOCK_OPT_OPTO_POST_SCRIPT]]} {

puts "RM-info: Sourcing [which $TCL_USER_CLOCK_OPT_OPTO_POST_SCRIPT]"

source $TCL_USER_CLOCK_OPT_OPTO_POST_SCRIPT

} elseif {$TCL_USER_CLOCK_OPT_OPTO_POST_SCRIPT != ""} {

puts "RM-error: TCL_USER_CLOCK_OPT_OPTO_POST_SCRIPT($TCL_USER_CLOCK_OPT_OPTO_POST_SCRIPT) is


invalid. Please correct it."

####################################

pd_end_icc2 -stage $CURRENT_STEP -congestion_snapshot TRUE

####################################

exit

You might also like