blob: 1a6577bc8fd13a97f302f4358374ae22e320701c [file] [log] [blame]
###############################################################################
# CADENCE COPYRIGHT NOTICE
# © 2008-2013 Cadence Design Systems, Inc. All rights reserved.
#------------------------------------------------------------------------------
#
# This Foundation Flow is provided as an example of how to perform specialized
# tasks.
#
# This work may not be copied, re-published, uploaded, or distributed in any way,
# in any medium, whether in whole or in part, without prior written permission
# from Cadence. Notwithstanding any restrictions herein, subject to compliance
# with the terms and conditions of the Cadence software license agreement under
# which this material was provided, this material may be copied and internally
# distributed solely for internal purposes for use with Cadence tools.
#
# This work is Cadence intellectual property and may under no circumstances be
# given to third parties, neither in original nor in modified versions, without
# explicit written permission from Cadence. The information contained herein is
# the proprietary and confidential information of Cadence or its licensors, and
# is supplied subject to, and may be used only by Cadence's current customers
# in accordance with, a previously executed license agreement between Cadence
# and its customer.
#
#------------------------------------------------------------------------------
# THIS MATERIAL IS PROVIDED BY CADENCE "AS IS" AND ANY EXPRESS OR IMPLIED
# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
# IN NO EVENT SHALL CADENCE BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL
# OR CONSEQUENTIAL DAMAGES HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS MATERIAL, EVEN IF
# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
###############################################################################
if {[info exists vars(check_vars)] && $vars(check_vars)} {
set op [open $vars(script_dir)/check_vars.rpt w]
if {![info exists vars(opconds)]} {
set vars(opconds) ""
}
set valid_prefixes "\
$vars(library_sets) \
$vars(rc_corners) \
$vars(opconds) \
$vars(delay_corners) \
$vars(constraint_modes) \
$vars(setup_analysis_views) \
$vars(hold_analysis_views) \
library_set \
cdb_file \
echo_file \
timelib \
rc_corner \
delay_corner \
constraint_mode \
welltaps \
filler_cells \
mail \
partition \
init \
place \
prects \
cts \
postcts \
postcts_hold \
route \
postroute \
postroute_hold \
postroute_si \
postroute_si_hold \
signoff \
assemble \
tie_cells \
filler_cells \
welltaps \
secondary_pg \
always_on_nets \
lsf custom rsh \
tags \
"
set valid_suffixes "\
timing si min max\
library_set \
rc_corner \
P V T cap_table qx_tech_file qx_lib_dir\
def_res_factor def_cap_factor def_clk_cap_factor \
det_res_factor det_cap_factor det_clk_cap_factor \
xcap_factor \
pre_route_res_factor pre_route_clk_res_factor pre_route_cap_factor pre_route_clk_cap_factor \
post_route_res_factor post_route_clk_res_factor post_route_cap_factor post_route_clk_cap_factor
post_route_xcap_factor \
scale_tcl \
delay_corner \
data_cell_late data_cell_early data_net_late data_net_early \
clock_cell_late clock_cell_early clock_net_late clock_net_early \
cell_check_late cell_check_early \
opcond opcond_library power_domains \
constraint_mode \
derate_tcl \
pre_cts_sdc post_cts_sdc incr_cts_sdc \
active_setup_views active_hold_views \
pre_endcap post_endcap \
cell_interval row_offset checkerboard verify_rule \
max_gap cell_interval checker_board \
max_distance max_fanout max_tran max_delay \
always_on_buffers cell_pin_pairs nets non_default_rule \
switchable switch_type checker_board back_to_back_chain \
loop_back_at_end check_height verify_rows enable_chain \
pre_tcl post_tcl replace_tcl skip \
to steps library_file \
script queue host_list args resource \
verbose verbosity_level \
welltaps, tie_cells, filler_cells \
pac_mode ilm_dir lef_file \
starting_dbs assemble_dbs \
latency_sdc cts_spec \
edi_config_tcl qor_tcl \
rpt_dir skip pre_tcl post_tcl \
"
if {[info exists vars(power_domains)]} {
append valid_prefixes $vars(power_domains)
append valid_suffixes "bbox max_gap rs_exts"
}
set valid_midfixes "\
set_distribute_host \
set_multi_cpu_usage \
set_distribute_host \
set_multi_cpu_usage \
set_rc_factor \
derate_timing \
create_rc_corner \
create_library_set \
create_delay_corner \
create_constraint_mode \
create_analysis_view \
update_delay_corner \
update_library_set \
derate_timing \
set_default_view \
set_power_analysis_mode \
load_config \
load_floorplan \
generate_tracks \
load_cpf \
commit_cpf \
read_activity_file \
specify_ilm \
load_ilm_non_sdc_file \
initialize_timing \
load_scan \
specify_spare_gates \
set_dont_use \
set_max_route_layer \
set_design_mode \
insert_welltaps_endcaps \
load_config \
time_design \
check_design \
check_timing \
report_power_domains \
set_distribute_host \
set_multi_cpu_usage \
restore_design \
initialize_step \
set_design_mode \
set_delay_cal_mode \
set_place_mode \
set_opt_mode \
cleanup_specify_clock_tree \
specify_clock_tree \
specify_jtag \
place_jtag \
place_design \
add_tie_cells \
time_design \
save_design \
report_power \
verify_power_domain \
run_clp \
set_distribute_host \
set_multi_cpu_usage \
initialize_step \
set_design_mode \
set_ilm_type \
cleanup_specify_clock_tree \
create_clock_tree_spec \
specify_clock_tree \
set_useful_skew_mode \
set_opt_mode \
set_design_mode \
set_delay_cal_mode \
set_dont_use \
opt_design \
ck_clone_gate \
save_design \
report_power \
verify_power_domain \
run_clp \
set_distribute_host \
set_multi_cpu_usage \
initialize_step \
set_design_mode \
set_cts_mode \
set_nanoroute_mode \
enable_clock_gate_cells \
clock_design \
disable_clock_gate_cells \
run_clock_eco \
update_timing \
time_design \
save_design \
report_power \
verify_power_domain \
run_clp \
set_distribute_host \
set_multi_cpu_usage \
initialize_step \
set_design_mode \
set_delay_cal_mode \
set_analysis_mode \
set_opt_mode \
opt_design \
save_design \
report_power \
verify_power_domain \
run_clp \
set_distribute_host \
set_multi_cpu_usage \
initialize_step \
set_dont_use \
set_opt_mode \
opt_design \
save_design \
report_power \
verify_power_domain \
run_clp \
set_distribute_host \
set_multi_cpu_usage \
initialize_step \
set_nanoroute_mode \
add_filler_cells \
route_secondary_pg_nets \
check_place \
route_design \
run_clock_eco \
spread_wires \
initialize_timing \
time_design \
save_design \
report_power \
verify_power_domain \
run_clp \
set_distribute_host \
set_multi_cpu_usage \
initialize_step \
set_design_mode \
set_extract_rc_mode \
set_analysis_mode \
set_delay_cal_mode \
add_metalfill \
delete_filler_cells \
opt_design \
add_filler_cells \
trim_metalfill \
save_design \
report_power \
verify_power_domain \
run_clp \
set_distribute_host \
set_multi_cpu_usage \
initialize_step \
set_dont_use_mode \
set_opt_mode \
delete_filler_cells \
opt_design \
add_filler_cells \
trim_metalfill \
save_design \
report_power \
verify_power_domain \
run_clp \
set_distribute_host \
set_multi_cpu_usage \
initialize_step \
set_design_mode \
set_extract_rc_mode \
set_si_mode \
set_analysis_mode \
set_delay_cal_mode \
add_metalfill \
delete_filler_cells \
opt_design \
add_filler_cells \
trim_metalfill \
save_design \
report_power \
verify_power_domain \
run_clp \
set_distribute_host \
set_multi_cpu_usage \
initialize_step \
set_design_mode \
set_dont_use \
set_opt_mode \
set_extract_rc_mode \
set_si_mode \
set_delay_cal_mode \
set_analysis_mode \
add_metalfill \
delete_filler_cells \
opt_design \
add_filler_cells \
trim_metalfill \
save_design \
report_power \
verify_power_domain \
run_clp \
set_distribute_host \
set_multi_cpu_usage \
initialize_timing \
initialize_step \
set_analysis_mode \
set_extract_rc_mode \
extract_rc \
dump_spef \
time_design_setup \
time_design_hold \
stream_out \
save_oa_design \
create_ilm \
summary_report \
verify_connectivity \
verify_geometry \
verify_metal_density \
verify_process_antenna \
save_design \
report_power \
verify_power_domain \
run_clp \
initialize_timing \
load_cpf \
commit_cpf \
run_clp_init \
save_init_dbs \
set_budgeting_mode \
update_constraint_mode \
set_ptn_user_cns_file \
set_place_mode \
place_design \
save_place_dbs \
trial_route \
assign_ptn_pins \
check_pin_assignment \
report_unaligned_nets \
set_ptn_pin_status \
derive_timing_budget \
save_budget_dbs \
run_clp \
partition \
save_partition \
assemble_design \
specify_ilm \
load_ilm_non_sdc_file \
load_cpf \
commit_cpf \
initialize_timing \
update_timing \
pre_pac_verify_connectivity \
pre_pac_verify_geometry \
set_module_view \
delete_filler_cells \
opt_design \
add_filler_cells \
post_pac_verify_connectivity \
post_pac_verify_geometry \
"
set prefix_count 0
set midfix_count 0
set suffix_count 0
foreach variable [array names vars] {
set split [split $variable ","]
if {[llength $split] == 1} {
continue
} elseif {[llength $split] == 2} {
set prefix [lindex $split 0]
set suffix [lindex $split 1]
puts $op "Checking $prefix + $suffix"
if {[lsearch $valid_prefixes $prefix] == -1} {
incr prefix_count
puts $op "<FF> ERROR Unknown prefix -> $prefix ($variable)"
puts "<FF> ERROR Unknown prefix -> $prefix ($variable)"
# append commands "# ERROR: A verilog netlist file must be defined\n"
set errors($error_count) "Unknown prefix -> $prefix ($variable)"
incr error_count
}
if {[lsearch $valid_suffixes $suffix] == -1} {
incr suffix_count
puts $op "<FF> ERROR Unknown suffix -> $suffix ($variable)"
puts "<FF> ERROR Unknown suffix -> $suffix ($variable)"
set errors($error_count) "Unknown suffix -> $prefix ($variable)"
incr error_count
}
} elseif {[llength $split] == 3} {
set prefix [lindex $split 0]
set midfix [lindex $split 1]
set suffix [lindex $split 2]
puts $op "Checking $prefix + $midfix + $suffix"
if {[lsearch $valid_prefixes $prefix] == -1} {
incr prefix_count
puts $op "<FF> ERROR Unknown prefix -> $prefix ($variable)"
puts "<FF> ERROR Unknown prefix -> $prefix ($variable)"
set errors($error_count) "Unknown prefix -> $prefix ($variable)"
incr error_count
}
if {[lsearch $valid_midfixes $midfix] == -1} {
incr midfix_count
puts $op "<FF> ERROR Unknown midfix -> $prefix ($variable)"
puts "<FF> ERROR Unknown midfix -> $prefix ($variable)"
set errors($error_count) "Unknown midfix -> $midfix ($variable)"
incr error_count
}
if {[lsearch $valid_suffixes $suffix] == -1} {
incr suffix_count
puts $op "<FF> WARNING Unknown suffix -> $suffix ($variable)"
puts "<FF> WARNING Unknown suffix -> $suffix ($variable)"
set errors($error_count) "Unknown suffix -> $prefix ($variable)"
incr error_count
}
} else {
continue
}
}
close $op
}