0% found this document useful (0 votes)
470 views134 pages

lc_shell_command

Uploaded by

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

lc_shell_command

Uploaded by

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

#@ #

#@ # Running lc_shell Version V-2023.12 for linux64 -- Nov 23, 2023


#@ # Date: Fri Apr 11 04:02:58 2025
#@

source /cad/synopsys/lc/cur/admin/setup//.synopsys_lc.setup
#@ # -- Starting source /cad/synopsys/lc/cur/admin/setup//.synopsys_lc.setup

#@ #
#@ #
#@ # ".synopsys_lc.setup" Initialization File for
#@ #
#@ # Lc_Shell and Library_compiler
#@ #
#@ # The variables in this file define the behavior of many parts
#@ # of the Synopsys Synthesis Tools. Upon installation, they should
#@ # be reviewed and modified to fit your site's needs. Each engineer
#@ # can have a .synopsys file in his/her home directory or current
#@ # directory to override variable settings in this file.
#@ #
#@
#@ # System variables
#@ # system default value for sh_continue_on_error is "false"
#@ set sh_continue_on_error "true"
#@ # system default value for sh_source_uses_search_path is "false"
#@ set sh_source_uses_search_path "true"
#@
#@ # Enable customer support banner on fatal
#@ if { $sh_arch == "linux" || $sh_arch == "amd64" || $sh_arch == "linux64"
|| \
#@ $sh_arch == "sparcOS5" || $sh_arch == "sparc64" || \
#@ $sh_arch == "x86sol32" || $sh_arch == "x86sol64" || \
#@ $sh_arch == "rs6000" || $sh_arch == "aix64" } {
#@ setenv SYNOPSYS_TRACE ""
#@ }
#@
#@ #
#@ # Load the procedures which make up part of the user interface.
#@ #
#@ source $synopsys_root/auxx/syn/.lc_procs.tcl
#@ # -- Starting source /cad/synopsys/lc/cur/auxx/syn/.lc_procs.tcl

#@ ##############################################################################
#@ #
#@ #
#@ # FILE: auxx/syn/.lc_procs.tcl
#@ #
#@ # ABSTRACT: These procedures are part of the lc_shell
#@ # user interface.
#@ # They are loaded by .synopsys_lc.setup.
#@ #
#@ ##############################################################################
#@ #
#@ #
#@
#@ ##############################################################################
#@ #
#@ #
#@ # PROCEDURE: add_model
#@ #
#@ # ABSTRACT: dummy call
#@ #
#@ ##############################################################################
#@ #
#@
#@ proc add_model { args } {
#@ return [uplevel #0 $cmd]
#@ }
#@
#@ ##############################################################################
#@ #
#@ # PROCEDURE: remove_design
#@ #
#@ # ABSTRACT: map remove_design to remove_lib
#@ #
#@ # HISTORY : 2014/05/09, Synopsys, initial
#@ #
#@ ##############################################################################
#@
#@ proc remove_design { args } {
#@ parse_proc_arguments -args $args ra
#@
#@ if {[info exists ra(-library)]} {
#@ set cmd [format {remove_lib %s} $ra(-library)]
#@ } elseif {[info exists ra(-all)]} {
#@ set cmd {remove_lib -all}
#@ } else {
#@ set cmd [format {remove_lib [list %s]} $args]
#@ }
#@
#@ return [uplevel #0 $cmd]
#@ }
#@
#@ define_proc_attributes remove_design -hide_body \
#@ -info " alias of remove_lib " \
#@ -define_args {\
#@ {file_names "" file_names list {optional hidden}}\
#@ }
#@ # -- End source /cad/synopsys/lc/cur/auxx/syn/.lc_procs.tcl

#@ source $synopsys_root/auxx/lc/.lc_scripts.tcl
#@ # -- Starting source /cad/synopsys/lc/cur/auxx/lc/.lc_scripts.tcl

#@ ##############################################################################
#@ #
#@ #
#@ # FILE: lc_scripts.tcl
#@ #
#@ # ABSTRACT: These procedures are part of the lc_shell
#@ # user interface.
#@ # They are loaded by .synopsys_lc.setup.
#@ #
#@ ##############################################################################
#@
#@ ##############################################################################
#@ # Proc: read in the csv file to list of list
#@ # Author: Synopsys
#@ # Date: 2015/11/01
#@ # -channel: the input csv file
#@ # -header: == 1: use first line as index; header == 0: use row number as index
#@ # -symbol: delimiter, default is ","
#@ ##############################################################################
#@ proc read_csv { channel { header 1 } { symbol , }} {
#@ set quote 0
#@ set data [ split [ read $channel nonewline ] "\n" ]
#@ foreach line $data {
#@ set quote [ expr { $quote + [ regexp -all \" $line ]}]
#@ if { [ expr { $quote % 2 }] == "0" } {
#@ set quote 0
#@ append row_temp $line
#@ set row_temp [ split $row_temp , ]
#@ foreach section $row_temp {
#@ set quote [ expr { $quote + [ regexp -all \" $section ]}]
#@ if { [ expr { $quote % 2 }] == "0" } {
#@ append cell_temp $section
#@ set cell_temp [ regsub {^\s*(.*\S)\s*$} $cell_temp {\
1} ]
#@ set cell_temp [ regsub {^\s*$} $cell_temp {\1} ]
#@ set cell_temp [ regsub {"(.*)"} $cell_temp {\1} ]
#@ lappend cell $cell_temp
#@ unset cell_temp
#@ set quote 0
#@ } else {
#@ append cell_temp $section$symbol
#@ }
#@ }
#@ lappend final [ regsub -all {""} $cell \" ]
#@ unset cell
#@ unset row_temp
#@ } else {
#@ append row_temp $line\n
#@ }
#@ }
#@ # return list of list
#@ return $final
#@ }
#@
#@ # This proc is hidden
#@ define_proc_attributes read_csv -hidden
#@
#@ ##############################################################################
#@ # Proc: sort the db_filename
#@ # Author: Synopsys
#@ # Date: 2015/11/01
#@ # Return array: key is db name, value is a list of colomn number
#@ ##############################################################################
#@ proc sort_array_by_db_filename { final id } {
#@ set row [ llength $final ]
#@
#@ for { set i 1 } { $i < $row } { incr i } {
#@ set db_name [lindex [lindex $final $i] $id]
#@ set db_ids [array names db_map $db_name]
#@ if { [string length $db_ids] > 0} {
#@ set db_map($db_name) [concat $db_map($db_name) $i]
#@ } else {
#@ set db_map($db_name) $i
#@ }
#@ }
#@
#@ return [ array get db_map ]
#@ }
#@
#@ # This proc is hidden
#@ define_proc_attributes sort_array_by_db_filename -hidden
#@
#@ ##############################################################################
#@ # Proc: get nldm delay point index/value
#@ # Author: Synopsys
#@ # Date: 2015/11/01
#@ # Args: -matching_point: 1: fit; others: bucket;
#@ # Return: for fit mode, return 1 grid point
#@ # for bucket mode, return a list of grid points
#@ #
#@ # Support NLDM NLPM query
#@ #
#@ # For different dimension lookup table
#@ # fit bucket
#@ # 2-D: 1 (idx1,idx2,val) 4 * 3 (idx1,idx2,val)
#@ # 1-D: 1 (idx1,val) 2 * 2 (idx1,val)
#@ # 0-D: 1 (val) 1 (val)
#@ #
#@ # The return array always contain 3 items (fit mode) or 12 items (bucket mode)
#@ # The unused ones are left empty for 1-D/0-D lookup table
#@ # If find any error, return array contains same number itmes with empty value
#@ ##############################################################################
#@ proc get_nldm_delay_point { line header idx {matching_point 1} } {
#@
#@ set column [llength $header]
#@ for { set j 0 } { $j < $column } { incr j } {
#@ set rec([ lindex $header $j ],$idx) [ lindex $line $j ]
#@ }
#@
#@ # initial return array
#@ if { $matching_point ==1 } {
#@ set tb(idx1,$idx) ""
#@ set tb(idx2,$idx) ""
#@ set tb(value,$idx) ""
#@ } else {
#@ set tb(idx1_a,$idx) ""
#@ set tb(idx2_a,$idx) ""
#@ set tb(value_a,$idx) ""
#@ set tb(idx1_b,$idx) ""
#@ set tb(idx2_b,$idx) ""
#@ set tb(value_b,$idx) ""
#@ set tb(idx1_c,$idx) ""
#@ set tb(idx2_c,$idx) ""
#@ set tb(value_c,$idx) ""
#@ set tb(idx1_d,$idx) ""
#@ set tb(idx2_d,$idx) ""
#@ set tb(value_d,$idx) ""
#@ }
#@
#@ # check library
#@ if { [string length [array names rec library,$idx]] ==0 ||
#@ [string length $rec(library,$idx)] ==0} {
#@ echo "line [expr $idx+1]: Error! Must specify field 'library' for query."
#@ return [ array get tb ]
#@ }
#@ # check cell
#@ if { [string length [array names rec cell,$idx]] ==0 ||
#@ [string length $rec(cell,$idx)] ==0} {
#@ echo "line [expr $idx+1]: Error! Must specify field 'cell' for query."
#@ return [ array get tb ]
#@ }
#@
#@ # get the cell, save the collection into global array for fast access next
time.
#@ global lc_cells
#@ set lib_cell_name [array names lc_cells $rec(library,$idx)/$rec(cell,$idx)]
#@ if { [string length $lib_cell_name] > 0} {
#@ set pcell $lc_cells($lib_cell_name)
#@ } else {
#@ set pcell [get_lib_cells $rec(library,$idx)/$rec(cell,$idx)]
#@ if { [sizeof_collection $pcell] == 1 } {
#@ set lc_cells($rec(library,$idx)/$rec(cell,$idx)) $pcell
#@ } else {
#@ echo "line [expr $idx+1]: Error! Can't find this cell group."
#@ return [array get tb ]
#@ }
#@ }
#@
#@ # check group
#@ if { [string length [array names rec group,$idx]] ==0 ||
#@ [string length $rec(group,$idx)] ==0} {
#@ echo "line [expr $idx+1]: Error! Must specify field 'group' for query."
#@ return [ array get tb ]
#@ }
#@
#@ # get value NOT from lookup table
#@ if { [string equal $rec(group,$idx) leakage_power] } {
#@ # leakage power
#@
#@ # set filter
#@ if { [string length [array names rec when_cond,$idx]] >0 &&
#@ [string length $rec(when_cond,$idx)] >0 } {
#@ set ft \(when==\"$rec(when_cond,$idx)\"\)
#@ }
#@ if { [string length [array names rec related_pg_pin,$idx]] >0 &&
#@ [string length $rec(related_pg_pin,$idx)] >0 } {
#@ if {[info exists ft]} {
#@ set ft $ft&&\(related_pg_pin==$rec(related_pg_pin,$idx)\)
#@ } else {
#@ set ft \(related_pg_pin==$rec(related_pg_pin,$idx)\)
#@ }
#@ }
#@
#@ # set options: of_object, class_type, filter
#@ lappend opts -of_objects $pcell -class_type leakage_power
#@ if {[info exists ft]} {
#@ lappend opts -filter $ft
#@ }
#@
#@ # get leakage power
#@ set arc [eval get_lib_objects $opts]
#@
#@ if {[sizeof_collection $arc] == 0} {
#@ echo "line [expr $idx+1]: Error! Can't find this timing/power group."
#@ return [array get tb ]
#@ } elseif {[sizeof_collection $arc] > 1} {
#@ # using the first one !!!
#@ echo "line [expr $idx+1]: Warning! Find multiple timing/power groups, use
the first one!"
#@ set arc [index_collection $arc 0]
#@ }
#@
#@ set value [format %g [get_lib_attribute $arc value]]
#@
#@ if { $matching_point ==1 } {
#@ if {[info exists value]} {
#@ set tb(value,$idx) $value
#@ }
#@ } else {
#@ if {[info exists value]} {
#@ set tb(value_a,$idx) $value
#@ }
#@ }
#@
#@ return [ array get tb ]
#@ }
#@
#@ # get value from lookup table
#@ if { [string equal $rec(group,$idx) cell_rise] ||
#@ [string equal $rec(group,$idx) cell_fall] ||
#@ [string equal $rec(group,$idx) rise_constraint] ||
#@ [string equal $rec(group,$idx) fall_constraint] ||
#@ [string equal $rec(group,$idx) rise_propagation] ||
#@ [string equal $rec(group,$idx) fall_propagation] ||
#@ [string equal $rec(group,$idx) rise_transition] ||
#@ [string equal $rec(group,$idx) fall_transition] ||
#@ [string equal $rec(group,$idx) ocv_sigma_cell_rise] ||
#@ [string equal $rec(group,$idx) ocv_sigma_cell_fall] ||
#@ [string equal $rec(group,$idx) ocv_sigma_rise_constraint] ||
#@ [string equal $rec(group,$idx) ocv_sigma_fall_constraint] ||
#@ [string equal $rec(group,$idx) ocv_sigma_rise_transition] ||
#@ [string equal $rec(group,$idx) ocv_sigma_fall_transition] } {
#@ # NLDM timing
#@
#@ # set filter
#@ if { [string length [array names rec timing_type,$idx]] >0 &&
#@ [string length $rec(timing_type,$idx)] >0 } {
#@ set ft \(timing_type==$rec(timing_type,$idx)\)
#@ }
#@ if { [string length [array names rec timing_sense,$idx]] >0 &&
#@ [string length $rec(timing_sense,$idx)] >0 } {
#@ if {[info exists ft]} {
#@ set ft $ft&&\(timing_sense==$rec(timing_sense,$idx)\)
#@ } else {
#@ set ft \(timing_sense==$rec(timing_sense,$idx)\)
#@ }
#@ }
#@ if { [string length [array names rec when_cond,$idx]] >0 &&
#@ [string length $rec(when_cond,$idx)] >0 } {
#@ if {[info exists ft]} {
#@ set ft $ft&&\(when==\"$rec(when_cond,$idx)\"\)
#@ } else {
#@ set ft \(when==\"$rec(when_cond,$idx)\"\)
#@ }
#@ }
#@
#@ # set options: of_object, from pin, to pin, filter
#@ lappend opts -of_objects $pcell
#@ if { [string length [array names rec pin,$idx]] >0 &&
#@ [string length $rec(pin,$idx)] >0 } {
#@ lappend opts -to $rec(pin,$idx)
#@ }
#@ if { [string length [array names rec related_pin,$idx]] >0 &&
#@ [string length $rec(related_pin,$idx)] >0 } {
#@ lappend opts -from $rec(related_pin,$idx)
#@ }
#@ if {[info exists ft]} {
#@ lappend opts -filter $ft
#@ }
#@
#@ # get timing arc
#@ set arc [eval get_lib_timing_arcs $opts]
#@
#@ } elseif { [string equal $rec(group,$idx) rise_power] ||
#@ [string equal $rec(group,$idx) fall_power] } {
#@ # NLPM internal power
#@
#@ # set filter
#@ if { [string length [array names rec when_cond,$idx]] >0 &&
#@ [string length $rec(when_cond,$idx)] >0 } {
#@ set ft \(when==\"$rec(when_cond,$idx)\"\)
#@ }
#@ if { [string length [array names rec related_pg_pin,$idx]] >0 &&
#@ [string length $rec(related_pg_pin,$idx)] >0 } {
#@ if {[info exists ft]} {
#@ set ft $ft&&\(related_pg_pin==$rec(related_pg_pin,$idx)\)
#@ } else {
#@ set ft \(related_pg_pin==$rec(related_pg_pin,$idx)\)
#@ }
#@ }
#@ if { [string length [array names rec related_pin,$idx]] >0 &&
#@ [string length $rec(related_pin,$idx)] >0 } {
#@ if {[info exists ft]} {
#@ set ft $ft&&\(related_pin==$rec(related_pin,$idx)\)
#@ } else {
#@ set ft \(related_pin==$rec(related_pin,$idx)\)
#@ }
#@ }
#@
#@ # get pin
#@ if { [string length [array names rec pin,$idx]] >0 &&
#@ [string length $rec(pin,$idx)] >0 } {
#@ set pin [get_lib_objects -of_objects $pcell -class_type pin -filter
name==$rec(pin,$idx)]
#@ if {[sizeof_collection $pin] != 1} {
#@ echo "line [expr $idx+1]: Error! Can't find this pin group."
#@ return [array get tb ]
#@ }
#@
#@ # set options: of_object, -class_type, filter
#@ lappend opts -of_objects $pin -class_type internal_power
#@ if {[info exists ft]} {
#@ lappend opts -filter $ft
#@ }
#@
#@ # get internal power
#@ set arc [eval get_lib_objects $opts]
#@ }
#@ }
#@
#@ if {[sizeof_collection $arc] == 0} {
#@ echo "line [expr $idx+1]: Error! Can't find this timing/power group."
#@ return [array get tb ]
#@ } elseif {[sizeof_collection $arc] > 1} {
#@ # using the first one !!!
#@ echo "line [expr $idx+1]: Warning! Find multiple timing/power groups, use
the first one!"
#@ set arc [index_collection $arc 0]
#@ }
#@
#@ # get the lookup table
#@ set lt [get_lookup_table -of_object $arc $rec(group,$idx)]
#@
#@ if {[sizeof_collection $lt] == 0} {
#@ echo "line [expr $idx+1]: Error! Can't find this lookup table."
#@ return [array get tb ]
#@ } elseif {[sizeof_collection $lt] > 1} {
#@ # using the first one !!!
#@ echo "line [expr $idx+1]: Warning! Find multiple lookup table, use the first
one!"
#@ set lt [index_collection $lt 0]
#@ }
#@
#@ # won't consider index pairing for now
#@ # input_slew == input_net_transition/input_transition_time
#@ # output_load == total_output_net_capacitance
#@ set index1 input_net_transition
#@ set index2 total_output_net_capacitance
#@
#@ set ids [lookup_table variables $lt]
#@
#@ if { [llength $ids] == 1} {
#@ set index1 [lindex $ids 0]
#@ } elseif { [llength $ids] == 2} {
#@ set index1 [lindex $ids 0]
#@ set index2 [lindex $ids 1]
#@ }
#@
#@ # constraint template could have issue here
#@ # constraint variable related_pin_transition/constrained_pin_transition
#@ # doesn't follow the input csv table index name input_slew/output_load
#@ # then we don't know how to pair them
#@ if { $index1=="total_output_net_capacitance" } {
#@ set tmp_index $index1
#@ set index1 $index2
#@ set index2 $tmp_index
#@ }
#@
#@ if { [string length [array names rec input_slew,$idx]] >0 &&
#@ [string length $rec(input_slew,$idx)] >0 } {
#@ lappend pointl $index1 $rec(input_slew,$idx)
#@ }
#@ if { [string length [array names rec output_load,$idx]] >0 &&
#@ [string length $rec(output_load,$idx)] >0 } {
#@ lappend pointl $index2 $rec(output_load,$idx)
#@ }
#@
#@ # lookup_table fit/bucket …
#@ if { $matching_point ==1 } {
#@ if {[info exists pointl]} {
#@ redirect -variable msg {echo [set m_list [lookup_table fit $lt -index
$pointl]]}
#@ } else {
#@ redirect -variable msg {echo [set m_list [lookup_table fit $lt]]}
#@ }
#@ if {[info exists m_list]} {
#@ if {[llength $m_list] == 3} {
#@ set tb(idx1,$idx) [format %g [lindex $m_list 0] ]
#@ set tb(idx2,$idx) [format %g [lindex $m_list 1] ]
#@ set tb(value,$idx) [format %g [lindex $m_list 2] ]
#@ } elseif {[llength $m_list] == 2} {
#@ set tb(idx1,$idx) [format %g [lindex $m_list 0] ]
#@ set tb(value,$idx) [format %g [lindex $m_list 1] ]
#@ } elseif {[llength $m_list] == 1} {
#@ set tb(value,$idx) [format %g [lindex $m_list 0] ]
#@ }
#@ }
#@ } else {
#@ if {[info exists pointl]} {
#@ redirect -variable msg {echo [set m_list [lookup_table bucket $lt -index
$pointl]]}
#@ } else {
#@ redirect -variable msg {echo [set m_list [lookup_table bucket $lt]]}
#@ }
#@ if {[info exists m_list]} {
#@ if {[llength $m_list] == 4} {
#@ set tb(idx1_a,$idx) [format %g [lindex [lindex $m_list 0] 0] ]
#@ set tb(idx2_a,$idx) [format %g [lindex [lindex $m_list 0] 1] ]
#@ set tb(value_a,$idx) [format %g [lindex [lindex $m_list 0] 2] ]
#@ set tb(idx1_b,$idx) [format %g [lindex [lindex $m_list 1] 0] ]
#@ set tb(idx2_b,$idx) [format %g [lindex [lindex $m_list 1] 1] ]
#@ set tb(value_b,$idx) [format %g [lindex [lindex $m_list 1] 2] ]
#@ set tb(idx1_c,$idx) [format %g [lindex [lindex $m_list 2] 0] ]
#@ set tb(idx2_c,$idx) [format %g [lindex [lindex $m_list 2] 1] ]
#@ set tb(value_c,$idx) [format %g [lindex [lindex $m_list 2] 2] ]
#@ set tb(idx1_d,$idx) [format %g [lindex [lindex $m_list 3] 0] ]
#@ set tb(idx2_d,$idx) [format %g [lindex [lindex $m_list 3] 1] ]
#@ set tb(value_d,$idx) [format %g [lindex [lindex $m_list 3] 2] ]
#@ } elseif {[llength $m_list] == 2} {
#@ set tb(idx1_a,$idx) [format %g [lindex [lindex $m_list 0] 0] ]
#@ set tb(value_a,$idx) [format %g [lindex [lindex $m_list 0] 1] ]
#@ set tb(idx1_b,$idx) [format %g [lindex [lindex $m_list 1] 0] ]
#@ set tb(value_b,$idx) [format %g [lindex [lindex $m_list 1] 1] ]
#@ } elseif {[llength $m_list] == 1} {
#@ set tb(value_a,$idx) [format %g [lindex $m_list 0] ]
#@ }
#@ }
#@ }
#@ if {[string match {[a-zA-Z]*} $msg]} {
#@ echo Line [expr $idx+1]: Error! [string trim $msg \n]
#@ }
#@
#@ return [ array get tb ]
#@ }
#@
#@ # This proc is hidden
#@ define_proc_attributes get_nldm_delay_point -hidden
#@
#@ ##############################################################################
#@ # Proc: get_lib_grid_points
#@ # Author: Synopsys
#@ # Date: 2015/11/01
#@ # -matching_point: 1 fit; 2 bucket
#@ # -input_csv_file: the input csv file contains the querry condition
#@ # -output_csv_file: the input csv file contains the querry condition and query
result
#@ #
#@ # Modified: Synopsys 2015/12/10
#@ # change proc name from "check_qualified_data_point" to "get_lib_lookup_data"
#@ # Modified: Synopsys 2016/01/05
#@ # change proc name from "get_lib_lookup_data" to "get_lib_grid_points"
#@ ##############################################################################
#@ proc get_lib_grid_points {args} {
#@
#@ # get the args
#@ parse_proc_arguments -args $args ra
#@ set input_csv_file $ra(input_csv_file)
#@ set output_csv_file $ra(output_csv_file)
#@
#@ if { [string length [array names ra matching_point]] ==0 } {
#@ set matching_point 1
#@ } else {
#@ set matching_point $ra(matching_point)
#@ }
#@
#@ # get the input csv data, put in 2-D table (list of list)
#@ set in [open $input_csv_file r]
#@ set table [ read_csv $in ]
#@ close $in
#@
#@ # get row/column/header
#@ set row [ llength $table ]
#@ set header [ lindex $table 0 ]
#@ set column [ llength $header ]
#@
#@ # check each header index name is correct
#@ set all_header {db_filename instance library cell pin group related_pin
timing_type timing_sense when_cond related_pg_pin input_slew output_load}
#@ foreach item $header {
#@ if {[lsearch -exact $all_header $item] <0 } {
#@ echo "Error: Can't use '$item' as index."
#@ echo "The allowed index names are 'db_filename instance library cell pin
group related_pin timing_type timing_sense when_cond related_pg_pin input_slew
output_load'."
#@ return;
#@ }
#@ }
#@
#@ # db_id is the colomn for "db_filename"
#@ set db_id [lsearch -exact $header db_filename]
#@ if { $db_id <0 } {
#@ echo "Error: User must specify 'db_filename' index in the input_csv_file."
#@ return
#@ }
#@ set lib_id [lsearch -exact $header library]
#@ if { $lib_id <0 } {
#@ echo "Error: User must specify 'library' index in the input_csv_file."
#@ return
#@ }
#@
#@ # db_map is the mapping from db_filename to "row number" list
#@ array set db_map [sort_array_by_db_filename $table $db_id]
#@ set db_names [array names db_map]
#@ global lc_cells
#@
#@ # set process meter
#@ incr row -1
#@ set count 1
#@ if { $row > 10000 } {
#@ set pct_instance [expr $row/100]
#@ } else {
#@ set pct_instance 100
#@ }
#@
#@ # check each db at a time for saving memory
#@ foreach db $db_names {
#@ redirect -variable msg {echo [read_db $db]}
#@ set idx_list $db_map($db)
#@ array set lc_cells {0 0}
#@ foreach idx $idx_list {
#@
#@ # echo process meter
#@ if { $count % $pct_instance == 0 } {
#@ echo "Processing Cell Instance $count : out of $row"
#@ #echo [eval date]
#@ }
#@
#@ # get the querry data
#@ set line [lindex $table $idx]
#@ array set result [get_nldm_delay_point $line $header $idx $matching_point]
#@
#@ # save the querry result
#@ if { $matching_point ==1 } {
#@ lappend line $result(idx1,$idx)
#@ lappend line $result(idx2,$idx)
#@ lappend line $result(value,$idx)
#@ } else {
#@ lappend line $result(idx1_a,$idx)
#@ lappend line $result(idx2_a,$idx)
#@ lappend line $result(value_a,$idx)
#@ lappend line $result(idx1_b,$idx)
#@ lappend line $result(idx2_b,$idx)
#@ lappend line $result(value_b,$idx)
#@ lappend line $result(idx1_c,$idx)
#@ lappend line $result(idx2_c,$idx)
#@ lappend line $result(value_c,$idx)
#@ lappend line $result(idx1_d,$idx)
#@ lappend line $result(idx2_d,$idx)
#@ lappend line $result(value_d,$idx)
#@ }
#@ set table [lreplace $table $idx $idx $line]
#@
#@ incr count
#@ }
#@ unset lc_cells
#@ set lib_name [lindex [lindex $table $idx] $lib_id]
#@ redirect -variable msg {echo [remove_lib $db:$lib_name]}
#@
#@ }
#@
#@ # write to output csv file
#@ set out [open $output_csv_file w+]
#@
#@ if { $matching_point ==1 } {
#@ lappend header idx1 idx2 value
#@ } else {
#@ lappend header idx1_a idx2_a value_a idx1_b idx2_b value_b idx1_c idx2_c
value_c idx1_d idx2_d value_d
#@ }
#@ set table [lreplace $table 0 0 $header]
#@ set row [ llength $table ]
#@ set column [ llength $header ]
#@
#@ set symbol ,
#@ for { set i 0 } { $i < $row } { incr i } {
#@ puts -nonewline $out [lindex [lindex $table $i] 0]
#@ for { set j 1 } { $j < $column } { incr j } {
#@ puts -nonewline $out $symbol
#@ puts -nonewline $out [lindex [lindex $table $i] $j]
#@ }
#@ puts $out ""
#@ }
#@ close $out
#@
#@ }
#@
#@ define_proc_attributes get_lib_grid_points \
#@ -info " Get the qualified grid points based on query parameter" \
#@ -define_args {
#@ {input_csv_file "The input file name contains query parameter"
input_csv_file string required}
#@ {output_csv_file "The output file name for query result" output_csv_file
string required}
#@ {matching_point "Query method: '1' for 1-closest grid point (default), '4'
for 4 bucket grid points" matching_point one_of_string {optional value_help {values
{1 4}}}}
#@ }
#@
#@ ##############################################################################
#@ # proc: write_records_in_csv
#@ # Output the data extracted from SQL database to $out_file csv file
#@ # file_id: fild id from csv filenam $out_file
#@ # arr: collection from SQL query commands
#@ # num_col: number of columns in $out_file
#@ ##############################################################################
#@ proc write_records_in_csv {file_id arr num_col} {
#@ global out_file
#@ set sz [expr [llength $arr]/$num_col]
#@ for {set i 0} {$i < $sz} {incr i} {
#@ set val ""
#@ for {set j 0} {$j < $num_col} {incr j} {
#@ set val1 [lindex $arr [expr $i*$num_col+$j]]
#@ if {$j == 0} {
#@ set val $val1
#@ } else {
#@ set val [concat $val,$val1]
#@ }
#@ #puts stdout j=$j
#@ }
#@ puts $file_id $val
#@ #puts stdout i=$i
#@ }
#@ #puts stdout "$sz records written to $out_file"
#@ }
#@
#@ define_proc_attributes write_records_in_csv -hidden
#@
#@ # -- End source /cad/synopsys/lc/cur/auxx/lc/.lc_scripts.tcl

#@ source $synopsys_root/auxx/lc/analyze_trend.tcl
#@ # -- Starting source /cad/synopsys/lc/cur/auxx/lc/analyze_trend.tcl

#@ ##############################################################################
#@ # Proc: analyze_trend Author: Synopsys Date: 2015/12/09
#@ # analyze the input float array monotonicity trend
#@ # return a char like "-, /, \, V, ^, N, u, M, W, X"
#@ # float_list: input float list, must be at least 2 members
#@ # -relative_tolerance: relative tolerance, default is 0.01
#@ # -absolute_tolerance: absolute tolerance, default is 0.000001
#@ ##############################################################################
#@ proc analyze_trend { args } {
#@
#@ # get the args
#@ parse_proc_arguments -args $args ra
#@ set float_list $ra(float_list)
#@
#@ if { [string length [array names ra -relative_tolerance]] ==0 } {
#@ set rel_tol 0.01
#@ } else {
#@ set rel_tol $ra(-relative_tolerance)
#@ }
#@ if { [string length [array names ra -absolute_tolerance]] ==0 } {
#@ set abs_tol 0.000001
#@ } else {
#@ set abs_tol $ra(-absolute_tolerance)
#@ }
#@
#@ set count [llength $float_list]
#@ if {$count <= 1} {
#@ echo "Can't analysis: list must have at least 2 members."
#@ }
#@
#@ set trend 0
#@
#@ for { set i 0 } { $i < $count - 1 } { incr i } {
#@ set fa [lindex $float_list $i]
#@ set fb [lindex $float_list $i+1]
#@
#@ set gap [expr abs($fa-$fb)]
#@ set rel_gap [expr ($fa+$fb)*0.5*$rel_tol]
#@
#@ if {$gap <= $abs_tol || $gap <= $rel_gap} {
#@ switch -exact -- $trend {
#@ "0" { set trend "-" }
#@ "-" { set trend "-" }
#@ "\\" { set trend "\\" }
#@ "/" { set trend "/" }
#@ "V" { set trend "V" }
#@ "^" { set trend "^" }
#@ "N" { set trend "N" }
#@ "u" { set trend "u" }
#@ "M" { set trend "M" }
#@ "W" { set trend "W" }
#@ default { set trend "X" }
#@ }
#@ } elseif {$fa > $fb} {
#@ switch -exact -- $trend {
#@ "0" { set trend "\\" }
#@ "-" { set trend "\\" }
#@ "\\" { set trend "\\" }
#@ "/" { set trend "^" }
#@ "V" { set trend "u" }
#@ "^" { set trend "^" }
#@ "u" { set trend "u" }
#@ "N" { set trend "M" }
#@ "M" { set trend "M" }
#@ "W" { set trend "X" }
#@ default { set trend "X" }
#@ }
#@ } elseif {$fa < $fb} {
#@ switch -exact -- $trend {
#@ "0" { set trend "/" }
#@ "-" { set trend "/" }
#@ "\\" { set trend "V" }
#@ "/" { set trend "/" }
#@ "V" { set trend "V" }
#@ "^" { set trend "N" }
#@ "N" { set trend "N" }
#@ "u" { set trend "W" }
#@ "M" { set trend "X" }
#@ "W" { set trend "W" }
#@ default { set trend "X" }
#@ }
#@ }
#@ if {$trend == "X"} {break}
#@ }
#@
#@ return $trend
#@ }
#@
#@ define_proc_attributes analyze_trend \
#@ -info " Analyze the trend of a float list" \
#@ -define_args {
#@ {float_list "The list contains float array for analysis" float_list list
required}
#@ {-relative_tolerance "The relative tolerance for the float equal
comparing, default is 0.01." relative_tolerance float optional}
#@ {-absolute_tolerance "The absolute tolerance for the float equal
comparing, default is 1e-6." absolute_tolerance float optional}
#@ }
#@
#@ # -- End source /cad/synopsys/lc/cur/auxx/lc/analyze_trend.tcl

#@ source $synopsys_root/auxx/lc/get_scale.tcl
#@ # -- Starting source /cad/synopsys/lc/cur/auxx/lc/get_scale.tcl

#@ ##############################################################################
#@ # Proc: get_time_scale Author: Synopsys Date: 2015/12/09
#@ # unified time unit is 1ns
#@ # return the scale value from the unit to the unified unit.
#@ ##############################################################################
#@ proc get_time_scale { unit } {
#@
#@ set val 0
#@
#@ scan $unit %f%s digit class
#@
#@ switch -exact -- $class {
#@ "fs" { set val 1e-6 }
#@ "ps" { set val 1e-3 }
#@ "ns" { set val 1 }
#@ "us" { set val 1e3 }
#@ "ms" { set val 1e6 }
#@ "s" { set val 1e9 }
#@ "ks" { set val 1e12 }
#@ default { echo "Error! The unit '$unit' is not a 'time' unit" }
#@ }
#@
#@ set val [expr $val * $digit]
#@
#@ return $val
#@ }
#@ # This proc is hidden
#@ define_proc_attributes get_time_scale -hidden
#@
#@ ##############################################################################
#@ # Proc: get_voltage_scale Author: Synopsys Date: 2015/12/09
#@ # unified voltage unit is 1v
#@ # return the scale value from the unit to the unified unit.
#@ ##############################################################################
#@ proc get_voltage_scale { unit } {
#@
#@ set val 0
#@
#@ scan $unit %f%s digit class
#@
#@ switch -exact -- $class {
#@ "fv" { set val 1e-15 }
#@ "pv" { set val 1e-12 }
#@ "nv" { set val 1e-9 }
#@ "uv" { set val 1e-6 }
#@ "mv" { set val 1e-3 }
#@ "v" { set val 1 }
#@ "kv" { set val 1e3 }
#@ default { echo "Error! The unit '$unit' is not a 'voltage' unit" }
#@ }
#@
#@ set val [expr $val * $digit]
#@
#@ return $val
#@ }
#@ # This proc is hidden
#@ define_proc_attributes get_voltage_scale -hidden
#@
#@ ##############################################################################
#@ # Proc: get_current_scale Author: Synopsys Date: 2015/12/09
#@ # unified current unit is 1a
#@ # return the scale value from the unit to the unified unit.
#@ ##############################################################################
#@ proc get_current_scale { unit } {
#@
#@ set val 0
#@
#@ scan $unit %f%s digit class
#@
#@ switch -exact -- $class {
#@ "fa" { set val 1e-15 }
#@ "pa" { set val 1e-12 }
#@ "na" { set val 1e-9 }
#@ "ua" { set val 1e-6 }
#@ "ma" { set val 1e-3 }
#@ "a" { set val 1 }
#@ "ka" { set val 1e3 }
#@ default { echo "Error! The unit '$unit' is not a 'current' unit" }
#@ }
#@
#@ set val [expr $val * $digit]
#@
#@ return $val
#@ }
#@ # This proc is hidden
#@ define_proc_attributes get_current_scale -hidden
#@
#@ ##############################################################################
#@ # Proc: get_power_scale Author: Synopsys Date: 2015/12/09
#@ # unified power unit is 1w
#@ # return the scale value from the unit to the unified unit.
#@ ##############################################################################
#@ proc get_power_scale { unit } {
#@
#@ set val 0
#@
#@ scan $unit %f%s digit class
#@
#@ switch -exact -- $class {
#@ "fw" { set val 1e-15 }
#@ "pw" { set val 1e-12 }
#@ "nw" { set val 1e-9 }
#@ "uw" { set val 1e-6 }
#@ "mw" { set val 1e-3 }
#@ "w" { set val 1 }
#@ "kw" { set val 1e3 }
#@ default { echo "Error! The unit '$unit' is not a 'power' unit" }
#@ }
#@
#@ set val [expr $val * $digit]
#@
#@ return $val
#@ }
#@ # This proc is hidden
#@ define_proc_attributes get_power_scale -hidden
#@
#@ ##############################################################################
#@ # Proc: get_resistance_scale Author: Synopsys Date: 2015/12/09
#@ # unified resistance unit is 1ohm
#@ # return the scale value from the unit to the unified unit.
#@ ##############################################################################
#@ proc get_resistance_scale { unit } {
#@
#@ set val 0
#@
#@ scan $unit %f%s digit class
#@
#@ switch -exact -- $class {
#@ "fohm" { set val 1e-15 }
#@ "pohm" { set val 1e-12 }
#@ "nohm" { set val 1e-9 }
#@ "uohm" { set val 1e-6 }
#@ "mohm" { set val 1e-3 }
#@ "ohm" { set val 1 }
#@ "kohm" { set val 1e3 }
#@ default { echo "Error! The unit '$unit' is not a 'resistance' unit" }
#@ }
#@
#@ set val [expr $val * $digit]
#@
#@ return $val
#@ }
#@ # This proc is hidden
#@ define_proc_attributes get_resistance_scale -hidden
#@
#@ ##############################################################################
#@ # Proc: get_capacitance_scale Author: Synopsys Date: 2015/12/09
#@ # unified capacitance unit is 1f
#@ # return the scale value from the unit to the unified unit.
#@ ##############################################################################
#@ proc get_capacitance_scale { unit } {
#@
#@ set val 0
#@
#@ scan $unit %f%s digit class
#@
#@ switch -exact -- $class {
#@ "ff" { set val 1e-15 }
#@ "pf" { set val 1e-12 }
#@ "nf" { set val 1e-9 }
#@ "uf" { set val 1e-6 }
#@ "mf" { set val 1e-3 }
#@ "f" { set val 1 }
#@ "kf" { set val 1e3 }
#@ default { echo "Error! The unit '$unit' is not a 'capacitance' unit" }
#@ }
#@
#@ set val [expr $val * $digit]
#@
#@ return $val
#@ }
#@ # This proc is hidden
#@ define_proc_attributes get_capacitance_scale -hidden
#@
#@ ##############################################################################
#@ # Proc: get_energy_scale Author: Synopsys Date: 2015/12/09
#@ # unified energy unit is 1j
#@ # return the scale value from the unit to the unified unit.
#@ ##############################################################################
#@ proc get_energy_scale { unit } {
#@
#@ set val 0
#@
#@ scan $unit %f%s digit class
#@
#@ switch -exact -- $class {
#@ "fj" { set val 1e-15 }
#@ "pj" { set val 1e-12 }
#@ "nj" { set val 1e-9 }
#@ "uj" { set val 1e-6 }
#@ "mj" { set val 1e-3 }
#@ "j" { set val 1 }
#@ "kj" { set val 1e3 }
#@ default { echo "Error! The unit '$unit' is not a 'energy' unit" }
#@ }
#@
#@ set val [expr $val * $digit]
#@
#@ return $val
#@ }
#@ # This proc is hidden
#@ define_proc_attributes get_energy_scale -hidden
#@
#@ ##############################################################################
#@ # Proc: get_scale Author: Synopsys Date: 2015/12/09
#@ # This command will analyze the unit in the source library, and return
#@ # the scale value from the library unit to the target unit.
#@ # If any error happens, return 0.
#@ # -type: Unit type (time| voltage| current | power| capacitance | resistance|
energy)
#@ # -target_unit: The target unit for sacle
#@ # [float][magnitude][unit]
#@ # -library: The source library.
#@ # For example: get_scale time 10.0ps $lib
#@ # Recommand unit type:
#@ # For time: 1ps| 1ns
#@ # For voltage: 1mv| 1v
#@ # For current: 1ua| 1ma| 1a
#@ # For power: 1pw| 1nw| 1uw| 1mw
#@ # For capacitance: 1ff| 1pf
#@ # For resistance: 1ohm| 1kohm
#@ # For energy: 1fj| 1pj| 1nj| 1uj
#@ ##############################################################################
#@ proc get_scale { args } {
#@
#@ set val 0
#@
#@ # get the args
#@ parse_proc_arguments -args $args ra
#@ set type $ra(type)
#@ set target_unit $ra(target_unit)
#@ set library $ra(library)
#@
#@ # time
#@ if { $type=="time" } {
#@ set t_unit_scale [get_time_scale $target_unit]
#@ set unit [get_lib_attribute $library time_unit]
#@ set s_unit_scale [get_time_scale $unit]
#@ if {$t_unit_scale>0 && $s_unit_scale>0} {
#@ set val [expr $s_unit_scale/$t_unit_scale]
#@ }
#@
#@ # voltage
#@ } elseif { $type=="voltage" } {
#@ set t_unit_scale [get_voltage_scale $target_unit]
#@ set unit [get_lib_attribute $library voltage_unit]
#@ set s_unit_scale [get_voltage_scale $unit]
#@ if {$t_unit_scale>0 && $s_unit_scale>0} {
#@ set val [expr $s_unit_scale/$t_unit_scale]
#@ }
#@
#@ # current
#@ } elseif { $type=="current" } {
#@ set t_unit_scale [get_current_scale $target_unit]
#@ set unit [get_lib_attribute $library current_unit]
#@ set s_unit_scale [get_current_scale $unit]
#@ if {$t_unit_scale>0 && $s_unit_scale>0} {
#@ set val [expr $s_unit_scale/$t_unit_scale]
#@ }
#@
#@ # power
#@ } elseif { $type=="power" } {
#@ set t_unit_scale [get_power_scale $target_unit]
#@ set unit [get_lib_attribute $library leakage_power_unit]
#@ set s_unit_scale [get_power_scale $unit]
#@ if {$t_unit_scale>0 && $s_unit_scale>0} {
#@ set val [expr $s_unit_scale/$t_unit_scale]
#@ }
#@
#@ # capacitance
#@ } elseif { $type=="capacitance" } {
#@ set t_unit_scale [get_capacitance_scale $target_unit]
#@ # unit is string like "xxxpf" or "xxxff" returned by get_lib_attribute
#@ set unit [get_lib_attribute $library capacitive_load_unit]
#@ set s_unit_scale [get_capacitance_scale $unit]
#@ if {$t_unit_scale>0 && $s_unit_scale>0} {
#@ set val [expr $s_unit_scale/$t_unit_scale]
#@ }
#@
#@ # resistance
#@ } elseif { $type=="resistance" } {
#@ set t_unit_scale [get_resistance_scale $target_unit]
#@ set unit [get_lib_attribute $library pulling_resistance_unit]
#@ set s_unit_scale [get_resistance_scale $unit]
#@ if {$t_unit_scale>0 && $s_unit_scale>0} {
#@ set val [expr $s_unit_scale/$t_unit_scale]
#@ }
#@
#@ # energy
#@ } elseif { $type=="energy" } {
#@ set t_unit_scale [get_energy_scale $target_unit]
#@ # c_unit is string like "xxxpf" or "xxxff" returned by get_lib_attribute
#@ set c_unit [get_lib_attribute $library capacitive_load_unit]
#@ set c_unit [get_capacitance_scale $c_unit]
#@ set v_unit [get_lib_attribute $library voltage_unit]
#@ set v_unit_scale [get_voltage_scale $v_unit]
#@ set s_unit_scale [expr $c_unit * $v_unit_scale * $v_unit_scale]
#@ if {$t_unit_scale>0 && $s_unit_scale>0} {
#@ set val [expr $s_unit_scale/$t_unit_scale]
#@ }
#@ }
#@
#@ return $val
#@
#@ }
#@
#@ define_proc_attributes get_scale \
#@ -info " Get the scaling value from source library to target unit." \
#@ -define_args {
#@ {type "Unit type" type one_of_string {required value_help {values {time
voltage current power capacitance resistance energy}}}}
#@ {target_unit "The target unit for scaling" target_unit string required }
#@ {library "The source library object" library list required}
#@ }
#@
#@ # -- End source /cad/synopsys/lc/cur/auxx/lc/get_scale.tcl

#@ source $synopsys_root/auxx/lc/plot_table.tcl
#@ # -- Starting source /cad/synopsys/lc/cur/auxx/lc/plot_table.tcl

#@ ##############################################################################
#@ # 'global' parameters Author: Synopsys Date: 2016/9/18
#@ ##############################################################################
#@
#@ # temp path to accommodate plot data and script
#@ set lc_plot_table_base_dir "/tmp/lc_plot_table_"
#@ set lc_plot_table_list_dirs "" ;# a list for tmp dirs
#@
#@ # to accommodate PIDs & COMMANDs of xterm being executed
#@ set lc_plot_table_pids ""
#@ set lc_plot_table_cmds ""
#@
#@ ##############################################################################
#@ # Proc: createUniqueDir Author: Synopsys Date: 2016/9/18
#@ # create one unique folder (without tailing backslash) under temp path
#@ # Return:
#@ # path of the created folder
#@ ##############################################################################
#@ proc createUniqueDir {} {
#@ set sDir [pid]
#@ append sDir "_" [clock microseconds]
#@ file mkdir $::lc_plot_table_base_dir$sDir
#@ lappend ::lc_plot_table_list_dirs $sDir
#@ return $::lc_plot_table_base_dir$sDir
#@ }
#@ # This proc is hidden
#@ define_proc_attributes createUniqueDir -hidden
#@
#@ ##############################################################################
#@ # Proc: clearSpot Author: Synopsys Date: 2016/9/18
#@ # delete the previous intermediate gnuplot data and script
#@ ##############################################################################
#@ proc clearSpot {} {
#@ # close the previous opened terminals
#@ set i 0
#@ foreach sPid $::lc_plot_table_pids {
#@ # check if pid existed
#@ if { [catch {exec kill -0 $sPid}]==0 } {
#@ set sCmd [lindex $::lc_plot_table_cmds $i]
#@ # check if the COMMAND of the pid is exactly the "xterm ..." which was
forked by 'me' (plot_table)
#@ if { [catch {exec ps u | awk {{for(ii=11;ii<=NF;ii++)printf $ii" ";printf
"\n"}} | grep -e ^$sCmd}]==0 } {
#@ # kill the process
#@ catch {exec kill $sPid} msg
#@ }
#@ }
#@
#@ incr i
#@ }
#@ set ::lc_plot_table_pids ""
#@ set ::lc_plot_table_cmds ""
#@
#@ # delete the previous intermediate gnuplot data and script
#@ foreach sDir $::lc_plot_table_list_dirs {
#@ file delete -force $::lc_plot_table_base_dir$sDir
#@ }
#@ set ::lc_plot_table_list_dirs ""
#@ }
#@ # This proc is hidden
#@ define_proc_attributes clearSpot -hidden
#@
#@ ##############################################################################
#@ # Proc: genPlotData Author: Synopsys Date: 2016/10/28
#@ # generate plot data
#@ # Arguments:
#@ # lut lookup_table object
#@ # sDat path of plot data file
#@ # vSlice slice info. e.g. "" (no slice specified); "output_voltage 0.0920645"
#@ # vTol tolerance curves or surfaces
#@ # Return:
#@ # 1 proc succeeded, 0 otherwise
#@ ##############################################################################
#@ proc genPlotData { lut sDat vSlice vTol } {
#@ if [catch {open $sDat w} pDat] {
#@ puts "error, failed to open $sDat for write:$pDat"
#@ return 0
#@ }
#@
#@ set nDim [lookup_table dimension $lut]
#@ set vIdx [lookup_table index $lut]
#@ set k 0
#@
#@ if { [llength $vSlice] == 0 } {
#@ set vVal [lookup_table slice -all $lut]
#@ set vIdx0 [lindex $vIdx 0]
#@ if { $nDim==2 } {
#@ set vIdx1 [lindex $vIdx 1]
#@ foreach i $vIdx0 {
#@ foreach j $vIdx1 {
#@ set v [lindex $vVal $k]
#@ puts -nonewline $pDat "$i $j $v"
#@ foreach sTol $vTol {
#@ regsub -all "V" $sTol $v sTol
#@ puts -nonewline $pDat " [expr $sTol]"
#@ }
#@ puts $pDat ""
#@ incr k
#@ }
#@ puts $pDat ""
#@ }
#@ } else {
#@ foreach i $vIdx0 {
#@ set v [lindex $vVal $k]
#@ puts -nonewline $pDat "$i $v"
#@ foreach sTol $vTol {
#@ regsub -all "V" $sTol $v sTol
#@ puts -nonewline $pDat " [expr $sTol]"
#@ }
#@ puts $pDat ""
#@ incr k
#@ }
#@ }
#@ } else {
#@ set vVal [lookup_table slice $lut -index $vSlice]
#@ if { [string equal [lindex $vSlice 0] [lindex [lookup_table variables $lut]
0]] } {
#@ set vIdxAnother [lindex $vIdx 1]
#@ } else {
#@ set vIdxAnother [lindex $vIdx 0]
#@ }
#@ foreach i $vIdxAnother {
#@ set v [lindex $vVal $k]
#@ puts -nonewline $pDat "$i $v"
#@ foreach sTol $vTol {
#@ regsub -all "V" $sTol $v sTol
#@ puts -nonewline $pDat " [expr $sTol]"
#@ }
#@ puts $pDat ""
#@ incr k
#@ }
#@ }
#@
#@ close $pDat
#@ return 1
#@ }
#@ # This proc is hidden
#@ define_proc_attributes genPlotData -hidden
#@
#@ ##############################################################################
#@ # Proc: genPlotDataForCcs Author: Synopsys Date: 2016/10/21
#@ # generate plot data file for CCS object
#@ # Arguments:
#@ # lut lookup_table CCS object
#@ # sDat path of plot data file
#@ # vVarIdx grid points of the object e.g. {var1 index1 var2 index2}
#@ # fInitV1 Vss(Vdd) as initial V1 for derived voltage
#@ # vTol tolerance curves
#@ # sOvExpr(up-level) customized equation to derive voltage, it will be set to
#@ # empty if invalid expression. This makes
#@ # genPlotDataForCcsPlotAll() comfortable
#@ # Return:
#@ # 1 proc succeeded, 0 otherwise
#@ ##############################################################################
#@ proc genPlotDataForCcs { lut sDat vVarIdx fInitV1 vTol } {
#@ upvar sOvExpr sOvExprRef
#@
#@ if [catch {open $sDat w} pDat] {
#@ puts "error, failed to open $sDat for write:$pDat"
#@ return 0
#@ }
#@
#@ set fLoad -1.0
#@ if { [string equal [lindex $vVarIdx 0] "total_output_net_capacitance"]} {
#@ set fLoad [lindex $vVarIdx 1]
#@ } elseif { [string equal [lindex $vVarIdx 2] "total_output_net_capacitance"]}
{
#@ set fLoad [lindex $vVarIdx 3]
#@ }
#@
#@ set fVpre $fInitV1
#@ set fI 0.0
#@ set fIpre 0.0
#@ set fT 0.0
#@ set fTpre 0.0
#@ set fV 0.0
#@
#@ set fTRef [lookup_table slice $lut -data ref -index $vVarIdx]
#@ if { [string length $fTRef]==0 } {
#@ set fTRef 0.0
#@ }
#@ if { [string equal $fTRef "0.0"] } {
#@ set fLoad -1.0
#@ }
#@ set vT [lookup_table slice $lut -data time -index $vVarIdx]
#@ set vI [lookup_table slice $lut -data values -index $vVarIdx]
#@ set nT [llength $vT]
#@ set nI [llength $vI]
#@ if { $nT!=$nI } {
#@ puts "error, size of time ($nT) != size of values ($nI)"
#@ close $pDat
#@ return 0
#@ }
#@
#@ for { set i 0 } { $i<$nT } { incr i } {
#@ set fT [expr [lindex $vT $i]-$fTRef]
#@ set fI [lindex $vI $i]
#@ if { $fLoad > 0 } {
#@ if { [string length $sOvExprRef]!=0 } {
#@ set sOvExprTmp $sOvExprRef
#@ regsub -all "V1" $sOvExprTmp $fVpre sOvExprTmp
#@ regsub -all "I2" $sOvExprTmp $fI sOvExprTmp
#@ regsub -all "I1" $sOvExprTmp $fIpre sOvExprTmp
#@ regsub -all "T2" $sOvExprTmp $fT sOvExprTmp
#@ regsub -all "T1" $sOvExprTmp $fTpre sOvExprTmp
#@ regsub -all "C" $sOvExprTmp $fLoad sOvExprTmp
#@ if { [string length $sOvExprTmp]==0 } {
#@ set fExpr ""
#@ } else {
#@ set fExpr [expr $sOvExprTmp]
#@ }
#@ if { [string length $fExpr]==0 } {
#@ echo "warning, failed to get result of the process($sOvExprRef) from
predefined variables: V1($fVpre), I2($fI), I1($fIpre), T2($fT), T1($fTpre),
C($fLoad).\nTurn to use built-in default process(V1+0.5/C*(I2+I1)*(T2-T1))."
#@ set sOvExprRef "" ;# make genPlotDataForCcsPlotAll() comfortable
#@ set fV [expr $fVpre+0.5*($fI+$fIpre)*($fT-$fTpre)/$fLoad]
#@ } else {
#@ set fV $fExpr
#@ }
#@ } else {
#@ set fV [expr $fVpre+0.5*($fI+$fIpre)*($fT-$fTpre)/$fLoad]
#@ }
#@ set fVpre $fV
#@ set fIpre $fI
#@ set fTpre $fT
#@ } else {
#@ # "total_output_net_capacitance" is not there?
#@ # or no calculated voltage at all
#@ set fV 0.0
#@ }
#@ puts -nonewline $pDat "$fT $fI $fV"
#@ foreach sTol $vTol {
#@ regsub -all "V" $sTol $fI sTol
#@ puts -nonewline $pDat " [expr $sTol]"
#@ }
#@ puts $pDat ""
#@ }
#@
#@ close $pDat
#@ return 1
#@ }
#@ # This proc is hidden
#@ define_proc_attributes genPlotDataForCcs -hidden
#@
#@ ##############################################################################
#@ # Proc: genPlotDataForCcsPlotAll Author: Synopsys Date: 2016/10/21
#@ # generate plot data files for all grid points of the CCS object
#@ # Arguments:
#@ # lut lookup_table CCS object
#@ # sFnPrefix folder (with tailing backslash) to accommodate data file
#@ # sOvExpr customized equation to derive voltage
#@ # fInitV1 Vss(Vdd) as initial V1 for derived voltage
#@ # vTol tolerance curves
#@ # vDat(up-level) paths of plot data files
#@ # Return:
#@ # 1 proc succeeded, 0 otherwise
#@ ##############################################################################
#@ proc genPlotDataForCcsPlotAll { lut sFnPrefix sOvExpr fInitV1 vTol } {
#@ # set an alias of up-level parameter, which will point to the same memory of
#@ # the parameter in up-level proc. (I think this is most like using reference
#@ # as function parameter in C++)
#@ upvar vDat vDatRef
#@ set vDatRef ""
#@
#@ set vVar [lookup_table variables $lut] ;# e.g. "input_net_transition
total_output_net_capacitance"
#@ set vIdx [lookup_table index $lut] ;# e.g. "{0.00114139996003
0.00220229988918 ...} {......}"
#@
#@ # 1d and 2d lookup tables supported by now, sanity check already done in main
#@ # procedure
#@ set nDim [llength $vVar]
#@ ## if { $nDim < 1 || $nDim > 2 } {
#@ ## return -code error "...\n"
#@ ## }
#@
#@ set sVar0 [lindex $vVar 0]
#@ set nIdx0Size [llength [lindex $vIdx 0]]
#@
#@ if { $nDim > 1 } {
#@ set sVar1 [lindex $vVar 1]
#@ set nIdx1Size [llength [lindex $vIdx 1]]
#@ }
#@
#@ for { set i 0 } { $i<$nIdx0Size } { incr i } {
#@ set fIdx0 [lindex [lindex $vIdx 0] $i]
#@ if { $nDim==1 } {
#@ set sDat $sFnPrefix
#@ append sDat "lut" [expr $i+1] ".dat"
#@ set vVarIdx [ list $sVar0 $fIdx0 ]
#@ set ret [genPlotDataForCcs $lut $sDat $vVarIdx $fInitV1 $vTol]
#@ if { $ret==0 } {
#@ return 0
#@ }
#@ lappend vDatRef $sDat
#@ } elseif { $nDim==2 } {
#@ for { set j 0 } { $j<$nIdx1Size } { incr j } {
#@ set fIdx1 [lindex [lindex $vIdx 1] $j]
#@ set sDat $sFnPrefix
#@ append sDat "lut" [expr $i*$nIdx1Size+$j+1] ".dat"
#@ set vVarIdx [ list $sVar0 $fIdx0 $sVar1 $fIdx1 ]
#@ set ret [genPlotDataForCcs $lut $sDat $vVarIdx $fInitV1 $vTol]
#@ if { $ret==0 } {
#@ return 0
#@ }
#@ lappend vDatRef $sDat
#@ }
#@ } ;# else 3d ...
#@ }
#@
#@ return 1
#@ }
#@ # This proc is hidden
#@ define_proc_attributes genPlotDataForCcsPlotAll -hidden
#@
#@ ##############################################################################
#@ # Proc: getInfoString Author: Synopsys Date: 2016/10/27
#@ # get information of lookup_table object
#@ # Arguments:
#@ # lut lookup_table object
#@ # Return:
#@ # information string of the object
#@ ##############################################################################
#@ proc getInfoString { lut } {
#@ set sInfo ""
#@
#@ set sTmpl [lookup_table template_name $lut]
#@ if { [string length $sTmpl]!=0 } {
#@ append sInfo " template(" $sTmpl ")"
#@ }
#@
#@ set nDim [lookup_table dimension $lut]
#@ set vSize [lookup_table sizes $lut]
#@ if { $nDim>0 } {
#@ append sInfo " size(" [lindex $vSize 0]
#@ }
#@ if { $nDim>1 } {
#@ append sInfo "x" [lindex $vSize 1]
#@ }
#@ if { $nDim>2 } {
#@ append sInfo "x" [lindex $vSize 2]
#@ }
#@ if { $nDim>0 } {
#@ append sInfo ")"
#@ }
#@
#@ return $sInfo
#@ }
#@ # This proc is hidden
#@ define_proc_attributes getInfoString -hidden
#@
#@ ##############################################################################
#@ # Proc: printFile Author: Synopsys Date: 2016/11/25
#@ # print out file content
#@ # Arguments:
#@ # sDat file path
#@ # Return:
#@ # 1 proc succeeded, 0 otherwise
#@ ##############################################################################
#@ proc printFile { sDat } {
#@ set sDelimit
"################################################################################"
#@
#@ puts ""
#@ if [catch {open $sDat r} pDat] {
#@ puts "error, failed to open $sDat for read:$pDat"
#@ return 0
#@ }
#@ puts -nonewline "# "
#@ puts [file tail $sDat]
#@ puts $sDelimit
#@ puts [read $pDat]
#@ puts $sDelimit
#@ close $pDat
#@
#@ return 1
#@ }
#@ # This proc is hidden
#@ define_proc_attributes printFile -hidden
#@
#@ ##############################################################################
#@ # Proc: plot_table Author: Synopsys Date: 2016/9/18
#@ # plot lookup table(s) in lc_shell, using 'gnuplot'.
#@ # Arguments:
#@ # see define_proc_attributes section
#@ # Return:
#@ # 1 proc succeeded, 0 or error code otherwise
#@ # Examples:
#@ # moved to man page: plot_table.3
#@ ##############################################################################
#@ proc plot_table {args} {
#@ # supported after set lc_enable_plot_table true
#@ if { [info exists ::lc_enable_plot_table]!=1 || [string equal -nocase
$::lc_enable_plot_table "true"]!=1 } {
#@ return -code error "UIL-100 (error) The command is not enabled. You need to
set lc_enable_plot_table beforehand."
#@ ## return "" ;# well, dummy returned here if not set the enable_variable...
#@ }
#@ # supported in lc_advanced_tcl_mode
#@ if { [info exists ::lc_advanced_tcl_mode]!=1 || [string equal -nocase
$::lc_advanced_tcl_mode "true"]!=1 } {
#@ return -code error "UIL-100 (error) The command is not enabled, it's support
in advanced tcl mode only."
#@ }
#@ set i 0
#@
#@ # get the args
#@ parse_proc_arguments -args $args ra
#@
#@ # -clear, which is an individual arg
#@ if { [string length [array names ra -clear]] != 0 } {
#@ clearSpot
#@ return "1"
#@ }
#@
#@ # create one more unique dir for data/script
#@ set sFnPrefix [createUniqueDir]
#@ append sFnPrefix "/"
#@
#@ # luts: list of lookup tables, which is the main arg
#@ set vLut ""
#@ if { [string length [array names ra luts]] != 0 } {
#@ set vLut $ra(luts)
#@ }
#@ set nObjSize [llength $vLut]
#@ if {$nObjSize < 1} {
#@ return -code error "No lookup table is specified.\n"
#@ }
#@
#@ #
#@ # sanity check and preparation
#@ #
#@ set bIsCCS 0
#@ set bIsCCSPlotAll 0
#@ set vSlice ""
#@ set nDim 0
#@ set sDat ""
#@ set vDat "" ;# filenames of data
#@ foreach lut $vLut {
#@ set vSize [lookup_table sizes $lut] ;# e.g. "8" (1d), "8 7" (2d)
#@ if {[llength $vSize] < 1} {
#@ return -code error "Specified object ($lut) is NOT a lookup table.\n"
#@ }
#@
#@ set nDimTmp [lookup_table dimension $lut]
#@ if { $nDimTmp < 1 || $nDimTmp > 2 } {
#@ # 1d and 2d lookup tables supported by now
#@ return -code error "Not supported for $nDimTmp dimension(s).\n"
#@ }
#@ if {[llength [lookup_table slice $lut -all]] < 1} {
#@ # this is a CCS object
#@ set nDim $nDimTmp
#@ if {$nObjSize > 1} {
#@ return -code error "Multiple lookup tables are not supported for CCS
object\n"
#@ }
#@ set bIsCCS 1
#@ # -index, used to specify one slice of CCS object
#@ set vVarIdx ""
#@ if { [string length [array names ra -index]] != 0 } {
#@ set vVarIdx $ra(-index)
#@ }
#@ set nVarIdxSize [llength $vVarIdx]
#@ if { $nVarIdxSize==0 } {
#@ set bIsCCSPlotAll 1
#@ } elseif { $nVarIdxSize==1 } {
#@ # e.g. "0:0" --> "input_net_transition 0.00726140011102
total_output_net_capacitance 0.000390200002585"
#@ # e.g. "0" --> "input_net_transition 0.00726140011102"
#@ set vId [split $vVarIdx ":"]
#@ if {[llength $vId] != $nDim} {
#@ return -code error "Specified index ($vVarIdx) is unmatched with the
object of $nDim dimension(s).\n"
#@ }
#@ set vVar [lookup_table variables $lut]
#@ set vIdx [lookup_table index $lut]
#@ if { $nDim==1 } {
#@ set vVarIdx [ list [lindex $vVar 0] \
#@ [lindex [lindex $vIdx 0] [expr [lindex $vId 0]]] ]
#@ } elseif { $nDim==2 } {
#@ set vVarIdx [ list [lindex $vVar 0] \
#@ [lindex [lindex $vIdx 0] [expr [lindex $vId 0]]] \
#@ [lindex $vVar 1] \
#@ [lindex [lindex $vIdx 1] [expr [lindex $vId 1]]] ]
#@ } ;# else 3d ...
#@ } ;# else more than 1 elements in $vVarIdx, leave check to lookup_table.
e.g. "input_net_transition 0.00726140011102"
#@ } else {
#@ # this is NOT a CCS object
#@ if { $i > 0 } {
#@ if { $nDimTmp != $nDim } {
#@ return -code error "Different dimension(s) of multiple lookup tables
can't be plotted at once.\n"
#@ }
#@ if { [llength $vSlice] != 0 } {
#@ # we assume user uses -slice for multi objects with exactly same index
#@ if { [llength [lookup_table slice $lut -index $vSlice]] == 0 } {
#@ return -code error "Invalid -slice($vSlice), abort.\n"
#@ }
#@ }
#@ } else { ;# $i==0
#@ set nDim $nDimTmp
#@ # -slice, used to specify one slice for (non-CCS) 2D lookup tables
#@ if { [string length [array names ra -slice]] != 0 } {
#@ set vSlice $ra(-slice)
#@ if { $nDim!=2 } {
#@ return -code error "-slice($vSlice) is not supported for ($nDim)
dimension(s) lookup table, abort.\n"
#@ }
#@ set nSliceSize [llength $vSlice]
#@ if { $nSliceSize==1 } {
#@ # e.g. "0:0" --> "input_voltage 0.0" (for dc_current)
#@ # e.g. "1:2" --> "output_voltage 0.0920645"
#@ set vId [split $vSlice ":"]
#@ if {[llength $vId] != 2} {
#@ return -code error "Exactly 2 parts(variable_id:index_id) is
needed for -slice($vSlice), abort.\n"
#@ }
#@ set nVarId [expr [lindex $vId 0]]
#@ set nIdxId [expr [lindex $vId 1]]
#@ if { $nVarId<0 || $nVarId>1 } {
#@ return -code error "Only 0 or 1 can be specified for the
variable_id(the part before ':') in -slice($vSlice), abort.\n"
#@ }
#@ set vVar [lookup_table variables $lut] ;# e.g. input_voltage
output_voltage
#@ set vIdxN [lindex [lookup_table index $lut] $nVarId] ;# e.g. {0.0
0.0434696 ... 0.95}
#@ if { $nIdxId<0 || $nIdxId>=[llength $vIdxN] } {
#@ return -code error "Invalid index_id(the part after ':') in -
slice($vSlice), abort.\n"
#@ }
#@ set vSlice [ list [lindex $vVar $nVarId] [lindex $vIdxN $nIdxId] ]
#@ } elseif { $nSliceSize==2 } {
#@ if { [llength [lookup_table slice $lut -index $vSlice]] == 0 } {
#@ return -code error "Invalid -slice($vSlice), abort.\n"
#@ }
#@ } else {
#@ return -code error "Invalid -slice($vSlice), abort.\n"
#@ }
#@ }
#@ }
#@ }
#@ if { $bIsCCSPlotAll==0 } {
#@ # prepare filename(s) for data
#@ # this job will be done in genPlotDataForCcsPlotAll for 'ccs-plot-all'
#@ set sDat $sFnPrefix
#@ append sDat "lut" [expr $i+1] ".dat"
#@ lappend vDat $sDat
#@ }
#@ incr i
#@ }
#@ # -dump sanity check
#@ set bDumpDat 0
#@ set bDumpDem 0
#@ if { [string length [array names ra -dump]] != 0 } {
#@ set sDumpOption $ra(-dump)
#@ if { [string equal $sDumpOption "data"] } {
#@ set bDumpDat 1
#@ } elseif { [string equal $sDumpOption "script"] } {
#@ set bDumpDem 1
#@ } elseif { [string equal $sDumpOption "all"] } {
#@ set bDumpDat 1
#@ set bDumpDem 1
#@ } else {
#@ return -code error "-dump $sDumpOption does not match [ data | script |
all ].\n"
#@ }
#@ }
#@
#@ # -derive_output_voltage, enable voltage curve for CCS object
#@ set bOmitExpr 1
#@ if { [string length [array names ra -derive_output_voltage]] != 0 } {
#@ set bOmitExpr 0
#@ }
#@ if { $bOmitExpr==0 && $bIsCCS==0 } {
#@ echo "warning, -derive_output_voltage option won't work for non-CCS objects,
ommitted.\n"
#@ set bOmitExpr 1
#@ }
#@
#@ # -derive_output_voltage_equation
#@ set sOvExpr "" ;# customized expression, empty if N/A or invalid
#@ if { $bOmitExpr==0 && [string length [array names ra -
derive_output_voltage_equation]] != 0 } {
#@ set sOvExpr $ra(-derive_output_voltage_equation)
#@ }
#@
#@ # -legend, to customize legends
#@ set itLegend ""
#@ if { [string length [array names ra -legend]] != 0 } {
#@ set itLegend $ra(-legend) ;# it* is actually list_*
#@ }
#@ set vLegend "" ;# v* is also list_*
#@ set sLegend ""
#@
#@ # -initv1, Vss(Vdd) as initial V1 for derived voltage
#@ set fInitV1 0.0
#@ if { [string length [array names ra -initv1]] != 0 } {
#@ set fInitV1 $ra(-initv1)
#@ }
#@
#@ # -tol, to add tolerance curves or surfaces, currently +-*/ supported
#@ set vTol ""
#@ if { [string length [array names ra -tol]] != 0 } {
#@ set itEq $ra(-tol)
#@ set i 0
#@ foreach sEq $itEq {
#@ set sEqTmp $sEq
#@ regsub -all "V" $sEqTmp -1.67345 sEqTmp
#@ if { [string length $sEqTmp]==0 } {
#@ set fExpr ""
#@ } else {
#@ set fExpr [expr $sEqTmp]
#@ }
#@ if { [string length $fExpr]!=0 } {
#@ lappend vTol $sEq
#@ } else {
#@ echo "warning, no.[expr $i+1] -tol equation($sEq) is invalid and
omitted. Currently, arithmetic operations(+-*/) are supported. The variable name V
is used as the default independent variables.\n"
#@ }
#@ incr i
#@ }
#@ }
#@
#@ #
#@ # generate data, prepare legends for plotting
#@ #
#@ set i 0
#@ foreach lut $vLut {
#@ if { $bIsCCSPlotAll==1 } {
#@ set ret [genPlotDataForCcsPlotAll $lut $sFnPrefix $sOvExpr $fInitV1 $vTol]
#@ } elseif { $bIsCCS==1 } {
#@ set ret [genPlotDataForCcs $lut [lindex $vDat 0] $vVarIdx $fInitV1 $vTol]
#@ } else {
#@ set ret [genPlotData $lut [lindex $vDat $i] $vSlice $vTol]
#@ }
#@ if { $ret==0 } {
#@ return 0
#@ }
#@
#@ # initialize legend for non-CCS object(s)
#@ if { $bIsCCS==0 } {
#@ if { [string length [lindex $itLegend $i]]!=0 } {
#@ set sLegend [lindex $itLegend $i]
#@ # speical characters needs to be converted
#@ regsub -all {\\} $sLegend {\\\\} sLegend
#@ regsub -all "\"" $sLegend "\\\"" sLegend
#@ } else {
#@ set sLegend "lut"
#@ append sLegend [expr $i+1]
#@ }
#@ append sLegend [getInfoString $lut]
#@ if { [llength $vSlice]!=0 } {
#@ append sLegend " slice"
#@ }
#@ lappend vLegend $sLegend
#@ }
#@ incr i
#@ }
#@ # initialize legends for CCS object
#@ if { $bIsCCS==1 } {
#@ for { set i 0 } { $i<2 } { incr i } {
#@ if { [string length [lindex $itLegend $i]]!=0 } {
#@ set sLegend [lindex $itLegend $i]
#@ # speical characters needs to be converted
#@ regsub -all {\\} $sLegend {\\\\} sLegend
#@ regsub -all "\"" $sLegend "\\\"" sLegend
#@ } else {
#@ if { $i==0 } {
#@ set sLegend "y= current"
#@ } elseif { [string length $sOvExpr]==0 } {
#@ set sLegend "y2= V1+0.5/C*(I2+I1)*(T2-T1)"
#@ } else {
#@ set sLegend "y2= $sOvExpr"
#@ }
#@ }
#@ lappend vLegend $sLegend
#@ }
#@ }
#@
#@ # -aux, to add auxiliary curves or surfaces, currently +-*/ supported
#@ set sAuxAppend ""
#@ if { [string length [array names ra -aux]] != 0 } {
#@ set itEq $ra(-aux)
#@ set i 0
#@ foreach sEq $itEq {
#@ set sEqTmp $sEq
#@ regsub -all "X" $sEqTmp -1.67345 sEqTmp
#@ if { $nDim==2 && [llength $vSlice]==0 } {
#@ regsub -all "Y" $sEqTmp 864.195 sEqTmp
#@ }
#@ if { [string length $sEqTmp]==0 } {
#@ set fExpr ""
#@ } else {
#@ set fExpr [expr $sEqTmp]
#@ }
#@ if { [string length $fExpr]!=0 } {
#@ append sAuxAppend "," $sEq
#@ if { $bIsCCS==1 } {
#@ append sAuxAppend " title \"y= $sEq\" axes x1y1" ;# plot auxiliaries
to 1st Y-Axis for CCS
#@ }
#@ } else {
#@ echo "warning, no.[expr $i+1] -aux equation($sEq) is invalid and
omitted. Currently, arithmetic operations(+-*/) are supported. The variable names X
and Y are used as the default independent variables. Additionally, Y is only
supported for 2 dimension tables.\n"
#@ }
#@ incr i
#@ }
#@ }
#@ # -aux2, to add auxiliary curves to 2nd Y-Axis for CCS only, currently +-*/
supported
#@ if { [string length [array names ra -aux2]] != 0 } {
#@ set itEq $ra(-aux2)
#@ set i 0
#@ foreach sEq $itEq {
#@ set sEqTmp $sEq
#@ regsub -all "X" $sEqTmp -1.67345 sEqTmp
#@ if { $nDim==2 && [llength $vSlice]==0 } {
#@ regsub -all "Y" $sEqTmp 864.195 sEqTmp
#@ }
#@ if { [string length $sEqTmp]==0 } {
#@ set fExpr ""
#@ } else {
#@ set fExpr [expr $sEqTmp]
#@ }
#@ if { [string length $fExpr]!=0 } {
#@ if { $bIsCCS==1 } {
#@ append sAuxAppend "," $sEq
#@ append sAuxAppend " title \"y2= $sEq\" axes x1y2" ;# plot auxiliaries
to 2nd Y-Axis for CCS only
#@ }
#@ } else {
#@ echo "warning, no.[expr $i+1] -aux2 equation($sEq) is invalid and
omitted. Currently, arithmetic operations(+-*/) are supported. The variable names X
and Y are used as the default independent variables. Additionally, Y is only
supported for 2 dimension tables.\n"
#@ }
#@ incr i
#@ }
#@ }
#@
#@ # -title, -xlabel, -ylabel, -y2label, several simple 'string' arguments
#@ set sTitle ""
#@ if { [string length [array names ra -title]] != 0 } {
#@ set sTitle $ra(-title)
#@ }
#@ set sXlabel ""
#@ if { [string length [array names ra -xlabel]] != 0 } {
#@ set sXlabel $ra(-xlabel)
#@ }
#@ set sYlabel ""
#@ if { [string length [array names ra -ylabel]] != 0 } {
#@ set sYlabel $ra(-ylabel)
#@ }
#@ set sY2label ""
#@ if { [string length [array names ra -y2label]] != 0 } {
#@ set sY2label $ra(-y2label)
#@ }
#@
#@ #
#@ # generate main script 'lut.dem'
#@ #
#@ set sDem $sFnPrefix
#@ append sDem "lut.dem"
#@ if [catch {open $sDem w} pDem] {
#@ puts "error, failed to open $sDem for write:$pDem"
#@ return 0
#@ }
#@ puts $pDem "reset" ;# reset graph-related options to default
#@ if { [string length $sAuxAppend]!=0 } {
#@ if { $bIsCCS==0 && $nDim==2 && [llength $vSlice]==0 } {
#@ puts $pDem "set dummy X,Y"
#@ } else {
#@ puts $pDem "set dummy X"
#@ }
#@ }
#@ if { $bIsCCSPlotAll==1 } {
#@ if { [string length $sTitle]!=0 } {
#@ append sTitle "\\n"
#@ }
#@ append sTitle [lindex $vLegend 0]
#@ if { $bOmitExpr==0 } {
#@ append sTitle " vs. " [lindex $vLegend 1]
#@ }
#@ append sTitle [getInfoString $lut]
#@ puts -nonewline $pDem "set multiplot title \"$sTitle\" layout [lindex $vSize
0],"
#@ if { $nDim==1 } {
#@ puts $pDem "1"
#@ } elseif { $nDim==2 } {
#@ puts $pDem "[lindex $vSize 1]"
#@ } ;# else 3d ... (e.g. 5*8*7, maybe 5 windows popped-up?)
#@ puts $pDem "unset border\nunset tics\nunset key"
#@ foreach sDat $vDat {
#@ puts -nonewline $pDem "plot \'$sDat\' u 1:2 with lines"
#@ if { $bOmitExpr==0 } {
#@ puts -nonewline $pDem ", \'$sDat\' u 1:3 with lines axes x1y2"
#@ }
#@ set nTolId 4 ;# tolerance data begin at 4th column for CCS object
#@ foreach sTol $vTol {
#@ puts -nonewline $pDem ", \'$sDat\' u 1:$nTolId with lines"
#@ incr nTolId
#@ }
#@ puts $pDem " $sAuxAppend"
#@ }
#@ puts $pDem "unset multiplot"
#@ } elseif { $bIsCCS==1 } {
#@ puts $pDem "set ytics nomirror"
#@ puts $pDem "set y2tics"
#@ if { [string length $sTitle]!=0 } {
#@ append sTitle "\\n"
#@ }
#@ foreach vectorVarIndex_i $vVarIdx {
#@ append sTitle $vectorVarIndex_i " "
#@ }
#@ puts $pDem "set title \"$sTitle\""
#@ if { [string length $sXlabel]==0 } {
#@ set sXlabel "time_adjust(T=time-reference_time)"
#@ }
#@ puts $pDem "set xlabel \'$sXlabel\'"
#@ if { [string length $sYlabel]==0 } {
#@ set sYlabel "current(I=vVal)"
#@ }
#@ puts $pDem "set ylabel \'$sYlabel\'"
#@ if { $bOmitExpr==0 } {
#@ if { [string length $sY2label]==0 } {
#@ set sY2label "Vout"
#@ }
#@ puts $pDem "set y2label \'$sY2label\'"
#@ }
#@ puts -nonewline $pDem "plot \'[lindex $vDat 0]\' using 1:2 with linespoints
title \"[lindex $vLegend 0]\""
#@ if { $bOmitExpr==0 } {
#@ puts -nonewline $pDem ", \'[lindex $vDat 0]\' using 1:3 with linespoints
title \"[lindex $vLegend 1]\" axes x1y2"
#@ }
#@ set nTolId 4 ;# tolerance data begin at 4th column for CCS object
#@ foreach sTol $vTol {
#@ puts -nonewline $pDem ", \'[lindex $vDat 0]\' u 1:$nTolId with linespoints
title \"[lindex $vLegend 0] $sTol\""
#@ incr nTolId
#@ }
#@ puts $pDem " $sAuxAppend"
#@ } else {
#@ if { [llength $vSlice]!=0 } {
#@ if { [string length $sTitle]!=0 } {
#@ append sTitle "\\n"
#@ }
#@ append sTitle "slice(" $vSlice ")"
#@ }
#@ if { [string length $sTitle]!=0 } {
#@ puts $pDem "set title \"$sTitle\""
#@ }
#@ if { $nDim==2 && [llength $vSlice]==0 } {
#@ # Synopsys 18:29 2016/10/28
#@ # !!!LOOK OUT!!! in next line the letter before 'nonewline' is a '–' which
#@ # is NOT A CORRECT dash symbol '-':
#@ ## puts –nonewline $pDem "set hidden3d\n"
#@ puts $pDem "set hidden3d"
#@ # removed -nogrid, raw data is shown as default, jizhan, Sep 13 2017
#@ ## if { [string length [array names ra -nogrid]] == 0 } {
#@ ## puts $pDem "set dgrid3d 50,50,4"
#@ ## }
#@ # the following line may 'hide' xyplane at start-up of plot, so comment it
out
#@ ## puts $pDem "set xyplane at 0.0"
#@ }
#@ if { $nDim==2 } {
#@ if { [string length $sYlabel]==0 } {
#@ set vVar [lookup_table variables $lut]
#@ set sYlabel [lindex $vVar 1]
#@ }
#@ }
#@ if { [string length $sXlabel]==0 } {
#@ set vVar [lookup_table variables $lut]
#@ set sXlabel [lindex $vVar 0]
#@ }
#@ if { [llength $vSlice]!=0 } {
#@ if { [string equal [lindex $vSlice 0] [lindex [lookup_table variables
$lut] 0]] } {
#@ puts $pDem "set xlabel \'$sYlabel\'"
#@ } else {
#@ puts $pDem "set xlabel \'$sXlabel\'"
#@ }
#@ } else {
#@ puts $pDem "set xlabel \'$sXlabel\'"
#@ if { [string length $sYlabel]!=0 } {
#@ puts $pDem "set ylabel \'$sYlabel\'"
#@ }
#@ }
#@ if { $nDim==2 && [llength $vSlice]==0 } {
#@ puts -nonewline $pDem "splot "
#@ set nTolBgnId 4 ;# tolerance data begin at 4th column for 3D plot
#@ } else {
#@ puts -nonewline $pDem "plot "
#@ set nTolBgnId 3 ;# tolerance data begin at 3rd column for 2D plot
#@ }
#@ for { set i 0 } { $i<$nObjSize } { incr i } {
#@ if { $i>0 } {
#@ puts -nonewline $pDem ", "
#@ }
#@ puts -nonewline $pDem "\'[lindex $vDat $i]\' with linespoints
title \"[lindex $vLegend $i]\""
#@ set nTolId $nTolBgnId
#@ foreach sTol $vTol {
#@ if { $nTolBgnId==4 } {
#@ puts -nonewline $pDem ", \'[lindex $vDat $i]\' using 1:2:$nTolId with
linespoints title \"[lindex $vLegend $i] $sTol\""
#@ } else {
#@ puts -nonewline $pDem ", \'[lindex $vDat $i]\' using 1:$nTolId with
linespoints title \"[lindex $vLegend $i] $sTol\""
#@ }
#@ incr nTolId
#@ }
#@ }
#@ puts $pDem "$sAuxAppend"
#@ }
#@ close $pDem
#@
#@ #
#@ # generate a wrapper script 'lut.demw', which sets env. and loads 'lut.dem'
#@ #
#@ set sDemw $sFnPrefix
#@ append sDemw "lut.demw"
#@ if [catch {open $sDemw w} pDemw] {
#@ puts "error, failed to open $sDemw for write:$pDemw"
#@ return 0
#@ }
#@ # save to image file (you need to plot-to-file before plot-to-X11, only
#@ # the last one being plotted is interactivable!)
#@ set sImgFile ""
#@ if { [string length [array names ra -save]] != 0 } {
#@ set sImgFile $ra(-save)
#@ }
#@ set sCurDir [pwd]
#@ if { [string length $sImgFile]!=0 } {
#@ puts $pDemw "set term png small"
#@ if { [string equal [file pathtype $sImgFile] "absolute"] } {
#@ puts $pDemw "set output \'$sImgFile\'"
#@ } else {
#@ puts $pDemw "set output \'$sCurDir/$sImgFile\'"
#@ }
#@ puts $pDemw "load \'$sDem\'"
#@ }
#@ puts $pDemw "set term X11" ;# to plot to X11
#@ puts $pDemw "load \'$sDem\'"
#@
#@ close $pDemw
#@
#@ #
#@ # execute 'gnuplot' or dump data/script
#@ #
#@ if { $bDumpDat==0 && $bDumpDem==0 } {
#@ cd $sFnPrefix
#@ lappend ::lc_plot_table_pids [exec xterm -e "gnuplot $sDemw -" &]
#@ lappend ::lc_plot_table_cmds "xterm -e gnuplot $sDemw - "
#@ cd $sCurDir
#@ } else {
#@ if { $bDumpDat==1 } {
#@ foreach sDat $vDat {
#@ printFile $sDat
#@ }
#@ }
#@ if { $bDumpDem==1 } {
#@ printFile $sDem
#@ printFile $sDemw
#@ }
#@ }
#@
#@ return 1
#@ }
#@ # This proc is hidden by now
#@ define_proc_attributes plot_table -hidden \
#@ -info "plot lookup table(s) by gnuplot." \
#@ -define_args {
#@ {luts "lookup table object variables" "object_list" list optional}
#@ {-aux "add auxiliary curves or surfaces by equations" "equation_list" list
optional}
#@ {-aux2 "add auxiliary curves aligning to 2nd Y-Axis for CCS only"
"equation_list" list optional}
#@ {-derive_output_voltage "add output voltage curve which is derived upon
default equation: V1+0.5*(I2+I1)*(T2-T1)/C" "" boolean optional}
#@ {-derive_output_voltage_equation "customize the equation to derive output
voltage curve" "equation" string optional}
#@ {-initv1 "provide Vss(Vdd) as initial V1 for derived voltage" "Vss(Vdd)"
string optional}
#@ {-index "define grid points for CCS only" "{variable1 index1 variables2
index2}|index1_id:index2_id" string optional}
#@ {-title "title for the plot chart" "title" string optional}
#@ {-xlabel "label of x-axis for the plot chart" "xlabel" string optional}
#@ {-ylabel "label of y-axis for the plot chart" "ylabel" string optional}
#@ {-y2label "label of y2-axis for the plot chart" "y2label" string optional}
#@ {-legend "legends for lookup table" "legend_list" list optional}
#@ {-save "save to image file in png format" "png_file_path" string optional}
#@ {-clear "close all opened terminals and remove all intermediate data" ""
boolean optional}
#@ {-dump "print out data and/or scripts generated, instead of plot them"
"data|script|all" string optional}
#@ {-slice "plot one slice for (non-CCS) 2D lookup tables" "{variable index}|
variable_id:index_id" string optional}
#@ {-tol "add tolerance curves or surfaces by equations" "equation_list" list
optional}
#@ }
#@ ## {-nogrid "disable grid data mapping (to 50x50) for 3D data, show original
data instead" "" boolean optional}
#@ # -- End source /cad/synopsys/lc/cur/auxx/lc/plot_table.tcl

#@ source $synopsys_root/auxx/lc/report_check_library_records.tcl
#@ # -- Starting source
/cad/synopsys/lc/cur/auxx/lc/report_check_library_records.tcl

#@ proc print_column_names_for_table {file_id tbl_info exclude_cols sep} {


#@ set sz [llength $tbl_info]
#@ set col [expr {$sz/6}]
#@ set num_cols 0
#@ set idx 0
#@ set col_names ""
#@ while {$idx < $col} {
#@ set one_col [lindex $tbl_info [expr $idx * 6 +1] ]
#@ # If $one_col is in $exclude_cols, do not add it to $col_names
#@ if {[lsearch -exact $exclude_cols $one_col] < 0} {
#@ if {$idx == 0} {
#@ set col_names $one_col
#@ } else {
#@ set col_names [concat $col_names$sep$one_col]
#@ }
#@ incr num_cols
#@ }
#@ incr idx
#@ }
#@
#@ if {[llength $file_id] > 0} {
#@ puts $file_id $col_names
#@ }
#@ return [list $num_cols $col_names]
#@ }
#@ define_proc_attributes print_column_names_for_table -hidden
#@
#@ proc print_records_for_table {file_id arr num_col sep} {
#@ set sz [expr [llength $arr]/$num_col]
#@ for {set i 0} {$i < $sz} {incr i} {
#@ set val ""
#@ for {set j 0} {$j < $num_col} {incr j} {
#@ set val1 [lindex $arr [expr $i*$num_col+$j]]
#@ if {$j == 0} {
#@ set val $val1
#@ } else {
#@ set val [concat $val$sep$val1]
#@ }
#@ }
#@ puts $file_id $val
#@ }
#@ }
#@ define_proc_attributes print_records_for_table -hidden
#@
#@ proc print_table {tbl_name {print_line ""}} {
#@ set tbl_struct [db3 eval "pragma table_info($tbl_name)"]
#@ set cols [print_column_names_for_table "" $tbl_struct "" ","]
#@ set num_cols [lindex $cols 0]
#@ set line_len [expr $num_cols*18]
#@ set line_sep [string repeat "-" $line_len]
#@ set arr1 [db3 eval "select * from $tbl_name"]
#@ if {$print_line != ""} { puts stdout $line_sep }
#@ print_column_names_for_table stdout $tbl_struct "" "\t"
#@ if {$print_line != ""} { puts stdout $line_sep }
#@ print_records_for_table stdout $arr1 $num_cols "\t"
#@ if {$print_line != ""} { puts stdout $line_sep }
#@ }
#@ define_proc_attributes print_table -hidden
#@
#@ ##############################################################################
#@ # Proc: report_check_library_records Author: Synopsys Date: 2020/9/2
#@ # This command is to report library checking results stored in sqlite database
#@ # Arguments:
#@ # see define_proc_attributes section
#@ # Return:
#@ # 1 proc succeeded, 0 or error code otherwise
#@ # Rev.1 update a generic method to get sql tables, Grace Li, 2023/9/8
#@ ##############################################################################
#@ proc report_check_library_records {args} {
#@ # get the args
#@ parse_proc_arguments -args $args ra
#@ set options ""
#@ set lc_advanced_tcl_mode true
#@ set sql_file $ra(sql_filename)
#@ set verbose ""
#@ if {[string length [array names ra -verbose]] != 0} {
#@ set verbose 1
#@ }
#@
#@ set error_codes ""
#@ if {[string length [array names ra -libchk_codes]] != 0} {
#@ set error_codes $ra(-libchk_codes)
#@ if {[llength $error_codes] < 1} {
#@ return -code error "-libchk_codes should be a list of libchk error code,
in the format of LIBCHK-3XX or LIBCHK-2XX\n"
#@ }
#@ }
#@
#@ if {[string length [array names ra -char_integrity]] != 0} {
#@ lappend error_codes "LIBCHK-342"
#@ lappend error_codes "LIBCHK-343"
#@ lappend error_codes "LIBCHK-350"
#@ lappend error_codes "LIBCHK-358"
#@ lappend error_codes "LIBCHK-359"
#@ }
#@ if {[string length [array names ra -logic]] != 0} {
#@ lappend error_codes "LIBCHK-300"
#@ lappend error_codes "LIBCHK-301"
#@ lappend error_codes "LIBCHK-304"
#@ lappend error_codes "LIBCHK-310"
#@ lappend error_codes "LIBCHK-311"
#@ lappend error_codes "LIBCHK-312"
#@ lappend error_codes "LIBCHK-313"
#@ lappend error_codes "LIBCHK-314"
#@ lappend error_codes "LIBCHK-320"
#@ lappend error_codes "LIBCHK-321"
#@ lappend error_codes "LIBCHK-322"
#@ lappend error_codes "LIBCHK-323"
#@ lappend error_codes "LIBCHK-330"
#@ lappend error_codes "LIBCHK-331"
#@ lappend error_codes "LIBCHK-340"
#@ lappend error_codes "LIBCHK-341"
#@ lappend error_codes "LIBCHK-347"
#@ }
#@
#@ if {[string length [array names ra -logic_vs_physical]] != 0} {
#@ lappend error_codes "LIBCHK-201"
#@ lappend error_codes "LIBCHK-210"
#@ lappend error_codes "LIBCHK-211"
#@ lappend error_codes "LIBCHK-212"
#@ lappend error_codes "LIBCHK-212"
#@ lappend error_codes "LIBCHK-213"
#@ lappend error_codes "LIBCHK-214"
#@ lappend error_codes "LIBCHK-215"
#@ lappend error_codes "LIBCHK-216"
#@ lappend error_codes "LIBCHK-217"
#@ }
#@ if {[llength $error_codes] < 1} {
#@ lappend error_codes "LIBCHK-312"
#@ lappend error_codes "LIBCHK-310"
#@ lappend error_codes "LIBCHK-353"
#@ }
#@
#@ set cell_list ""
#@ if {[string length [array names ra -cells]] != 0} {
#@ set cell_list $ra(-cells)
#@ if {[llength $cell_list] < 1} {
#@ return -code error "-cells should be a list of cell names\n"
#@ }
#@ }
#@ set sql_cmd ""
#@ if {[string length [array names ra -sql_cmd]] != 0} {
#@ set sql_cmd $ra(-sql_cmd)
#@ }
#@ set cell_num [llength $cell_list]
#@ set cell_filter ""
#@ if {$cell_num > 0} {
#@ set idx 0
#@ while {$idx < $cell_num} {
#@ set one_cell "'[lindex $cell_list $idx]'"
#@ if {$idx == 0} {
#@ set cell_filter $one_cell
#@ } else {
#@ set cell_filter [concat $cell_filter,$one_cell]
#@ }
#@ incr idx
#@ }
#@ }
#@ set cell_clause ""
#@ if {$cell_filter != ""} {
#@ if {$sql_cmd == ""} {
#@ set cell_clause "where cell_name in ($cell_filter)"
#@ } else {
#@ set cell_clause "and cell_name in ($cell_filter)"
#@ }
#@ }
#@ set output_csv 0
#@ if {[string length [array names ra -report_format]] != 0} {
#@ set format $ra(-report_format)
#@ if {$format != "csv"} {
#@ return -code error "only \"-report_format csv\" is supported."
#@ }
#@ set output_csv 1
#@ }
#@
#@ #open sqlite database
#@ sqlite3 db3 $sql_file
#@ puts "\nInformation: Open $sql_file for reporting.\n"
#@
#@ set sql_table_list [db3 eval "select name from sqlite_master"]
#@
#@ foreach full_table $sql_table_list {
#@ set id [string range [lsearch -inline [split $full_table "_"] {libchk*}] 6
end]
#@ set libchkid "LIBCHK-${id}"
#@ if { [lsearch -inline -all $error_codes $libchkid] == "" } {
#@ continue
#@ }
#@ set tbl_exist [db3 eval "pragma table_info($full_table)"]
#@ if {$libchkid eq "LIBCHK-345" || $libchkid eq "LIBCHK-212" || $libchkid eq
"LIBCHK-201"} {
#@ set one_desp [get_description_for_table_by_tbl $full_table]
#@ } else {
#@ set one_desp [get_description_for_table_by_msg_id $libchkid]
#@ }
#@ set add_cell_filter_clause 1
#@ #make sure the table has "cell_name" column
#@ if {[lsearch $tbl_exist "cell_name"] < 0} {
#@ set add_cell_filter_clause 0
#@ }
#@
#@ set sz [llength $tbl_exist]
#@ if {$sz > 0} {
#@ set col_num [expr {$sz/6}]
#@ set arr1 ""
#@ if {$add_cell_filter_clause == 1 && $cell_clause != ""} {
#@ set arr1 [db3 eval "select * from $full_table $sql_cmd $cell_clause "]
#@ #puts "select * from $full_table $sql_cmd $cell_clause "
#@ } else {
#@ set arr1 [db3 eval "select * from $full_table $sql_cmd"]
#@ #puts "select * from $full_table $sql_cmd "
#@ }
#@
#@ set num_records [llength $arr1]
#@ if {$num_records > 0} {
#@ set line_len [expr $col_num*18]
#@ if {$line_len > 140} {
#@ set line_len 140
#@ }
#@ set line_sep [string repeat "-" $line_len]
#@ puts $one_desp
#@ puts $line_sep
#@ print_column_names_for_table stdout $tbl_exist "" "\t"
#@ puts $line_sep
#@ print_records_for_table stdout $arr1 $col_num "\t"
#@ puts $line_sep
#@ if {$output_csv == 1} {
#@ set out_file [concat out_$full_table.csv]
#@ set file_id [open $out_file w]
#@ print_column_names_for_table $file_id $tbl_exist "" ","
#@ write_records_in_csv $file_id $arr1 $col_num
#@ close $file_id
#@ }
#@ } else {
#@ puts "Warning: no record is print! Please check -sql_cmd is correct if
specified!"
#@ }
#@ } elseif {$verbose == 1 || $sql_cmd != ""} {
#@ puts "Warning : Table $full_table does not exist."
#@ }
#@ }
#@ # list all sqlite table names
#@ if {[string length [array names ra -sql_table_list]] != 0} {
#@ puts "The database has [llength $sql_table_list] sqlite tables:"
#@ puts stdout $sql_table_list
#@ }
#@ db3 close
#@ }
#@
#@ define_proc_attributes report_check_library_records \
#@ -info "report check library results" \
#@ -define_args {
#@ {sql_filename "report check library result from the sql database file"
"file_name" string required}
#@ {-cells "report check library result for specified cells" "cell_list" list
optional}
#@ {-libchk_codes "report check library result for specified LIBCHK codes"
"libchk_code_list" list optional}
#@ {-char_integrity "report check library result for char integrity" ""
boolean optional}
#@ {-logic "report check library result for logical" "" boolean optional}
#@ {-logic_vs_physical "report check library result for logic vs. physical
check" "" boolean optional}
#@ {-sql_cmd "sql command to evaluate in sqlite" "sql_command" string
optional}
#@ {-sql_table_list "list all sqlite table names" "" boolean optional}
#@ {-report_format "output file format" "csv" string optional}
#@ {-verbose "output detail running log" "" boolean optional}}\
#@ -define_arg_groups {
#@ {exclusive {-libchk_codes -char_integrity}}
#@ }
#@
#@ ################################################################################
#@ # Proc: get_description_for_table_by_msg_id Author: Synopsys Date: 09/08/2023
#@ # This proc is to get table description by its message id like LIBCHK-xxx
#@ ################################################################################
#@ proc get_description_for_table_by_msg_id {id} {
#@ set msg [get_error_message $id]
#@ set msg "${msg} (${id})"
#@ return $msg
#@ }
#@ define_proc_attributes get_description_for_table_by_msg_id -hidden
#@
#@ ################################################################################
#@ # Proc: get_description_for_table_by_tbl Author: Synopsys Date: 09/08/2023
#@ # This proc is to get table description for those tables whose LIBCHK-id is
#@ # mapped to multiple table description
#@ ################################################################################
#@ proc get_description_for_table_by_tbl {tbl} {
#@ set sql_full_table_description [list "libchk345_pg_current_ratio" "Table of pg
current value ratios. (LIBCHK-345)"\
#@ "libchk345_ccsp_time_ratio" "Table of
ccsp time value ratios. (LIBCHK-345)"\
#@ "libchk212_missing_logic_pins" "List of
pins missing in logic library (LIBCHK-212)"\
#@ "libchk212_missing_phys_pins" "List of
pins missing in physical library (LIBCHK-212)"\
#@ "libchk201_library_list" "List of logic
and physical libraries (LIBCHK-201)"
#@
#@ ]
#@ foreach {name des} $sql_full_table_description {
#@ if {$name eq $tbl} {
#@ return $des
#@ }
#@ }
#@ return ""
#@ }
#@ define_proc_attributes get_description_for_table_by_tbl -hidden
#@
#@ ################################################################################
#@ # Proc: update_check_library_records Author: Synopsys Date: 03/01/2021
#@ # This proc is for incremental updates on fusion libraries:
#@ # 1) remove records for libraries specified in -remove_libs
#@ # 2) merge check library records from sql_filename2 to sql_filename
#@ # Arguments:
#@ # see define_proc_attributes section
#@ # Return:
#@ # 1 proc succeeded, 0 or error code otherwise
#@ ################################################################################
#@
#@ proc update_check_library_records {args} {
#@ # get the args
#@ parse_proc_arguments -args $args ra
#@ set options ""
#@ set lc_advanced_tcl_mode true
#@ set sql_file $ra(sql_filename)
#@ set verbose ""
#@ if {[string length [array names ra -verbose]] != 0} {
#@ set verbose 1
#@ }
#@
#@ if ![file exists $sql_file.bak] {
#@ exec cp $sql_file $sql_file.bak ;# back up original $sql_file if not done
so
#@ }
#@
#@ set ::FLIB::added_phys_libs ""
#@ set ::FLIB::removed_phys_libs ""
#@ set ::FLIB::added_dbs ""
#@ set ::FLIB::removed_dbs ""
#@
#@ #open sqlite databases
#@ sqlite3 db3 $sql_file
#@ set sql_file2 ""
#@ # open sql_filename2 and merge tables with sql_filename
#@ if {[string length [array names ra sql_filename2]] != 0} {
#@ set sql_file2 $ra(sql_filename2)
#@ if ![file exists $sql_file2.bak] {
#@ exec cp $sql_file2 $sql_file2.bak ;# back up original $sql_file2
#@ }
#@ sqlite3 db3inc $sql_file2
#@ set ::FLIB::added_phys_libs [::FLIB::get_updated_libs "Physi\#" 1]
#@ set ::FLIB::added_dbs [::FLIB::get_updated_libs "Logic\#" 1]
#@ }
#@
#@ # map lib_no from inc_db3 to db3 via lib_name for libs replaced
#@ set lib_no_and_names [db3 eval "select lib_no, lib_name from
libchk201_library_list"] ;# Logic#1:lib_name
#@ array set ::FLIB::lib_name2nos [::FLIB::map_lib_name_to_no
$lib_no_and_names];# from db3
#@ if {$sql_file2 != ""} {
#@ set tbl_exist [db3inc eval "pragma table_info(libchk201_library_list)"]
#@ if {[llength $tbl_exist] > 0} {
#@ set lib_no_and_names2 [db3inc eval "select lib_no, lib_name from
libchk201_library_list"]
#@ array set ::FLIB::lib_no2names [::FLIB::map_lib_no_to_name
$lib_no_and_names2] ;# from inc_db3
#@ }
#@ }
#@ set rm_libs ""
#@ if {[string length [array names ra -remove_libs]] != 0} {
#@ set rm_libs $ra(-remove_libs)
#@ # get lib# to lib_name mapping
#@ array set ::FLIB::lib_no2names0 [::FLIB::map_lib_no_to_name
$lib_no_and_names]
#@ ::FLIB::remove_libs $rm_libs
#@ set ::FLIB::removed_phys_libs [::FLIB::get_removed_libs "Physi\#"
$rm_libs]
#@ set ::FLIB::removed_dbs [::FLIB::get_removed_libs "Logic\#" $rm_libs]
#@ }
#@
#@ # open sql_filename2 and merge tables with sql_filename
#@ if {[string length $sql_file2] != 0} {
#@ puts "update_check_library_records $sql_file $sql_file2"
#@ ::FLIB::merge_tables $sql_file $sql_file2 $verbose ;# lib_name2nos
lib_no2names
#@ }
#@
#@ # update autofix.tcl
#@ ::FLIB::update_autofix_tcl $sql_file $sql_file2
#@ if {$rm_libs != ""} {
#@ puts "update_check_library_records $sql_file $sql_file2 -remove_libs
$rm_libs done."
#@ } else {
#@ puts "update_check_library_records $sql_file $sql_file2 done."
#@ }
#@ db3 close
#@ }
#@
#@ define_proc_attributes update_check_library_records \
#@ -hidden \
#@ -info "incrementally update check library results in sqlite3 (.db3)" \
#@ -define_args {
#@ {sql_filename "sql file for original check library results" "file_name"
string required}
#@ {sql_filename2 "incrementally updated sql file" "file_name" string
optional}
#@ {-remove_libs "db in lib[0-9]+ or frame lib name to be removed" "lib_list"
list optional}
#@ {-verbose "output detailed check_lib records" "" boolean optional}
#@ }
#@
#@ # Get logic or physical lib names from LIBCHK-201 table
#@ # sql_file = autofix0.tcl
#@ # lib_type = 'Logic#' or 'Physi#'
#@ # return list of updated lib names by type or the whole libchk201 table
#@ proc get_lib_names {sql_file {lib_type ""}} {
#@ global flib_sql_list
#@ sqlite3 db3 $sql_file
#@ if {$lib_type == ""} {
#@ set flib_sql_list [db3 eval "select * from libchk201_library_list"]
#@ } else {
#@ set flib_sql_list [db3 eval "select lib_name from libchk201_library_list
where lib_no like '${lib_type}%'"]
#@ }
#@ db3 close
#@ return $flib_sql_list
#@ }
#@ define_proc_attributes get_lib_names -hidden
#@
#@ proc get_sql_tables {sql_file} {
#@ global flib_sql_list
#@ sqlite3 db3 $sql_file
#@ set tbl_names [db3 eval "SELECT name FROM sqlite_master"]
#@ set flib_sql_list $tbl_names
#@ db3 close
#@ return $tbl_names
#@ }
#@ define_proc_attributes get_sql_tables -hidden
#@
#@
#@ namespace eval FLIB {
#@
#@ #remove records and/or columns for libraries specified in -remove_libs
#@ #also remove autofix lines if issue/record is gone
#@ proc remove_libs {rm_libs} {
#@ set where_cond [remove_lib_where $rm_libs]
#@ set where_cond_phys $where_cond
#@ regsub -all "lib_name" $where_cond_phys "phys_lib" where_cond_phys
#@ set where_cond_logic $where_cond
#@ regsub -all "lib_name" $where_cond_logic "logic_lib" where_cond_logic
#@
#@ set tbl_names0 [db3 eval "SELECT name FROM sqlite_master"]
#@ foreach tbl_name $tbl_names0 {
#@ if {$tbl_name == "libchk213_mismatched_pins"} {
#@ remove_records_from_table $rm_libs $tbl_name
#@ continue
#@ }
#@ set tbl_struct [db3 eval "pragma table_info($tbl_name)"]
#@ set cols [print_column_names_for_table "" $tbl_struct $rm_libs ","]
#@ #set num_cols [lindex $cols 0]
#@ set cols [lindex $cols 1]
#@ set where_cond2 [ neq_val_where $cols $rm_libs ] ;# e.g. where lib2!=lib1 or
lib3!=lib1
#@
#@ #rename existing table
#@ db3 eval "ALTER TABLE $tbl_name RENAME TO ${tbl_name}_old"
#@ #create table with the original name
#@ if {[lsearch $tbl_struct "lib_name"] >= 0} { ;# if table has lib_name
#@ db3 eval "CREATE TABLE $tbl_name AS SELECT $cols FROM ${tbl_name}_old
$where_cond"
#@ } elseif {[lsearch $tbl_struct "phys_lib"] >= 0} { ;# if table has phys_lib,
i.e. LIBCHK-210, 212
#@ db3 eval "CREATE TABLE $tbl_name AS SELECT $cols FROM ${tbl_name}_old
$where_cond_phys"
#@ } elseif {[lsearch $tbl_struct "logic_lib"] >= 0} { ;# if table has
logic_lib, i.e. LIBCHK-211, 212
#@ db3 eval "CREATE TABLE $tbl_name AS SELECT $cols FROM ${tbl_name}_old
$where_cond_logic"
#@ } else { # if record has inconsistent values in lib1,
lib2, ...
#@ db3 eval "CREATE TABLE $tbl_name AS SELECT $cols FROM ${tbl_name}_old
$where_cond2"
#@ # get consistent removed records in string patterns for scenario 1.2
#@ db3 eval "DELETE FROM ${tbl_name}_old $where_cond2";# delete records
stored in new $tbl_name above
#@ variable removed_lines
#@ set removed_lines [get_removed_records $tbl_name]
#@ }
#@ #remove empty table
#@ if {[db3 eval "SELECT COUNT(*) FROM $tbl_name"] == 0} {
#@ db3 eval "drop table if exists $tbl_name"
#@ }
#@ db3 eval "drop table if exists ${tbl_name}_old";# remove old table after
$tbl_name is updated
#@ }
#@
#@ if {[info exists db_removed] && $db_removed == 1} { ;# get
$extra_db_cells_dbs_removed
#@ set tbl_struct [db3 eval "pragma table_info('libchk310_missing_cells_slg')"]
#@ set cols [print_column_names_for_table "" $tbl_struct $rm_libs ","]
#@ set cols [lindex $cols 1]
#@ get_extra_db_cells_dbs_removed "libchk310_missing_cells_slg" $cols $rm_libs
#@ }
#@ }
#@ define_proc_attributes remove_libs -hidden
#@
#@ # merge sqlite tables from sql_filename2 to sql_filename, so final tables will
have more columns and/or records
#@ proc merge_tables {sql_file sql_file2 verbose} {
#@ db3 eval {attach database $sql_file2 as inc_db3}
#@ set tbl_names0 [db3 eval "SELECT name FROM sqlite_master"]
#@ set tbl_names2 [db3inc eval "SELECT name FROM sqlite_master"]
#@ set tbl_names [lsort -unique [list {*}$tbl_names0 {*}$tbl_names2]] ;# union
of tbl names from db3 and db3inc
#@ foreach tbl_name $tbl_names {
#@ if {$tbl_name == "libchk210_missing_logic_cells" || $tbl_name ==
"libchk211_missing_phys_cells"} {
#@ merge_table2 $tbl_name
#@ } elseif {[lsearch $tbl_names0 $tbl_name] >= 0 && [lsearch $tbl_names2
$tbl_name] >= 0} { ;# if both sql_file and sql_file2 have same name table
#@ merge_table $tbl_name $verbose
#@ } elseif {[lsearch $tbl_names2 $tbl_name] >= 0} { ;# if only sql_file2 has
the table, copy it to sql_file
#@ db3 eval "CREATE TABLE $tbl_name AS SELECT * FROM inc_db3.$tbl_name" ;#
add to autofix.tcl
#@ }
#@ # if sql_file2 has no same name table, i.e. the table is only in sl_file,
keep it in db3
#@ }
#@ if {$verbose == 1} {
#@ puts "The primary sql database $sql_file has [llength $tbl_names0] tables."
#@ puts "The second sql database $sql_file2 has [llength $tbl_names2] tables."
#@ puts "The merged sql database has [llength $tbl_names] tables:\n$tbl_names"
#@ }
#@ }
#@ define_proc_attributes merge_tables -hidden
#@
#@ # if both sql_file and sql_file2 have same name table, merge it to sql_file
#@ proc merge_table {tbl_name verbose} {
#@ set tbl_struct [db3inc eval "pragma table_info($tbl_name)"]
#@ set tbl_struct0 [db3 eval "pragma table_info($tbl_name)"] ;# same name table
in original sql_file
#@ set max_lib_no0 [get_max_lib_no $tbl_struct0];# max lib# in sql_file
#@ set cols00 [print_column_names_for_table "" $tbl_struct0 "" ","]
#@ set cols00 [lindex $cols00 1]; # all column name list in original
sql_file
#@
#@ if {[regexp {.+ lib[0-9]+ .+} $tbl_struct]} { ;# if sql_file2 has same name
table with lib1,lib2,..., merge it to $sql_file with new columns added
#@ set max_lib_no [get_max_lib_no $tbl_struct] ;# max lib# in sql_file2
#@ set cols [print_column_names_for_table "" $tbl_struct "" ","]
#@ #set col_num [lindex $cols 0]
#@ set cols [lindex $cols 1]
#@ set cols0 $cols ;# all the column names in tbl_name in sql_file2
#@ #left join
#@ set cols [populate_lib_number_list $max_lib_no0 $max_lib_no
"inc_db3.$tbl_name"];# inc_db3.$tbl_name. to lib2,lib3,...
#@ set cols00 [populate_column_list $cols00 "main.$tbl_name"] ;# prefix
main.$tbl_name to column names
#@ set col_names_selected [concat "$cols00" $cols]
#@ set on_cond [join_on_cond $tbl_name $cols0] ;# join on condition
#@ db3 eval "CREATE TABLE ${tbl_name}_left_join AS SELECT $col_names_selected
from main.$tbl_name LEFT JOIN inc_db3.$tbl_name on $on_cond"
#@ #right join
#@ regsub -all ",lib1,.+" $cols0 ",lib1," cols0 ;# remove lib2,lib3,...
#@ set cols0 [populate_column_list $cols0 "inc_db3.$tbl_name"] ;# prefix
inc_db3.$tbl_name to column names
#@ set cols1 [populate_lib_number_list 1 $max_lib_no0 "main.$tbl_name"];#
$tbl_name.lib2, $tbl_name.lib3, ...
#@ set cols1 [concat $cols1 ",$cols"]
#@ set col_names_selected [concat $cols0 $cols1]
#@ db3 eval "CREATE TABLE ${tbl_name}_right_join AS SELECT $col_names_selected
from inc_db3.$tbl_name LEFT JOIN main.$tbl_name on $on_cond"
#@ db3 eval "drop table if exists ${tbl_name}";# drop original table and use
union table below instead
#@ #union left and right, i.e. merge original and incremental tables
#@ db3 eval "CREATE TABLE $tbl_name AS SELECT * FROM ${tbl_name}_left_join UNION
SELECT * FROM ${tbl_name}_right_join"
#@ #populate records by value from lib1
#@ set set_where [update_set_where $max_lib_no0]
#@ db3 eval "UPDATE $tbl_name SET $set_where AND lib1 IS NOT NULL" ;# case 1:
add set_attribute to autofix.tcl
#@ db3 eval "drop table if exists ${tbl_name}_left_join"
#@ db3 eval "drop table if exists ${tbl_name}_right_join"
#@ } elseif {$tbl_name == "libchk201_library_list"} { ;# for libchk201
join/union with no duplciate lib_name
#@ set max_logic_num0 [get_max_lib_no_libchk201 "Logic\#" db3] ;# max logic
lib# in sql_file
#@ set max_logic_num [get_max_lib_no_libchk201 "Logic\#" db3inc] ;# max logic
lib# in sql_file2
#@ array set rep_lib_nos [map_replaced_lib_numbers $max_logic_num] ;# replaced
lib#'s map from incr to original LIBCHK-201
#@ set len [string length $max_logic_num0]
#@ set lib_num [format "%0*d" $len 1];# e.g. change Logic#1 to Logic#01
#@ db3inc eval "UPDATE $tbl_name SET lib_no = 'Logic\#$lib_num' WHERE lib_no =
'Logic\#1'"
#@ for {set i 2} {$i <= $max_logic_num} {incr i} { ;# increment lib_no's in
db3inc
#@ set lib_num [expr $max_logic_num0 + $i - 1]
#@ if [info exists rep_lib_nos($i)] {# if replaced lib, take the original
lib_num
#@ set lib_num $rep_lib_nos($i)
#@ }
#@ set lib_num [format "%0*d" $len $lib_num];# e.g. change Logic#2 to
Logic#02
#@ db3inc eval "UPDATE $tbl_name SET lib_no = 'Logic\#$lib_num' WHERE lib_no
= 'Logic\#$i'"
#@ }
#@ union_table $tbl_name
#@ if {$verbose == 1} {
#@ print_table $tbl_name
#@ }
#@ } else { ;# if sql_file2 has same name table without lib1,lib2,..., merge
the records to $sql_file
#@ union_table $tbl_name
#@ }
#@ # remove empty table
#@ if {[db3 eval "SELECT COUNT(*) FROM $tbl_name"] == 0} {
#@ db3 eval "drop table if exists $tbl_name"
#@ }
#@ }
#@ define_proc_attributes merge_table -hidden
#@
#@ # update LIBCHK-210, LIBCHK-211
#@ proc merge_table2 {tbl_name} {
#@ set tbl_struct [db3inc eval "pragma table_info($tbl_name)"]
#@ set tbl_struct0 [db3 eval "pragma table_info($tbl_name)"] ;# same name table
in original sql_file
#@
#@ if {$tbl_name == "libchk210_missing_logic_cells"} { ;# update separately
#@ # remove duplicate cells from LIBCHK-210 if LIBCHK-112 exists
#@ set tbl_exist [db3inc eval "pragma table_info(libchk112_same_name_cells)"]
#@ if {[llength $tbl_exist] > 0} { # if LIBCHK-112 exists in db3inc
#@ set dup_cells0 [db3inc eval " SELECT cell_name FROM
libchk112_same_name_cells "]
#@ #insert quote to each cell_name => 'cell_name' for sql
#@ set dup_cells ""
#@ foreach cell_name $dup_cells0 {lappend dup_cells "'$cell_name'"}
#@ set where_in [join $dup_cells ","]
#@ db3 eval "DELETE FROM $tbl_name WHERE cell_name IN ($where_in)"
#@ }
#@
#@ variable added_phys_libs
#@ variable removed_phys_libs
#@ if {[llength $added_phys_libs] > 0} {# frame added
#@ union_table $tbl_name
#@ }
#@ if {[info exists removed_phys_libs] && [llength $removed_phys_libs] > 0 &&
[llength $tbl_struct0] > 0} {# frame removed
#@ set extra_phys_cells [db3 eval " SELECT cell_name FROM $tbl_name "]
#@ if {[db3 eval "SELECT COUNT(*) FROM $tbl_name"] == 0} {# if updated
LIBCHK-210 is empty, then missing phys cells => final LIBCHK-211
#@ puts "Warning: Original db3 has LIBCHK-210. Need re-xcheck for
libchk211_missing_phys_cells after removing frame files $removed_phys_libs."
#@ }
#@ }
#@ } elseif {$tbl_name == "libchk211_missing_phys_cells"} { ;# update
separately
#@ variable added_phys_libs
#@ variable missing_phys_cells
#@ set extra_db_cells [db3 eval " SELECT cell_name FROM $tbl_name "]
#@ set missing_phys_cells $extra_db_cells;# scenario 2.2
#@ if {[llength $tbl_struct] > 0 && [llength $added_phys_libs] > 0} {# frame
added, Update autofix.tcl
#@ set new_phys_cells [db3inc eval " SELECT cell_name FROM $tbl_name "]
#@ # Xcheck cells in new frame vs. extra cells in dbs
#@ # if $extra_db_cells > new_phys_cells, update LIBCHK-211 by removing
records where cells in new frame
#@ if {[llength $extra_db_cells] > [llength $new_phys_cells]} {# update
autofix.tcl: change create_dummy_physical_cell to remove_physical_lib_cell on
$new_phys_cells
#@ db3 eval "ALTER TABLE $tbl_name RENAME TO ${tbl_name}_old"
#@ #insert quote to each cell_name => 'cell_name' for sql
#@ set new_phys_cells2 ""
#@ foreach cell_name $new_phys_cells {lappend new_phys_cells2
"'$cell_name'"}
#@ set where_in [join $new_phys_cells2 ","]
#@ db3 eval "INSERT INTO $tbl_name SELECT * FROM ${tbl_name}_old WHERE
cell_name NOT IN ($where_in)"
#@ } elseif {[llength $tbl_struct] > 0} { # updated LIBCHK-211 is empty,
then remaining cells = missing logic cells = incr LIBCHK-210 with extra db cells
removed
#@ db3 eval "drop table if exists $tbl_name"
#@ #insert quote to each cell_name => 'cell_name' for sql
#@ set extra_db_cells2 ""
#@ foreach cell_name $extra_db_cells {lappend extra_db_cells2
"'$cell_name'"}
#@ set where_in [join $extra_db_cells2 ","]
#@ db3 eval "INSERT INTO $tbl_name SELECT * FROM
inc_db3.libchk210_missing_logic_cells WHERE cell_name NOT IN ($where_in)"
#@ }
#@ # get intersection of extra_db_cells and new_phys_cells for autofix
#@ # scenario 3.1
#@ variable flib_extra_cells
#@ variable flib_missing_cells
#@ set flib_extra_cells [list_intersect $extra_db_cells $new_phys_cells]
#@ set flib_missing_cells [list_exclude $extra_db_cells $new_phys_cells]
#@ }
#@ if {[info exists removed_phys_libs] && [llength $removed_phys_libs] > 0} {#
frame removed
#@ #Get extra_db_cells from old LIBCHK-211
#@ #Get removed cells in removed frame?
#@ #Add records where cell in removed frame into old LIBCHK-211
#@ puts "Warning: Original db3 has LIBCHK-211. Need re-xcheck for
libchk211_missing_phys_cells after removing frame files $removed_phys_libs."
#@ }
#@ }
#@ }
#@ define_proc_attributes merge_table2 -hidden
#@
#@ proc union_table {tbl_name} {
#@ db3 eval "CREATE TABLE ${tbl_name}_union AS SELECT * FROM $tbl_name UNION
SELECT * FROM inc_db3.$tbl_name"
#@ db3 eval "drop table if exists $tbl_name"
#@ db3 eval "ALTER TABLE ${tbl_name}_union RENAME TO $tbl_name"
#@ }
#@ define_proc_attributes union_table -hidden
#@
#@ # map library number e.g. lib1 to library_name
#@ proc map_lib_no_to_name {lib_no_and_names} {
#@ array set arr ""
#@ set num_libs [llength $lib_no_and_names]
#@ for {set i 0} {$i < $num_libs} {incr i 2} {
#@ set lib_no [ lindex $lib_no_and_names $i ]
#@ set lib_name [ lindex $lib_no_and_names [expr $i+1] ]
#@ regsub -all "Logic\#" $lib_no "lib" lib_no
#@ set arr($lib_no) $lib_name
#@ # lib01 and lib1 should both map to lib_name
#@ if [regexp {^lib[0-9]+} $lib_no] {# if lib#
#@ regsub "^lib(0+)" $lib_no "lib" lib_no1;# remove leading 0's
#@ if {[string compare $lib_no1 $lib_no] != 0} {# e.g. lib01 vs. lib1
#@ set arr($lib_no1) $lib_name
#@ }
#@ }
#@ }
#@ return [array get arr]
#@ }
#@ define_proc_attributes map_lib_no_to_name -hidden
#@
#@ # map library_name to lib_no e.g. lib1
#@ proc map_lib_name_to_no {lib_no_and_names} {
#@ array set arr ""
#@ set num_libs [llength $lib_no_and_names];# 2x number of libs
#@ for {set i 0} {$i < $num_libs} {incr i 2} {
#@ set lib_no [ lindex $lib_no_and_names $i ]
#@ set lib_name [ lindex $lib_no_and_names [expr $i+1] ]
#@ regsub -all "Logic\#" $lib_no "lib" lib_no
#@ set arr($lib_name) $lib_no
#@ }
#@ return [array get arr]
#@ }
#@ define_proc_attributes map_lib_name_to_no -hidden
#@
#@ # remove records associated with removed libs from original table e.g.
libchk213_mismatched_pins
#@ proc remove_records_from_table {rm_libs tbl_name} {
#@ variable lib_name2nos
#@ set where_cond ""
#@ set i 0
#@ # compose "WHERE pin_type_direction LIKE %(Physi#1)"
#@ foreach lib_name $rm_libs {
#@ if [regexp {^lib[0-9]+} $lib_name] { continue }
#@ # if phys libs, compose where clause
#@ if {$i > 0} { lappend where_cond "OR" }
#@ set where_cond [concat "pin_type_direction LIKE \'%($lib_name2nos($lib_name))
%\' "]
#@ incr i
#@ }
#@ if {$i > 0} { # if phys lib removed
#@ db3 eval "DELETE FROM $tbl_name WHERE $where_cond"
#@ if {[db3 eval "SELECT COUNT(*) FROM $tbl_name"] == 0} {# remove empty table
#@ db3 eval "drop table if exists $tbl_name"
#@ }
#@ }
#@ }
#@ define_proc_attributes remove_records_from_table -hidden
#@
#@ # compose where clause to skip records where lib_name = libi, for all tables
#@ proc remove_lib_where {exclude_cols} {
#@ variable lib_no2names0
#@ variable db_removed
#@ variable frame_removed
#@ set db_removed 0
#@ set frame_removed 0
#@
#@ set where_cond "where"
#@ set i 0
#@ foreach lib_no $exclude_cols {
#@ if {$i > 0} {
#@ lappend where_cond "and"
#@ }
#@ if {[regexp {^lib[0-9]+} $lib_no] && [info exists lib_no2names0($lib_no)]}
{ ;# e.g. $lib_no is lib1
#@ lappend where_cond "lib_name!='$lib_no2names0($lib_no)'"
#@ set db_removed 1
#@ } else {
#@ lappend where_cond "lib_name!='$lib_no'";# physical lib name
#@ set frame_removed 1
#@ }
#@ incr i
#@ }
#@ return $where_cond
#@ }
#@ define_proc_attributes remove_lib_where -hidden
#@
#@ # compose where clause to skip records with consistent values: where lib2!=lib1
or lib3!=lib1
#@ proc neq_val_where {col_names exclude_cols} {
#@ set where_cond ""
#@ if {[llength $exclude_cols] > 0 && [regexp {,lib[0-9]+} $col_names] >= 0} {
#@ set col_name_lst [split $col_names ,]
#@ set where_cond "where"
#@ set lib_no 0
#@ foreach col_name $col_name_lst {
#@ if {[regexp {^lib[0-9]+} $col_name]} { ;# lib1, lib2, ...
#@ if {$lib_no == 0} {
#@ set lib1 $col_name
#@ } elseif {$lib_no > 1} {
#@ lappend where_cond "or"
#@ lappend where_cond "$col_name!=$lib1"
#@ } else {
#@ lappend where_cond "$col_name!=$lib1"
#@ }
#@ incr lib_no
#@ }
#@ }
#@ if {$lib_no <= 1} {
#@ set where_cond ""
#@ }
#@ }
#@ return $where_cond
#@ }
#@ define_proc_attributes neq_val_where -hidden
#@
#@ # compose where clause for consistent values: where lib2=lib1 and lib3=lib1
#@ proc eq_val_where {col_names exclude_cols {value ""}} {
#@ set where_cond ""
#@ if {[llength $exclude_cols] > 0 && [regexp {,lib[0-9]+} $col_names] >= 0} {
#@ set col_name_lst [split $col_names ,]
#@ set where_cond "where"
#@ set lib_no 0
#@ foreach col_name $col_name_lst {
#@ if {[regexp {^lib[0-9]+} $col_name]} { ;# lib1, lib2, ...
#@ if {$lib_no == 0} {
#@ set lib1 $col_name
#@ } elseif {$lib_no > 1} {
#@ lappend where_cond "and"
#@ lappend where_cond "$col_name=$lib1"
#@ } else {
#@ lappend where_cond "$col_name=$lib1"
#@ }
#@ incr lib_no
#@ }
#@ }
#@ if {$value != ""} {
#@ lappend where_cond "and"
#@ lappend where_cond "$lib1=$value"
#@ }
#@ if {$lib_no <= 1} {
#@ set where_cond ""
#@ }
#@ }
#@ return $where_cond
#@ }
#@ define_proc_attributes eq_val_where -hidden
#@
#@ # compose join on condition: main.$tbl_name.$col_name=inc_db3.$tbl_name.
$col_name
#@ proc join_on_cond {tbl_name col_names} {
#@ set col_name_lst [split $col_names ,]
#@ #get all columns other than lib1, lib2, ...
#@ set on_cond ""
#@ foreach col_name $col_name_lst {
#@ if {[regexp {^lib[0-9]+} $col_name] == 0} { ;# if a key column name other
than lib1, ...
#@ #lappend col_name_lst1 $col_name
#@ if {[llength $on_cond] > 0} {
#@ lappend on_cond "AND"
#@ }
#@ lappend on_cond "main.$tbl_name.$col_name=inc_db3.$tbl_name.$col_name"
#@ }
#@ }
#@ return $on_cond
#@ }
#@ define_proc_attributes join_on_cond -hidden
#@
#@ # get max lib number from tbl_struct returned from [pragma
table_info($tbl_name)]
#@ proc get_max_lib_no {tbl_struct} {
#@ set cols [lindex [print_column_names_for_table "" $tbl_struct "" ","] 1]
#@ set max_lib_no [string range $cols [string last lib $cols]+3 [string length
$cols]-1]
#@ return $max_lib_no
#@ }
#@ define_proc_attributes get_max_lib_no -hidden
#@
#@ # get max Logic#/Physi# number from libchk201_library_list
#@ # lib_type = 'Logic#' or 'Physi#'
#@ proc get_max_lib_no_libchk201 {lib_type db3} {
#@ set lib_nums [$db3 eval "select lib_no from 'libchk201_library_list' where
lib_no like '${lib_type}%'"]
#@ set max_lib_no [lindex $lib_nums [expr [llength $lib_nums]-1]]
#@ return [string range $max_lib_no 6 end];# max lib_no
#@ }
#@ define_proc_attributes get_max_lib_no_libchk201 -hidden
#@
#@ # prefix inc_db3.$tbl_name to each column names
#@ proc populate_column_list {col_names prefix} {
#@ set col_name_lst [split $col_names ,]
#@ #get all columns other than lib1, lib2, ...
#@ set key_cols ""
#@ foreach col_name $col_name_lst {
#@ if {$col_name != ""} { ;# if a valid column name
#@ lappend key_cols "$prefix.$col_name,"
#@ }
#@ }
#@ return $key_cols
#@ }
#@ define_proc_attributes populate_column_list -hidden
#@
#@ # compose table names, prefix = main.$tbl_name or inc_db3.$tbl_name
#@ proc populate_lib_number_list {max_lib_no max_lib_no2 prefix} {
#@ variable lib_name2nos
#@ variable lib_no2names
#@ set lib_nos ""
#@ set lib_name ""
#@ set ndx $max_lib_no
#@ for {set i 2} {$i <= $max_lib_no2} {incr i} {
#@ lappend lib_nos $prefix.lib$i
#@ if {[string range $prefix 0 6] == "inc_db3"} { # if attach, i.e. inc_db3
#@ # get new lib index for libs in db3inc: $max_lib_no+1,2,... for newly added
and mapped lib index in db3 via lib_name
#@ if [info exists lib_no2names(lib$i)] {
#@ set lib_name $lib_no2names(lib$i)
#@ }
#@ if {$lib_name != "" && [info exists lib_name2nos($lib_name)]} {# if same lib
is found in db3, replace it by new one
#@ set lib_no $lib_name2nos($lib_name)
#@ } else {
#@ incr ndx
#@ set lib_no lib$ndx
#@ }
#@ lappend lib_nos "as"
#@ lappend lib_nos $lib_no
#@ }
#@ if {$i < $max_lib_no2} {
#@ set lib_nos [concat $lib_nos,]
#@ }
#@ }
#@ return $lib_nos
#@ }
#@ define_proc_attributes populate_lib_number_list -hidden
#@
#@ # get map of lib numbers from incr to original LIBCHK-201 for the replaced
libraries
#@ proc map_replaced_lib_numbers {max_lib_no2} {
#@ array set arr ""
#@ variable lib_name2nos; # from db3
#@ variable lib_no2names; # from inc_db3
#@ variable removed_dbs
#@ set lib_name ""
#@ for {set i 2} {$i <= $max_lib_no2} {incr i} {
#@ if [info exists lib_no2names(lib$i)] {
#@ set lib_name $lib_no2names(lib$i)
#@ # if same lib is found in both db3 and -remove_libs, replace it by new
one
#@ if {[info exists lib_name2nos($lib_name)] && [info exists removed_dbs] &&
[lsearch $removed_dbs $lib_name2nos($lib_name)] >= 0} {
#@ set lib_no [string range $lib_name2nos($lib_name) 3 end];# strip out
prefix lib to extract the number, e.g. lib2
#@ set arr($i) $lib_no
#@ }
#@ }
#@ }
#@ return [array get arr]
#@ }
#@ define_proc_attributes map_replaced_lib_numbers -hidden
#@
#@ # compose set where string e.g. "SET lib2 = lib1, lib3 = lib1 WHERE lib2 is
null" for UPDATE $tbl_name
#@ proc update_set_where {max_lib_no} {
#@ set set_values ""
#@ set where_cond ""
#@ for {set i 2} {$i <= $max_lib_no} {incr i} {
#@ lappend set_values "lib$i=lib1"
#@ # lib$ IS NULL
#@ lappend where_cond "lib$i"
#@ lappend where_cond "IS"
#@ lappend where_cond "NULL"
#@ if {$i < $max_lib_no} {
#@ append set_values ,
#@ lappend where_cond "AND"
#@ }
#@ }
#@ return [concat $set_values "WHERE" $where_cond]
#@ }
#@ define_proc_attributes update_set_where -hidden
#@
#@ # Get extra db cells from incr LIBCHK-310 $tbl_name (those missing on lib1)
#@ # Scenario 2.1: check_library -logic_vs_physical with dbs added
#@ # Ex: extra_cells = "FOOT2X16_HVT FOOT2X2_HVT", llength = 0 if empty
#@ proc get_extra_db_cells_dbs_added {tbl_name} {
#@ variable extra_db_cells_dbs_added
#@ set extra_db_cells_dbs_added ""
#@ set tbl_exist [db3inc eval "pragma table_info($tbl_name)"]
#@ if [llength $tbl_exist] {
#@ set extra_db_cells_dbs_added [db3inc eval " SELECT cell_name from $tbl_name
WHERE lib1='missing' "]
#@ }
#@ return $extra_db_cells_dbs_added
#@ }
#@ define_proc_attributes get_extra_db_cells_dbs_added -hidden
#@
#@ # Get extra cells from updated LIBCHK-310 (those missing cells in all non-
removed dbs)
#@ # Scenario 2.2: check_library -logic_vs_physical with dbs removed
#@ proc get_extra_db_cells_dbs_removed {tbl_name cols rm_libs} {
#@ variable extra_db_cells_dbs_removed
#@ set where_eq_cond [eq_val_where $cols $rm_libs "missing"]
#@ set extra_db_cells_dbs_removed [db3 eval " SELECT cell_name FROM $tbl_name
$where_eq_cond "]
#@ return $extra_db_cells_dbs_removed
#@ }
#@ define_proc_attributes get_extra_db_cells_dbs_removed -hidden
#@
#@ # Get extra cells in dbs: from old LIBCHK-211
#@ # Get extra cells in frame: from old LIBCHK-210
#@ # Get cells in new frame from incr LIBCHK-210 with _rpt_phys = 1
#@ # Scenario 3.1: check_library -logic_vs_physical with frame added
#@ # Scenario 3.2: check_library -logic_vs_physical with frame removed
#@ proc get_extra_cells {tbl_name} {
#@ set extra_cells ""
#@ set tbl_exist [db3 eval "pragma table_info($tbl_name)"]
#@ if [llength $tbl_exist] {
#@ set extra_cells [db3 eval " SELECT cell_name FROM $tbl_name "]
#@ }
#@ return $extra_cells
#@ }
#@ define_proc_attributes get_extra_cells -hidden
#@
#@ # Get added, removed or replaced phys/logic lib names by comparing original and
incr LIBCHK-201 tables
#@ # lib_type = 'Logic#' or 'Physi#', update_type = 1 if added, -1 if removed, or 2
if replaced
#@ # replaced dbs include lib1 that is the reference for incr check
#@ # return list of updated lib names
#@ proc get_updated_libs {lib_type update_type} {
#@ set lib_names0 [db3 eval "select lib_name from libchk201_library_list
where lib_no like '${lib_type}%'"]
#@ set lib_names2 [db3inc eval "select lib_name from libchk201_library_list
where lib_no like '${lib_type}%'"]
#@
#@ set lib_names "" ;# updated lib name list
#@ if {$update_type == -1} {
#@ # find lib name in db3 from db3inc
#@ foreach lib_name $lib_names0 {
#@ set lib_exist [lsearch $lib_names2 $lib_name]
#@ # removed
#@ if {$lib_exist < 0} {
#@ lappend lib_names $lib_name
#@ }
#@ }
#@ } else {
#@ # find lib name in db3inc from db3
#@ foreach lib_name $lib_names2 {
#@ set lib_exist [lsearch $lib_names0 $lib_name]
#@ # added or replaced
#@ if {($update_type == 1 && $lib_exist < 0) || ($update_type == 2 && $lib_exist
>= 0)} {
#@ lappend lib_names $lib_name
#@ }
#@ }
#@ }
#@
#@ return $lib_names
#@ }
#@ define_proc_attributes get_updated_libs -hidden
#@
#@ # Get removed phys/logic lib names from -remove_lib option
#@ # lib_type = 'Logic#' or 'Physi#'
#@ # return list of updated lib names
#@ proc get_removed_libs {lib_type rm_libs} {
#@ set lib_names "" ;# removed lib name list
#@ foreach one_lib $rm_libs {
#@ if {$lib_type == "Logic#" && [regexp {^lib[0-9]+} $one_lib] && [info exists
lib_no2names0($one_lib)]} { ;# e.g. $one_lib is lib1
#@ lappend lib_names $lib_no2names0($one_lib)
#@ } else {
#@ lappend lib_names $one_lib
#@ }
#@ }
#@ return $lib_names
#@ }
#@ define_proc_attributes get_removed_libs -hidden
#@
#@ # after deleting records stored in new $tbl_name (libchk311, libchk321 and
libchk322), the remaining records in the old table
#@ # contain data that have consistent values across logic libs which will be used
to remove associated lines from autofix0.tcl
#@ proc get_removed_records {tbl_name} {
#@ set cell_attr_removed ""
#@ variable removed_lines
#@ set removed_lines ""
#@ set num_cols 3
#@ if {$tbl_name == "libchk311_mismatched_cells_slg"} {
#@ set cell_attr_removed [db3 eval " SELECT cell_name, attribute FROM $
{tbl_name}_old "]
#@ set num_cols 2
#@ } elseif {$tbl_name == "libchk321_mismatched_pins_slg"} {
#@ set cell_attr_removed [db3 eval " SELECT cell_name, pin_name, attribute FROM
${tbl_name}_old "]
#@ } elseif {$tbl_name == "libchk322_mismatched_pg_pins_slg"} {
#@ set cell_attr_removed [db3 eval " SELECT cell_name, pg_pin, attribute FROM $
{tbl_name}_old "]
#@ }
#@ # Compose pattern (e.g. '/cell_name\] -name attribute') for sed to delete
from autofix0.tcl
#@ set sz [llength $cell_attr_removed]
#@ for {set i 0} {$i < $sz} {incr i $num_cols} {
#@ set cell1 [lindex $cell_attr_removed $i]
#@ set attr [lindex $cell_attr_removed [expr $i+$num_cols-1]]
#@ if {$num_cols == 2} { # libchk311_mismatched_cells_slg
#@ set cell_ptn "\\/$cell1\] -name $attr"
#@ } elseif {$tbl_name == "libchk321_mismatched_pins_slg"} {
#@ set pin1 [lindex $cell_attr_removed [expr $i+1]];# pin
#@ set cell_ptn "\\/$cell1\\/$pin1\] -name $attr"
#@ } else { # libchk322_mismatched_pg_pins_slg
#@ # non-existent for now
#@ set pin1 [lindex $cell_attr_removed [expr $i+1]];# pg_pin
#@ set cell_ptn "\\/$cell1\] -filter name==$pin1"
#@ set pg_attr "pg_pin $attr"; # set_attribute $pg_pin %s %s
#@ }
#@ lappend removed_lines $cell_ptn
#@ if {$tbl_name == "libchk322_mismatched_pg_pins_slg"} {
#@ lappend removed_lines $pg_attr
#@ }
#@ }
#@
#@ return $removed_lines
#@ }
#@ define_proc_attributes get_removed_records -hidden
#@
#@ # if $tbl_name exists in db3, return $tbl_exist not empty
#@ proc table_exists {sql_file tbl_name} {
#@ global flib_sql_list
#@ sqlite3 db3 $sql_file
#@ set tbl_exist [db3 eval "pragma table_info($tbl_name)"]
#@ if [llength $tbl_exist] {
#@ set flib_sql_list $tbl_exist
#@ } else {
#@ set flib_sql_list ""
#@ }
#@ db3 close
#@ return $tbl_exist
#@ }
#@ define_proc_attributes table_exists -hidden
#@
#@ # List operations
#@ # lista*listb
#@ proc list_intersect { lista listb } {
#@ set result {}
#@ foreach elem $listb {
#@ if { [lsearch -exact $lista $elem] != -1 } {
#@ lappend result $elem
#@ }
#@ }
#@ return $result
#@ }
#@ define_proc_attributes list_intersect -hidden
#@
#@ # lista-listb
#@ proc list_exclude { lista listb } {
#@ set result {}
#@ foreach elem $lista {
#@ if { [lsearch -exact $listb $elem] == -1 } {
#@ lappend result $elem
#@ }
#@ }
#@ return $result
#@ }
#@ define_proc_attributes list_exclude -hidden
#@
#@ # update autofix.tcl
#@ # Scenario 1.1(add corner dbs): append set_attribute lines from autofix1.tcl
into autofix0.tcl
#@ # Scenario 2.1(add corner dbs): concat missing_cells, if any, with
extra_db_cells_dbs_added for create_dummy_physical_cell in autofix1.tcl and merge
into autofix0.tcl
#@ # append set_attribute lines for the new extra
cells into autofix0.tcl
#@ # Scenario 3.1(add frame): extra cells in dbs: Update autofix0.tcl in
$missing_cells for create_dummy_physical_cell and $extra_cells for
remove_physical_lib_cell
#@ # extra cells in frame: No change as no db cells are
added
#@ proc update_autofix_tcl {sql_file sql_file2} {
#@ # get autofix*.tcl file names
#@ set root_name [file rootname $sql_file]
#@ set root_name2 [file rootname $sql_file2]
#@ set tcl_name ${root_name}.tcl; # autofix0.tcl
#@ set tcl_name2 ${root_name2}.tcl; # autofix1.tcl
#@
#@ if ![file exists $tcl_name] { # if there is no original autofix0.tcl
generated
#@ return
#@ }
#@
#@ set extra_db_cells_vs_phys [get_extra_cells
"libchk211_missing_phys_cells"];# extra db cells from old libchk211 in autofix0.tc
#@
#@ variable db_removed
#@ variable frame_removed
#@ variable removed_phys_libs
#@ variable removed_lines; # from libchk311, libchk321 and libchk322
#@ variable extra_db_cells_dbs_removed; # from LIBCHK-310
#@
#@ if {[info exists removed_lines] && $db_removed == 1} {# if dbs removed
#@ # Scenario 1.2: remove lines from autofix0.tcl matching $removed_lines from
libchk311, libchk321 and libchk322
#@ foreach one_line $removed_lines {
#@ exec sed -i "/$one_line/d" $tcl_name;# removed lines that have consistent
values across dbs after db_removed
#@ }
#@ # Scenario 2.2: check_library -logic_vs_physical
#@ if [info exists missing_phys_cells] {
#@ # extra_db_cells_dbs_removed, missing_phys_cells
#@ set updated_missing_cells [list_exclude $missing_phys_cells
$extra_db_cells_dbs_removed]
#@ set updated_extra_cells [list_intersect $missing_phys_cells
$extra_db_cells_dbs_removed]
#@ # edit autofix0.tcl in-place
#@ exec sed -i 's/set missing_cells \".*\"/set
missing_cells \"$updated_missing_cells\"/' $tcl_name
#@ exec sed -i 's/set extra_cells \".*\"/set
extra_cells \"$updated_extra_cells\"/' $tcl_name
#@ }
#@ }
#@
#@ if {[info exists frame_removed] && $frame_removed == 1} {# if frame removed
#@ # Scenario 3.2, need re-xcheck if LIBCHK-210 or LIBCHK-211 exists.
#@ # else
#@ # removed_phys_libs
#@ set line_nums ""; # line number range to delete
#@ set line1 [exec grep -n "Auto fix script for library" $tcl_name];# get
physical lib name with line number
#@ regsub -all "\# Auto fix script for library " $line1 "" line1
#@ set linenum_to_libname [split $line1 :\n]
#@ set num_libs [llength $linenum_to_libname]
#@ for {set i 0} {$i < $num_libs} {incr i 2} {
#@ set libname [lindex $linenum_to_libname [expr $i+1]]
#@ if { [lsearch -exact $removed_phys_libs $libname] != -1 } {# if libname
is in removed list
#@ set line_num [lindex $linenum_to_libname $i]
#@ lappend line_nums $line_num
#@ set i2 [expr $i+2]
#@ if {$i2 < $num_libs} {
#@ set line_num2 [lindex $linenum_to_libname $i2]
#@ incr line_num2 -1
#@ lappend line_nums $line_num2
#@ }
#@ }
#@ }
#@ # delete lines associated with the physical lib removed
#@ set num_libs_removed [llength $line_nums]
#@ for {set i 0} {$i < $num_libs_removed} {incr i 2} {
#@ set line_num1 [lindex $line_nums $i]
#@ set line_num2 [lindex $line_nums [expr $i+1]]
#@ if {[expr $i+1] < $num_libs_removed} {
#@ exec sed -i "$line_num1,${line_num2}d" $tcl_name
#@ } else {
#@ exec sed -i "$line_num1,\$d" $tcl_name
#@ }
#@ }
#@ if {[file size $tcl_name] == 0} {
#@ exec rm -rf $tcl_name; # remove $tcl_name if empty
#@ }
#@ }
#@
#@ if ![file exists $tcl_name2] { # if there is no autofix1.tcl generated
#@ return
#@ }
#@
#@ # get extra cells
#@ set extra_db_cells_exist 0
#@ set extra_db_cells_dbs_added [get_extra_db_cells_dbs_added
"libchk310_missing_cells_slg"]
#@ if [llength $extra_db_cells_dbs_added] {
#@ set extra_db_cells_exist 1
#@ }
#@ set file_id [open $tcl_name a+]; # open autofix0.tcl and append lines from
autofix1.tcl
#@ # update tcl_name (autofix0.tcl)
#@ # scenario 3.1
#@ if [llength $extra_db_cells_vs_phys] {
#@ set missing_cells0 [exec grep missing_cells $tcl_name]
#@ set extra_cells0 [exec grep extra_cells $tcl_name]
#@ # edit autofix0.tcl in-place
#@ exec sed -i 's/$missing_cells0/$flib_missing_cells/' $tcl_name
#@ exec sed -i 's/$extra_cells0/$flib_extra_cells/' $tcl_name
#@ }
#@
#@ # read and process tcl_name2 and merge output to tcl_name
#@ set file_id2 [open $tcl_name2 r]
#@ set blk_tag 0; # identifier for autofix block
#@ while {[gets $file_id2 line] >= 0} {
#@ if {[regexp {^\# Cell attributes to be corrected} $line] >= 0} {
#@ set blk_tag 1
#@ } elseif {[regexp {^\# Pin attributes to be corrected} $line] >= 0} {
#@ set blk_tag 1
#@ } elseif {[regexp {^\# PG pin attributes to be corrected} $line] >= 0} {
#@ set blk_tag 1
#@ } elseif {[regexp {^\# Cells to be removed from physical libraries} $line] >=
0} {# xcheck starts
#@ set blk_tag 2
#@ } elseif {[regexp {^\# Cells to be removed from logic libraries} $line] >= 0}
{
#@ set blk_tag 3
#@ } elseif {[regexp {^\# Cells to be added in physical libraries} $line] >= 0}
{# missing_cells; create_dummy_physical_cell
#@ set blk_tag 4
#@ # } elseif {[regexp {^\# Cells to be added in logic libraries} $line] >= 0} {
#@ # set blk_tag 5
#@ } elseif {[regexp {^\# PG/pins to be corrected by DB in .+} $line] >= 0} {
#@ set blk_tag 6
#@ } elseif {[regexp {^\# PG/pins to be corrected by frame in .+} $line] >= 0} {
#@ set blk_tag 7
#@ } elseif {[regexp {^\# Diode cells to be corrected in physical libraries}
$line] >= 0} {# $diode_cells
#@ set blk_tag 8
#@ } elseif {[regexp {^\# Diode pins to be corrected in physical libraries}
$line] >= 0} {
#@ set blk_tag 8
#@ } elseif {[regexp {^\# Pins to be added in physical librariess} $line] >= 0}
{
#@ set blk_tag 9
#@ } elseif {[regexp {^\# Pins to be added in logic librariess} $line] >= 0} {
#@ set blk_tag 10
#@ } elseif {[regexp {^\# Pins to be removed from physical librariess} $line] >=
0} {
#@ set blk_tag 11
#@ } elseif {[regexp {^\# Pins to be removed from logic librariess} $line] >= 0}
{
#@ set blk_tag 12
#@ }
#@
#@ # append the related block to autofix0.tcl
#@ switch -exact $blk_tag {
#@ 1 { # logic lib
#@ # append set_attribute lines from autofix1.tcl into autofix0.tcl
#@ if {$extra_db_cells_exist == 1} {
#@ puts $file_id "$line"
#@ }
#@ }
#@ 4 { # missing_cells+=extra_db_cells_dbs_added; create_dummy_physical_cell
#@ if {$extra_db_cells_exist == 1} {
#@ if {[regexp {^set missing_cells .*} $line] >= 0} {
#@ #set extra_db_cells_vs_phys [get_extra_cells
"libchk211_missing_phys_cells"]
#@ if [llength $extra_db_cells_vs_phys] {# if autofix0.tcl has
missing_cells, concat new extra cells
#@ puts $file_id "concat \$missing_cells
$extra_db_cells_dbs_added"
#@ } else {
#@ puts $file_id "set
missing_cells \"$extra_db_cells_dbs_added\""
#@ }
#@ }
#@ }
#@ }
#@ 6 { # PG/pins to be corrected by DB
#@ if {$extra_db_cells_exist == 1} {
#@ # if $cell1 is in $extra_db_cells_dbs_added, append it in
autofix0.tcl
#@ set slash1 [string first '/' $line]
#@ set slash2 [string last '/' $line]
#@ incr slash2 -1
#@ #set_attribute [get_physical_lib_pins */cell1/VDD] port_type power
#@ set cell1 [string range $line $slash1 $slash2]
#@ if { [lsearch -exact $extra_db_cells_dbs_added $cell1] >= 0 } {
#@ puts $file_id "$line"
#@ }
#@ }
#@ }
#@ 8 { # Diode cells
#@ if {$extra_db_cells_exist == 1} {
#@ puts $file_id "$line"
#@ #if {[regexp {^set diode_cells .*} $line] >= 0} {# set diode_cells
"diode cell name list"
#@ #puts $file_id {concat $diode_cells $extra_db_cells_dbs_added};#
concat diode cells from $extra_db_cells_dbs_added
#@ #}
#@ }
#@ }
#@ default { }
#@ }
#@ }
#@
#@ close $file_id
#@
#@ }
#@ define_proc_attributes update_autofix_tcl -hidden
#@ }
#@ # -- End source /cad/synopsys/lc/cur/auxx/lc/report_check_library_records.tcl

#@ source $synopsys_root/auxx/lc/set_attribute.tcl
#@ # -- Starting source /cad/synopsys/lc/cur/auxx/lc/set_attribute.tcl

#@ proc set_attribute { args } {


#@ parse_proc_arguments -args $args ra
#@ set option_error 0
#@
#@ if {[info exists ra(library_name)] &&
#@ ![string length $ra(library_name)] } {
#@ if { [info exist ::env(LCLM_DBG)] } {
#@ echo "DBG: empty library_name"
#@ }
#@ return;
#@ }
#@ if {[info exists ra(library_name)] && [info exists ra(-objects)]} {
#@ echo "Error: Cannot specify library_object with -objects. (CMD-001)"
#@ set option_error 1
#@ }
#@ if {[info exists ra(attribute_name)] && [info exists ra(-name)]} {
#@ echo "Error: Cannot specify attribute_name with -name. (CMD-001)"
#@ set option_error 1
#@ }
#@ if {[info exists ra(attribute_value)] && [info exists ra(-value)]} {
#@ echo "Error: Cannot specify attribute_value with -value. (CMD-001)"
#@ set option_error 1
#@ }
#@ if { $option_error } {
#@ return
#@ }
#@ if {![info exists ra(library_name)] && ![info exists ra(-objects)]} {
#@ echo "Error: Must specify one of these options: library_object or -objects.
(CMD-004)"
#@ set option_error 1
#@ }
#@ if {![info exists ra(attribute_name)] && ![info exists ra(-name)]} {
#@ echo "Error: Must specify one of these options: attribute_name or -name.
(CMD-004)"
#@ set option_error 1
#@ }
#@ if {![info exists ra(attribute_value)] && ![info exists ra(-value)]} {
#@ echo "Error: Must specify one of these options: attribute_value or -value.
(CMD-004)"
#@ set option_error 1
#@ }
#@ if { $option_error } {
#@ return
#@ }
#@ if { [info exists ra(-objects)]} {
#@ set library_name $ra(-objects)
#@ } else {
#@ set library_name $ra(library_name)
#@ }
#@ if { [info exists ra(-name)]} {
#@ set attribute_name $ra(-name)
#@ } else {
#@ set attribute_name $ra(attribute_name)
#@ }
#@
#@ if { [info exists ra(-value)]} {
#@ set attribute_value $ra(-value)
#@ } else {
#@ set attribute_value $ra(attribute_value)
#@ }
#@
#@ if { [info exists ra(-class)]} {
#@ set class_value $ra(-class)
#@ } else {
#@ set class_value ""
#@ }
#@
#@ if { $class_value != "" } {
#@ if { [string match "fusion*" $class_value ] == 1 } {
#@ set class_name $class_value
#@ } else {
#@ set class_name [get_lib_attribute $library_name "c_name" -quiet -class
$class_value]
#@ }
#@ } else {
#@ set class_name [get_lib_attribute $library_name "c_name" -quiet]
#@ }
#@
#@ if { [string match "logical*" $class_name ] == 1 } {
#@ # skip physical attribute
#@ if [string match "pattern_must_join" $attribute_name ] {
#@ return
#@ }
#@ set cmd set_logical_attribute
#@ } elseif { [string match "fusion*" $class_name ] == 1 } {
#@ set cmd set_fusion_attribute
#@ } else {
#@ set cmd set_physical_attribute
#@ }
#@ lappend cmd $library_name $attribute_name $attribute_value
#@ if { $class_value != "" } {
#@ lappend cmd "-class" $class_value
#@ }
#@ return [eval $cmd]
#@ }
#@
#@ define_proc_attributes set_attribute \
#@ -info "set library object attribute" \
#@ -define_args {
#@ {library_name "library" library_name list optional}
#@ {attribute_name "attribute name" attribute_name string optional}
#@ {attribute_value "attribute value" attribute_value string optional}
#@ {-class "class name" class string optional}
#@ {-name "attr name" name string optional}
#@ {-value "attr value" value string optional}
#@ {-objects "attr value" object string optional}
#@ {-quiet "Suppress all messages" "" boolean optional}
#@ }
#@
#@ alias set_lib_attribute set_attribute
#@
#@
#@ proc get_attribute { args } {
#@ parse_proc_arguments -args $args ra
#@ set option_error 0
#@
#@ if {[info exists ra(library_name)] &&
#@ ![string length $ra(library_name)] } {
#@ if { [info exist ::env(LCLM_DBG)] } {
#@ echo "DBG: empty library_name"
#@ }
#@ return;
#@ }
#@ if {[info exists ra(object_list)] && [info exists ra(-objects)]} {
#@ echo "Error: Cannot specify object_list with -objects. (CMD-001)"
#@ set option_error 1
#@ }
#@ if {[info exists ra(attribute_name)] && [info exists ra(-name)]} {
#@ echo "Error: Cannot specify attribute_name with -name. (CMD-001)"
#@ set option_error 1
#@ }
#@ if { $option_error } {
#@ return -code error
#@ }
#@ if {![info exists ra(object_list)] && ![info exists ra(-objects)]} {
#@ echo "Error: Must specify one of these options: object_list or -objects.
(CMD-004)"
#@ set option_error 1
#@ }
#@ if {![info exists ra(attribute_name)] && ![info exists ra(-name)]} {
#@ echo "Error: Must specify one of these options: attribute_name or -name.
(CMD-004)"
#@ set option_error 1
#@ }
#@ if { $option_error } {
#@ return -code error
#@ }
#@ if { [info exists ra(-objects)]} {
#@ set library_name $ra(-objects)
#@ } else {
#@ set library_name $ra(object_list)
#@ }
#@ if { [info exists ra(-name)]} {
#@ set attribute_name $ra(-name)
#@ } else {
#@ set attribute_name $ra(attribute_name)
#@ }
#@
#@ if { [info exists ra(-class)]} {
#@ set class_value $ra(-class)
#@ } else {
#@ set class_value ""
#@ }
#@
#@ if { [info exists ra(-value_list)]} {
#@ set has_value_list 1
#@ } else {
#@ set has_value_list 0
#@ }
#@ if { [info exists ra(-line_number)]} {
#@ set has_line_number 1
#@ } else {
#@ set has_line_number 0
#@ }
#@ if { [info exists ra(-user_defined_data)]} {
#@ set has_user_defined_data 1
#@ } else {
#@ set has_user_defined_data 0
#@ }
#@ if { [info exists ra(-ctl)]} {
#@ set has_ctl 1
#@ } else {
#@ set has_ctl 0
#@ }
#@ if { [info exists ra(-quiet)]} {
#@ set has_quiet 1
#@ } else {
#@ set has_quiet 0
#@ }
#@
#@ if { $class_value != "" } {
#@ if { [string match "fusion*" $class_value ] == 1 } {
#@ set class_name $class_value
#@ } else {
#@ set class_name [get_lib_attribute $library_name "c_name" -quiet -class
$class_value]
#@ }
#@ } else {
#@ set class_name [get_lib_attribute $library_name "c_name" -quiet]
#@ }
#@
#@ if { [string match "fusion*" $class_name ] == 1 } {
#@ set cmd __get_attribute
#@ if { $has_line_number } {
#@ echo "Error: -line_number not supported for $class_name object. Ignored."
#@ }
#@ if { $has_user_defined_data } {
#@ echo "Error: -user_defined_data not supported for $class_name object.
Ignored."
#@ }
#@ if { $has_ctl } {
#@ echo "Error: -ctl not supported for $class_name object. Ignored."
#@ }
#@ if { $has_value_list } {
#@ lappend cmd "-value_list"
#@ }
#@ } else {
#@ set cmd get_lib_attribute
#@ if { $has_line_number } {
#@ lappend cmd "-line_number"
#@ }
#@ if { $has_user_defined_data } {
#@ lappend cmd "-user_defined_data"
#@ }
#@ if { $has_ctl } {
#@ lappend cmd "-ctl"
#@ }
#@ if { $has_value_list } {
#@ echo "Error: -value_list not supported for $class_name object. Ignored."
#@ }
#@ }
#@ lappend cmd $library_name $attribute_name
#@ if { $class_value != "" } {
#@ lappend cmd "-class" $class_value
#@ }
#@ if { $has_quiet } {
#@ lappend cmd "-quiet"
#@ }
#@ return [eval $cmd]
#@ }
#@
#@ define_proc_attributes get_attribute \
#@ -info "set library object attribute" \
#@ -define_args {
#@ {-class "class name" class string optional}
#@ {-line_number "returns the line number of the -of_objects" "" boolean
optional}
#@ {-user_defined_data "returns user defined object" "" boolean optional}
#@ {-ctl "returns ctl attribute for cell object" "" boolean optional}
#@ {-quiet "Do not report any messages" "" boolean optional}
#@ {-value_list "Force single object return as list" "" boolean optional}
#@ {-objects "Object(s) from which to get the attribute" object_spec list
optional}
#@ {-name "Name of the attribute" attr_name string optional}
#@ {object_list "list of library objects to get attribute" object_list list
optional}
#@ {attribute_name "an attribute name of the library object" attribute_name
string optional}
#@ }
#@
#@ # -- End source /cad/synopsys/lc/cur/auxx/lc/set_attribute.tcl

#@
#@ #for read_lib -html
#@ source ${synopsys_root}/auxx/lc/read_lib_html_msg_list.tcl
#@ # -- Starting source /cad/synopsys/lc/cur/auxx/lc/read_lib_html_msg_list.tcl

#@ ##############################################################################
#@ # message ID and descriptions for read_lib -html
#@ # Rev01. changed LBDB-715 to LBDB-262, STAR 9001225503, jizhan, Aug 17
#@ # Rev02. removed LBDB-825, STAR 9001541784, jizhan, Aug 19
#@ ##############################################################################
#@ set read_lib_ccs_noise_msg {
#@ LBDB-262
#@ LBDB-660
#@ LBDB-706
#@ LBDB-708
#@ LBDB-709
#@ LBDB-710
#@ LBDB-711
#@ LBDB-712
#@ LBDB-713
#@ LBDB-714
#@ LBDB-716
#@ LBDB-717
#@ LBDB-718
#@ LBDB-733
#@ LBDB-734
#@ LBDB-784
#@ LBDB-824
#@ LBDB-858
#@ LBDB-898
#@ LBDB-899
#@ LBDB-908
#@ LBDB-920
#@ LBDB-935
#@ LBDB-936
#@ LBDB-937
#@ LBDB-938
#@ LBDB-939
#@ }
#@ # -- End source /cad/synopsys/lc/cur/auxx/lc/read_lib_html_msg_list.tcl

#@ #alias list_commands help


#@
#@ if { [info commands "create_physical_lib"] == "create_physical_lib" } {
#@ # create_physical_lib only exists in lc2_shell, slc_shell don't need to source
those script
#@ # You can add a file named LC2_setup.tcl to auxx/LC2/tcl if you want
#@ # some extra initialization separate from the .synopsys files.
#@ lappend auto_path [file join $::synopsys_root auxx LC2 tcl]
#@ if { [file exists [file join $::synopsys_root auxx LC2 tcl LC2_setup.tcl]] }
{
#@ source [file join $::synopsys_root auxx LC2 tcl LC2_setup.tcl]
#@ }
#@ if { [file exists [file join $::synopsys_root auxx LC2 tcl report_lib.tcl]] }
{
#@ #for report_lib mega command
#@ source [file join $::synopsys_root auxx LC2 tcl report_lib.tcl]
#@ }
#@
#@ if { [file exists [file join $::synopsys_root auxx LC2 tcl
lclm_get_lib.tcl]] } {
#@ #for get_lib* mega command
#@ source [file join $::synopsys_root auxx LC2 tcl lclm_get_lib.tcl]
#@ }
#@ }
#@ # Temporary fix for the LMC_HOME variable- set it to an empty string
#@
#@ if { [catch {getenv LMC_HOME } __err ] != 0 } {
#@ setenv LMC_HOME ""
#@ }
#@
#@ #
#@ #
#@ # Site-Specific Variables
#@ #
#@ # These are the variables that are most commonly changed at a
#@ # specific site, either upon installation of the Synopsys software,
#@ # or by specific engineers in their local .synopsys_lc.setup files.
#@ #
#@ #
#@
#@ # from the System Variable Group
#@ set search_path [list . ${synopsys_root}/libraries/syn]
#@
#@ # do we need command_log_file ?
#@ set command_log_file $sh_command_log_file
#@
#@ set view_command_log_file "./view_command.log"
#@
#@ # from the View Variable group
#@ if { $sh_arch == "hp700" } {
#@ set text_print_command "lp -d"
#@ } else {
#@ set text_print_command "lpr -Plw"
#@ }
#@
#@
#@ #
#@ # System Variable Group:
#@ #
#@ # These variables are system-wide variables.
#@ #
#@
#@ set verbose_messages "true"
#@ set echo_include_commands "true"
#@ set suppress_errors {}
#@
#@ # variables pertaining to VHDL library generation
#@ set vhdllib_timing_mesg "true"
#@ set vhdllib_timing_xgen "false"
#@ set vhdllib_timing_checks "true"
#@ set vhdllib_negative_constraint "false"
#@ set vhdllib_glitch_handle "true"
#@ set vhdllib_pulse_handle "use_vhdllib_glitch_handle"
#@ # /*set vhdllib_architecture {FTBM, UDSM, FTSM, FTGS, VITAL} */
#@ set vhdllib_architecture {VITAL}
#@ set vhdllib_tb_compare 0
#@ set vhdllib_tb_x_eq_dontcare FALSE
#@ set vhdllib_logic_system "ieee-1164"
#@ set vhdllib_logical_name ""
#@
#@ # variables pertaining to technology library processing
#@ set read_db_lib_warnings FALSE
#@ set read_translate_msff TRUE
#@ set libgen_max_differences -1
#@
#@ set view_on_line_doc_cmd ${synopsys_root}/sold
#@
#@ # Aliases for backwards compatibility or other reasons
#@ #alias groupvar group_variable
#@ alias free remove_lib
#@
#@ # set filename for logging input file
#@ set filename_log_file "lc_filenames.log"
#@ # whether to delete the filename log after the normal exits
#@ set exit_delete_filename_log_file "true"
#@
#@ #if { lc_shell_status == 0 } {
#@ # sh echo {Fatal: System .synopsys_lc.setup file not read properly. Please re-
invoke.}
#@ # sh echo {Note that the init file .synopsy_lc.setup of lc_shell}
#@ # sh echo {is a subset of the dc_shell init file .synopsys_dc.setup.}
#@ # sh echo {If a non lc_shell command is encountered in the init file,}
#@ # sh echo {an error message will be issued and the processing might terminate.}
#@ # sh echo {Please refer to the Library Compiler reference manual for supported
commands.}
#@ # quit
#@ #}
#@ proc get_legacy_lc_search_path { } {
#@ set exec_path "invalid"
#@ if {[info exists ::env(SYNOPSYS_SYN_ROOT)] && [file exists
$::env(SYNOPSYS_SYN_ROOT)/$::sh_arch/syn/bin/common_shell_exec] } {
#@ set exec_path $::env(SYNOPSYS_SYN_ROOT)/$::sh_arch/syn/bin/common_shell_exec
#@ }
#@ return $exec_path
#@ }
#@
#@ proc get_legacy_lc_synopsys_root { } {
#@ return [file dirname [file dirname [file dirname [file dirname
$::legacy_lc_search_path] ] ] ]
#@ }
#@
#@
#@ proc valias {v_orig v_alias} {
#@ uplevel 1 "upvar 0 $v_orig $v_alias"
#@ }
#@
#@ set legacy_lc_result_path "/tmp"
#@ set legacy_lc_replay_tcl_file "common_shell_command.tcl"
#@ set legacy_lc_search_path [get_legacy_lc_search_path]
#@ valias lc_enable_legacy_library_compiler lc_enable_common_shell_lc
#@ set compile_lib_list ""
#@ set compile_libs_pre_script_path ""
#@ set compile_libs_script_path ""
#@ set compile_libs_log_file_prefix ""
#@ set compile_libs_log_file_suffix ""
#@ set compile_libs_temp_directory ""
#@ set compile_libs_cdpl_log_directory ""
#@ set compile_libs_lic_got false
#@ set compile_libs_var_exported false
#@ set compile_libs_app_opt_exported false
#@ set compile_libs_process_label_exported false
#@ set compile_libs_set_policy_exported false
#@
#@ proc legacy_lc_lib2saif { args } {
#@ return [common_shell_write_lib $args]
#@ }
#@
#@
#@ proc run_legacy_lc_with_echo {tcl_file} {
#@ set chan [open "|$::legacy_lc_search_path -shell lc_shell -r
[get_legacy_lc_synopsys_root] -f $tcl_file" r]
#@ # things to do: In debug mode, we want copy the whole output (beginning to end)
#@ # to a file
#@ if {$::lc_keep_legacy_lc_temp_files} {
#@ set log [open $::legacy_lc_result_path/$::legacy_lc_log_path/libra.log w]
#@ }
#@ set echo 0
#@ set ret 0
#@ set firstLine true
#@ while {[gets $chan line] >= 0} {
#@ if {$::lc_keep_legacy_lc_temp_files} { puts $log $line }
#@ if {[string equal -length 7 $line "##@@@##"]} {
#@ set echo [expr ! $echo]
#@ continue;
#@ }
#@ if {$echo} {
#@ if { $firstLine } {
#@ set firstLine false
#@ continue;
#@ } else {
#@ if {$line == "1"} {
#@ set ret 1
#@ } elseif {$line == "0"} {
#@ set ret 0
#@ } else {
#@ puts $line
#@ }
#@ }
#@ }
#@ }
#@ close $chan
#@ if {$::lc_keep_legacy_lc_temp_files} {
#@ close $log
#@ }
#@ return $ret;
#@ }
#@
#@ proc common_shell_read_lib {args } {
#@ if { [print_no_common_shell_found $::legacy_lc_search_path] } {
#@ return 0
#@ }
#@ set_folder_var
#@ set tcl_file
"$::legacy_lc_result_path/$::legacy_lc_log_path/$::legacy_lc_replay_tcl_file"
#@ set chan [open $tcl_file a]
#@ export_tcl_var $chan
#@ gen_common_shell_read_lib_procedure $chan $args
#@ close $chan
#@ echo "Invoking common shell Library Compiler..."
#@ run_legacy_lc_with_echo $tcl_file
#@ libra_shell_read_dbs
#@ common_shell_clean_up
#@ }
#@
#@ proc common_shell_add_pg_pin {args } {
#@ if { [print_no_common_shell_found $::legacy_lc_search_path] } {
#@ return 0
#@ }
#@ # to use error message in synthesis root as the command is called under the
hood
#@ set synopsys ""
#@ set synopsys_syn_root ""
#@ if {[info exists ::env(SYNOPSYS)]} {
#@ set synopsys $::env(SYNOPSYS)
#@ }
#@ if {[info exists ::env(SYNOPSYS_SYN_ROOT)]} {
#@ set synopsys_syn_root $::env(SYNOPSYS_SYN_ROOT)
#@ }
#@ if {[string compare "$synopsys" "$synopsys_syn_root"] && [string compare
"$synopsys_syn_root" ""]} {
#@ setenv SYNOPSYS "$synopsys_syn_root"
#@ }
#@ set_folder_var
#@ set tcl_file
"$::legacy_lc_result_path/$::legacy_lc_log_path/$::legacy_lc_replay_tcl_file"
#@ set chan [open $tcl_file a]
#@ export_tcl_var $chan
#@ gen_common_shell_add_pg_pin_procedure $chan $args
#@ close $chan
#@ run_legacy_lc_with_echo $tcl_file
#@ common_shell_clean_up
#@ # restore SYNOPSYS enviroment after call synthesis
#@ if {[string compare "$synopsys" ""]} {
#@ setenv SYNOPSYS "$synopsys"
#@ } else {
#@ unsetenv SYNOPSYS
#@ }
#@ }
#@
#@ proc common_shell_write_lib {args } {
#@ if { [print_no_common_shell_found $::legacy_lc_search_path] } {
#@ return 0
#@ }
#@ set_folder_var
#@ set tcl_file
$::legacy_lc_result_path/$::legacy_lc_log_path/$::legacy_lc_replay_tcl_file
#@ set chan [open $tcl_file a]
#@ export_tcl_var $chan
#@ libra_shell_write_db
#@ gen_common_shell_write_lib_procedure $chan $args
#@ close $chan
#@ set ret [run_legacy_lc_with_echo $tcl_file]
#@ common_shell_clean_up
#@ return $ret
#@ }
#@
#@ proc common_shell_update_lib {args } {
#@ if { [print_no_common_shell_found $::legacy_lc_search_path] } {
#@ return 0
#@ }
#@ set_folder_var
#@ set tcl_file
"$::legacy_lc_result_path/$::legacy_lc_log_path/$::legacy_lc_replay_tcl_file"
#@ set chan [open $tcl_file a]
#@ export_tcl_var $chan
#@ libra_shell_write_db
#@ gen_common_shell_write_lib_procedure $chan $args
#@ close $chan
#@ run_legacy_lc_with_echo $tcl_file
#@ libra_shell_read_dbs
#@ common_shell_clean_up
#@ }
#@
#@ # create the unique folder under tmp
#@ proc set_folder_var { } {
#@ set fileName [pid]
#@ set ::legacy_lc_log_path [append fileName "_" [clock microseconds]]
#@ file delete -force $::legacy_lc_result_path/$::legacy_lc_log_path
#@ file mkdir $::legacy_lc_result_path/$::legacy_lc_log_path
#@ }
#@
#@ # export all the vars
#@ proc export_tcl_var { fileName } {
#@ # 2016.03.09 Liping Zhao
#@ # Fix STAR 9001014310.
#@ # These vars should not be exported.
#@ # 2017.02.09 Liping Zhao
#@ # Fix STAR 90001079691
#@ set filter_attrs [dict create ::errorInfo 1 ::sh_continue_on_error
1 ::sh_command_log_file 1 ::command_log_file 1 ]
#@ foreach var [info vars ::* ] {
#@ if [array exists $var] {
#@ continue;
#@ }
#@ if [ dict exists $filter_attrs $var ] {
#@ continue;
#@ } elseif [catch { set temp [set $var] } result] {
#@ continue;
#@ }
#@ if { [set $var] != "" } {
#@ puts $fileName "catch \{ set $var \[list \[binary format H* [make_hex
[set $var]]\]\] \}"
#@ } else {
#@ puts $fileName "catch \{ set $var \"\" \}"
#@ }
#@ }
#@ puts $fileName "catch \{ set lc_cpu_allocation \[list \[binary format H*
[make_hex $::lc_cpu_allocation]\]\] \}"
#@
#@ }
#@
#@ proc export_tcl_vars { fileName } {
#@ set filter_attrs [dict create ::errorInfo 1 ::sh_continue_on_error
1 ::sh_command_log_file 1 ::command_log_file 1 ]
#@ foreach var [info vars ::* ] {
#@ if [array exists $var] {
#@ continue;
#@ }
#@ if [ dict exists $filter_attrs $var ] {
#@ continue;
#@ } elseif [catch { set temp [set $var] } result] {
#@ continue;
#@ }
#@ if { [set $var] != "" } {
#@ puts $fileName "catch \{ set $var \[list \[binary format H* [make_hex
[set $var]]\]\] \}"
#@ } else {
#@ puts $fileName "catch \{ set $var \"\" \}"
#@ }
#@ }
#@ puts $fileName "catch \{ set lc_disable_ccs_noise_extraction \[list \[binary
format H* [make_hex $::lc_disable_ccs_noise_extraction]\]\] \}"
#@ puts $fileName "catch \{ set lc_read_lib_exclude_ccs \[list \[binary format
H* [make_hex $::lc_read_lib_exclude_ccs]\]\] \}"
#@
#@ }
#@
#@ # export all the vars for fusion lib related procedure
#@ proc export_flib_tcl_var { fileName } {
#@ # 2016.03.09 Liping Zhao
#@ # Fix STAR 9001014310.
#@ # These vars should not be exported.
#@ # 2017.02.09 Liping Zhao
#@ # Fix STAR 90001079691
#@ # 2021.07.27 Hongqi Yu
#@ # Use "..." instead of [list ...]
#@ set filter_attrs [dict create ::errorInfo 1 ::sh_continue_on_error
1 ::sh_command_log_file 1 ::command_log_file 1 ]
#@ # include hidden vars
#@ foreach var [concat [info vars ::* ] [set ::lc_parameter_export_list] ] {
#@ if [array exists $var] {
#@ continue;
#@ }
#@ if [ dict exists $filter_attrs $var ] {
#@ continue;
#@ } elseif [catch { set temp [set $var] } result] {
#@ puts $fileName "#cannot set $var"
#@ continue;
#@ }
#@ if { [set $var] != "" } {
#@ puts $fileName "catch \{ set $var \"\[binary format H* [make_hex [set
$var]]\]\" \}"
#@ } else {
#@ puts $fileName "catch \{ set $var \"\" \}"
#@ }
#@ }
#@ }
#@
#@ # excuted by libra shell to read the dbs generated by common_shell
#@ proc libra_shell_read_dbs { } {
#@ set dbNames ""
#@ foreach var [glob -nocomplain -directory
$::legacy_lc_result_path/$::legacy_lc_log_path *.db] {
#@ append dbNames " " $var
#@ read_db $var
#@ }
#@ set ::lc_intermediate_db_files $dbNames
#@ }
#@
#@ # display the log file genrated by common_shell in Libra and then remove the
unique folder
#@ proc common_shell_clean_up { } {
#@ if { ! $::lc_keep_legacy_lc_temp_files } {
#@ file delete -force $::legacy_lc_result_path/$::legacy_lc_log_path
#@ }
#@ }
#@
#@ # excuted by libra shell to write out the in-memory dbs
#@ proc libra_shell_write_db { } {
#@ foreach db $::lc_intermediate_db_files {
#@ write_lib $db -o $::legacy_lc_result_path/$::legacy_lc_log_path/$db.db
#@ }
#@ }
#@
#@ proc gen_common_shell_read_lib_procedure { fileName args} {
#@ puts $fileName "##@@@## gen_common_shell_read_lib"
#@ puts $fileName "eval [lindex [lindex $args 0] 0]"
#@ puts $fileName "##@@@##"
#@ puts $fileName "set lc_write_view_db_file false"
#@ puts $fileName "set librs \[get_libs\]"
#@ puts $fileName "for {set i 0} {\$i < \[ sizeof \$librs \]} {incr i 1} {"
#@ puts $fileName " set lib \[index_collection \$librs \$i]"
#@ puts $fileName " redirect -var a \"query_object \$lib\" "
#@ puts $fileName " if \[regexp {{(\")?(gtech)(\")?}} \$a\] { "
#@ puts $fileName " } elseif \[regexp {{(\")?(standard.sldb)(\")?}} \$a] { "
#@ puts $fileName " } else {"
#@ puts $fileName " regexp {{(\")?(\[^\"\]*)(\")?}} \$a b c d e "
#@ puts $fileName " write_lib \$d -o \$legacy_lc_result_path/\
$legacy_lc_log_path/\$d.db"
#@ puts $fileName " }"
#@ puts $fileName "}"
#@ puts $fileName "exit"
#@ }
#@
#@ proc gen_common_shell_write_lib_procedure { fileName args } {
#@ puts $fileName "foreach var \[glob -nocomplain -directory \
$legacy_lc_result_path/\$legacy_lc_log_path *.db\] { read_db \$var }"
#@ puts $fileName "set lc_write_view_db_file false"
#@ puts $fileName "##@@@## gen_common_shell_write_lib"
#@ puts $fileName "eval [lindex [lindex $args 0] 0]"
#@ puts $fileName "##@@@##"
#@ puts $fileName "exit"
#@ }
#@
#@ proc gen_common_shell_add_pg_pin_procedure { fileName args } {
#@ puts $fileName "##@@@## gen_common_shell_add_pg_pin"
#@ puts $fileName "eval [lindex $args 0]"
#@ puts $fileName "##@@@##"
#@ puts $fileName "exit"
#@ }
#@
#@ proc gen_is_none_tech_file {} {
#@ sh touch $::nglc_result_path/$::nglc_log_path/is_non_tech_file
#@ }
#@
#@ proc gen_is_symbol_file {} {
#@ sh touch $::nglc_result_path/$::nglc_log_path/is_symbol_file
#@ }
#@
#@ proc print_no_common_shell_found {arg} {
#@ if {![file exists $arg] } {
#@ echo "Error: No common shell Library Compiler found. (LCSH-2)"
#@ return 1
#@ }
#@ return 0
#@ }
#@
#@ proc set_host_options args {
#@ global lc_cpu_allocation
#@ if {[string compare [lindex $args 0] "-max_cores"]} {
#@ puts "Must specify one of these options: -max_cores. (CMD-004)"
#@ return
#@ } elseif {[llength $args] != 2} {
#@ puts "value not specified for option '-max_cores' (CMD-008)"
#@ return
#@ }
#@ set val [lindex $args 1]
#@ if {[string is integer $val] && ($val > 0) && ($val <= 16) } {
#@ set lc_cpu_allocation [expr $val - 1]
#@ } else {
#@ puts "value $val for option '-max_cores' not in range (1-16). (CMD-019)"
#@ }
#@ return
#@ }
#@
#@ proc remove_host_options {} {
#@ global lc_cpu_allocation
#@ set lc_cpu_allocation 0
#@ }
#@
#@ proc report_host_options {} {
#@ global lc_cpu_allocation
#@ global sh_product_version
#@ puts "****************************************
#@ Report : host_options
#@ Version: $sh_product_version
#@ Date : [date]
#@ ****************************************
#@
#@ Max_cores: [expr $lc_cpu_allocation + 1]
#@ "
#@ }
#@
#@ define_proc_attributes set_host_options \
#@ -info "Controls the maximum number of CPU cores that can be used for read_lib
command." \
#@ -define_args {
#@ {-max_cores "number_of_cores" max_cores int required}
#@ }
#@
#@ define_proc_attributes remove_host_options -info "Removes -max_cores
specification set by the set_host_options command."
#@
#@ define_proc_attributes report_host_options -info "Prints a report of multi-CPU
processing options as defined by the set_host_options command."
#@
#@ # to call init_criteria() and pass lc/lc/check_library/logic_sig_digits.tcl
#@ set_check_library_options
#@
#@ #
#@ # .synopsys_nwtn.setup: Application initialization file
#@ #
#@
#@ # Enable stack trace output on fatal. Not available for all architectures.
#@ if { $sh_arch == "sparcOS5" || $sh_arch == "linux" } {
#@ set_unix_variable SYNOPSYS_TRACE ""
#@ }
#@
#@
#@ proc make_hex s {
#@ binary scan $s H* hex
#@ return $hex
#@ }
#@
#@ proc gen_compile_lib_procedure { fileName libName dbFileDir logFileDir } {
#@ set libBaseName [file rootname [file tail $libName]]
#@ set logFileName
$::compile_libs_log_file_prefix$libBaseName$::compile_libs_log_file_suffix.log
#@ if {$::lc_compile_libs_skip_license_check != true} {
#@ puts $fileName "set skipLicense false"
#@ puts $fileName "redirect -variable license_checkout_status {list_license}"
#@ puts $fileName "set license_log \[split \$license_checkout_status \"\\n\"\]"
#@ puts $fileName "set license_log_len \[llength \$license_log\]"
#@ puts $fileName "if {\$license_log_len > 4} {"
#@ puts $fileName " for {set i 2} { \$i < \$license_log_len} {incr i} {"
#@ puts $fileName " set line \[lindex \$license_log \$i\]"
#@ puts $fileName " if {\[regexp {(\\s)+Library-Compiler(\\d)?$} \$line\]} {"
#@ puts $fileName " set skipLicense true"
#@ puts $fileName " break "
#@ puts $fileName " }"
#@ puts $fileName " } "
#@ puts $fileName "} "
#@ puts $fileName "if {\$skipLicense != true} {"
#@ puts $fileName "while { \$::compile_libs_lic_got != true } { "
#@ puts $fileName " set result \[ get_license Library-Compiler \] "
#@ puts $fileName " if { \$result >0 } { "
#@ puts $fileName " set ::compile_libs_lic_got true "
#@ puts $fileName " break "
#@ puts $fileName " } "
#@ puts $fileName " echo \"not got\" "
#@ puts $fileName " after 30000"
#@ puts $fileName "}"
#@ puts $fileName "}"
#@ }
#@ puts $fileName "if { \$::compile_libs_var_exported != true } {"
#@ puts $fileName " echo \"var not exported\" "
#@ export_tcl_vars $fileName
#@ puts $fileName " set ::compile_libs_var_exported true"
#@ puts $fileName "}"
#@ #puts $fileName "info hostname"
#@ #puts $fileName "date"
#@ if { $logFileDir == "" } {
#@ set logFileDir [pwd]
#@ }
#@ if {$::lc_cpu_allocation > 0} {
#@ puts $fileName "set_host_options -max_cores [expr $::lc_cpu_allocation + 1]"
#@ #puts $fileName "report_host_options"
#@ }
#@ puts $fileName "redirect -file $logFileDir/$logFileName { set librs \[read_lib
$libName -return_lib_collection\] }"
#@ puts $fileName "for {set i 0} {\$i < \[ sizeof \$librs \]} {incr i 1} {"
#@ puts $fileName " set lib \[index_collection \$librs \$i]"
#@ puts $fileName " redirect -var a \"query_object \$lib\" "
#@ puts $fileName " regexp {{(\")?(\[^\"\]*)(\")?}} \$a b c d e "
#@ if { $dbFileDir == "" } {
#@ set dbFileDir [pwd]
#@ }
#@ puts $fileName " write_lib \$d -o $dbFileDir/\$d.db"
#@ puts $fileName "}"
#@ #puts $fileName "incr ::compile_libs_count"
#@ #puts $fileName "echo \"\[info hostname\]_compile_libs_count : \
$::compile_libs_count\""
#@ puts $fileName "if { \[ sizeof_collection \$librs \] >0 } {"
#@ puts $fileName " set sucFlag \[ open
$::compile_libs_temp_directory/sucFlags/\[file tail $libName\] a \]"
#@ puts $fileName " close \$sucFlag "
#@ puts $fileName "} else {"
#@ puts $fileName " set failFlag \[ open
$::compile_libs_temp_directory/failFlags/\[file tail $libName\] a \]"
#@ puts $fileName " close \$failFlag "
#@ puts $fileName "}"
#@ puts $fileName "remove_lib -all"
#@
#@ }
#@
#@ proc gen_create_frame_from_lef_proc { fileName } {
#@ puts $fileName "proc create_frame_from_lef { lefFiles framePath techName
scaleFactor minCoverDbs postScript } {"
#@ puts $fileName " set __cmd \[list create_physical_lib\]"
#@ puts $fileName " set __frameTailName \[file tail \$framePath\]"
#@ puts $fileName " set __frameTailRootName \[file rootname \
$__frameTailName\]"
#@ puts $fileName " lappend __cmd \$__frameTailRootName"
#@ puts $fileName " if { \$techName != \"\" } {"
#@ puts $fileName " lappend __cmd \"-technology\""
#@ puts $fileName " lappend __cmd \$techName"
#@ puts $fileName " }"
#@ puts $fileName " if { \$scaleFactor != \"\" } {"
#@ puts $fileName " lappend __cmd \"-scale_factor\""
#@ puts $fileName " lappend __cmd \$scaleFactor"
#@ puts $fileName " }"
#@ puts $fileName " eval \$__cmd"
#@ puts $fileName " set __frameCreationOptions \[get_app_option_value -name
fusion_lib.create_frame_options\]"
#@ puts $fileName " if { \$__frameCreationOptions != \"\" } {"
#@ puts $fileName " read_lef \$lefFiles"
#@ puts $fileName " } else {"
#@ puts $fileName " read_lef \$lefFiles -direct_to_frame"
#@ puts $fileName " }"
#@ puts $fileName " if { \$minCoverDbs != \"\" } {"
#@ puts $fileName " update_physical_properties -include_pin_attributes
secondary_pg -verbose -format db -files \$minCoverDbs"
#@ puts $fileName " if { \$__frameCreationOptions == \"\" } {"
#@ puts $fileName " recreate_frame"
#@ puts $fileName " }"
#@ puts $fileName " }"
#@ puts $fileName " if { \$__frameCreationOptions != \"\" } {"
#@ puts $fileName " eval create_frame \$__frameCreationOptions"
#@ puts $fileName " }"
#@ puts $fileName " if { \$postScript != \"\" } {"
#@ puts $fileName " source -echo -verbose \$postScript"
#@ puts $fileName " }"
#@ puts $fileName " write_physical_lib -force -output \$framePath"
#@ puts $fileName "}"
#@ }
#@
#@ proc gen_generate_frame_from_mw_proc { fileName } {
#@ puts $fileName "proc generate_frame_from_mw_wrapper { mwLibPath framePath
logFileDir minCoverDbs internal useIcc } {"
#@ puts $fileName " if { \$internal } {"
#@ puts $fileName " set internalOpt \"-internal\""
#@ puts $fileName " } else {"
#@ puts $fileName " set internalOpt \"\""
#@ puts $fileName " }"
#@ puts $fileName " if { \$useIcc } {"
#@ puts $fileName " set useIccOpt \"-use_icc\""
#@ puts $fileName " } else {"
#@ puts $fileName " set useIccOpt \"\""
#@ puts $fileName " }"
#@ puts $fileName " eval generate_frame_from_mw \$framePath -mw_lib \$mwLibPath
-log_file_dir \$logFileDir \$internalOpt \$useIccOpt"
#@ puts $fileName " open_physical_lib \$framePath"
#@ puts $fileName " if { \$minCoverDbs != \"\" } {"
#@ puts $fileName " update_physical_properties -include_pin_attributes
secondary_pg -verbose -format db -files \$minCoverDbs"
#@ puts $fileName " recreate_frame"
#@ puts $fileName " }"
#@ puts $fileName " write_physical_lib -force -output \$framePath"
#@ puts $fileName "}"
#@ }
#@
#@ proc gen_recreate_frame_proc { fileName } {
#@ puts $fileName "proc recreate_frame {} {"
#@ puts $fileName " set __lib_cells \[get_physical_lib_cells -quiet
*/*/design\]"
#@ puts $fileName " foreach_in_collection __design_view \$__lib_cells {"
#@ puts $fileName " set __modified \[get_attribute \${__design_view}
is_modified\]"
#@ puts $fileName " if { \$__modified == \"true\" } {"
#@ puts $fileName " set __lib_cell_name \[get_attribute \$__design_view
name\]"
#@ puts $fileName " set __config_mode \[get_attribute \$__design_view
config_frame_option_mode\]"
#@ puts $fileName " if { \$__config_mode != \"\" } {"
#@ puts $fileName " configure_frame_options -auto_run_create_frame -
mode \$__config_mode \${__lib_cell_name}"
#@ puts $fileName " } else {"
#@ puts $fileName " create_frame \${__lib_cell_name}"
#@ puts $fileName " }"
#@ puts $fileName " }"
#@ puts $fileName " }"
#@ puts $fileName "}"
#@ }
#@
#@ proc gen_remove_physical_cells_proc { fileName } {
#@ puts $fileName "proc remove_physical_cells { removeCellNames } {"
#@ puts $fileName " foreach __cell_name \$removeCellNames {"
#@ puts $fileName " foreach __view_name { design frame layout } {"
#@ puts $fileName " catch {"
#@ puts $fileName " set __cells_to_remove \[ get_physical_lib_cells -
quiet */\${__cell_name}/\${__view_name} \]"
#@ puts $fileName " if { \[sizeof_collection \${__cells_to_remove} \] > 0
} {"
#@ puts $fileName " remove_physical_lib_cells \${__cells_to_remove}"
#@ puts $fileName " }"
#@ puts $fileName " }"
#@ puts $fileName " }"
#@ puts $fileName " }"
#@ puts $fileName "}"
#@ }
#@
#@ proc gen_cdpl_header_procedure { fileName restoreProcessScript setPolicyScript}
{
#@ puts $fileName "if { \$::compile_libs_var_exported != true } {"
#@ puts $fileName " echo \"var not exported\" "
#@ export_flib_tcl_var $fileName
#@ puts $fileName " set ::compile_libs_var_exported true"
#@ puts $fileName "}"
#@
#@ puts $fileName "if { \$::compile_libs_app_opt_exported != true } {"
#@ puts $fileName " echo \"app options not exported\" "
#@ set appOptionScriptPath $::compile_libs_script_path/app_options.tcl
#@ if { ![file exists $appOptionScriptPath] } {
#@ write_app_options -non_default -output $appOptionScriptPath
#@ }
#@ puts $fileName " catch \{ read_app_options $appOptionScriptPath \}"
#@ puts $fileName " set ::compile_libs_app_opt_exported true"
#@ puts $fileName "}"
#@
#@ if {$restoreProcessScript != ""} {
#@ puts $fileName "if { \$::compile_libs_process_label_exported != true } {"
#@ puts $fileName " echo \"process label setting not exported\" "
#@ puts $fileName $restoreProcessScript
#@ puts $fileName " set ::compile_libs_process_label_exported true"
#@ puts $fileName "}"
#@ }
#@
#@ if {$setPolicyScript != ""} {
#@ puts $fileName "if { \$::compile_libs_set_policy_exported != true } {"
#@ puts $fileName " echo \"early data check policy setting not exported\" "
#@ puts $fileName $setPolicyScript
#@ puts $fileName " set ::compile_libs_set_policy_exported true"
#@ puts $fileName "}"
#@ }
#@ }
#@
#@ proc gen_check_status_procedure { fileName statusFile useReturn } {
#@ puts $fileName "if { \$__suc == 0 && \$__res == 1 } {"
#@ puts $fileName " set __sucFlag \[ open
$::compile_libs_temp_directory/sucFlags/$statusFile a \]"
#@ puts $fileName " close \$__sucFlag "
#@ if { $useReturn } {
#@ puts $fileName " return 1"
#@ } else {
#@ puts $fileName " exit 0"
#@ }
#@ puts $fileName "} else {"
#@ puts $fileName " set __failFlag \[ open
$::compile_libs_temp_directory/failFlags/$statusFile a \]"
#@ puts $fileName " close \$__failFlag "
#@ if { $useReturn } {
#@ puts $fileName " return 0"
#@ } else {
#@ puts $fileName " exit 1"
#@ }
#@ puts $fileName "}"
#@ }
#@
#@ proc gen_compile_flib_script { useCdpl index libPath dbNames frameNdms
dbCreateFlag frameCreateFlag isForce logFilePath tclFilePath maxThreadCount verbose
{removeCellNames ""} {restoreProcessScript ""} {setPolicyScript ""} } {
#@ set libPath [file normalize $libPath]
#@ set libName [file tail $libPath]
#@ set statusFile "compile_fusion_lib_${index}_${libName}"
#@
#@ set fileName [open $tclFilePath a]
#@ if { $useCdpl } {
#@ gen_cdpl_header_procedure $fileName $restoreProcessScript $setPolicyScript
#@ }
#@
#@ if { $isForce } {
#@ set isForce "-force"
#@ } else {
#@ set isForce ""
#@ }
#@ if { $dbNames!="" } {
#@ set dbNamesOpt "-dbs $dbNames"
#@ } else {
#@ set dbNamesOpt ""
#@ }
#@ if { $frameNdms!="" } {
#@ set frameNdmsOpt "-frames $frameNdms"
#@ } else {
#@ set frameNdmsOpt ""
#@ }
#@ if { !$useCdpl && $verbose } {
#@ set teeOpt "-tee"
#@ } else {
#@ set teeOpt ""
#@ }
#@
#@ if { $removeCellNames != "" } {
#@ gen_remove_physical_cells_proc $fileName
#@ }
#@
#@ set logFilePath [file normalize $logFilePath]
#@ puts $fileName "set __suc -1"
#@ puts $fileName "set __res 0"
#@ puts $fileName "redirect $teeOpt -file $logFilePath {"
#@ puts $fileName " set __suc \[ catch {"
#@ puts $fileName " set_host_options -max_cores $maxThreadCount"
#@
#@ puts $fileName " create_fusion_lib $libPath $dbNamesOpt $frameNdmsOpt
$dbCreateFlag $frameCreateFlag $isForce"
#@ puts $fileName " } __res \]"
#@ puts $fileName " if { \$__suc == 0 && \$__res == 1 } {"
#@ puts $fileName " set __suc \[ catch {"
#@ if { $removeCellNames != "" } {
#@ puts $fileName " remove_physical_cells {$removeCellNames}"
#@ }
#@ puts $fileName " close_fusion_lib -save"
#@ puts $fileName " } __res \]"
#@ puts $fileName " }"
#@ puts $fileName " catch { close_fusion_lib -force }"
#@ puts $fileName " set __res"
#@ puts $fileName "}"
#@ gen_check_status_procedure $fileName $statusFile 1
#@
#@ close $fileName
#@
#@ lappend ::compile_lib_list $statusFile
#@ }
#@
#@ proc gen_compile_flib_from_lef_script { useCdpl index libPath dbNames lefNames
framePathes techName scaleFactor postScripts dbCreateFlag frameCreateFlag isForce
logFilePath tclFilePath maxThreadCount verbose {minCoverDbs ""} {includeCellNames
""} {restoreProcessScript ""} {setPolicyScript ""} } {
#@ set libPath [file normalize $libPath]
#@ set libName [file tail $libPath]
#@ set statusFile "compile_fusion_lib_${index}_${libName}"
#@
#@ set fileName [open $tclFilePath a]
#@ if { $useCdpl } {
#@ gen_cdpl_header_procedure $fileName $restoreProcessScript $setPolicyScript
#@ }
#@
#@ if { !$useCdpl && $verbose } {
#@ set teeOpt "-tee"
#@ } else {
#@ set teeOpt ""
#@ }
#@ if { $isForce } {
#@ set isForce "-force"
#@ } else {
#@ set isForce ""
#@ }
#@ if { $dbNames!="" } {
#@ set dbNamesOpt "-dbs $dbNames"
#@ } else {
#@ set dbNamesOpt ""
#@ }
#@ if { $framePathes!="" } {
#@ set frameNdmsOpt "-frames $framePathes"
#@ } else {
#@ set frameNdmsOpt ""
#@ }
#@
#@ gen_recreate_frame_proc $fileName
#@ gen_create_frame_from_lef_proc $fileName
#@
#@ set logFilePath [file normalize $logFilePath]
#@ puts $fileName "set __suc -1"
#@ puts $fileName "set __res 0"
#@ puts $fileName "redirect $teeOpt -file $logFilePath {"
#@ puts $fileName " set __saved_include_design_filters \"[get_app_option_value
-name physical_lib.include_design_filters]\""
#@ puts $fileName " set_app_options -name physical_lib.include_design_filters -
value $includeCellNames"
#@ puts $fileName " set __suc \[ catch {"
#@ puts $fileName " set_host_options -max_cores $maxThreadCount"
#@
#@ puts $fileName " set __lefNames $lefNames"
#@ puts $fileName " set __framePathes $framePathes"
#@ puts $fileName " set __postScripts $postScripts"
#@ puts $fileName " set __index 0"
#@ puts $fileName " set __frameNum [llength $lefNames]"
#@ puts $fileName " for {} {\$__index < \$__frameNum} {incr __index} {"
#@ puts $fileName " set __lefFiles \[lindex \$__lefNames \$__index\]"
#@ puts $fileName " set __framePath \[lindex \$__framePathes \$__index\]"
#@ puts $fileName " set __postScript \[lindex \$__postScripts \$__index\]"
#@
#@ puts $fileName " catch {"
#@ puts $fileName " create_frame_from_lef \$__lefFiles \$__framePath
{$techName} {$scaleFactor} {$minCoverDbs} \$__postScript"
#@ puts $fileName " }"
#@ puts $fileName " close_physical_lib"
#@ puts $fileName " }"
#@
#@ puts $fileName " create_fusion_lib $libPath $dbNamesOpt $frameNdmsOpt
$dbCreateFlag $frameCreateFlag $isForce"
#@ puts $fileName " } __res \]"
#@ puts $fileName " if { \$__suc == 0 && \$__res == 1 } {"
#@ puts $fileName " set __suc \[ catch {"
#@ puts $fileName " close_fusion_lib -save"
#@ puts $fileName " } __res \]"
#@ puts $fileName " }"
#@ puts $fileName " catch { close_fusion_lib -force }"
#@ puts $fileName " set_app_options -name physical_lib.include_design_filters -
value \$__saved_include_design_filters"
#@ puts $fileName " set __res"
#@ puts $fileName "}"
#@ gen_check_status_procedure $fileName $statusFile 1
#@
#@ close $fileName
#@
#@ lappend ::compile_lib_list $statusFile
#@ }
#@
#@ proc gen_compile_flib_from_mw_script { useCdpl index libPath dbNames mwLibPathes
framePathes dbCreateFlag frameCreateFlag isForce logFilePath tclFilePath logFileDir
maxThreadCount allow10NmMw verbose {minCoverDbs ""} {includeCellNames ""}
{restoreProcessScript ""} {setPolicyScript ""} } {
#@ set libPath [file normalize $libPath]
#@ set libName [file tail $libPath]
#@ set statusFile "compile_fusion_lib_${index}_${libName}"
#@
#@ set fileName [open $tclFilePath a]
#@ if { $useCdpl } {
#@ gen_cdpl_header_procedure $fileName $restoreProcessScript $setPolicyScript
#@ }
#@
#@ if { !$useCdpl && $verbose } {
#@ set teeOpt "-tee"
#@ } else {
#@ set teeOpt ""
#@ }
#@ if { $isForce } {
#@ set isForce "-force"
#@ } else {
#@ set isForce ""
#@ }
#@ if { $dbNames!="" } {
#@ set dbNamesOpt "-dbs $dbNames"
#@ } else {
#@ set dbNamesOpt ""
#@ }
#@ if { $framePathes!="" } {
#@ set frameNdmsOpt "-frames $framePathes"
#@ } else {
#@ set frameNdmsOpt ""
#@ }
#@
#@ gen_recreate_frame_proc $fileName
#@ gen_generate_frame_from_mw_proc $fileName
#@
#@ set logFilePath [file normalize $logFilePath]
#@ puts $fileName "set __suc -1"
#@ puts $fileName "set __res 0"
#@ puts $fileName "redirect $teeOpt -file $logFilePath {"
#@ puts $fileName " set __saved_include_design_filters \"[get_app_option_value
-name physical_lib.include_design_filters]\""
#@ puts $fileName " set_app_options -name physical_lib.include_design_filters -
value $includeCellNames"
#@ puts $fileName " set __suc \[ catch {"
#@ puts $fileName " set_host_options -max_cores $maxThreadCount"
#@
#@ puts $fileName " set __mwLibPathes $mwLibPathes"
#@ puts $fileName " set __framePathes $framePathes"
#@ puts $fileName " set __logFileDir $logFileDir"
#@ puts $fileName " set __index 0"
#@ puts $fileName " set __frameNum [llength $framePathes]"
#@ puts $fileName " for {} {\$__index < \$__frameNum} {incr __index} {"
#@ puts $fileName " set __mwLibPath \[lindex \$__mwLibPathes \$__index\]"
#@ puts $fileName " set __framePath \[lindex \$__framePathes \$__index\]"
#@
#@ puts $fileName " catch {"
#@ puts $fileName " generate_frame_from_mw_wrapper \$__mwLibPath \
$__framePath \$__logFileDir {$minCoverDbs} $allow10NmMw $useCdpl"
#@ puts $fileName " }"
#@ puts $fileName " close_physical_lib"
#@ puts $fileName " }"
#@
#@ puts $fileName " create_fusion_lib $libPath $dbNamesOpt $frameNdmsOpt
$dbCreateFlag $frameCreateFlag $isForce"
#@ puts $fileName " } __res \]"
#@ puts $fileName " if { \$__suc == 0 && \$__res == 1 } {"
#@ puts $fileName " set __suc \[ catch {"
#@ puts $fileName " close_fusion_lib -save"
#@ puts $fileName " } __res \]"
#@ puts $fileName " }"
#@ puts $fileName " catch { close_fusion_lib -force }"
#@ puts $fileName " set_app_options -name physical_lib.include_design_filters -
value \$__saved_include_design_filters"
#@ puts $fileName " set __res"
#@ puts $fileName "}"
#@ gen_check_status_procedure $fileName $statusFile 1
#@
#@ close $fileName
#@
#@ lappend ::compile_lib_list $statusFile
#@ }
#@
#@ proc gen_compile_flib_lef_to_frame_script { useCdpl index lefName framePath
techName scaleFactor postScript logFilePath tclFilePath maxThreadCount verbose } {
#@ set frameTailName [file tail $framePath]
#@ set frameTailRootName [file rootname $frameTailName]
#@ set statusFile "lef_to_frame_${index}_${frameTailName}"
#@
#@ set fileName [open $tclFilePath a]
#@
#@ if { $useCdpl } {
#@ gen_cdpl_header_procedure $fileName {} {}
#@ }
#@
#@ if { !$useCdpl && $verbose } {
#@ set teeOpt "-tee"
#@ } else {
#@ set teeOpt ""
#@ }
#@
#@ gen_recreate_frame_proc $fileName
#@ gen_create_frame_from_lef_proc $fileName
#@
#@ set logFilePath [file normalize $logFilePath]
#@ puts $fileName "set __suc -1"
#@ puts $fileName "set __res 0"
#@ puts $fileName "redirect $teeOpt -file $logFilePath {"
#@ puts $fileName " set __suc \[ catch {"
#@ puts $fileName " set_host_options -max_cores $maxThreadCount"
#@ puts $fileName " create_frame_from_lef $lefName $framePath {$techName}
{$scaleFactor} {} {$postScript}"
#@ puts $fileName " } __res \]"
#@ puts $fileName " catch { close_physical_lib }"
#@ puts $fileName " set __res"
#@ puts $fileName "}"
#@ gen_check_status_procedure $fileName $statusFile 1
#@
#@ close $fileName
#@
#@ lappend ::compile_lib_list $statusFile
#@ }
#@
#@ # this is for icc shell
#@ proc gen_compile_flib_dump_mw_fram_script { useCdpl index mwLibPath dataPath
logFilePath tclFilePath allow10NmMw verbose } {
#@ set mwLibTailName [file tail $mwLibPath]
#@ set mwLibTailRootName [file rootname $mwLibTailName]
#@ set statusFile "dump_mw_fram_${index}_${mwLibTailName}"
#@
#@ set fileName [open $tclFilePath a]
#@
#@ set logFilePath [file normalize $logFilePath]
#@
#@ if { !$useCdpl && $verbose } {
#@ set teeOpt "-tee"
#@ } else {
#@ set teeOpt ""
#@ }
#@ if { $allow10NmMw } {
#@ set internalOpt "-internal"
#@ } else {
#@ set internalOpt ""
#@ }
#@ puts $fileName "set __suc -1"
#@ puts $fileName "set __res 0"
#@ puts $fileName "redirect $teeOpt -file $logFilePath {"
#@ puts $fileName " set __suc \[ catch {"
#@ puts $fileName " export_icc2_frame -library $mwLibPath -output_directory
$dataPath $internalOpt"
#@ puts $fileName " } __res \]"
#@ puts $fileName " set __res"
#@ puts $fileName "}"
#@ gen_check_status_procedure $fileName $statusFile $useCdpl
#@
#@ close $fileName
#@
#@ lappend ::compile_lib_list $statusFile
#@ }
#@
#@ # this is for lc shell
#@ proc gen_compile_flib_generate_frame_from_mw_data_script { useCdpl index
mwLibPath dataFilePath framePath techName logFilePath tclFilePath verbose } {
#@ set frameTailName [file tail $framePath]
#@ set frameDirName [file dirname $framePath]
#@ set statusFile "generate_frame_from_mw_data_${index}_${frameTailName}"
#@
#@ set fileName [open $tclFilePath a]
#@
#@ set logFilePath [file normalize $logFilePath]
#@
#@ if { !$useCdpl && $verbose } {
#@ set teeOpt "-tee"
#@ } else {
#@ set teeOpt ""
#@ }
#@ puts $fileName "set __suc -1"
#@ puts $fileName "set __res 0"
#@ puts $fileName "redirect $teeOpt -append -file $logFilePath {"
#@ puts $fileName " set __pwd [pwd]"
#@ puts $fileName " set __suc \[ catch {"
#@ puts $fileName " cd $frameDirName"
#@ puts $fileName " create_physical_lib $frameTailName -technology $techName"
#@ puts $fileName " import_icc_fram $dataFilePath"
#@ puts $fileName " write_physical_lib -output $framePath"
#@ puts $fileName " } __res \]"
#@ puts $fileName " catch { close_physical_lib }"
#@ puts $fileName " cd \$__pwd"
#@ puts $fileName " set __res"
#@ puts $fileName "}"
#@ gen_check_status_procedure $fileName $statusFile 1
#@
#@ close $fileName
#@
#@ lappend ::compile_lib_list $statusFile
#@ }
#@
#@ proc gen_compile_flib_generate_frame_from_mw_fram_script { useCdpl index
mwLibPath framePath logFilePath tclFilePath logFileDir allow10NmMw verbose } {
#@ set frameTailName [file tail $framePath]
#@ set statusFile "generate_frame_from_mw_fram_${index}_${frameTailName}"
#@
#@
#@ set fileName [open $tclFilePath a]
#@
#@ if { $useCdpl } {
#@ gen_cdpl_header_procedure $fileName {} {}
#@ }
#@
#@ set logFilePath [file normalize $logFilePath]
#@
#@ if { !$useCdpl && $verbose } {
#@ set teeOpt "-tee"
#@ } else {
#@ set teeOpt ""
#@ }
#@ if { $allow10NmMw } {
#@ set internalOpt "-internal"
#@ } else {
#@ set internalOpt ""
#@ }
#@ if { $useCdpl } {
#@ set useIccOpt "-use_icc"
#@ } else {
#@ set useIccOpt ""
#@ }
#@ puts $fileName "set __suc -1"
#@ puts $fileName "set __res 0"
#@ puts $fileName "redirect $teeOpt -file $logFilePath {"
#@ puts $fileName " set __suc \[ catch {"
#@ puts $fileName " generate_frame_from_mw $framePath -mw_lib $mwLibPath -
log_file_dir $logFileDir $internalOpt $useIccOpt"
#@ puts $fileName " } __res \]"
#@ puts $fileName " set __res"
#@ puts $fileName "}"
#@ gen_check_status_procedure $fileName $statusFile 1
#@
#@ close $fileName
#@
#@ lappend ::compile_lib_list $statusFile
#@ }
#@
#@ proc gen_compile_flib_create_dummy_frame_script { framePath techName scaleFactor
logFilePath tclFilePath verbose } {
#@ set frameTailName [file tail $framePath]
#@ set frameTailRootName [file rootname $frameTailName]
#@
#@ set fileName [open $tclFilePath a]
#@
#@ set logFilePath [file normalize $logFilePath]
#@ if { $scaleFactor != "" } {
#@ set scaleFactor "-scale_factor $scaleFactor"
#@ }
#@
#@ if { $verbose } {
#@ set teeOpt "-tee"
#@ } else {
#@ set teeOpt ""
#@ }
#@ puts $fileName "set __suc -1"
#@ puts $fileName "set __res 0"
#@ puts $fileName "redirect $teeOpt -file $logFilePath {"
#@ puts $fileName " set __suc \[ catch {"
#@ puts $fileName " create_physical_lib $frameTailRootName -technology
$techName $scaleFactor"
#@ puts $fileName " write_physical_lib -output $framePath"
#@ puts $fileName " } __res \]"
#@ puts $fileName " catch { close_physical_lib }"
#@ puts $fileName " set __res"
#@ puts $fileName "}"
#@ puts $fileName "if { \$__suc == 0 && \$__res == 1 } {"
#@ puts $fileName " return 1"
#@ puts $fileName "} else {"
#@ puts $fileName " return 0"
#@ puts $fileName "}"
#@
#@ close $fileName
#@ }
#@
#@ proc gen_compile_flib_update_frame_script { useCdpl index frameNdm logFilePath
tclFilePath maxThreadCount verbose {minCoverDbs ""} } {
#@ set fileName [open $tclFilePath a]
#@
#@ set frameNdm [file normalize $frameNdm]
#@ set libName [file tail $frameNdm]
#@ set statusFile "update_frame_${index}_${libName}"
#@
#@ if { $useCdpl } {
#@ gen_cdpl_header_procedure $fileName {} {}
#@ }
#@
#@ set logFilePath [file normalize $logFilePath]
#@ if { !$useCdpl && $verbose } {
#@ set teeOpt "-tee"
#@ } else {
#@ set teeOpt ""
#@ }
#@
#@ gen_recreate_frame_proc $fileName
#@
#@ puts $fileName "set __suc -1"
#@ puts $fileName "set __res 0"
#@ puts $fileName "redirect $teeOpt -file $logFilePath {"
#@ puts $fileName " set __suc \[ catch {"
#@ puts $fileName " set_host_options -max_cores $maxThreadCount"
#@
#@ puts $fileName " set __frameNdm \"$frameNdm\""
#@ puts $fileName " set __minCoverDbs \"$minCoverDbs\""
#@ puts $fileName " open_physical_lib \$__frameNdm"
#@ puts $fileName " update_physical_properties -include_pin_attributes
secondary_pg -verbose -format db -files \$__minCoverDbs"
#@ puts $fileName " recreate_frame"
#@ puts $fileName " write_physical_lib -force -output \$__frameNdm"
#@ puts $fileName " } __res \]"
#@ puts $fileName " close_physical_lib"
#@ puts $fileName " set __res"
#@ puts $fileName "}"
#@ gen_check_status_procedure $fileName $statusFile 1
#@
#@ close $fileName
#@
#@ lappend ::compile_lib_list $statusFile
#@ }
#@
#@ proc gen_source_lm_migration_scripts_procedure { index lmTclPath logFileDir
maxThreadCount } {
#@ set prefix "source_lm_migration_scripts_"
#@ set prefixI "$prefix$index"
#@ set cwd "${::compile_libs_cwd}"
#@ set wrkDir "${cwd}/${prefixI}"
#@ set tclFileName "$::compile_libs_script_path/${prefixI}"
#@ set fileName [open $tclFileName a]
#@ set logFileName ${prefixI}.log
#@ puts $fileName "if { \$::compile_libs_var_exported != true } {"
#@ puts $fileName " echo \"var not exported\" "
#@ export_tcl_var $fileName
#@ puts $fileName " set ::compile_libs_var_exported true"
#@ puts $fileName "}"
#@ puts $fileName "set suc -1"
#@ if { $logFileDir=="" } {
#@ set logFileDir ${cwd}
#@ }
#@ set cmd "redirect -file $logFileDir/$logFileName { set suc \[set_host_options
-max_cores $maxThreadCount; report_host_options"
#@ puts $fileName "$cmd; file delete -force $wrkDir; file mkdir $wrkDir; cd
$wrkDir; source -echo -verbose $lmTclPath; cd ${cwd}] }"
#@ puts $fileName "if { 1 } {"
#@ puts $fileName " set sucFlag \[ open
$::compile_libs_temp_directory/sucFlags/\[file tail $lmTclPath\] a \]"
#@ puts $fileName " close \$sucFlag "
#@ puts $fileName "} else {"
#@ puts $fileName " set failFlag \[ open
$::compile_libs_temp_directory/failFlags/\[file tail $lmTclPath\] a \]"
#@ puts $fileName " close \$failFlag "
#@ puts $fileName "}"
#@
#@ close $fileName
#@ }
#@
#@ proc report_compile_libs { } {
#@ set sucLibs [glob -nocomplain -directory
$::compile_libs_temp_directory/sucFlags * ]
#@ set failLibs [glob -nocomplain -directory
$::compile_libs_temp_directory/failFlags * ]
#@ set failSuclibs ""
#@ foreach lib $failLibs {
#@ lappend failSuclibs [file tail $lib]
#@ }
#@ foreach lib $sucLibs {
#@ lappend failSuclibs [file tail $lib]
#@ }
#@ set allLibs ""
#@ foreach lib $::compile_lib_list {
#@ lappend allLibs [file tail $lib]
#@ }
#@ set allLibs [ lsort -unique $allLibs ]
#@ set failSuclibs [ lsort -unique $failSuclibs ]
#@ set index2 0
#@ set fatalLibs ""
#@ foreach libBaseName $allLibs {
#@ #echo $libBaseName, [lindex $failSuclibs $index2]
#@ if { $libBaseName != [lindex $failSuclibs $index2] } {
#@ lappend fatalLibs $libBaseName
#@ continue
#@ } else {
#@ incr index2
#@ }
#@ }
#@ echo "=================================================================="
#@ echo "[llength $sucLibs] libs are compiled successfully, [llength $failLibs]
failed, [llength $fatalLibs] fatal."
#@ set failSuclibs ""
#@ set nFail [llength $failLibs]
#@ if { $nFail > 0} {
#@ echo "The following are the failed list. Please check the log file for
details."
#@ foreach lib $failLibs {
#@ echo [file tail $lib]
#@ }
#@ }
#@ set nFatal [llength $fatalLibs]
#@ if { $nFatal > 0} {
#@ echo "The following libs meet unexpected error which cause LC to be fatal.
Please contact support from Synopsys."
#@ foreach lib $fatalLibs {
#@ echo $lib
#@ }
#@ }
#@ return [expr $nFail + $nFatal]
#@ }
#@
#@ proc report_run_result { work logFileDir } {
#@ set sucLibs [glob -nocomplain -directory
$::compile_libs_temp_directory/sucFlags * ]
#@ set failLibs [glob -nocomplain -directory
$::compile_libs_temp_directory/failFlags * ]
#@ set failSuclibs ""
#@ foreach lib $failLibs {
#@ lappend failSuclibs [file tail $lib]
#@ }
#@ foreach lib $sucLibs {
#@ lappend failSuclibs [file tail $lib]
#@ }
#@ set allLibs ""
#@ foreach lib $::compile_lib_list {
#@ lappend allLibs [file tail $lib]
#@ }
#@ set allLibs [ lsort -unique $allLibs ]
#@ set failSuclibs [ lsort -unique $failSuclibs ]
#@ set index2 0
#@ set fatalLibs ""
#@ foreach libBaseName $allLibs {
#@ #echo $libBaseName, [lindex $failSuclibs $index2]
#@ if { $libBaseName != [lindex $failSuclibs $index2] } {
#@ lappend fatalLibs $libBaseName
#@ continue
#@ } else {
#@ incr index2
#@ }
#@ }
#@ echo "=================================================================="
#@ echo "[llength $sucLibs] $work successfully, [llength $failLibs] failed,
[llength $fatalLibs] fatal."
#@ set failSuclibs ""
#@ set nFail [llength $failLibs]
#@ if { $nFail > 0} {
#@ echo "Error: there are failed libs. Please check following log files for
detail."
#@ foreach lib $failLibs {
#@ if { $logFileDir != "" } {
#@ echo "${logFileDir}/[file tail $lib].log"
#@ } else {
#@ echo "[file tail $lib].log"
#@ }
#@ }
#@ }
#@ set nFatal [llength $fatalLibs]
#@ if { $nFatal > 0} {
#@ echo "The following libs meet unexpected error which cause LC to be fatal.
Please contact support from Synopsys."
#@ foreach lib $fatalLibs {
#@ echo $lib
#@ }
#@ }
#@ return [expr $nFail + $nFatal]
#@ }
#@
#@ proc report_source_lm_migration_scripts { debug } {
#@ set sucLibs [glob -nocomplain -directory
$::compile_libs_temp_directory/sucFlags * ]
#@ set sucLibsCnt [llength $sucLibs]
#@ # move generated directories (*.ndm, *.nlib or more?) to ./
#@ # foreach dir [glob -nocomplain -type d
$::compile_libs_cwd/source_lm_migration_scripts_*/*] {
#@ # set dest "$::compile_libs_cwd/[file tail $dir]"
#@ # file delete -force $dest
#@ # file rename -force $dir $dest
#@ # }
#@ # and then delete source_lm_migration_scripts_*
#@ # foreach dir [glob -nocomplain -type d
$::compile_libs_cwd/source_lm_migration_scripts_*] {
#@ # file delete -force $dir
#@ # }
#@ # delete tmp hidden dir
#@ if { $debug == false } {
#@ set scripts [glob -nocomplain -directory $::compile_libs_script_path * ]
#@ if { [llength $scripts] == $sucLibsCnt } {
#@ ### add a short sleep before the delete waiting for file handle close
#@ set ::img_create_sleep 0
#@ after 5000 [list set ::img_create_sleep 1]
#@ vwait ::img_create_sleep
#@ file delete -force $::compile_libs_temp_directory
#@ }
#@ }
#@ echo "=================================================================="
#@ echo "$sucLibsCnt scripts are run. Please check the log file for details."
#@ }
#@
#@
#@ # create the unique folder under tmp
#@ proc set_script_path_var { processDirName } {
#@ set fileName .[pid]
#@ set var [append fileName "_" [clock microseconds]]
#@ file delete -force [pwd]/$var
#@ file mkdir [pwd]/$var/
#@ file mkdir [pwd]/$var/preCompile
#@ file mkdir [pwd]/$var/$processDirName
#@ file mkdir [pwd]/$var/sucFlags
#@ file mkdir [pwd]/$var/failFlags
#@ file mkdir [pwd]/$var/cdpl
#@ setenv CDPL_LOGDIR "[pwd]/$var/cdpl"
#@ set ::compile_libs_temp_directory "[pwd]/$var"
#@ set ::compile_libs_pre_script_path "[pwd]/$var/preCompile"
#@ set ::compile_libs_script_path "[pwd]/$var/$processDirName"
#@ set ::compile_libs_cdpl_log_directory "[pwd]/$var/cdpl"
#@ set ::compile_libs_cwd "[pwd]"
#@ set ::compile_lib_list ""
#@ }
#@
#@ proc gen_get_lic_scripts { } {
#@ set tclFileName "$::compile_libs_pre_script_path/get_lic"
#@ set chan [open $tclFileName a]
#@ export_tcl_vars $chan
#@ #puts $chan "info hostname"
#@ #puts $chan "date"
#@ #puts $chan "get_license Library-Compiler"
#@ puts $chan "set ::compile_libs_var_exported true"
#@ puts $chan "after 5000"
#@ close $chan
#@ }
#@
#@ proc gen_compile_lib_scripts { search_path libNamePattern dbFileDir logFileDir }
{
#@ foreach path $search_path {
#@ set path [ file normalize $path]
#@ foreach pattern $libNamePattern {
#@ if { [file exists $pattern] } {
#@ set ::compile_lib_list [concat $::compile_lib_list $pattern ]
#@ } else {
#@ set ::compile_lib_list [concat $::compile_lib_list [ glob -nocomplain -
directory $path $pattern] ]
#@ }
#@ }
#@ }
#@ set ::compile_lib_list [lsort -unique $::compile_lib_list]
#@ set i 1
#@ foreach libFileName $::compile_lib_list {
#@ set tclFileName "$::compile_libs_script_path/read_lib_$i"
#@ #echo $tclFileName
#@ set chan [open $tclFileName a]
#@ #echo $libFileName
#@ gen_compile_lib_procedure $chan $libFileName $dbFileDir $logFileDir
#@ close $chan
#@ incr i
#@ }
#@ }
#@
#@ proc __rename_commands { cmd_black_list } {
#@ set all_cmds [get_defined_commands]
#@ foreach cmd $all_cmds {
#@ if { [lsearch $cmd_black_list $cmd] != -1 } {
#@ rename -hidden -force $cmd ____$cmd
#@ }
#@ }
#@ }
#@
#@ #
#@ # STAR P80014807-4612
#@ # FL - reserve relative paths to FL directory - instead of golden db/frames
#@ #
#@ # /site1/data/golden/DB
#@ # /site1/data/golden/frame
#@ #
#@ # assumption: run under the flib dir
#@ # /site1/flib
#@ # should have /site1/flib/registry.dat
#@ #
#@ # Before:
#@ #
#@ # /site1/flib/1.db -> /site1/data/golden/DB/1.db
#@ # /site1/flib/2.db -> /site1/data/golden/DB/2.db
#@ # /site1/flib/1.ndm -> /site1/data/golden/frame/1.ndm
#@ #
#@ # After:
#@ #
#@ # /site1/flib/1.db -> ../data/golden/DB/1.db
#@ # /site1/flib/2.db -> ../data/golden/DB/2.db
#@ # /site1/flib/1.ndm -> ../data/golden/frame/1.ndm
#@ #
#@ proc countChar {str mapvar} {
#@ return [expr [string length $str]-[string length [string map $mapvar $str]]]
#@ }
#@ proc findHead {s1 s2} {
#@ set head ""
#@ set ts1 [string trim $s1 /]
#@ set ts2 [string trim $s2 /]
#@ foreach w1 [split $ts1 /] w2 [split $ts2 /] {
#@ append head "/"
#@ if {$w1 eq $w2} {append head $w1} else break
#@ }
#@ return $head
#@ }
#@ proc __make_data_path_relative { flibPath } {
#@ set curPath [pwd]
#@ set flibPath [file normalize $flibPath]
#@
#@ cd $flibPath
#@ set numSlashCur [countChar $flibPath {/ ""} ]
#@
#@ # for each symlink (should linked to full path)
#@ foreach linkName [glob -nocomplain -type l *] {
#@ # get linked full path $absPath
#@ set absPath [file readlink $linkName]
#@ if {[string index $absPath 0] != "/"} {
#@ # already relative
#@ continue;
#@ }
#@
#@ # not guaranteed if "realpath --relative-to" is available
#@ # set relPath [sh realpath --relative-to=[pwd] $absPath]
#@ # compare $flibPath with $absPath, remove common head, set $relPath =
".../tail"
#@ set head [findHead $flibPath $absPath]
#@ set tail [string range $absPath [string length $head] end]
#@ set numSlashHead [countChar $head {/ ""}]
#@ set numLevelUp [expr $numSlashCur - $numSlashHead + 1]
#@ set pathPrefix [string repeat "../" $numLevelUp]
#@ set relPath $pathPrefix$tail
#@
#@ set __catched [ catch {
#@ # re-link the $linkName to $relPath
#@ echo "Linking $linkName to $relPath"
#@ file delete $linkName
#@ file link $linkName $relPath
#@ } ]
#@ if { $__catched } {
#@ echo "Failed."
#@ cd $curPath
#@ return -code error
#@ } else {
#@ echo "Succeeded."
#@ }
#@ }
#@ echo "Information: Data path made relative to $flibPath"
#@ cd $curPath
#@ }
#@
#@ source ${synopsys_root}/auxx/LC2/check_lib_common_lc.tbc
#@ # -- Starting source /cad/synopsys/lc/cur/auxx/LC2/check_lib_common_lc.tbc

#@ ##############################################################################
#@ # Author : Yun Zhang
#@ # History: 2020/6/22 created
#@ # Description: This is the source tcl file of check_lib_common_lc.tbc.
#@ # The procs are all for run common library compiler under the hood.
#@ ##############################################################################
#@ # TclPro::Compiler::Include
#@
#@ if {[catch {package require tbcload 1.6} err] == 1} {
#@ return -code error "[info script]: The TclPro ByteCode Loader is not
available or does not support the correct version -- $err"
#@ }
#@ tbcload::bceval {
#@ TclPro ByteCode 2 0 1.7 8.5
#@ 20 0 200 30 0 0 156 0 4 20 20 -1 -1
#@ 200
#@ A2F<!(H&s!/HW<!(3E<!2`8s!F_#pv2/YQ#/HW<!-Qr<!2`8s!I%ul#/2:3w/HW<!0c8=!2`
#@ 8s!K7VNw1Dpiw/HW<!2oJ=!2`8s!MI70%@.mf%/HW<!4&|=!2`8s!Pd3-&6qMH&/HW<!78#>
#@ !2`8s!R!jc&JjJE'/HW<!9D5>!2`8s!U<f`';I+'(/HW<!<VP>!2`8s!WNGB(TQ(w)/HW<!>
#@ bb>!2`8s!ZiC?)Zuw!*/HW<!At(?!/E<!!
#@ 20
#@ @1IOwI1IOwI1IOwI1IOwI1IOw
#@ 20
#@ I%%n#I%%n#I%%n#I%%n#Hq^R#
#@ 30
#@ x
#@ 4
#@ ,CHr@
#@ x
#@ 27
#@ lj|Z?w3F/Du'VgC&>m#H8&Z)F5mNaEt-E-
#@ x
#@ 1
#@ A!
#@ p
#@ 5 0 29 3 0 0 20 0 9 5 5 -1 -1
#@ 29
#@ w0E<!w0E<!w0E<!w0E<!6P1qv3&5pv-E<!!z
#@ 5
#@ )|y9v%!
#@ 5
#@ 'wwi%*!
#@ 3
#@ x
#@ 4
#@ m'cSA
#@ x
#@ 7
#@ %H9KDUvg+
#@ x
#@ 23
#@ hgtdD/BsJDZnmX?#O`aEg9m*E_I-,
#@ 0
#@ 0
#@ 0 0
#@ x
#@ 22
#@ epCkBo0m*EpvnX?3DccE,&MEFO(%
#@ x
#@ 7
#@ /^,8AY@c,
#@ x
#@ 25
#@ lj|Z?w3F/Du'VgCg3MTAk'cOBq,BCF4v
#@ x
#@ 2
#@ a,v
#@ p
#@ 26 0 375 16 2 0 144 1 7 26 38 -1 -1
#@ 375
#@ 32fv!8^w!!.H!!!w3E<!JAe`B#1NW<#3WW!(H&s!>SN?!,Ki<!6h)g%0#>6#@Yw4w1/GpvQk
#@ s<!QSa<!2l+dB<jTZ)v*<<!(H&s!8Qr<!=>YQ#5l+UvVL_w!AqXaB:Xs#)v*<<!:>T=!;eQj
#@ w4u&v!>SGY!8^w!!c?)!!'NA9v3DUNw5Qr<!=>YQ#5l+Uv<b7U-CV%Qb5v!!!kv!!!laykBy
#@ 6fr3v*<<!3Jpiw4S60%6fSs!9YQK%AIuaB+&13wv*<<!Xg_bB4v&*'v*<<!4S60%6fSs!KDe
#@ `BKGBK.v*<<!,`yTv6fSs!TIuaB+&13wv*<<!P1caB+&13wv*<<!wO2,!DI_w!gA*07v*<<!
#@ 4S60%6fSs!R0n<vujZRI#3WW!yLDI/F*W8sREPt!5v!!!F!!!!(E`<!8,,pvFaKL&5v!!!.!
#@ !!!?:WH&ISa<!WSa<!GN2,!-i8v!,,:3wv!!!
#@ 26
#@ =+@n#-.^B)XX%n#I=.n#L@!kwc|9p#Bc!
#@ 38
#@ 4N3<!)^k|vlg)urcv7il5w*!!aBpQ%NORS#g%74wwaKU#:E!
#@ 16
#@ x
#@ 17
#@ w3F/D'gi'FrZ!iCnc%UA/v
#@ x
#@ 7
#@ &OQ<@xe|+
#@ x
#@ 5
#@ ijkIDBv
#@ x
#@ 17
#@ k%PJ:qw!d;&MC0:qkXJ:u!
#@ x
#@ 4
#@ m'cSA
#@ x
#@ 6
#@ 1lo(F^(%
#@ x
#@ 1
#@ P!
#@ x
#@ 9
#@ q3HQBb!cr@4v
#@ x
#@ 9
#@ V:wLD5Q<JDP!
#@ x
#@ 1
#@ R!
#@ i
#@ 0
#@ x
#@ 15
#@ -#l#H8&Z)F5mNaEt-E-
#@ x
#@ 8
#@ %xRQB:p2TA
#@ x
#@ 8
#@ i%97A&jmMC
#@ x
#@ 8
#@ qLK;@0dhTA
#@ x
#@ 0
#@
#@ 2
#@ L 0 171 102 317 274 -1
#@ C 0 288 14 -1 -1 300
#@ 0
#@ 0 3
#@ 8
#@ rmBq@NjkSA
#@ 0 0 0
#@ 9
#@ rmBq@q,BCF4v
#@ 1 0 0
#@ 4
#@ %xRQB
#@ 2 0 0
#@ x
#@ 18
#@ #k|Z?w3F/Du'VgCf!Q<@y(%
#@ p
#@ 25 0 255 17 0 0 104 0 3 25 25 -1 -1
#@ 255
#@ w0E<!KN2,!EOhw!#0E<!+BE<!41fg&5v!!!/!!!!w-<<!^Kn<v>Me`BJ>'0.#3WW!0#>6#3#
#@ Ts!TG;I/m&3,!/uJv!#0E<!Ga++'M`yTv8^w!!JGv!!*cvpv5JUNw'qrD!:1fg&5v!!!/!!!
#@ !/oJ=!fKn<v>Me`BLP|f.#3WW!0#>6#82Ts!TG;I/o,3,!1,|v!#0E<!CYCqvxKn<v>Me`BJ
#@ >'0.#3WW!0#>6#:8Ts!TG;I/m&3,!/uJv!#0E<!H=J*'M`yTv8^w!!JGv!!*cvpv:v3-&'qr
#@ D!:1fg&5v!!!/!!!!48#>!_Kn<v'0!!
#@ 25
#@ 9egm#KeHK%KeHK%KeHK%?ur!!K;s!!/!
#@ 25
#@ ^'nK%j@<L%j@<L%nRr-&`sMR#ipMR#/!
#@ 17
#@ x
#@ 17
#@ hgtdD/BsJDZnmX?1lo(F@v
#@ x
#@ 4
#@ 8w`TA
#@ x
#@ 25
#@ lj|Z?w3F/Du'VgCg3MTAk'cOBq,BCF4v
#@ x
#@ 7
#@ &OQ<@xe|+
#@ x
#@ 5
#@ s85)F1v
#@ x
#@ 0
#@
#@ x
#@ 4
#@ wm<eD
#@ x
#@ 3
#@ kL2-
#@ x
#@ 23
#@ hgtdD/BsJDZnmX?7,V`F'^m*E_I-,
#@ i
#@ 0
#@ x
#@ 4
#@ MyB,E
#@ x
#@ 27
#@ hgtdD/BsJDZnmX?+sEiC%<0CFa@|mAytf+
#@ x
#@ 27
#@ w3F/Du'VgCjNIQBiOjY?w3F/D.jAn/e.Q,
#@ x
#@ 23
#@ hgtdD/BsJDZnmX?#O`aEg9m*E_I-,
#@ x
#@ 25
#@ lj|Z?w3F/Du'VgCg3MTAk'cOBq,BCF4v
#@ x
#@ 27
#@ hgtdD/BsJDZnmX?rTN+ErfR.Dk^CkBf^;-
#@ x
#@ 20
#@ hgtdD/BsJDZnmX?n:=Y?%xRQB
#@ 0
#@ 0
#@ 0 0
#@ x
#@ 20
#@ 3aMTAr-!eD/BsJDZnmX?4|k)F
#@ p
#@ 24 0 195 12 0 0 96 0 3 24 24 -1 -1
#@ 195
#@ w0E<!-fSs!O,uc/ViA9v,|8X!M`yTv8^w!!B/v!!w-*!!*`vpv'qrD!-A77w.r=6#Omm<v>M
#@ e`BBKMT+#3WW!w0E<!3#Ts!O,uc/ViA9v2o8X!M`yTv8^w!!B/v!!w-*!!-&tl#'qrD!-A77
#@ w0/tl#Omm<v>Me`BBKMT+#3WW!w0E<!5)Ts!O,uc/ViA9v4u8X!M`yTv8^w!!B/v!!w-*!!/
#@ 8UNw'qrD!-A77w2AUNwOmm<v'0!!
#@ 24
#@ /JHK%CeHK%CeHK%CeHK%CeHK%CeHK%
#@ 24
#@ QMbpvZMbpvZMbpvZMbpvZMbpvYMbpv
#@ 12
#@ x
#@ 4
#@ wm<eD
#@ x
#@ 3
#@ kL2-
#@ x
#@ 17
#@ hgtdD/BsJDZnmX?1lo(F@v
#@ i
#@ 0
#@ x
#@ 5
#@ 3aMTA@v
#@ x
#@ 0
#@
#@ x
#@ 23
#@ hgtdD/BsJDZnmX?7,V`F'^m*E_I-,
#@ x
#@ 21
#@ w3F/Du'VgCf-DTA@)QDFq,BCF4v
#@ x
#@ 27
#@ hgtdD/BsJDZnmX?+sEiC%<0CFa@|mAytf+
#@ x
#@ 23
#@ hgtdD/BsJDZnmX?#O`aEg9m*E_I-,
#@ x
#@ 27
#@ hgtdD/BsJDZnmX?rTN+ErfR.Dk^CkBf^;-
#@ x
#@ 20
#@ hgtdD/BsJDZnmX?n:=Y?%xRQB
#@ 0
#@ 0
#@ 0 0
#@ x
#@ 8
#@ k^YSAqP(yG
#@ x
#@ 1
#@ ?v
#@ p
#@ 2 0 26 4 0 0 8 0 5 2 2 -1 -1
#@ 26
#@ w0E<!.9`W!0&5Uv8^w!!-E!!!-iA=!z
#@ 2
#@ .H!
#@ 2
#@ :E!
#@ 4
#@ x
#@ 6
#@ gd|;@b:%
#@ x
#@ 4
#@ rwIID
#@ x
#@ 2
#@ >Kv
#@ x
#@ 3
#@ g'i-
#@ 0
#@ 0
#@ 1 2
#@ 1
#@ ?v
#@ 0 0 256
#@ 3
#@ g'i-
#@ 1 0 0
#@ x
#@ 24
#@ #k|Z?w3F/Du'VgCd?<eDtc/bEu,aaE
#@ p
#@ 9 0 92 15 0 0 36 0 6 9 9 -1 -1
#@ 92
#@ )Nr<!I>e`BQ(;E0#3WW!+I*%;v9o7-S^w!!;o!!!w3E<!*TA9v.lvpv1l8X!`(kq+1oes!6G
#@ :3w:_piw<&|=!6)Ks!/HW<!:,f=!Gk60%4DkUv-E<!!
#@ 9
#@ 1GUm#I:*L%4!
#@ 9
#@ a#L>vbpy*'1!
#@ 15
#@ x
#@ 3
#@ _e|+
#@ x
#@ 20
#@ hgtdD/BsJDZnmX?n:=Y?%xRQB
#@ i
#@ 0
#@ x
#@ 6
#@ sT2TAIPw
#@ x
#@ 8
#@ m'cSANjkSA
#@ x
#@ 1
#@ +v
#@ x
#@ 5
#@ n0Hr@7v
#@ x
#@ 12
#@ #graEv_Bq@,0B(F
#@ x
#@ 0
#@
#@ x
#@ 4
#@ m'cSA
#@ x
#@ 6
#@ gpbSAPSw
#@ x
#@ 6
#@ AP5cE?Sw
#@ x
#@ 23
#@ hgtdD/BsJDZnmX?7,V`F'^m*E_I-,
#@ x
#@ 1
#@ P!
#@ x
#@ 5
#@ r!2kB>v
#@ 0
#@ 0
#@ 0 1
#@ 8
#@ m'cSANjkSA
#@ 0 0 0
#@ x
#@ 14
#@ 4rBfD1-0CFq&fwGJ%%
#@ x
#@ 10
#@ (KxhCN1-.DQ-v
#@ p
#@ 17 0 213 23 2 1 84 2 10 17 21 -1 -1
#@ 213
#@ w0E<!(H&s!*N&s!+Q&s!,T&s!CY,>!8^w!!2V'!!*i=6#4;tl#=MGY!g@#!!ee6(!H,FN-gE
#@ EfR8SUNw<P>:v8P60%.EW<!--<<!BJ:3w0T`<!Q.taBLP|f.v*<<!f!!!!6^w!!/K!!!12>:
#@ vI,s<!Hv(g7.CI.!4qVH&7P60%DPe`Bbl^l5#3WW!@A#>!T,PU,=;'v!Bb>:vJjJE'5v!!!-
#@ !!!!@=N-&?@e`'4oSs!eFNH&>thc&FO+'(2iSs!G;O8sBA6-&z
#@ 17
#@ C^No#L2#Y!_cpw)>2|X!7!
#@ 21
#@ Pf3<!:'Le#-kv:wIT%m5`NOkw/!
#@ 23
#@ x
#@ 4
#@ q#TCF
#@ x
#@ 6
#@ hIa:@PSw
#@ x
#@ 11
#@ m9.bEi`JT8eIl,
#@ x
#@ 1
#@ R!
#@ x
#@ 22
#@ q3HQBl#sJD8o(`FnlrJDu_PcEX%%
#@ x
#@ 21
#@ q3HQBkoW/DmgY8AnT_5BgKxhC1v
#@ x
#@ 18
#@ hgtdD!CIIDkcreDb^CkBHSw
#@ x
#@ 4
#@ wm<eD
#@ x
#@ 4
#@ 4|k)F
#@ x
#@ 3
#@ j#L%
#@ x
#@ 2
#@ FVw
#@ x
#@ 5
#@ sB-<@Ev
#@ x
#@ 6
#@ 1lo(F^(%
#@ x
#@ 21
#@ 6dV<+:mui@26nlBPPW(46dV<+A!
#@ x
#@ 6
#@ !xMTAFVw
#@ i
#@ 0
#@ x
#@ 0
#@
#@ x
#@ 4
#@ DP)*F
#@ x
#@ 12
#@ h-ur@E5>F+91VE+
#@ x
#@ 25
#@ ruwlB/wJ9>gd|;@>AufA'%U;@(y(S.A!
#@ x
#@ 8
#@ k^YSAqP(yG
#@ x
#@ 4
#@ wg;3I
#@ x
#@ 5
#@ P!i<+Iv
#@ 2
#@ L 0 60 144 210 50 -1
#@ C 1 105 20 -1 -1 123
#@ 1
#@ F
#@ 1 2 3
#@ 1
#@ 4
#@ 1 7
#@ 8
#@ m'cSANjkSA
#@ 0 0 256
#@ 12
#@ 'ZPDFd%+:@EAl)F
#@ 1 0 0
#@ 0
#@
#@ 2 0 512
#@ 0
#@
#@ 3 0 512
#@ 3
#@ kL2-
#@ 4 0 0
#@ 6
#@ 7,V`FW+%
#@ 5 0 0
#@ 4
#@ .0B,E
#@ 6 0 0
#@ x
#@ 21
#@ ^_`p@hp^LCcXKV@`jbSAp#K^F<v
#@ p
#@ 3 0 36 10 0 0 12 0 6 3 3 -1 -1
#@ 36
#@ /rS=!6U(+((H&s!,`yTv5Qr<!<)Ks!Qsm<v.TW<!19*!!
#@ 3
#@ @nG#
#@ 3
#@ VoE!
#@ 10
#@ x
#@ 27
#@ hgtdD/BsJDZnmX?rTN+ErfR.Dk^CkBf^;-
#@ x
#@ 5
#@ s85)F1v
#@ x
#@ 4
#@ m'cSA
#@ x
#@ 6
#@ gpbSAPSw
#@ x
#@ 6
#@ AP5cE?Sw
#@ x
#@ 23
#@ hgtdD/BsJDZnmX?7,V`F'^m*E_I-,
#@ x
#@ 1
#@ P!
#@ x
#@ 20
#@ hgtdD/BsJDZnmX?n:=Y?%xRQB
#@ x
#@ 0
#@
#@ x
#@ 20
#@ 3aMTAr-!eD/BsJDZnmX?4|k)F
#@ 0
#@ 0
#@ 0 0
#@ x
#@ 23
#@ ,v(Z?w3F/Du'VgCoo3mBm+BRAyOl,
#@ x
#@ 8
#@ o4jY?m'cSA
#@ p
#@ 30 0 407 32 2 0 144 1 8 30 34 -1 -1
#@ 407
#@ w0E<!1#T=!/r=pv2G^3w-u4Uv6/Ypv9u&s!5v!!!Q!!!!7kZjwgfvdB>'6<*v*<<!,#tl#9i
#@ A=!Ebpiw8S60%=MGY!VyQK%8^w!!.H!!!2ylf%LGe`B.A-0%v*<<!G1);v8^w!!x')!!EL_w
#@ !T>puB<jTZ)v*<<!!oxR5e:NH&<;YUvPpm<vGhe`B^HGT4v*<<!H^/*'L!f`'GR+'(>bq9-X
#@ ^w!!5|!!!;RFB(Gk#t!COAI&;N2,!+|&v!d&.36VyQK%8^w!!IDv!!5vic&JjJE'J+ZUvHtP
#@ pvTIuaB+&13wv*<<!4Ta<!FN2,!aMg'!,,:3wg6#+15v!!!O!!!!pDhQ5vE3,!.oAv!#0E<!
#@ T2Bs!5v!!!+!!!!9S2U#BhYUvOmm<v4fW<!INE<!HNW<!2E9!sSWXA!FN2,!O6n%!hG307v*
#@ <<!KkB=!9_lf%,eN48;I%!!:n^qvbs7e/mQur*VyQK%8^w!!:l!!!+rXQ#Hv87wLt|X!Omm<
#@ v0K!!
#@ 30
#@ =Xv+'`Q,N%Yp`1%PLdjwY*Th%Wa<kwMhPUvQN!
#@ 34
#@ 6@&a0l*sL%!w!!!i.Wp4WF.4wMuIR5mhtpv#-|rv@3!
#@ 32
#@ x
#@ 4
#@ *dmID
#@ x
#@ 1
#@ Hv
#@ x
#@ 23
#@ hgtdD/BsJDZnmX?#O`aEg9m*E_I-,
#@ x
#@ 20
#@ JaGQB*kbD+nEi'FrZ!iCV%BE+
#@ x
#@ 27
#@ lj|Z?w3F/Du'VgC&>m#H8&Z)F5mNaEt-E-
#@ x
#@ 4
#@ J2*D+
#@ x
#@ 12
#@ vAE-0;oU6036viC
#@ x
#@ 1
#@ >v
#@ x
#@ 27
#@ hgtdD/BsJDZnmX?rTN+ErfR.Dk^CkBf^;-
#@ x
#@ 23
#@ hgtdD/BsJDZnmX?7,V`F'^m*E_I-,
#@ x
#@ 1
#@ P!
#@ x
#@ 20
#@ hgtdD/BsJDZnmX?n:=Y?%xRQB
#@ x
#@ 14
#@ ;oW/D!e'Z?64BbCMYw
#@ x
#@ 1
#@ Cv
#@ x
#@ 0
#@
#@ i
#@ 0
#@ x
#@ 4
#@ 8w`TA
#@ x
#@ 4
#@ DP)*F
#@ x
#@ 6
#@ :<ylBLYw
#@ x
#@ 5
#@ wRH<@8v
#@ x
#@ 7
#@ 9WmIDeI-,
#@ x
#@ 1
#@ X!
#@ x
#@ 7
#@ =P6X5R^`w
#@ x
#@ 1
#@ B!
#@ x
#@ 1
#@ A!
#@ x
#@ 2
#@ 2fv
#@ x
#@ 34
#@ Yl<eD,wBCFMk8c3Q@=nA&!=JD'WrSA;cN<@ktWU@HSw
#@ x
#@ 5
#@ s85)F1v
#@ x
#@ 4
#@ +u(*F
#@ x
#@ 4
#@ u3uSA
#@ x
#@ 5
#@ )lP)F1v
#@ x
#@ 0
#@
#@ 2
#@ L 0 119 195 331 315 -1
#@ C 0 348 12 -1 -1 358
#@ 0
#@ 1 7
#@ 8
#@ o4jY?m'cSA
#@ 0 0 256
#@ 4
#@ g3IID
#@ 1 0 0
#@ 3
#@ d4w,
#@ 2 0 0
#@ 4
#@ lWNeD
#@ 3 0 0
#@ 9
#@ ,uk)Fdd;JD1v
#@ 4 0 0
#@ 4
#@ u3uSA
#@ 5 0 0
#@ 5
#@ bT/bE>v
#@ 6 0 0
#@ x
#@ 23
#@ w3F/Du'VgCZCbOB_.aY?!aiaEnTr-
#@ x
#@ 11
#@ 0Q%hCgKxhC,tEw
#@ p
#@ 10 0 95 14 0 0 40 0 5 10 10 -1 -1
#@ 95
#@ /rS=!1Gwjw'E&s!H=rH&9N2,!4>##!#0E<!1NE<!@4`H&-fvpv5|8X!6Sp3w25bpv/o=6#7)
#@ tl#2Q/X!.EW<!5TN<!7`8s!9;|X!-BW<!>&#pv4P60%(w!!
#@ 10
#@ GFIOwG17n#/6!
#@ 10
#@ Vv)7#Gh17#,-!
#@ 14
#@ x
#@ 23
#@ hgtdD/BsJDZnmX?7,V`F'^m*E_I-,
#@ x
#@ 1
#@ P!
#@ x
#@ 20
#@ hgtdD/BsJDZnmX?n:=Y?%xRQB
#@ x
#@ 27
#@ hgtdD/BsJDZnmX?+sEiC%<0CFa@|mAytf+
#@ x
#@ 4
#@ *dmID
#@ x
#@ 1
#@ -v
#@ x
#@ 14
#@ 4rBfD1-0CFq&fwGJ%%
#@ x
#@ 4
#@ DP)*F
#@ x
#@ 41
#@ =P6X5r*r<+fF'Z?w3F/Du'VgCZCbOB_.aY?c_dX?,CHr@(okcE1v
#@ x
#@ 7
#@ A;lcE_iGw
#@ x
#@ 7
#@ =P6X5R^`w
#@ x
#@ 5
#@ )lP)F1v
#@ x
#@ 23
#@ ,v(Z?w3F/Du'VgCoo3mBm+BRAyOl,
#@ x
#@ 21
#@ ^_`p@hp^LCcXKV@`jbSAp#K^F<v
#@ 0
#@ 0
#@ 1 3
#@ 9
#@ o4jY?m'cSAQ!
#@ 0 0 256
#@ 8
#@ o4jY?m'cSA
#@ 1 0 0
#@ 4
#@ g3IID
#@ 2 0 0
#@ x
#@ 15
#@ rpwhC;Z2b3<?<+EfqT+
#@ 0
#@ 0
#@ }
#@ # -- End source /cad/synopsys/lc/cur/auxx/LC2/check_lib_common_lc.tbc

#@ # -- End source /cad/synopsys/lc/cur/admin/setup//.synopsys_lc.setup

source -echo -verbose /tmp/42766_1744315377130192/nglc_shell_command.tcl


#@ # -- Starting source /tmp/42766_1744315377130192/nglc_shell_command.tcl

#@ catch { set ::upf_ls_strategy_in_inst_name [list [binary format H*


66616c7365]] }
#@ catch { set ::upf_suppress_message_in_etm [list [binary format H* 74727565]] }
#@ catch { set ::in_gui_session [list [binary format H* 66616c7365]] }
#@ catch { set ::rtl_load_resistance_factor [list [binary format H* 302e30]] }
#@ catch { set ::acs_user_top_compile_strategy_script [list [binary format H*
64656661756c745f746f70]] }
#@ catch { set ::find_ignore_case [list [binary format H* 66616c7365]] }
#@ catch { set ::hdlin_vhdl_syntax_extensions [list [binary format H*
46414c5345]] }
#@ catch { set ::hdlin_infer_mux [list [binary format H* 64656661756c74]] }
#@ catch { set ::vhdlout_write_top_configuration [list [binary format H*
46414c5345]] }
#@ catch { set ::x11_set_cursor_foreground [list [binary format H* 6d6167656e7461]]
}
#@ catch { set ::hdlin_sv_blackbox_modules "" }
#@ catch { set ::acs_global_user_compile_strategy_script [list [binary format H*
64656661756c74]] }
#@ catch { set ::upf_generate_pm_cell_html [list [binary format H* 66616c7365]] }
#@ catch { set ::timing_disable_recovery_removal_checks [list [binary format H*
74727565]] }
#@ catch { set ::enable_auto_attr_spread [list [binary format H* 74727565]] }
#@ catch { set ::timing_input_port_default_clock [list [binary format H*
66616c7365]] }
#@ catch { set ::upf_allow_is_isolated_output_check [list [binary format H*
74727565]] }
#@ catch { set ::cmds [list [binary format H*
7b2043656c6c204c65616643656c6c73206765745f666c61745f63656c6c7320226765745f666c61745
f63656c6c73222066696c7465722c71756965742c7265676578702c6e6f636173652c65786163742c6f
665f6f626a656374732c7061747465726e732c6c6f676963616c2c706879736963616c207d207b20436
56c6c2043656c6c73206765745f63656c6c7320226765745f63656c6c73202d68696572617263686963
616c222068696572617263686963616c2c66696c7465722c71756965742c7265676578702c6e6f63617
3652c65786163742c6f665f6f626a656374732c7061747465726e732c6c6f676963616c2c7068797369
63616c207d207b204e657420204c6561664e657473206765745f666c61745f6e65747320226765745f6
66c61745f6e657473222066696c7465722c71756965742c7265676578702c6e6f636173652c65786163
742c746f705f6e65745f6f665f68696572617263686963616c5f67726f75702c7365676d656e74732c6
f665f6f626a656374732c7061747465726e732c6c6f676963616c2c706879736963616c207d207b204e
657420204e65747320206765745f6e6574732020226765745f6e657473202d686965726172636869636
16c22202068696572617263686963616c2c66696c7465722c71756965742c7265676578702c6e6f6361
73652c65786163742c746f705f6e65745f6f665f68696572617263686963616c5f67726f75702c73656
76d656e74732c6f665f6f626a656374732c7061747465726e732c6c6f676963616c2c70687973696361
6c207d207b2050696e20204c65616650696e73206765745f666c61745f70696e7320226765745f666c6
1745f70696e73222066696c7465722c71756965742c7265676578702c6e6f636173652c65786163742c
6c6561662c6f665f6f626a656374732c7061747465726e732c6c6f676963616c2c706879736963616c2
07d207b2050696e202050696e7320206765745f70696e732020226765745f70696e73202d6869657261
7263686963616c22202068696572617263686963616c2c66696c7465722c71756965742c72656765787
02c6e6f636173652c65786163742c6c6561662c6f665f6f626a656374732c7061747465726e732c6c6f
676963616c2c706879736963616c207d207b20506f727420506f727473206765745f706f72747320226
765745f706f727473202d68696572617263686963616c222068696572617263686963616c2c66696c74
65722c71756965742c7265676578702c6e6f636173652c65786163742c6f665f6f626a656374732c706
1747465726e732c6c6f676963616c2c706879736963616c207d207b2043656c6c204c696243656c6c73
2020226765745f6c69625f63656c6c73202a2f2a2220226765745f6c69625f63656c6c73202a2f2a222
0202020202066696c7465722c71756965742c7265676578702c6e6f636173652c65786163742c6f665f
6f626a656374732c7061747465726e737d]] }
#@ catch { set ::dont_touch_nets_with_size_only_cells [list [binary format H*
66616c7365]] }
#@ catch { set ::upf_print_logic_obj_to_supply_obj [list [binary format H*
66616c7365]] }
#@ catch { set ::upf_derive_ao_supply_on_exception_conns [list [binary format H*
66616c7365]] }
#@ catch { set ::vhdlout_top_design_vector [list [binary format H* 46414c5345]] }
#@ catch { set ::upf_check_bias_supply_connections [list [binary format H*
74727565]] }
#@ catch { set ::timing_ignore_paths_within_block_abstraction [list [binary format
H* 66616c7365]] }
#@ catch { set ::test_check_port_changes_in_capture [list [binary format H*
74727565]] }
#@ catch { set ::acs_num_parallel_jobs [list [binary format H* 31]] }
#@ catch { set ::veriloglib_cell_name_map "" }
#@ catch { set ::hdlin_keep_signal_name [list [binary format H*
616c6c5f64726976696e67]] }
#@ catch { set ::mv_allow_ls_per_macro_fanout [list [binary format H*
66616c7365]] }
#@ catch { set ::mw_logic0_net [list [binary format H* 565353]] }
#@ catch { set ::port_dimension_mismatch_error [list [binary format H* 54525545]] }
#@ catch { set ::gen_max_ports_on_symbol_side [list [binary format H* 30]] }
#@ catch { set ::timing_pocvm_corner_sigma [list [binary format H* 33]] }
#@ catch { set ::check_design_allow_inconsistent_output_port [list [binary format
H* 74727565]] }
#@ catch { set ::mw_hdl_top_module_list "" }
#@ catch { set ::si_max_parallel_computations [list [binary format H* 30]] }
#@ catch { set ::power_rclock_inputs_use_clocks_fanout [list [binary format H*
74727565]] }
#@ catch { set ::compatibility_version [list [binary format H* 562d323032332e3132]]
}
#@ catch { set ::sh_source_logging [list [binary format H* 74727565]] }
#@ catch { set ::acs_exclude_list [list [binary format H*
2f6361642f73796e6f707379732f73796e7468657369732f637572]] }
#@ catch { set ::upf_preserve_logic_in_boolean_expr [list [binary format H*
66616c7365]] }
#@ catch { set ::read_db_lib_warnings [list [binary format H* 46414c5345]] }
#@ catch { set ::sh_arch [list [binary format H* 6c696e75783634]] }
#@ catch { set ::sdc_runtime_unused_clocks_threshold [list [binary format H* 35]] }
#@ catch { set ::compile_enable_enhanced_leakage_optimization [list [binary format
H* 66616c7365]] }
#@ catch { set ::sdfout_min_rise_cell_delay [list [binary format H* 302e]] }
#@ catch { set ::view_execute_script_suffix [list [binary format H*
2e736372697074202e736372202e646373202e646376202e6463202e636f6e202e74636c]] }
#@ catch { set ::vhdllib_tb_x_eq_dontcare [list [binary format H* 46414c5345]] }
#@ catch { set ::upf_iso_insert_iso_ctrl_inverters_in_other_hier [list [binary
format H* 74727565]] }
#@ catch { set ::power_cg_high_effort_enable_fanin_analysis [list [binary format H*
66616c7365]] }
#@ catch { set ::compile_state_reachability_high_effort_merge [list [binary format
H* 66616c7365]] }
#@ catch { set ::timing_gclock_source_network_num_master_registers [list [binary
format H* 3130303030303030]] }
#@ catch { set ::test_bsd_default_bidir_delay [list [binary format H* 302e30]] }
#@ catch { set ::test_core_wrap_sync_ctl_segment_length [list [binary format H*
30]] }
#@ catch { set ::tested_technology "" }
#@ catch { set ::compile_seqmap_propagate_constants_size_only [list [binary format
H* 66616c7365]] }
#@ catch { set ::synlib_wait_for_design_license "" }
#@ catch { set ::x11_set_cursor_background "" }
#@ catch { set ::mw_hvo_diode_ports [list [binary format H* 66616c7365]] }
#@ catch { set ::write_sdc_output_net_resistance [list [binary format H* 74727565]]
}
#@ catch { set ::write_sdc_output_lumped_net_capacitance [list [binary format H*
74727565]] }
#@ catch { set ::de_log_redirect_enable [list [binary format H* 66616c7365]] }
#@ catch { set ::enable_clock_to_data_analysis [list [binary format H* 66616c7365]]
}
#@ catch { set ::set_isolate_ports [list [binary format H* 66616c7365]] }
#@ catch { set ::hdlin_verification_priority [list [binary format H* 46414c5345]] }
#@ catch { set ::enable_vhdl_netlist_reader [list [binary format H* 46414c5345]] }
#@ catch { set ::upf_print_states_with_voltages [list [binary format H*
66616c7365]] }
#@ catch { set ::mw_hvo_unconnected_cells [list [binary format H* 74727565]] }
#@ catch { set ::compile_log_print_pathgroups_in_delayopt [list [binary format H*
66616c7365]] }
#@ catch { set ::report_timing_use_accurate_delay_symbol [list [binary format H*
74727565]] }
#@ catch { set ::cache_read_info [list [binary format H* 66616c7365]] }
#@ catch { set ::mw_hvo_output_wire_declaration [list [binary format H*
66616c7365]] }
#@ catch { set ::high_fanout_net_threshold [list [binary format H* 31303030]] }
#@ catch { set ::dcnxt_adaptive_multithreading [list [binary format H* 74727565]] }
#@ catch { set ::hdlin_shorten_long_module_name [list [binary format H*
66616c7365]] }
#@ catch { set ::_mv_sort_power_pin_order [list [binary format H* 74727565]] }
#@ catch { set ::FILE [list [binary format H* 66696c653133]] }
#@ catch { set ::test_enable_capture_checks [list [binary format H* 74727565]] }
#@ catch { set ::sh_dev_null [list [binary format H* 2f6465762f6e756c6c]] }
#@ catch { set ::view_log_file "" }
#@ catch { set ::hdlin_ignore_textio_constructs [list [binary format H*
54525545]] }
#@ catch { set ::test_design_analyzer_uses_insert_scan [list [binary format H*
74727565]] }
#@ catch { set ::report_capacitance_use_ccs_receiver_model [list [binary format H*
74727565]] }
#@ catch { set ::compile_seqmap_disable_qn_pin_connections [list [binary format H*
66616c7365]] }
#@ catch { set ::upf_isolation_enable_relax_self_dependency_check [list [binary
format H* 74727565]] }
#@ catch { set ::vhdlout_three_state_name [list [binary format H* 275a27]] }
#@ catch { set ::synlib_hiis_force_on_cells "" }
#@ catch { set ::test_scan_clock_port_naming_style [list [binary format H*
746573745f73632573]] }
#@ catch { set ::verilogout_include_files "" }
#@ catch { set ::hdlin_naming_register_suffix_on_field [list [binary format H*
46414c5345]] }
#@ catch { set ::mw_hvo_pg_nets [list [binary format H* 74727565]] }
#@ catch { set ::acs_constraint_file_suffix [list [binary format H* 636f6e]] }
#@ catch { set ::hdlin_persistent_macros_filename [list [binary format H*
73796e5f6175746f5f67656e6572617465645f6d6163726f5f66696c652e7376]] }
#@ catch { set ::rc_slew_lower_threshold_pct_rise [list [binary format H*
32302e303030303030]] }
#@ catch { set ::check_design_allow_non_tri_drivers_on_tri_bus [list [binary format
H* 74727565]] }
#@ catch { set ::_upf_relax_iso_prot_buff_so_in_const_prop [list [binary format H*
74727565]] }
#@ catch { set ::high_fanout_net_pin_capacitance [list [binary format H*
312e303030303030]] }
#@ catch { set ::vhdllib_pulse_handle [list [binary format H*
7573655f7668646c6c69625f676c697463685f68616e646c65]] }
#@ catch { set ::test_clock_port_naming_style [list [binary format H*
746573745f632573]] }
#@ catch { set ::power_cg_gated_clock_net_naming_style "" }
#@ catch { set ::upf_suppress_message_in_black_box [list [binary format H*
74727565]] }
#@ catch { set ::acs_user_compile_strategy_script_suffix [list [binary format H*
636f6d70696c65]] }
#@ catch { set ::sh_allow_tcl_with_set_app_var_no_message_list "" }
#@ catch { set ::upf_charz_allow_port_punch [list [binary format H* 74727565]] }
#@ catch { set ::mw_hvo_empty_cell_definition [list [binary format H*
66616c7365]] }
#@ catch { set ::lib_pin_using_cap_from_ccs [list [binary format H* 74727565]] }
#@ catch { set ::enable_enhanced_physical_multibit_banking [list [binary format H*
66616c7365]] }
#@ catch { set ::power_opto_extra_high_dynamic_power_effort [list [binary format H*
66616c7365]] }
#@ catch { set ::compile_seqmap_identify_shift_registers [list [binary format H*
74727565]] }
#@ catch { set ::acs_work_dir [list [binary format H*
2f686f6d652f6a6f736875612f446f63756d656e74732f544e30375f6c6962636f6e76657274]] }
#@ catch { set ::view_select_separator [list [binary format H* 20202d2020]] }
#@ catch { set ::test_scandef_stop_skip_last_segment_with_scanout_lockup [list
[binary format H* 66616c7365]] }
#@ catch { set ::power_keep_license_after_power_commands [list [binary format H*
66616c7365]] }
#@ catch { set ::timing_pocvm_enable_analysis [list [binary format H*
66616c7365]] }
#@ catch { set ::register_duplicate [list [binary format H* 66616c7365]] }
#@ catch { set ::enable_nldm_timing_noise_signoff [list [binary format H* 30]] }
#@ catch { set ::veriloglib_tb_use_sensitization_as_vectors [list [binary format H*
74727565]] }
#@ catch { set ::dc_allow_rtl_pg [list [binary format H* 66616c7365]] }
#@ catch { set ::sdc_runtime_nets_missing_exceptions_fanout_threshold [list [binary
format H* 353030]] }
#@ catch { set ::dont_tie_unused_hierarchical_iopins_to_logic_constant [list
[binary format H* 66616c7365]] }
#@ catch { set ::hdlin_sv_interface_only_modules "" }
#@ catch { set ::test_suppress_toggling_instance_name_prefix "" }
#@ catch { set ::write_test_pattern_set_naming_style [list [binary format H*
54435f53796e5f2564]] }
#@ catch { set ::synopsys_program_name [list [binary format H* 64635f7368656c6c]] }
#@ catch { set ::compile_seqmap_enable_output_inversion [list [binary format H*
66616c7365]] }
#@ catch { set ::text_unselect_on_button_press [list [binary format H* 74727565]] }
#@ catch { set ::echo_include_commands [list [binary format H* 74727565]] }
#@ catch { set ::timing_crpr_threshold_ps [list [binary format H* 35]] }
#@ catch { set ::compile_auto_ungroup_override_wlm [list [binary format H*
66616c7365]] }
#@ catch { set ::mw_hvo_corner_pad_cells [list [binary format H* 74727565]] }
#@ catch { set ::vhdlout_single_bit [list [binary format H* 55534552]] }
#@ catch { set ::report_default_significant_digits [list [binary format H* 2d31]] }
#@ catch { set ::hdlin_interface_port_downto [list [binary format H* 46414c5345]] }
#@ catch { set ::rom_auto_inferring [list [binary format H* 54525545]] }
#@ catch { set ::acs_override_report_suffix [list [binary format H*
7265706f7274]] }
#@ catch { set ::mw_hvo_strip_backslash_before_hiersep [list [binary format H*
74727565]] }
#@ catch { set ::timing_clock_reconvergence_pessimism [list [binary format H*
6e6f726d616c]] }
#@ catch { set ::test_jump_over_bufs_invs [list [binary format H* 74727565]] }
#@ catch { set ::sh_enable_stdout_redirect [list [binary format H* 74727565]] }
#@ catch { set ::derived_upf [list [binary format H* 66616c7365]] }
#@ catch { set ::sh_language [list [binary format H* 74636c]] }
#@ catch { set ::compile_register_replication [list [binary format H*
64656661756c74]] }
#@ catch { set ::hdlin_upcase_names [list [binary format H* 46414c5345]] }
#@ catch { set ::bus_minus_style [list [binary format H* 2d2564]] }
#@ catch { set ::testsim_print_stats_file [list [binary format H* 74727565]] }
#@ catch { set ::veriloglib_sdf3.0_support [list [binary format H* 66616c7365]] }
#@ catch { set ::upf_name_map "" }
#@ catch { set ::fsm_export_formality_state_info [list [binary format H*
46414c5345]] }
#@ catch { set ::sdc_runtime_fixing_enable [list [binary format H* 74727565]] }
#@ catch { set ::compile_shift_register_max_length [list [binary format H* 30]] }
#@ catch { set ::power_cg_print_enable_conditions_max_terms [list [binary format H*
3130]] }
#@ catch { set ::vhdllib_negative_constraint [list [binary format H* 66616c7365]] }
#@ catch { set ::hdlin_mux_size_only [list [binary format H* 31]] }
#@ catch { set ::mv_output_upf_line_width [list [binary format H* 30]] }
#@ catch { set ::test_stil_netlist_format [list [binary format H* 6462]] }
#@ catch { set ::mv_insert_level_shifters_on_ideal_nets "" }
#@ catch { set ::synlib_enable_analyze_dw_power [list [binary format H* 30]] }
#@ catch { set ::bsd_max_in_switching_limit [list [binary format H* 3630303030]] }
#@ catch { set ::test_default_strobe [list [binary format H* 34302e30]] }
#@ catch { set ::test_scan_clock_a_port_naming_style [list [binary format H*
746573745f7363612573]] }
#@ catch { set ::verilogout_no_negative_index [list [binary format H*
46414c5345]] }
#@ catch { set ::alib_library_analysis_path [list [binary format H* 2e2f]] }
#@ catch { set ::multi_pass_test_generation [list [binary format H* 66616c7365]] }
#@ catch { set ::view_on_line_doc_cmd "" }
#@ catch { set ::test_ate_sync_cycles [list [binary format H* 31]] }
#@ catch { set ::font_library [list [binary format H* 315f32352e666f6e74]] }
#@ catch { set ::gen_create_netlist_busses [list [binary format H* 74727565]] }
#@ catch { set ::hdlin_unified_rtl_read [list [binary format H* 46414c5345]] }
#@ catch { set ::veriloglib_all_cells_in_one_file [list [binary format H*
66616c7365]] }
#@ catch { set ::acs_budgeted_cstr_suffix [list [binary format H* 636f6e]] }
#@ catch { set ::disable_multicore_resource_checks [list [binary format H*
66616c7365]] }
#@ catch { set ::timing_use_enhanced_capacitance_modeling [list [binary format H*
74727565]] }
#@ catch { set ::link_path [list [binary format H*
202a20796f75725f6c6962726172792e646220]] }
#@ catch { set ::test_fast_feedthrough_analysis [list [binary format H*
66616c7365]] }
#@ catch { set ::bit_blasted_bus_linking_naming_styles [list [binary format H*
25735c5b25645c5d202573282564292025735f25645f]] }
#@ catch { set ::upf_name_map_version [list [binary format H* 76312e30]] }
#@ catch { set ::power_report_separate_switching_power [list [binary format H*
66616c7365]] }
#@ catch { set ::upf_map_illegal_control_inverters [list [binary format H*
74727565]] }
#@ catch { set ::sort_outputs [list [binary format H* 66616c7365]] }
#@ catch { set ::ccd_respect_cts_fixed_balance_pins [list [binary format H*
66616c7365]] }
#@ catch { set ::hdlin_sv_union_member_naming [list [binary format H*
46414c5345]] }
#@ catch { set ::sh_source_emits_line_numbers [list [binary format H* 4e6f6e65]] }
#@ catch { set ::timing_scgc_override_library_setup_hold [list [binary format H*
74727565]] }
#@ catch { set ::product [list [binary format H* 44657369676e20566973696f6e]] }
#@ catch { set ::enable_golden_upf [list [binary format H* 66616c7365]] }
#@ catch { set ::abstraction_ignore_percentage [list [binary format H* 3235]] }
#@ catch { set ::test_scan_true_key [list [binary format H* 74]] }
#@ catch { set ::compile_enable_mis_cells_decomposition [list [binary format H*
66616c7365]] }
#@ catch { set ::vhdlout_lower_design_vector [list [binary format H* 54525545]] }
#@ catch { set ::timing_report_fast_mode [list [binary format H* 66616c7365]] }
#@ catch { set ::rc_input_threshold_pct_fall [list [binary format H*
35302e303030303030]] }
#@ catch { set ::upf_add_power_state_21_syntax [list [binary format H* 66616c7365]]
}
#@ catch { set ::test_soc_core_wrap_allow_multibit_ioregs [list [binary format H*
74727565]] }
#@ catch { set ::vhdlout_wired_and_res_func "" }
#@ catch { set ::ccd_write_script_sdc_add_offset_to_latency [list [binary format H*
66616c7365]] }
#@ catch { set ::hdlin_generate_naming_style [list [binary format H* 25735f2564]] }
#@ catch { set ::gen_show_created_symbols [list [binary format H* 66616c7365]] }
#@ catch { set ::test_preview_scan_shows_cell_types [list [binary format H*
66616c7365]] }
#@ catch { set ::libsetup_max_auto_opcond_message [list [binary format H* 3130]] }
#@ catch { set ::sdc_runtime_hier_block_pins_top_timing_paths [list [binary format
H* 313030]] }
#@ catch { set ::compile_automatic_clock_phase_inference [list [binary format H*
737472696374]] }
#@ catch { set ::golden_upf_report_missing_objects [list [binary format H*
66616c7365]] }
#@ catch { set ::mw_read_ignore_corner_cell [list [binary format H* 74727565]] }
#@ catch { set ::compile_enable_register_merging [list [binary format H* 74727565]]
}
#@ catch { set ::check_design_check_multidriven_output_ports [list [binary format
H* 66616c7365]] }
#@ catch { set ::test_bsd_version_number [list [binary format H* 30]] }
#@ catch { set ::atpg_test_asynchronous_pins [list [binary format H* 74727565]] }
#@ catch { set ::mv_align_library_pg_pins [list [binary format H* 74727565]] }
#@ catch { set ::view_use_small_cursor [list [binary format H* 74727565]] }
#@ catch { set ::test_scan_link_so_lockup_key [list [binary format H* 6c]] }
#@ catch { set ::sh_new_variable_message_in_proc [list [binary format H*
66616c7365]] }
#@ catch { set ::hdlin_module_arch_name_splitting [list [binary format H*
46414c5345]] }
#@ catch { set ::test_cc_ir_masked_bits [list [binary format H* 30]] }
#@ catch { set ::mv_upf_enable_forward_reverse_bias_check [list [binary format H*
66616c7365]] }
#@ catch { set ::hdlin_mux_rp_limit [list [binary format H* 3132387834]] }
#@ catch { set ::timing_report_attributes [list [binary format H*
646f6e745f746f75636820646f6e745f757365206d61705f6f6e6c792073697a655f6f6e6c792069646
5616c5f6e657420696e6665617369626c655f7061746873]] }
#@ catch { set ::test_bsd_default_strobe_width [list [binary format H* 302e30]] }
#@ catch { set ::upf_imvc_no_remap_iso [list [binary format H* 66616c7365]] }
#@ catch { set ::upf_drop_conflict_retention_constraint [list [binary format H*
66616c7365]] }
#@ catch { set ::compile_cell_density_aware_optimization_threshold [list [binary
format H* 312e3135]] }
#@ catch { set ::power_cg_all_registers [list [binary format H* 66616c7365]] }
#@ catch { set ::test_mux_constant_si [list [binary format H* 66616c7365]] }
#@ catch { set ::upf_smart_derive_iso_strategy_on_new_control_ports [list [binary
format H* 66616c7365]] }
#@ catch { set ::mcmm_high_capacity_effort_level [list [binary format H* 30]] }
#@ catch { set ::veriloglib_tb_compare [list [binary format H* 30]] }
#@ catch { set ::test_mux_constant_so [list [binary format H* 66616c7365]] }
#@ catch { set ::compile_power_domain_boundary_optimization [list [binary format H*
74727565]] }
#@ catch { set ::x11_set_cursor_number [list [binary format H* 2d31]] }
#@ catch { set ::timing_library_derate_is_scenario_specific [list [binary format H*
46414c5345]] }
#@ catch { set ::hdlin_sv_enable_rtl_attributes [list [binary format H*
46414c5345]] }
#@ catch { set ::acs_ddc_suffix [list [binary format H* 646463]] }
#@ catch { set ::hdlin_check_input_netlist [list [binary format H* 46414c5345]] }
#@ catch { set ::hdlin_failsafe_fsm [list [binary format H* 54525545]] }
#@ catch { set ::test_count_occ_chain_in_chain_count [list [binary format H*
66616c7365]] }
#@ catch { set ::dc_allow_rtl_pg_to_analog_pins [list [binary format H*
74727565]] }
#@ catch { set ::tcl_patchLevel [list [binary format H* 382e362e3131]] }
#@ catch { set ::mw_hvo_pad_filler_cells [list [binary format H* 74727565]] }
#@ catch { set ::test_bsd_part_number [list [binary format H* 30]] }
#@ catch { set ::upf_allow_or_operator_in_add_power_state_supply_expr [list [binary
format H* 66616c7365]] }
#@ catch { set ::test_output_wrapper_chain_naming_style "" }
#@ catch { set ::sh_disabled_is_error [list [binary format H* 74727565]] }
#@ catch { set ::vhdllib_insert_timing [list [binary format H* 66616c7365]] }
#@ catch { set ::compile_cell_density_aware_optimization [list [binary format H*
66616c7365]] }
#@ catch { set ::vhdlout_one_name [list [binary format H* 273127]] }
#@ catch { set ::ltl_obstruction_type [list [binary format H*
706c6163656d656e745f6f6e6c79]] }
#@ catch { set ::test_insert_clock_gated_test_point_registers [list [binary format
H* 66616c7365]] }
#@ catch { set ::view_set_cursor_area [list [binary format H* 35]] }
#@ catch { set ::vhdlout_zero_name [list [binary format H* 273027]] }
#@ catch { set ::enable_cell_based_verilog_reader [list [binary format H*
66616c7365]] }
#@ catch { set ::power_cg_auto_identify [list [binary format H* 66616c7365]] }
#@ catch { set ::write_converted_tf_syntax [list [binary format H* 66616c7365]] }
#@ catch { set ::use_port_name_for_oscs [list [binary format H* 66616c7365]] }
#@ catch { set ::sh_obsolete_is_error [list [binary format H* 66616c7365]] }
#@ catch { set ::compile_slack_driven_buffering [list [binary format H*
66616c7365]] }
#@ catch { set ::insert_dft_clean_up [list [binary format H* 74727565]] }
#@ catch { set ::power_preserve_rtl_hier_names [list [binary format H* 66616c7365]]
}
#@ catch { set ::lc [list [binary format H* 4e4c535f4c414e47]] }
#@ catch { set ::acs_preferred_target_compiler "" }
#@ catch { set ::acs_sverilog_extensions [list [binary format H* 2e7376]] }
#@ catch { set ::ungroup_keep_original_design [list [binary format H*
66616c7365]] }
#@ catch { set ::hdlin_enable_hier_map [list [binary format H* 46414c5345]] }
#@ catch { set ::write_test_include_scan_cell_info [list [binary format H*
74727565]] }
#@ catch { set ::vhdlout_package_naming_style [list [binary format H*
434f4e565f5041434b5f2564]] }
#@ catch { set ::write_test_max_scan_patterns [list [binary format H* 30]] }
#@ catch { set ::hdlin_infer_multibit [list [binary format H*
64656661756c745f6e6f6e65]] }
#@ catch { set ::change_names_dont_change_bus_members [list [binary format H*
66616c7365]] }
#@ catch { set ::view_write_file_suffix [list [binary format H*
6764622064622073646220646f20656469662065716e20666e63206c7369204e4554206e65746564207
06c612073742074646c207620766864207668646c20786e66]] }
#@ catch { set ::hdlin_ff_always_sync_set_reset [list [binary format H*
46414c5345]] }
#@ catch { set ::check_design_allow_unknown_wired_logic_type [list [binary format
H* 74727565]] }
#@ catch { set ::sdc_runtime_port_clock_constraint_threshold [list [binary format
H* 3230]] }
#@ catch { set ::optimize_area_ignore_path_group_weights [list [binary format H*
74727565]] }
#@ catch { set ::command [list [binary format H*
7365745f716f725f646174615f6d65747269635f70726f70657274696573]] }
#@ catch { set ::cache_read "" }
#@ catch { set ::hdl_keep_licenses [list [binary format H* 74727565]] }
#@ catch { set ::compile_ultra_ungroup_small_hierarchies [list [binary format H*
74727565]] }
#@ catch { set ::gen_single_osc_per_name [list [binary format H* 66616c7365]] }
#@ catch { set ::db_load_ccs_data [list [binary format H* 66616c7365]] }
#@ catch { set ::sh_auto_sdp_verbose [list [binary format H* 66616c7365]] }
#@ catch { set ::compile_enable_register_merging_with_exceptions [list [binary
format H* 74727565]] }
#@ catch { set ::err [list [binary format H* 312e37]] }
#@ catch { set ::disable_case_analysis [list [binary format H* 66616c7365]] }
#@ catch { set ::hdlin_infer_function_local_latches [list [binary format H*
46414c5345]] }
#@ catch { set ::mw_read_ignore_pad_cell [list [binary format H* 74727565]] }
#@ catch { set ::vhdllib_logical_name "" }
#@ catch { set ::test_stil_max_line_length [list [binary format H* 3732]] }
#@ catch { set ::test_input_wrapper_chain_naming_style "" }
#@ catch { set ::upf_write_only_rtlpg_to_pg_netlist [list [binary format H*
66616c7365]] }
#@ catch { set ::db_load_ccs_noise_data [list [binary format H* 66616c7365]] }
#@ catch { set ::power_same_switching_activity_on_connected_objects [list [binary
format H* 66616c7365]] }
#@ catch { set ::hdlin_enable_configurations [list [binary format H* 46414c5345]] }
#@ catch { set ::test_bsd_optimize_control_cell [list [binary format H*
66616c7365]] }
#@ catch { set ::sh_help_shows_group_overview [list [binary format H* 74727565]] }
#@ catch { set ::hdlin_report_time [list [binary format H* 31]] }
#@ catch { set ::rc_output_threshold_pct_rise [list [binary format H*
35302e303030303030]] }
#@ catch { set ::symbol_library [list [binary format H*
796f75725f6c6962726172792e736462]] }
#@ catch { set ::vhdlout_top_configuration_entity_name [list [binary format H* 45]]
}
#@ catch { set ::mw_read_ignore_unconnected_cell [list [binary format H* 74727565]]
}
#@ catch { set ::sh_auto_sdp_commands "" }
#@ catch { set ::ctldb_use_old_prot_flow [list [binary format H* 66616c7365]] }
#@ catch { set ::hdlin_always_fsm_complete [list [binary format H* 46414c5345]] }
#@ catch { set ::test_bsd_dead_cycle_after_update_dr [list [binary format H* 30]] }
#@ catch { set ::acs_hdl_source "" }
#@ catch { set ::tcl_precision [list [binary format H* 3132]] }
#@ catch { set ::sdc_runtime_paths_missing_inter_clock_constraints [list [binary
format H* 35]] }
#@ catch { set ::optimize_reg_add_path_groups [list [binary format H*
66616c7365]] }
#@ catch { set ::write_test_new_translation_engine [list [binary format H*
66616c7365]] }
#@ catch { set ::upf_skip_ao_check_for_els_input [list [binary format H* 74727565]]
}
#@ catch { set ::test_set_svf_print_exclude_existing_dft_se_alike [list [binary
format H* 66616c7365]] }
#@ catch { set ::power_cg_inherit_timing_exceptions [list [binary format H*
66616c7365]] }
#@ catch { set ::test_soc_wrp_soft_core_non_abutted_flow [list [binary format H*
66616c7365]] }
#@ catch { set ::rc_slew_upper_threshold_pct_fall [list [binary format H*
38302e303030303030]] }
#@ catch { set ::ccd_skip_path_groups "" }
#@ catch { set ::sh_new_variable_message_in_script [list [binary format H*
66616c7365]] }
#@ catch { set ::acs_qor_report_suffix [list [binary format H* 716f72]] }
#@ catch { set ::compile_keep_original_for_external_references [list [binary format
H* 66616c7365]] }
#@ catch { set ::test_scan_segment_key [list [binary format H* 73]] }
#@ catch { set ::compile_retime_license_behavior [list [binary format H* 77616974]]
}
#@ catch { set ::upf_iso_filter_elements_with_applies_to [list [binary format H*
454e41424c45]] }
#@ catch { set ::compile_dont_touch_annotated_cell_during_inplace_opt [list [binary
format H* 66616c7365]] }
#@ catch { set ::hdlin_elaborate_black_box_all_except "" }
#@ catch { set ::mw_pgconn_cell_inst "" }
#@ catch { set ::default_port_connection_class [list [binary format H*
756e6976657273616c]] }
#@ catch { set ::xt_filter_logic_constant_aggressors [list [binary format H*
74727565]] }
#@ catch { set ::sdc_runtime_analysis_enable [list [binary format H* 66616c7365]] }
#@ catch { set ::hdlin_generate_operator_sharing_data [list [binary format H*
46414c5345]] }
#@ catch { set ::sdfout_time_scale [list [binary format H* 312e30]] }
#@ catch { set ::test_default_min_fault_coverage [list [binary format H* 3935]] }
#@ catch { set ::dcnxt_skip_writing_sca_for_hier_blocks [list [binary format H*
74727565]] }
#@ catch { set ::power_low_power_placement [list [binary format H* 66616c7365]] }
#@ catch { set ::lbo_cells_in_regions [list [binary format H* 66616c7365]] }
#@ catch { set ::hdlin_ff_always_async_set_reset [list [binary format H* 54525545]]
}
#@ catch { set ::acs_area_report_suffix [list [binary format H* 61726561]] }
#@ catch { set ::mw_cel_as_escaped [list [binary format H* 74727565]] }
#@ catch { set ::view_error_window_count [list [binary format H* 36]] }
#@ catch { set ::mw_hdl_stop_at_FRAM_cells [list [binary format H* 66616c7365]] }
#@ catch { set ::vhdlout_top_configuration_name [list [binary format H*
4346475f54425f45]] }
#@ catch { set ::bus_multiple_name_separator_style [list [binary format H* 2c2c]] }
#@ catch { set ::compile_auto_ungroup_count_leaf_cells [list [binary format H*
66616c7365]] }
#@ catch { set ::upf_create_implicit_supply_sets [list [binary format H* 74727565]]
}
#@ catch { set ::upf_write_highest_upf_version [list [binary format H* 66616c7365]]
}
#@ catch { set ::power_enable_one_pass_power_gating [list [binary format H*
66616c7365]] }
#@ catch { set ::view_command_log_file [list [binary format H*
2e2f766965775f636f6d6d616e642e6c6f67]] }
#@ catch { set ::sdfout_write_to_output [list [binary format H* 66616c7365]] }
#@ catch { set ::test_protocol_add_cycle [list [binary format H* 74727565]] }
#@ catch { set ::level_shifter_naming_prefix "" }
#@ catch { set ::synlib_dwhomeip "" }
#@ catch { set ::acs_attr [list [binary format H*
4f7074696d697a6174696f6e5072696f726974696573205072657365727665426f756e6461726965732
0436f6d70696c6556657269667920546573745265616479436f6d70696c65204d617841726561204361
6e466c617474656e2046756c6c436f6d70696c6520496e6372656d656e74616c436f6d70696c6520426
f756e64617279436f6d70696c6520556c7472614f7074696d697a6174696f6e204175746f556e67726f
757020557365546f70416c6c506174687320436f6d70696c65556c74726120546172676574436f6d706
96c6572]] }
#@ catch { set ::mw_site_name_mapping "" }
#@ catch { set ::compile_inbound_cell_optimization [list [binary format H*
66616c7365]] }
#@ catch { set ::vhdlout_dont_create_dummy_nets [list [binary format H*
46414c5345]] }
#@ catch { set ::is_qt4 [list [binary format H* 30]] }
#@ catch { set ::gen_max_compound_name_length [list [binary format H* 323536]] }
#@ catch { set ::hdlin_report_mem [list [binary format H* 313030]] }
#@ catch { set ::dct_placement_ignore_scan [list [binary format H* 66616c7365]] }
#@ catch { set ::test_non_scan_clock_port_naming_style [list [binary format H*
746573745f6e73635f2573]] }
#@ catch { set ::systemcout_levelize [list [binary format H* 74727565]] }
#@ catch { set ::hdlin_enable_relative_placement [list [binary format H* 7262]] }
#@ catch { set ::_upf_apply_retention_attribute_on_non_retention_macro [list
[binary format H* 66616c7365]] }
#@ catch { set ::clock_arnoldi_dbg_file "" }
#@ catch { set ::upf_charz_enable_supply_port_punching [list [binary format H*
74727565]] }
#@ catch { set ::timing_check_defaults [list [binary format H*
67656e6572617465645f636c6f636b206c6f6f7073206e6f5f696e7075745f64656c617920756e636f6
e73747261696e65645f656e64706f696e74732070756c73655f636c6f636b5f63656c6c5f7479706520
6e6f5f64726976696e675f63656c6c207061727469616c5f696e7075745f64656c6179]] }
#@ catch { set ::upf_use_driver_receiver_for_io_voltages [list [binary format H*
74727565]] }
#@ catch { set ::dft_tp_show_driver_mapping [list [binary format H* 66616c7365]] }
#@ catch { set ::acs_make_exec [list [binary format H* 676d616b65]] }
#@ catch { set ::default_output_delay [list [binary format H* 3330]] }
#@ catch { set ::si_xtalk_composite_aggr_noise_peak_ratio [list [binary format H*
302e3031]] }
#@ catch { set ::test_cc_ir_value_of_masked_bits [list [binary format H* 30]] }
#@ catch { set ::acs_timing_report_suffix [list [binary format H* 74696d]] }
#@ catch { set ::gen_match_ripper_wire_widths [list [binary format H*
66616c7365]] }
#@ catch { set ::test_scan_in_port_naming_style [list [binary format H*
746573745f736925732573]] }
#@ catch { set ::test_rtldrc_latch_check_style [list [binary format H*
64656661756c74]] }
#@ catch { set ::compile_enable_min_delay_fixing [list [binary format H*
66616c7365]] }
#@ catch { set ::test_capture_clock_skew [list [binary format H*
736d616c6c5f736b6577]] }
#@ catch { set ::power_do_not_size_icg_cells [list [binary format H* 74727565]] }
#@ catch { set ::ccd_max_prepone [list [binary format H* 30]] }
#@ catch { set ::ccd_max_postpone [list [binary format H* 30]] }
#@ catch { set ::hdlin_strict_verilog_reader [list [binary format H* 46414c5345]] }
#@ catch { set ::do_operand_isolation [list [binary format H* 66616c7365]] }
#@ catch { set ::view_command_win_max_lines [list [binary format H* 31303030]] }
#@ catch { set ::upf_pg_writer_output_all_supply_ports [list [binary format H*
66616c7365]] }
#@ catch { set ::verilogout_no_tri [list [binary format H* 66616c7365]] }
#@ catch { set ::test_bsd_default_delay [list [binary format H* 302e30]] }
#@ catch { set ::compile_optimize_netlist_area [list [binary format H* 66616c7365]]
}
#@ catch { set ::acs_verilog_extensions [list [binary format H* 2e76]] }
#@ catch { set ::when_analysis_without_case_analysis [list [binary format H*
66616c7365]] }
#@ catch { set ::hdlin_netlist_unloaded_signals [list [binary format H*
46414c5345]] }
#@ catch { set ::__err [list [binary format H*
63616e2774207265616420223a3a656e76284c4d435f484f4d4529223a206e6f2073756368207661726
961626c65]] }
#@ catch { set ::timing_enable_non_sequential_checks [list [binary format H*
66616c7365]] }
#@ catch { set ::lib_cell_using_delay_from_ccs [list [binary format H* 74727565]] }
#@ catch { set ::test_shared_codec_io_architecture [list [binary format H*
66616c7365]] }
#@ catch { set ::vhdlout_write_attributes [list [binary format H* 46414c5345]] }
#@ catch { set ::hdlin_intermediate_file_method [list [binary format H*
6c6567616379]] }
#@ catch { set ::view_extend_thick_lines [list [binary format H* 74727565]] }
#@ catch { set ::insert_test_design_naming_style [list [binary format H*
25735f746573745f2564]] }
#@ catch { set ::case_analysis_sequential_propagate [list [binary format H*
66616c7365]] }
#@ catch { set ::sdfout_min_fall_cell_delay [list [binary format H* 302e]] }
#@ catch { set ::sdc_runtime_tightly_constrained_same_clock_path_groups [list
[binary format H* 3530]] }
#@ catch { set ::html_log_filename [list [binary format H*
64656661756c742e68746d6c]] }
#@ catch { set ::hdl_preferred_license "" }
#@ catch { set ::sh_allow_tcl_with_set_app_var [list [binary format H* 74727565]] }
#@ catch { set ::compile_top_acs_partition [list [binary format H* 66616c7365]] }
#@ catch { set ::power_enable_minpower [list [binary format H* 46414c5345]] }
#@ catch { set ::veriloglib_sdf_edge [list [binary format H* 74727565]] }
#@ catch { set ::upf_proceed_on_bias_rail_order_error [list [binary format H*
66616c7365]] }
#@ catch { set ::nglc_replay_tcl_file [list [binary format H*
6e676c635f7368656c6c5f636f6d6d616e642e74636c]] }
#@ catch { set ::view_busy_during_selection [list [binary format H* 74727565]] }
#@ catch { set ::hdlin_autoread_sverilog_extensions [list [binary format H*
2e7376202e73766572696c6f67]] }
#@ catch { set ::upf_suppress_etm_model_checking [list [binary format H*
66616c7365]] }
#@ catch { set ::template_parameter_style [list [binary format H* 25732564]] }
#@ catch { set ::acs_log_file_suffix [list [binary format H* 6c6f67]] }
#@ catch { set ::check_design_allow_multiply_driven_nets_by_inputs_and_outputs
[list [binary format H* 66616c7365]] }
#@ catch { set ::ignore_tf_error [list [binary format H* 66616c7365]] }
#@ catch { set ::hdlin_latch_always_async_set_reset [list [binary format H*
46414c5345]] }
#@ catch { set ::html_log_enable [list [binary format H* 66616c7365]] }
#@ catch { set ::power_default_toggle_rate [list [binary format H* 302e31]] }
#@ catch { set ::sheet_sizes "" }
#@ catch { set ::hdlin_autoread_vhdl_extensions [list [binary format H*
2e766864202e7668646c]] }
#@ catch { set ::auto_insert_level_shifters_on_clocks "" }
#@ catch { set ::disable_library_transition_degradation [list [binary format H*
66616c7365]] }
#@ catch { set ::power_scale_internal_arc [list [binary format H* 66616c7365]] }
#@ catch { set ::vhdlout_bit_vector_type [list [binary format H*
7374645f6c6f6769635f766563746f72]] }
#@ catch { set ::compile_allow_dw_hierarchical_inverter_opt [list [binary format H*
66616c7365]] }
#@ catch { set ::budget_generate_critical_range [list [binary format H*
66616c7365]] }
#@ catch { set ::fanin_fanout_trace_arcs [list [binary format H* 74696d696e67]] }
#@ catch { set ::hdlin_vhdl93_concat [list [binary format H* 54525545]] }
#@ catch { set ::compile_restructure_sync_set_reset [list [binary format H*
66616c7365]] }
#@ catch { set ::acs_exclude_extensions "" }
#@ catch { set ::hdlin_check_no_latch [list [binary format H* 46414c5345]] }
#@ catch { set ::gen_dont_show_single_bit_busses [list [binary format H*
66616c7365]] }
#@ catch { set ::acs_autopart_max_percent [list [binary format H* 302e30]] }
#@ catch { set ::hdlin_mux_for_array_read_sparseness_limit [list [binary format H*
3930]] }
#@ catch { set ::si_xtalk_composite_aggr_quantile_high_pct [list [binary format H*
39392e3733]] }
#@ catch { set ::tcl_interactive [list [binary format H* 30]] }
#@ catch { set ::check_design_allow_inconsistent_input_port [list [binary format H*
66616c7365]] }
#@ catch { set ::vhdlout_write_entity [list [binary format H* 54525545]] }
#@ catch { set ::view_report_append [list [binary format H* 74727565]] }
#@ catch { set ::compile_report_on_unmapped_cells [list [binary format H*
66616c7365]] }
#@ catch { set ::optimize_netlist_enable_state_reachability [list [binary format H*
46414c5345]] }
#@ catch { set ::hdlin_enable_elaborate_update [list [binary format H* 74727565]] }
#@ catch { set ::template_naming_style [list [binary format H* 25735f2570]] }
#@ catch { set ::simplified_verification_mode_allow_retiming [list [binary format
H* 46414c5345]] }
#@ catch { set ::power_cg_balance_stages [list [binary format H* 66616c7365]] }
#@ catch { set ::compile_delete_unloaded_sequential_cells [list [binary format H*
74727565]] }
#@ catch { set ::test_isolate_hier_scan_out [list [binary format H* 30]] }
#@ catch { set ::test_keep_connected_scan_en [list [binary format H* 66616c7365]] }
#@ catch { set ::enable_instances_in_report_net [list [binary format H*
74727565]] }
#@ catch { set ::mv_output_enforce_simple_names [list [binary format H*
74727565]] }
#@ catch { set ::auto_link_options [list [binary format H* 2d616c6c]] }
#@ catch { set ::cts_clock_source_is_exclude_pin [list [binary format H* 74727565]]
}
#@ catch { set ::hdlin_sv_packages [list [binary format H* 646f6e745f636861696e]] }
#@ catch { set ::hdlin_enable_upf_compatible_naming [list [binary format H*
46414c5345]] }
#@ catch { set ::test_scan_segment_physical_location_checks_skip [list [binary
format H* 66616c7365]] }
#@ catch { set ::test_user_test_data_register_naming_style [list [binary format H*
555444522564]] }
#@ catch { set ::power_cg_module_naming_style "" }
#@ catch { set ::test_scan_link_wire_key [list [binary format H* 77]] }
#@ catch { set ::vhdlout_follow_vector_direction [list [binary format H* 54525545]]
}
#@ catch { set ::view_use_x_routines [list [binary format H* 74727565]] }
#@ catch { set ::vhdlout_write_architecture [list [binary format H* 54525545]] }
#@ catch { set ::timing_enable_through_paths [list [binary format H* 66616c7365]] }
#@ catch { set ::hdlin_report_info [list [binary format H* 54525545]] }
#@ catch { set ::compile_auto_ungroup_area_num_cells [list [binary format H* 3330]]
}
#@ catch { set ::compile_optimize_netlist_area_in_incremental [list [binary format
H* 64656661756c74]] }
#@ catch { set ::bit_blasted_bus_linking_order [list [binary format H*
7265666572656e6365]] }
#@ catch { set ::all_registers_include_icg [list [binary format H* 66616c7365]] }
#@ catch { set ::sdc_runtime_top_fanout_nets_missing_exceptions [list [binary
format H* 313030]] }
#@ catch { set ::spg_high_effort_mux_area_structuring [list [binary format H*
74727565]] }
#@ catch { set ::view_draw_text_breakpoint [list [binary format H* 302e3031]] }
#@ catch { set ::veriloglib_delay_signal_naming_style "" }
#@ catch { set ::compile_register_replication_do_size_only [list [binary format H*
74727565]] }
#@ catch { set ::compile_enable_multibit_rewiring_in_incremental [list [binary
format H* 66616c7365]] }
#@ catch { set ::mw_create_netlist_from_CEL [list [binary format H* 66616c7365]] }
#@ catch { set ::tcl_version [list [binary format H* 382e36]] }
#@ catch { set ::upf_isols_allow_instances_in_elements [list [binary format H*
74727565]] }
#@ catch { set ::test_setup_additional_clock_pulse [list [binary format H*
66616c7365]] }
#@ catch { set ::timing_use_driver_arc_transition_at_clock_source [list [binary
format H* 74727565]] }
#@ catch { set ::upf_relax_target_library_subset_for_pm_cells [list [binary format
H* 66616c7365]] }
#@ catch { set ::compile_preserve_subdesign_interfaces [list [binary format H*
66616c7365]] }
#@ catch { set ::hdlin_v2005_replication_semantics [list [binary format H*
54525545]] }
#@ catch { set ::hdlin_port_dimension_mismatch_error [list [binary format H*
54525545]] }
#@ catch { set ::compile_top_all_paths [list [binary format H* 66616c7365]] }
#@ catch { set ::register_replication_naming_style [list [binary format H*
25735f7265702564]] }
#@ catch { set ::init_path [list [binary format H*
2f6361642f73796e6f707379732f73796e7468657369732f6375722f617578782f73796e]] }
#@ catch { set ::power_cg_enable_alternative_algorithm [list [binary format H*
66616c7365]] }
#@ catch { set ::exit_delete_command_log_file [list [binary format H*
66616c7365]] }
#@ catch { set ::test_scan_enable_port_naming_style [list [binary format H*
746573745f73652573]] }
#@ catch { set ::enable_keep_signal [list [binary format H* 66616c7365]] }
#@ catch { set ::power_cg_print_enable_conditions [list [binary format H*
66616c7365]] }
#@ catch { set ::gen_open_name_prefix [list [binary format H* 4f70656e]] }
#@ catch { set ::timing_report_union_tns [list [binary format H* 74727565]] }
#@ catch { set ::upf_extension [list [binary format H* 74727565]] }
#@ catch { set ::tcl_pkgPath [list [binary format H*
2f6361642f73796e6f707379732f73796e7468657369732f6375722f617578782f74636c6c69622f6c6
9622f74636c382e36]] }
#@ catch { set ::db_load_ccs_power_data [list [binary format H* 66616c7365]] }
#@ catch { set ::libgen_max_differences [list [binary format H* 2d31]] }
#@ catch { set ::site_info_file [list [binary format H*
2f6361642f73796e6f707379732f73796e7468657369732f6375722f61646d696e2f6c6963656e73652
f736974655f696e666f]] }
#@ catch { set ::search_path [list [binary format H*
2e202f6361642f73796e6f707379732f73796e7468657369732f6375722f6c69627261726965732f737
96e202f6361642f73796e6f707379732f73796e7468657369732f6375722f64772f73796e5f76657220
2f6361642f73796e6f707379732f73796e7468657369732f6375722f64772f73696d5f766572]] }
#@ catch { set ::vhdllib_timing_checks [list [binary format H* 74727565]] }
#@ catch { set ::mv_allow_multiple_power_domain_in_voltage_area [list [binary
format H* 66616c7365]] }
#@ catch { set ::preserve_collections_in_compile [list [binary format H* 74727565]]
}
#@ catch { set ::hdlin_while_loop_iterations [list [binary format H* 34303936]] }
#@ catch { set ::mw_power_port "" }
#@ catch { set ::current_instance "" }
#@ catch { set ::lib_use_thresholds_per_pin [list [binary format H* 74727565]] }
#@ catch { set ::test_bsd_allow_tolerable_violations [list [binary format H*
66616c7365]] }
#@ catch { set ::acs_submit_log_uses_o_option [list [binary format H* 74727565]] }
#@ catch { set ::dct_remove_invalid_bounds [list [binary format H* 66616c7365]] }
#@ catch { set ::cache_write_info [list [binary format H* 66616c7365]] }
#@ catch { set ::hdlin_sv_tokens [list [binary format H* 46414c5345]] }
#@ catch { set ::mw_disable_escape_char [list [binary format H* 74727565]] }
#@ catch { set ::list_of_file_types [list [binary format H*
766572696c6f6728762920207668646c28766864292020676c6f62616c5f6373747228636f6e2920207
06173735f6373747228636f6e292020757365725f6f766572726964655f636f6e73747261696e742863
6f6e292020757365725f6f766572726964655f73637269707428736372292020757365725f627564676
5745f73637269707428292020757365725f7265706f72745f736372697074287265706f727429202075
7365725f636f6d70696c655f73747261746567795f73637269707428636f6d70696c652920207573657
25f636f6d70696c655f7363726970742874636c292020706173735f636f6d70696c655f736372697074
286175746f736372292020656c61625f6462286462292020656c61625f646463286464632920206c696
25f64622864622920207072655f6462286462292020706f73745f64622864622920207072655f646463
28646463292020706f73745f6464632864646329202073766628737666292020676c6f62616c5f6c6f6
7286c6f67292020706173735f6c6f67286c6f672920206d616b6566696c65282920206f632e74636c28
6f632e74636c292020637374722e74636c28637374722e74636c292020706173735f617265615f72657
06f72742861726561292020706173735f74696d696e675f7265706f72742874696d292020706173735f
716f725f7265706f727428716f72292020706173735f637374725f7265706f727428637374722920206
76c6f62616c5f7265706f727428292020656e762829]] }
#@ catch { set ::power_cg_iscgs_enable [list [binary format H* 66616c7365]] }
#@ catch { set ::timing_enable_multiple_clocks_per_reg [list [binary format H*
74727565]] }
#@ catch { set ::timing_use_clock_specific_transition [list [binary format H*
74727565]] }
#@ catch { set ::sh_deprecated_is_error [list [binary format H* 66616c7365]] }
#@ catch { set ::upf_pm_data_net_force_scalar [list [binary format H*
66616c7365]] }
#@ catch { set ::mv_upf_enable_reverse_bias_check [list [binary format H*
66616c7365]] }
#@ catch { set ::lc_enable_legacy_library_compiler [list [binary format H*
66616c7365]] }
#@ catch { set ::default_schematic_options [list [binary format H*
2d73697a6520696e66696e697465]] }
#@ catch { set ::test_point_keep_hierarchy [list [binary format H* 66616c7365]] }
#@ catch { set ::hlo_resource_allocation [list [binary format H*
636f6e73747261696e745f64726976656e]] }
#@ catch { set ::gui_start_option_no_windows [list [binary format H* 30]] }
#@ catch { set ::case_analysis_with_logic_constants [list [binary format H*
74727565]] }
#@ catch { set ::var_mux_mbm [list [binary format H* 54525545]] }
#@ catch { set ::upf_skip_retention_clamp_insertion [list [binary format H*
46414c5345]] }
#@ catch { set ::mv_allow_va_beyond_core_area [list [binary format H*
66616c7365]] }
#@ catch { set ::link_allow_pin_name_synonym [list [binary format H* 74727565]] }
#@ catch { set ::default_name_rules "" }
#@ catch { set ::nglc_keep_nglc_temp_files [list [binary format H* 66616c7365]] }
#@ catch { set ::hdlin_vrlg_std [list [binary format H* 32303035]] }
#@ catch { set ::vhdllib_timing_xgen [list [binary format H* 66616c7365]] }
#@ catch { set ::port_complement_naming_style [list [binary format H*
25735f424152]] }
#@ catch { set ::inherit_parent_dont_touch [list [binary format H* 66616c7365]] }
#@ catch { set ::enable_special_level_shifter_naming [list [binary format H*
66616c7365]] }
#@ catch { set ::hdlin_allow_unpacked_array_concat_on_port [list [binary format H*
66616c7365]] }
#@ catch { set ::atpg_bidirect_output_only [list [binary format H* 66616c7365]] }
#@ catch { set ::hdlin_enable_assertions [list [binary format H* 46414c5345]] }
#@ catch { set ::vhdlout_unknown_name [list [binary format H* 275827]] }
#@ catch { set ::ccl_enable_always [list [binary format H* 66616c7365]] }
#@ catch { set ::view_disable_output [list [binary format H* 66616c7365]] }
#@ catch { set ::hdlin_enable_ieee_1735_support [list [binary format H*
74727565]] }
#@ catch { set ::sh_enable_page_mode [list [binary format H* 66616c7365]] }
#@ catch { set ::compile_final_drc_fix [list [binary format H* 6e6f6e65]] }
#@ catch { set ::compile_instance_name_prefix [list [binary format H* 55]] }
#@ catch { set ::compile_update_annotated_delays_during_inplace_opt [list [binary
format H* 74727565]] }
#@ catch { set ::hdlin_mux_oversize_ratio [list [binary format H* 313030]] }
#@ catch { set ::sdfout_allow_non_positive_constraints [list [binary format H*
66616c7365]] }
#@ catch { set ::upf_allow_non_bias_domain_in_bias_scope [list [binary format H*
66616c7365]] }
#@ catch { set ::physopt_ignore_lpin_fanout [list [binary format H* 66616c7365]] }
#@ catch { set ::compile_hold_reduce_cell_count [list [binary format H*
66616c7365]] }
#@ catch { set ::compile_create_wire_load_table [list [binary format H*
66616c7365]] }
#@ catch { set ::view_select_default_message "" }
#@ catch { set ::check_error_list [list [binary format H*
434d442d30303420434d442d30303620434d442d30303720434d442d30303820434d442d30303920434
d442d30313020434d442d30313120434d442d30313220434d442d30313420434d442d30313520434d44
2d30313620434d442d30313920434d442d30323620434d442d30333120434d442d3033372044422d312
0444353482d3131204445532d303031204143532d3139332046494c452d312046494c452d322046494c
452d332046494c452d34204c494e4b2d37204c494e542d37204c494e542d3230204c4e4b2d303233204
f50542d313030204f50542d313031204f50542d313032204f50542d313134204f50542d313234204f50
542d313237204f50542d313238204f50542d313535204f50542d313537204f50542d313831204f50542
d3436322055492d31312055492d31342055492d31352055492d31362055492d31372055492d31392055
492d32302055492d32312055492d32322055492d32332055492d34302055492d3431205549442d34205
549442d36205549442d37205549442d38205549442d39205549442d3133205549442d3134205549442d
3135205549442d3139205549442d3230205549442d3235205549442d3237205549442d3238205549442
d3239205549442d3330205549442d3332205549442d3538205549442d3837205549442d313033205549
442d313039205549442d323730205549442d323732205549442d343033205549442d343430205549442
d3434342055494f2d322055494f2d332055494f2d342055494f2d32352055494f2d36352055494f2d36
362055494f2d37352055494f2d39342055494f2d39352045514e2d362045514e2d31312045514e2d313
52045514e2d31362045514e2d31382045514e2d3230]] }
#@ catch { set ::mv_input_enforce_simple_names [list [binary format H* 74727565]] }
#@ catch { set ::test_dedicated_subdesign_scan_outs [list [binary format H*
66616c7365]] }
#@ catch { set ::write_test_max_cycles [list [binary format H* 30]] }
#@ catch { set ::power_cg_permit_opposite_edge_icg [list [binary format H*
66616c7365]] }
#@ catch { set ::hdlin_tic_tic_discards_whitespace [list [binary format H*
54525545]] }
#@ catch { set ::vhdllib_timing_mesg [list [binary format H* 74727565]] }
#@ catch { set ::sdf_enable_cond_start_end [list [binary format H* 66616c7365]] }
#@ catch { set ::uniquify_keep_original_design [list [binary format H* 66616c7365]]
}
#@ catch { set ::acs_lic_wait [list [binary format H* 30]] }
#@ catch { set ::test_default_delay [list [binary format H* 302e30]] }
#@ catch { set ::compile_enable_total_power_optimization [list [binary format H*
66616c7365]] }
#@ catch { set ::acs_make_args [list [binary format H*
736574206163735f6d616b655f61726773]] }
#@ catch { set ::rc_input_threshold_pct_rise [list [binary format H*
35302e303030303030]] }
#@ catch { set ::compile_ultra_ungroup_dw [list [binary format H* 54525545]] }
#@ catch { set ::mw_design_library "" }
#@ catch { set ::upf_enable_mv_merge_clone [list [binary format H* 66616c7365]] }
#@ catch { set ::mv_output_upf_line_indent [list [binary format H* 32]] }
#@ catch { set ::hdlin_enable_persistent_macros [list [binary format H*
46414c5345]] }
#@ catch { set ::upf_disable_b2b_iso_nor_optimization_strategies [list [binary
format H* 2a]] }
#@ catch { set ::verilogout_unconnected_prefix [list [binary format H*
53594e4f505359535f554e434f4e4e45435445445f]] }
#@ catch { set ::hdlin_auto_save_templates [list [binary format H* 46414c5345]] }
#@ catch { set ::sdfout_min_rise_net_delay [list [binary format H* 302e]] }
#@ catch { set ::synlib_dont_get_license "" }
#@ catch { set ::test_disable_find_best_scan_out [list [binary format H*
66616c7365]] }
#@ catch { set ::upf_enable_relaxed_charz [list [binary format H* 74727565]] }
#@ catch { set ::verilogout_ignore_case [list [binary format H* 66616c7365]] }
#@ catch { set ::vhdlout_write_components [list [binary format H* 54525545]] }
#@ catch { set ::power_enable_power_gating [list [binary format H* 66616c7365]] }
#@ catch { set ::sdc_runtime_analysis_log_file [list [binary format H*
7364635f72756e74696d652e6c6f67]] }
#@ catch { set ::text_print_command [list [binary format H* 6c7072202d506c77]] }
#@ catch { set ::disable_conditional_mode_analysis [list [binary format H*
66616c7365]] }
#@ catch { set ::timing_max_parallel_computations [list [binary format H* 30]] }
#@ catch { set ::compile_high_effort_area_structuring [list [binary format H*
74727565]] }
#@ catch { set ::DW_lp_op_iso_mode [list [binary format H* 4e4f4e45]] }
#@ catch { set ::bus_naming_style [list [binary format H* 25735b25645d]] }
#@ catch { set ::hdlin_presto_cell_name_prefix [list [binary format H* 43]] }
#@ catch { set ::hdlout_internal_busses [list [binary format H* 46414c5345]] }
#@ catch { set ::vhdlout_unconnected_pin_prefix [list [binary format H* 6e]] }
#@ catch { set ::timing_enable_normalized_slack [list [binary format H*
66616c7365]] }
#@ catch { set ::icc2_link_processes_inherit_parent_process_group [list [binary
format H* 66616c7365]] }
#@ catch { set ::auto_oldpath "" }
#@ catch { set ::vhdlout_wired_or_res_func "" }
#@ catch { set ::vhdlout_use_packages [list [binary format H*
494545452e7374645f6c6f6769635f31313634]] }
#@ catch { set ::auto_insert_level_shifters [list [binary format H* 74727565]] }
#@ catch { set ::sdc_write_unambiguous_names [list [binary format H* 74727565]] }
#@ catch { set ::acs_vhdl_extensions [list [binary format H* 2e766864]] }
#@ catch { set ::hdlin_field_naming_style "" }
#@ catch { set ::template_separator_style [list [binary format H* 5f]] }
#@ catch { set ::text_editor_command [list [binary format H*
787465726d202d666e2038783133202d652076692025732026]] }
#@ catch { set ::vhdllib_architecture [list [binary format H* 564954414c]] }
#@ catch { set ::hdlin_interface_port_ABI [list [binary format H* 32]] }
#@ catch { set ::gen_open_name_postfix "" }
#@ catch { set ::seqmap_prefer_registers_with_multibit_equivalent [list [binary
format H* 66616c7365]] }
#@ catch { set ::upf_insert_clamp_in_zpr_hierarchy [list [binary format H*
66616c7365]] }
#@ catch { set ::enable_verilog_netlist_reader [list [binary format H* 74727565]] }
#@ catch { set ::nglc_is_symbol_file [list [binary format H* 66616c7365]] }
#@ catch { set ::timing_max_normalization_cycles [list [binary format H* 34]] }
#@ catch { set ::enable_fast_mode [list [binary format H* 46414c5345]] }
#@ catch { set ::write_test_round_timing_values [list [binary format H*
74727565]] }
#@ catch { set ::compile_enable_async_mux_mapping [list [binary format H*
74727565]] }
#@ catch { set ::enable_slew_degradation [list [binary format H* 74727565]] }
#@ catch { set ::mv_upf_enable_forward_bias_check [list [binary format H*
66616c7365]] }
#@ catch { set ::_acs_html_filename [list [binary format H*
526573756c74732e68746d6c]] }
#@ catch { set ::link_allow_physical_variant_cells [list [binary format H*
66616c7365]] }
#@ catch { set ::test_scan_out_port_naming_style [list [binary format H*
746573745f736f25732573]] }
#@ catch { set ::find_converts_name_lists [list [binary format H* 66616c7365]] }
#@ catch { set ::exit_delete_filename_log_file [list [binary format H* 74727565]] }
#@ catch { set ::upf_charz_create_pst_with_internal_state_names [list [binary
format H* 66616c7365]] }
#@ catch
{ set ::compile_seqmap_identify_shift_registers_with_synchronous_logic_ascii [list
[binary format H* 66616c7365]] }
#@ catch { set ::get_attribute_float_decimal_places [list [binary format H* 36]] }
#@ catch { set ::initial_target_library "" }
#@ catch { set ::compile_assume_fully_decoded_three_state_busses [list [binary
format H* 66616c7365]] }
#@ catch { set ::simplified_verification_mode [list [binary format H*
46414c5345]] }
#@ catch { set ::new_idn_switch [list [binary format H* 74727565]] }
#@ catch { set ::found_arch_apollo [list [binary format H* 30]] }
#@ catch { set ::upf_allow_refer_before_define [list [binary format H* 66616c7365]]
}
#@ catch { set ::mv_upf_tracking [list [binary format H* 74727565]] }
#@ catch { set ::hdlin_reporting_level [list [binary format H* 6261736963]] }
#@ catch { set ::hdlin_preserve_sequential [list [binary format H* 6e6f6e65]] }
#@ catch { set ::test_scan_chain_naming_style "" }
#@ catch { set ::acs_user_budgeting_script [list [binary format H*
6275646765742e736372]] }
#@ catch { set ::vhdllib_logic_system [list [binary format H*
696565652d31313634]] }
#@ catch { set ::annotation_control [list [binary format H* 3634]] }
#@ catch { set ::hdlin_analyze_prioritize_command_line_defines [list [binary format
H* 54525545]] }
#@ catch { set ::sh_script_stop_severity [list [binary format H* 4e6f6e65]] }
#@ catch { set ::test_write_four_cycle_stil_protocol [list [binary format H*
66616c7365]] }
#@ catch { set ::hdlin_ignore_ghm_errors [list [binary format H* 66616c7365]] }
#@ catch { set ::synlib_preferred_ff_chains "" }
#@ catch { set ::hdlin_presto_net_name_prefix [list [binary format H* 4e]] }
#@ catch { set ::spg_enhanced_timing_model [list [binary format H* 66616c7365]] }
#@ catch { set ::bus_range_separator_style [list [binary format H* 3a]] }
#@ catch { set ::vhdllib_cell_name_map_file "" }
#@ catch { set ::verilogout_higher_designs_first [list [binary format H*
46414c5345]] }
#@ catch { set ::compile_print_crossprobe_info_with_seqmap_messages [list [binary
format H* 66616c7365]] }
#@ catch { set ::mw_hvo_must_not_dump_master_names "" }
#@ catch { set ::synlib_iis_use_netlist [list [binary format H* 46414c5345]] }
#@ catch { set ::enable_keep_signal_dt_net [list [binary format H* 66616c7365]] }
#@ catch { set ::test_scan_clock_b_port_naming_style [list [binary format H*
746573745f7363622573]] }
#@ catch { set ::rc_slew_upper_threshold_pct_rise [list [binary format H*
38302e303030303030]] }
#@ catch { set ::si_ccs_use_gate_level_simulation [list [binary format H*
66616c7365]] }
#@ catch { set ::acs_compile_script_suffix [list [binary format H* 6175746f736372]]
}
#@ catch { set ::test_allow_clock_reconvergence [list [binary format H*
74727565]] }
#@ catch { set ::nglc_search_path2 [list [binary format H*
2f6361642f73796e6f707379732f6c632f6375722f6c696e757836342f6c632f62696e2f6c63325f736
8656c6c5f65786563]] }
#@ catch { set ::upf_report_isolation_matching [list [binary format H* 66616c7365]]
}
#@ catch { set ::power_cg_flatten [list [binary format H* 66616c7365]] }
#@ catch { set ::compile_seqmap_propagate_constants [list [binary format H*
74727565]] }
#@ catch { set ::filename_log_file [list [binary format H*
66696c656e616d65732e6c6f67]] }
#@ catch { set ::hdlin_vhdl_mixed_language_instantiation [list [binary format H*
46414c5345]] }
#@ catch { set ::gui_auto_start [list [binary format H* 30]] }
#@ catch { set ::tcl_prompt1 [list [binary format H*
6563686f202d6e202264636e78745f7368656c6c3e2022]] }
#@ catch { set ::upf_charz_max_srsn_messages [list [binary format H* 3130]] }
#@ catch { set ::mw_cell_name "" }
#@ catch { set ::test_allow_internal_pins_in_hierarchical_flow [list [binary format
H* 66616c7365]] }
#@ catch { set ::enable_phys_lib_during_elab [list [binary format H* 66616c7365]] }
#@ catch { set ::hdlin_enable_hier_naming [list [binary format H* 46414c5345]] }
#@ catch { set ::compile_mv_no_always_on_buffer_for_port_isolation [list [binary
format H* 66616c7365]] }
#@ catch { set ::nglc_search_path [list [binary format H*
2f6361642f73796e6f707379732f6c632f6375722f6c696e757836342f6c632f62696e2f6c635f73686
56c6c5f65786563]] }
#@ catch { set ::test_bsd_synthesis_gated_tck [list [binary format H*
66616c7365]] }
#@ catch { set ::test_simulation_library "" }
#@ catch { set ::test_wrapper_new_wrp_clock_timing "" }
#@ catch { set ::power_fix_sdpd_annotation [list [binary format H* 74727565]] }
#@ catch { set ::acs_autopart_max_area [list [binary format H* 302e30]] }
#@ catch { set ::mw_current_design "" }
#@ catch { set ::rc_slew_derate_from_library [list [binary format H*
312e303030303030]] }
#@ catch { set ::pdefout_diff_original [list [binary format H* 54525545]] }
#@ catch { set ::rc_degrade_min_slew_when_rd_less_than_rnet [list [binary format H*
66616c7365]] }
#@ catch { set ::verbose_messages [list [binary format H* 74727565]] }
#@ catch { set ::test_mode_port_naming_style [list [binary format H*
746573745f6d6f64652573]] }
#@ catch { set ::write_test_input_dont_care_value [list [binary format H* 58]] }
#@ catch { set ::sdfout_top_instance_name "" }
#@ catch { set ::test_icg_n_ref_for_dft "" }
#@ catch { set ::test_sync_occ_1x_period [list [binary format H* 3230]] }
#@ catch { set ::mw_hvo_generate_macro_definition [list [binary format H*
66616c7365]] }
#@ catch { set ::mv_allow_force_ls_with_iso_violations [list [binary format H*
74727565]] }
#@ catch { set ::compile_dont_use_dedicated_scanout [list [binary format H* 31]] }
#@ catch { set ::write_test_vhdlout [list [binary format H* 696e6c696e65]] }
#@ catch { set ::pass_dependent_file_types [list [binary format H*
706173735f637374722020757365725f6f766572726964655f636f6e73747261696e742020757365725
f7265706f72745f7363726970742020757365725f636f6d70696c655f73747261746567795f73637269
70742020757365725f6f766572726964655f7363726970742020706173735f636f6d70696c655f73637
26970742020757365725f6275646765745f73637269707420207072655f64622020706f73745f646220
207072655f6464632020706f73745f646463202073766620206d616b6566696c652020706173735f617
265615f7265706f72742020706173735f74696d696e675f7265706f72742020706173735f716f725f72
65706f72742020706173735f637374725f7265706f72742020706173735f6c6f672020656e7620206f6
32e74636c2020637374722e74636c]] }
#@ catch { set ::hdlin_enable_rtldrc_info [list [binary format H* 66616c7365]] }
#@ catch { set ::view_disable_error_windows [list [binary format H* 66616c7365]] }
#@ catch { set ::dc_allow_rtl_pg_to_signal_pins [list [binary format H*
74727565]] }
#@ catch { set ::mw_ground_port "" }
#@ catch { set ::compile_enable_constant_propagation_with_no_boundary_opt [list
[binary format H* 74727565]] }
#@ catch { set ::mw_logic1_net [list [binary format H* 564444]] }
#@ catch { set ::single_group_per_sheet [list [binary format H* 66616c7365]] }
#@ catch { set ::power_write_saif_keep_ungrouped_name [list [binary format H*
66616c7365]] }
#@ catch { set ::synlib_preferred_ffs "" }
#@ catch { set ::sh_auto_sdp_delete [list [binary format H* 66616c7365]] }
#@ catch { set ::verilogout_inout_is_in [list [binary format H* 66616c7365]] }
#@ catch { set ::hdlin_sverilog_std [list [binary format H* 32303137]] }
#@ catch { set ::gui_online_browser [list [binary format H* 66697265666f78]] }
#@ catch { set ::compile_no_new_cells_at_top_level [list [binary format H*
66616c7365]] }
#@ catch { set ::vhdllib_tb_compare [list [binary format H* 30]] }
#@ catch { set ::test_serialize_put_fsm_clock_output [list [binary format H*
74727565]] }
#@ catch { set ::mv_allow_upf_cells_without_upf [list [binary format H*
66616c7365]] }
#@ catch { set ::sh_command_abbrev_mode [list [binary format H*
416e797768657265]] }
#@ catch { set ::compile_adjust_max_processes_used [list [binary format H* 31]] }
#@ catch { set ::dc_shell_mode [list [binary format H* 74636c]] }
#@ catch { set ::dont_bind_unused_pins_to_logic_constant [list [binary format H*
66616c7365]] }
#@ catch { set ::bus_inference_descending_sort [list [binary format H* 74727565]] }
#@ catch { set ::gen_bussing_exact_implicit [list [binary format H* 66616c7365]] }
#@ catch { set ::hdlin_sv_enforce_standalone_generate_blocks [list [binary format
H* 54525545]] }
#@ catch { set ::view_cache_images [list [binary format H* 74727565]] }
#@ catch { set ::test_wrapper_chain_naming_style "" }
#@ catch { set ::gen_cell_pin_name_separator [list [binary format H* 2f]] }
#@ catch { set ::create_clock_no_input_delay [list [binary format H* 66616c7365]] }
#@ catch { set ::upf_nor_iso_macro_allow_enable_supply_check [list [binary format
H* 74727565]] }
#@ catch { set ::view_analyze_file_suffix [list [binary format H*
7620766864207668646c]] }
#@ catch { set ::hdlin_subprogram_default_values [list [binary format H*
46414c5345]] }
#@ catch { set ::bind_unused_hierarchical_pins [list [binary format H* 74727565]] }
#@ catch { set ::tcl_library [list [binary format H*
2f6361642f73796e6f707379732f73796e7468657369732f6375722f617578782f74636c6c69622f6c6
9622f74636c382e36]] }
#@ catch { set ::compile_seqmap_identify_shift_registers_with_synchronous_logic
[list [binary format H* 66616c7365]] }
#@ catch { set ::sdfout_min_fall_net_delay [list [binary format H* 302e]] }
#@ catch { set ::timing_early_launch_at_borrowing_latches [list [binary format H*
74727565]] }
#@ catch { set ::mw_hvo_core_filler_cells [list [binary format H* 74727565]] }
#@ catch { set ::synopsys_exec [list [binary format H*
2f6361642f73796e6f707379732f73796e7468657369732f6375722f616d6436342f73796e2f62696e2
f636f6d6d6f6e5f7368656c6c5f65786563]] }
#@ catch { set ::prev_sh_source_logging [list [binary format H* 74727565]] }
#@ catch { set ::power_cg_ignore_setup_condition [list [binary format H*
66616c7365]] }
#@ catch { set ::power_remove_redundant_clock_gates [list [binary format H*
74727565]] }
#@ catch { set ::de_enable_upf_exploration [list [binary format H* 74727565]] }
#@ catch { set ::product_version [list [binary format H* 562d323032332e3132]] }
#@ catch { set ::test_disconnect_non_functional_so [list [binary format H* 31]] }
#@ catch { set ::compile_enhanced_tns_optimization [list [binary format H*
66616c7365]] }
#@ catch { set ::test_default_bidir_delay [list [binary format H* 302e30]] }
#@ catch { set ::disable_delta_slew_for_tran_cstr [list [binary format H*
66616c7365]] }
#@ catch { set ::upf_set_interface_cell_rel_sn [list [binary format H* 66616c7365]]
}
#@ catch { set ::lc_run_from_legacy_library_compiler [list [binary format H*
74727565]] }
#@ catch { set ::timing_edge_specific_source_latency [list [binary format H*
66616c7365]] }
#@ catch { set ::sh_enable_machine_monitor [list [binary format H* 74727565]] }
#@ catch { set ::hdlin_vhdl_std [list [binary format H* 32303038]] }
#@ catch { set ::dft_tp_enable_mv_checks [list [binary format H* 616c6c]] }
#@ catch { set ::vhdlout_upcase [list [binary format H* 46414c5345]] }
#@ catch { set ::veriloglib_insert_timing_in_specify_block [list [binary format H*
66616c7365]] }
#@ catch { set ::mw_hvo_output_onezero_for_pg [list [binary format H* 74727565]] }
#@ catch { set ::auto_attr_spread_debug [list [binary format H* 66616c7365]] }
#@ catch { set ::compile_fix_cell_degradation [list [binary format H*
66616c7365]] }
#@ catch { set ::estimate_resource_preference [list [binary format H* 66617374]] }
#@ catch { set ::compile_register_replication_across_hierarchy [list [binary format
H* 66616c7365]] }
#@ catch { set ::compile_optimize_unloaded_seq_logic_with_no_bound_opt [list
[binary format H* 66616c7365]] }
#@ catch { set ::ignore_clock_input_delay_for_skew [list [binary format H*
66616c7365]] }
#@ catch { set ::gen_show_created_busses [list [binary format H* 66616c7365]] }
#@ catch { set ::sdc_version [list [binary format H* 322e31]] }
#@ catch { set ::power_cg_reconfig_stages [list [binary format H* 66616c7365]] }
#@ catch { set ::veriloglib_tb_x_eq_dontcare [list [binary format H* 66616c7365]] }
#@ catch { set ::compile_disable_hierarchical_inverter_opt [list [binary format H*
66616c7365]] }
#@ catch { set ::hdlin_infer_local_sync_enable_only [list [binary format H*
46414c5345]] }
#@ catch { set ::systemcout_debug_mode [list [binary format H* 66616c7365]] }
#@ catch { set ::mw_use_pdb_lib_format [list [binary format H* 66616c7365]] }
#@ catch { set ::test_user_defined_instruction_naming_style [list [binary format H*
555345522564]] }
#@ catch { set ::upf_use_additional_db_attributes [list [binary format H*
74727565]] }
#@ catch { set ::write_test_scan_check_file_naming_style [list [binary format H*
25735f7363686b2e2573]] }
#@ catch { set ::acs_makefile_name [list [binary format H* 4d616b6566696c65]] }
#@ catch { set ::rc_driver_model_mode [list [binary format H* 616476616e636564]] }
#@ catch { set ::power_cg_cell_naming_style "" }
#@ catch { set ::timing_ocvm_precedence_compatibility [list [binary format H*
66616c7365]] }
#@ catch { set ::dpcm_slewlimit [list [binary format H* 54525545]] }
#@ catch { set ::upf_allow_ls_on_dont_touch_nets [list [binary format H*
66616c7365]] }
#@ catch { set ::link_portname_allow_square_bracket_to_match_underscore [list
[binary format H* 66616c7365]] }
#@ catch { set ::compile_advanced_fix_multiple_port_nets [list [binary format H*
66616c7365]] }
#@ catch { set ::mw_hdl_expand_cell_with_no_instance [list [binary format H*
66616c7365]] }
#@ catch { set ::view_script_submenu_items [list [binary format H*
22444120746f20534745205472616e73666572222077726974655f736765]] }
#@ catch { set ::ccd_ignore_scan_reset_for_boundary_identification [list [binary
format H* 66616c7365]] }
#@ catch { set ::motif_files [list [binary format H*
2f6361642f73796e6f707379732f73796e7468657369732f6375722f61646d696e2f7365747570]] }
#@ catch { set ::hdlin_vhdl_preserve_case [list [binary format H* 46414c5345]] }
#@ catch { set ::compile_instance_name_suffix "" }
#@ catch { set ::upf_allow_power_gating_cell_for_retention [list [binary format H*
66616c7365]] }
#@ catch { set ::power_lib2saif_rise_fall_pd [list [binary format H* 66616c7365]] }
#@ catch { set ::acs_use_autopartition [list [binary format H* 66616c7365]] }
#@ catch { set ::bin_path [list [binary format H*
2f6361642f73796e6f707379732f73796e7468657369732f6375722f6c696e757836342f73796e2f626
96e]] }
#@ catch { set ::compile_enable_ccd [list [binary format H* 66616c7365]] }
#@ catch { set ::nglc_log_path [list [binary format H*
34323736365f31373434333135333737313330313932]] }
#@ catch { set ::duplicate_ports [list [binary format H* 66616c7365]] }
#@ catch { set ::compile_seqmap_propagate_high_effort [list [binary format H*
74727565]] }
#@ catch { set ::do_clkmap_CLOCK_U_prefix [list [binary format H* 74727565]] }
#@ catch { set ::test_stil_multiclock_capture_procedures [list [binary format H*
66616c7365]] }
#@ catch { set ::view_watcher "" }
#@ catch { set ::sh_line_editing_mode [list [binary format H* 656d616373]] }
#@ catch { set ::timing_crpr_remove_clock_to_data_crp [list [binary format H*
66616c7365]] }
#@ catch { set ::view_set_selecting_color [list [binary format H* 7768697465]] }
#@ catch { set ::vhdlout_top_configuration_arch_name [list [binary format H* 41]] }
#@ catch { set ::verilogout_single_bit [list [binary format H* 66616c7365]] }
#@ catch { set ::test_icg_p_ref_for_dft "" }
#@ catch { set ::_acs_top_html_filename [list [binary format H*
4143535f726573756c7473]] }
#@ catch { set ::vhdlout_target_simulator "" }
#@ catch { set ::test_logicbist_add_prpg_lul [list [binary format H* 66616c7365]] }
#@ catch { set ::upf_iso_skip_single_rail_for_non_primary_iso_supply [list [binary
format H* 66616c7365]] }
#@ catch { set ::verilogout_show_unconnected_pins [list [binary format H*
46414c5345]] }
#@ catch { set ::power_enable_clock_scaling [list [binary format H* 66616c7365]] }
#@ catch { set ::current_design "" }
#@ catch { set ::timing_library_max_cap_from_lookup_table [list [binary format H*
66616c7365]] }
#@ catch { set ::bsd_physical_effort [list [binary format H* 6d656469756d]] }
#@ catch { set ::view_tools_menu_items "" }
#@ catch { set ::case_analysis_log_file "" }
#@ catch { set ::test_occ_ip_leaf_pin [list [binary format H* 66616c7365]] }
#@ catch { set ::nglc_intermediate_db_files "" }
#@ catch { set ::ldd_return_val [list [binary format H* 30]] }
#@ catch { set ::mw_read_ignore_filler_cell [list [binary format H* 74727565]] }
#@ catch { set ::test_disable_enhanced_dft_drc_reporting [list [binary format H*
74727565]] }
#@ catch { set ::hdlin_generate_separator_style [list [binary format H* 5f]] }
#@ catch { set ::acs_override_script_suffix [list [binary format H* 736372]] }
#@ catch { set ::hdlin_prohibit_nontri_multiple_drivers [list [binary format H*
54525545]] }
#@ catch { set ::upf_skip_retention_on_dft_cells [list [binary format H*
66616c7365]] }
#@ catch { set ::sh_source_uses_search_path [list [binary format H* 74727565]] }
#@ catch { set ::acs_svf_suffix [list [binary format H* 737666]] }
#@ catch { set ::test_bsd_default_strobe [list [binary format H* 39352e30]] }
#@ catch { set ::compile_enable_report_transformed_registers [list [binary format
H* 74727565]] }
#@ catch { set ::ccd_ignore_ports_for_boundary_identification "" }
#@ catch { set ::arch [list [binary format H* 6c696e75783634]] }
#@ catch { set ::veriloglib_write_recrem_as_setuphold [list [binary format H*
66616c7365]] }
#@ catch { set ::vhdlout_three_state_res_func "" }
#@ catch { set ::timing_save_library_derate [list [binary format H* 66616c7365]] }
#@ catch { set ::timing_disable_cond_default_arcs [list [binary format H*
66616c7365]] }
#@ catch { set ::test_wrp_new_power_domain_aware_dw_insertion_flow [list [binary
format H* 66616c7365]] }
#@ catch { set ::mv_no_always_on_buffer_for_redundant_isolation [list [binary
format H* 66616c7365]] }
#@ catch { set ::ddc_allow_unknown_packed_commands [list [binary format H*
74727565]] }
#@ catch { set ::check_design_check_for_wire_loop [list [binary format H*
74727565]] }
#@ catch { set ::rc_receiver_model_mode [list [binary format H*
616476616e636564]] }
#@ catch { set ::sh_full_product_version [list [binary format H*
44657369676e20436f6d70696c657220285229204e58542056657273696f6e20562d323032332e31322
0666f72206c696e75783634202d204e6f762032372c2032303233]] }
#@ catch { set ::power_default_static_probability [list [binary format H*
302e35]] }
#@ catch { set ::ssf_supported_versions [list [binary format H* 312e3020312e31]] }
#@ catch { set ::generic_symbol_library [list [binary format H*
67656e657269632e736462]] }
#@ catch { set ::compile_checkpoint_phases [list [binary format H* 66616c7365]] }
#@ catch { set ::vhdlout_equations [list [binary format H* 46414c5345]] }
#@ catch { set ::test_bsd_control_cell_drive_limit [list [binary format H* 30]] }
#@ catch { set ::mv_use_std_cell_for_isolation [list [binary format H* 66616c7365]]
}
#@ catch { set ::allow_input_delay_min_greater_than_max [list [binary format H*
66616c7365]] }
#@ catch { set ::test_connect_pse_clk_to_scan_clock_signal [list [binary format H*
74727565]] }
#@ catch { set ::test_default_scan_style [list [binary format H*
6d756c7469706c657865645f666c69705f666c6f70]] }
#@ catch { set ::lc_enable_common_shell_lc [list [binary format H* 66616c7365]] }
#@ catch { set ::mv_allow_ls_on_leaf_pin_boundary [list [binary format H*
66616c7365]] }
#@ catch { set ::timing_clock_gating_propagate_enable [list [binary format H*
66616c7365]] }
#@ catch { set ::find_allow_only_non_hier_ports [list [binary format H*
66616c7365]] }
#@ catch { set ::test_validate_test_model_connectivity [list [binary format H*
66616c7365]] }
#@ catch { set ::view_report_output2file [list [binary format H* 66616c7365]] }
#@ catch { set ::compile_seqmap_propagate_constant_clocks [list [binary format H*
66616c7365]] }
#@ catch { set ::view_read_file_suffix [list [binary format H*
6462206764622073646220656469662065716e20666e63206c7369206d6966204e455420706c6120737
42074646c207620766864207668646c20786e66]] }
#@ catch { set ::auto_noexec [list [binary format H* 31]] }
#@ catch { set ::hdlin_enable_elaborate_ref_linking [list [binary format H*
46414c5345]] }
#@ catch { set ::power_derive_rtl_saif_map [list [binary format H* 46414c5345]] }
#@ catch { set ::compile_inbound_max_cell_percentage [list [binary format H*
31302e30]] }
#@ catch { set ::enable_rule_based_query [list [binary format H* 66616c7365]] }
#@ catch { set ::errorCode [list [binary format H*
54434c2052454144205641524e414d45]] }
#@ catch { set ::disable_auto_time_borrow [list [binary format H* 66616c7365]] }
#@ catch { set ::si_filter_per_aggr_noise_peak_ratio [list [binary format H*
302e3031]] }
#@ catch { set ::power_rtl_saif_file [list [binary format H*
706f7765725f72746c2e73616966]] }
#@ catch { set ::sh_tcllib_app_dirname [list [binary format H* 73796e]] }
#@ catch { set ::power_cg_derive_related_clock [list [binary format H* 66616c7365]]
}
#@ catch { set ::rc_slew_lower_threshold_pct_fall [list [binary format H*
32302e303030303030]] }
#@ catch { set ::abstraction_enable_power_calculation [list [binary format H*
74727565]] }
#@ catch { set ::acs_use_default_delays [list [binary format H* 66616c7365]] }
#@ catch { set ::ccd_hold_control_effort [list [binary format H* 68696768]] }
#@ catch { set ::suppress_errors "" }
#@ catch { set ::link_library [list [binary format H*
202a20796f75725f6c6962726172792e646220]] }
#@ catch { set ::vao_feedthrough_module_name_prefix "" }
#@ catch { set ::upf_charz_enable_domain_rescoping [list [binary format H*
66616c7365]] }
#@ catch { set ::mv_allow_ls_per_output_port [list [binary format H* 66616c7365]] }
#@ catch { set ::upf_track_bias_supply_net_resolution [list [binary format H*
66616c7365]] }
#@ catch { set ::power_enable_datapath_gating [list [binary format H* 54525545]] }
#@ catch { set ::timing_using_default_clock_gated_check [list [binary format H*
66616c7365]] }
#@ catch { set ::company "" }
#@ catch { set ::power_cg_physically_aware_cg [list [binary format H*
66616c7365]] }
#@ catch { set ::product_build_date [list [binary format H*
4e6f762032372c2032303233]] }
#@ catch { set ::test_default_period [list [binary format H* 3130302e30]] }
#@ catch { set ::auto_ungroup_preserve_constraints [list [binary format H*
74727565]] }
#@ catch { set ::budget_map_clock_gating_cells [list [binary format H* 66616c7365]]
}
#@ catch { set ::mw_hvo_unconnected_ports [list [binary format H* 66616c7365]] }
#@ catch { set ::verilogout_indirect_inout_connection [list [binary format H*
46414c5345]] }
#@ catch { set ::timing_self_loops_no_skew [list [binary format H* 66616c7365]] }
#@ catch { set ::upf_levshi_on_constraint_only [list [binary format H* 66616c7365]]
}
#@ catch { set ::estimate_io_latency [list [binary format H* 66616c7365]] }
#@ catch { set ::timing_through_path_max_segments [list [binary format H* 35]] }
#@ catch { set ::hier_dont_trace_ungroup [list [binary format H* 30]] }
#@ catch { set ::compile_enhanced_tns_optimization_effort_level [list [binary
format H* 6c6f77]] }
#@ catch { set ::mw_hdl_bus_dir_for_undef_cell [list [binary format H* 30]] }
#@ catch { set ::hdlin_module_name_limit [list [binary format H* 323536]] }
#@ catch { set ::vhdllib_vital_99 [list [binary format H* 66616c7365]] }
#@ catch { set ::when_analysis_permitted [list [binary format H* 74727565]] }
#@ catch { set ::vhdlout_preserve_hierarchical_types [list [binary format H*
564543544f52]] }
#@ catch { set ::synopsys_root [list [binary format H*
2f6361642f73796e6f707379732f73796e7468657369732f637572]] }
#@ catch { set ::view_arch_types [list [binary format H*
73706172634f53352068707578313020727336303030207367696d697073]] }
#@ catch { set ::auto_wire_load_selection [list [binary format H* 74727565]] }
#@ catch { set ::compile_identify_synchronous_shift_register_effort [list [binary
format H* 6e6f6e65]] }
#@ catch { set ::case_analysis_sequential_propagation [list [binary format H*
6e65766572]] }
#@ catch { set ::compile_implementation_selection [list [binary format H*
74727565]] }
#@ catch { set ::test_bsd_make_private_instructions_public [list [binary format H*
66616c7365]] }
#@ catch { set ::power_rclock_unrelated_use_fastest [list [binary format H*
74727565]] }
#@ catch { set ::enable_recovery_removal_arcs [list [binary format H*
66616c7365]] }
#@ catch { set ::test_occ_insert_clock_gating_cells [list [binary format H*
66616c7365]] }
#@ catch { set ::test_bsd_new_output_parametrics [list [binary format H*
66616c7365]] }
#@ catch { set ::compile_cpu_limit [list [binary format H* 302e30]] }
#@ catch { set ::compile_enhanced_tns_optimization_in_incremental [list [binary
format H* 64656661756c74]] }
#@ catch { set ::compile_timing_high_effort_tns [list [binary format H*
66616c7365]] }
#@ catch { set ::acs_hdl_verilog_define_list "" }
#@ catch { set ::view_independent_dialogs [list [binary format H*
2022746573745f7265706f72742220202020222054657374205265706f72747320222020227265706f7
2745f7072696e742220202022205265706f727420222020227265706f72745f6f7074696f6e73222022
205265706f7274204f7074696f6e7320222020227265706f72745f77696e22202020202022205265706
f7274204f757470757420222020226d616e75616c5f70616765222020202022204d616e75616c205061
6765202220]] }
#@ catch { set ::upf_block_partition "" }
#@ catch { set ::mw_pgconn_cell_master "" }
#@ catch { set ::timing_enable_slack_distribution [list [binary format H*
66616c7365]] }
#@ catch { set ::write_test_vector_file_naming_style [list [binary format H*
25735f25642e2573]] }
#@ catch { set ::bus_multiple_separator_style [list [binary format H* 2c]] }
#@ catch { set ::acs_cstr_report_suffix [list [binary format H* 63737472]] }
#@ catch { set ::bsd_max_out_switching_limit [list [binary format H* 3630303030]] }
#@ catch { set ::view_report_interactive [list [binary format H* 74727565]] }
#@ catch { set ::ssf_current_version [list [binary format H* 312e31]] }
#@ catch { set ::nglc_is_none_tech_file [list [binary format H* 66616c7365]] }
#@ catch { set ::test_use_user_defined_ports_in_all_partitions [list [binary format
H* 66616c7365]] }
#@ catch { set ::acs_hdl_sverilog_define_list "" }
#@ catch { set ::test_enable_codec_sharing [list [binary format H* 66616c7365]] }
#@ catch { set ::hdlin_elab_errors_deep [list [binary format H* 46414c5345]] }
#@ catch { set ::cache_file_chmod_octal [list [binary format H* 363636]] }
#@ catch { set ::view_disable_cursor_warping [list [binary format H* 74727565]] }
#@ catch { set ::upf_allow_iso_on_dont_touch_nets [list [binary format H*
74727565]] }
#@ catch { set ::test_infer_slave_clock_pulse_after_capture [list [binary format H*
696e666572]] }
#@ catch { set ::sh_auto_sdp_stack_trace_frequency [list [binary format H* 30]] }
#@ catch { set ::test_mode_port_inverted_naming_style [list [binary format H*
746573745f6d6f64655f692573]] }
#@ catch { set ::sdc_runtime_tightly_constrained_path_group_slack_percentage [list
[binary format H* 3735]] }
#@ catch { set ::timing_enable_constraint_variation [list [binary format H*
66616c7365]] }
#@ catch { set ::case_analysis_propagate_through_icg [list [binary format H*
66616c7365]] }
#@ catch { set ::sh_output_log_file "" }
#@ catch { set ::found_x11_vendor_string_apollo [list [binary format H* 30]] }
#@ catch { set ::test_avoid_control_register_of_icg_in_scan_chain_head [list
[binary format H* 66616c7365]] }
#@ catch { set ::change_names_bit_blast_negative_index [list [binary format H*
66616c7365]] }
#@ catch { set ::test_default_strobe_width [list [binary format H* 302e30]] }
#@ catch { set ::compile_high_effort_area [list [binary format H* 66616c7365]] }
#@ catch { set ::disable_mdb_stop_points [list [binary format H* 66616c7365]] }
#@ catch { set ::hdlin_elaborate_black_box "" }
#@ catch { set ::vhdllib_sdf_edge [list [binary format H* 66616c7365]] }
#@ catch { set ::rc_noise_model_mode [list [binary format H* 6261736963]] }
#@ catch { set ::upf_apply_retention_attribute_on_non_retention_macro [list [binary
format H* 66616c7365]] }
#@ catch { set ::fsm_auto_inferring [list [binary format H* 46414c5345]] }
#@ catch { set ::test_bsdl_max_line_length [list [binary format H* 3830]] }
#@ catch { set ::compile_use_low_timing_effort [list [binary format H* 66616c7365]]
}
#@ catch { set ::mw_hvo_split_bus [list [binary format H* 66616c7365]] }
#@ catch { set ::fsm_enable_state_minimization [list [binary format H* 46414c5345]]
}
#@ catch { set ::power_hdlc_do_not_split_cg_cells [list [binary format H*
66616c7365]] }
#@ catch { set ::upf_power_model_search_path "" }
#@ catch { set ::mw_hvo_pg_ports [list [binary format H* 66616c7365]] }
#@ catch { set ::test_tp_enable_logic_type [list [binary format H* 67617465]] }
#@ catch { set ::hdlin_vcs_home "" }
#@ catch { set ::hdlin_mux_size_limit [list [binary format H* 3332]] }
#@ catch { set ::link_portname_allow_period_to_match_underscore [list [binary
format H* 66616c7365]] }
#@ catch { set ::power_min_internal_power_threshold "" }
#@ catch { set ::query_objects_format [list [binary format H* 4c6567616379]] }
#@ catch { set ::upf_infer_complex_retention_cells [list [binary format H*
66616c7365]] }
#@ catch { set ::test_core_wrap_use_sync_ctl_segment_length_for_fanout_check [list
[binary format H* 66616c7365]] }
#@ catch { set ::xterm_executable [list [binary format H* 787465726d]] }
#@ catch { set ::mw_reference_library "" }
#@ catch { set ::hdlin_report_sequential_pruning [list [binary format H*
46414c5345]] }
#@ catch { set ::mw_hvo_dump_master_names "" }
#@ catch { set ::test_bsdl_default_suffix_name [list [binary format H* 6273646c]] }
#@ catch { set ::enable_page_mode [list [binary format H* 66616c7365]] }
#@ catch { set ::synthetic_library "" }
#@ catch { set ::designer "" }
#@ catch { set ::power_model_preference [list [binary format H* 6e6c706d]] }
#@ catch { set ::timing_separate_clock_gating_group [list [binary format H*
66616c7365]] }
#@ catch { set ::compile_dft_log_print_mis_info [list [binary format H*
66616c7365]] }
#@ catch { set ::nglc_exist [list [binary format H* 74727565]] }
#@ catch { set ::read_translate_msff [list [binary format H* 54525545]] }
#@ catch { set ::compile_enable_physical_multibit_banking [list [binary format H*
66616c7365]] }
#@ catch { set ::view_icon_path "" }
#@ catch { set ::test_optimize_dft_ng [list [binary format H* 66616c7365]] }
#@ catch { set ::remove_constant_register [list [binary format H* 66616c7365]] }
#@ catch { set ::verilogout_equation [list [binary format H* 66616c7365]] }
#@ catch { set ::view_maximum_route_grids [list [binary format H* 30]] }
#@ catch { set ::power_sdpd_message_tolerance [list [binary format H*
302e3030303031]] }
#@ catch { set ::timing_pocvm_precedence [list [binary format H* 66696c65]] }
#@ catch { set ::view_background [list [binary format H* 626c61636b]] }
#@ catch { set ::compile_log_format [list [binary format H*
202025656c61705f74696d652025617265612025776e732025746e7320256472632025656e64706f696
e74]] }
#@ catch { set ::sh_auto_sdp_crte_timeperiod [list [binary format H* 30]] }
#@ catch { set ::compile_inbound_sitedef_name "" }
#@ catch { set ::HIERARCHY_DELIMITER [list [binary format H* 2f]] }
#@ catch { set ::power_cg_ext_feedback_loop [list [binary format H* 74727565]] }
#@ catch { set ::timing_consider_internal_startpoints [list [binary format H*
74727565]] }
#@ catch { set ::upf_power_model_library "" }
#@ catch { set ::sh_command_abbrev_options [list [binary format H* 74727565]] }
#@ catch { set ::sh_user_man_path "" }
#@ catch { set ::acs_db_suffix [list [binary format H* 6462]] }
#@ catch { set ::power_rclock_use_asynch_inputs [list [binary format H*
66616c7365]] }
#@ catch { set ::hdlin_autoread_verilog_extensions [list [binary format H* 2e76]] }
#@ catch { set ::mv_skip_opcond_checking_for_unloaded_level_shifter [list [binary
format H* 66616c7365]] }
#@ catch { set ::power_fix_sdpd_annotation_verbose [list [binary format H*
66616c7365]] }
#@ catch { set ::test_bsd_manufacturer_id [list [binary format H* 30]] }
#@ catch { set ::mv_allow_pg_pin_reconnection [list [binary format H*
66616c7365]] }
#@ catch { set ::nglc_result_path [list [binary format H* 2f746d70]] }
#@ catch { set ::test_enable_retiming_flops_driven_by_direct_scan_clock_driver
[list [binary format H* 66616c7365]] }
#@ catch { set ::sh_enable_line_editing [list [binary format H* 74727565]] }
#@ catch { set ::target_library [list [binary format H*
796f75725f6c6962726172792e6462]] }
#@ catch { set ::test_dont_fix_constraint_violations [list [binary format H*
66616c7365]] }
#@ catch { set ::si_filter_accum_aggr_noise_peak_ratio [list [binary format H*
302e3033]] }
#@ catch { set ::sh_new_variable_message [list [binary format H* 66616c7365]] }
#@ catch { set ::write_test_formats [list [binary format H*
73796e6f7073797320747373695f61736369692074647320766572696c6f67207668646c2077676c]]
}
#@ catch { set ::veriloglib_violation_notifier_name "" }
#@ catch { set ::view_use_integer_scaling [list [binary format H* 66616c7365]] }
#@ catch { set ::bus_inference_style "" }
#@ catch { set ::timing_dont_traverse_pg_net [list [binary format H* 74727565]] }
#@ catch { set ::power_default_toggle_rate_type [list [binary format H*
666173746573745f636c6f636b]] }
#@ catch { set ::mv_no_main_power_violations [list [binary format H* 74727565]] }
#@ catch { set ::acs_dc_exec "" }
#@ catch { set ::vhdlout_separate_scan_in [list [binary format H* 46414c5345]] }
#@ catch { set ::hdlin_analyze_verbose_mode [list [binary format H* 30]] }
#@ catch { set ::view_dialogs_modal [list [binary format H* 74727565]] }
#@ catch { set ::timing_crpr_remove_muxed_clock_crp [list [binary format H*
74727565]] }
#@ catch { set ::tp_analyze_false_path [list [binary format H* 66616c7365]] }
#@ catch { set ::sh_auto_sdp [list [binary format H* 66616c7365]] }
#@ catch { set ::default_input_delay [list [binary format H* 3330]] }
#@ catch { set ::upf_allow_DD_primary_with_supply_sets [list [binary format H*
66616c7365]] }
#@ catch { set ::veriloglib_zero_delay_model [list [binary format H* 66616c7365]] }
#@ catch { set ::test_use_test_models [list [binary format H* 66616c7365]] }
#@ catch { set ::timing_remove_clock_reconvergence_pessimism [list [binary format
H* 66616c7365]] }
#@ catch { set ::upf_enable_legacy_block [list [binary format H* 74727565]] }
#@ catch { set ::synlib_abort_wo_dw_license [list [binary format H* 46414c5345]] }
#@ catch { set ::hdlin_autoread_exclude_extensions "" }
#@ catch { set ::auto_path [list [binary format H*
2f6361642f73796e6f707379732f73796e7468657369732f6375722f617578782f74636c6c69622f6c6
9622f74636c382e36202f6361642f73796e6f707379732f73796e7468657369732f6375722f61757878
2f74636c6c69622f736e70735f74636c202f6361642f73796e6f707379732f73796e7468657369732f6
375722f617578782f74636c6c69622f73796e202f6361642f73796e6f707379732f73796e7468657369
732f6375722f617578782f74636c6c69622f6c6962202f6361642f73796e6f707379732f73796e74686
57369732f6375722f616d6436342f73796e2f6c6962202f6361642f73796e6f707379732f73796e7468
657369732f6375722f617578782f73796e2f6c6962202f6361642f73796e6f707379732f73796e74686
57369732f6375722f617578782f677569202f6361642f73796e6f707379732f73796e7468657369732f
6375722f617578782f6775692f636f6d6d6f6e202f6361642f73796e6f707379732f73796e746865736
9732f6375722f617578782f6775692f73796e2f6c61796f7574]] }
#@ catch { set ::hdlin_legacy_naming [list [binary format H* 46414c5345]] }
#@ catch { set ::compile_seqmap_honor_sync_set_reset [list [binary format H*
66616c7365]] }
#@ catch { set ::collection_result_display_limit [list [binary format H* 313030]] }
#@ catch { set ::access_internal_pins [list [binary format H* 66616c7365]] }
#@ catch { set ::mw_enable_net_bus [list [binary format H* 66616c7365]] }
#@ catch { set ::get_attribute_float_auto_display [list [binary format H*
66616c7365]] }
#@ catch { set ::banking_enable_attribute_spreading [list [binary format H*
74727565]] }
#@ catch { set ::acs_insert_level_shifter [list [binary format H* 74727565]] }
#@ catch { set ::view_info_search_cmd "" }
#@ catch { set ::acs_default_pass_name [list [binary format H* 70617373]] }
#@ catch { set ::dft_enable_mis_cells_decomposition [list [binary format H*
66616c7365]] }
#@ catch { set ::enable_bit_blasted_bus_linking [list [binary format H*
66616c7365]] }
#@ catch { set ::vhdllib_glitch_handle [list [binary format H* 74727565]] }
#@ catch { set ::mux_auto_inferring_effort [list [binary format H* 32]] }
#@ catch { set ::upf_suppress_empty_strategy_messages [list [binary format H*
66616c7365]] }
#@ catch { set ::compile_enable_print_messages_for_redundant_registers [list
[binary format H* 66616c7365]] }
#@ catch { set ::compile_clock_gating_through_hierarchy [list [binary format H*
66616c7365]] }
#@ catch { set ::hdlin_mux_size_min [list [binary format H* 32]] }
#@ catch { set ::sh_product_version [list [binary format H* 562d323032332e3132]] }
#@ catch { set ::enable_netl_view [list [binary format H* 54525545]] }
#@ catch { set ::test_dedicated_clock_chain_clock [list [binary format H*
66616c7365]] }
#@ catch { set ::upf_charz_create_compact_pst [list [binary format H*
66616c7365]] }
#@ catch { set ::power_clock_network_include_register_clock_pin_power [list [binary
format H* 54525545]] }
#@ catch { set ::sh_new_variable_message_tmp [list [binary format H* 66616c7365]] }
#@ catch { set ::test_scan_enable_inverted_port_naming_style [list [binary format
H* 746573745f7365692573]] }
#@ catch { set ::ccd_optimize_boundary_timing [list [binary format H* 74727565]] }
#@ catch { set ::rc_output_threshold_pct_fall [list [binary format H*
35302e303030303030]] }
#@ catch { set ::compile_negative_logic_methodology [list [binary format H*
66616c7365]] }
#@ catch { set ::timing_use_ceff_for_drc [list [binary format H* 66616c7365]] }
#@ catch { set ::cache_dir_chmod_octal [list [binary format H* 373737]] }
#@ catch { set ::compile_seqmap_report_non_scan_mapping [list [binary format H*
66616c7365]] }
#@ catch { set ::test_bsd_input_ac_parametrics [list [binary format H* 66616c7365]]
}
#@ catch { set ::mv_make_primary_supply_available_for_always_on [list [binary
format H* 74727565]] }
#@ catch { set ::uniquify_naming_style [list [binary format H* 25735f2564]] }
#@ catch { set ::compile_retime_exception_registers [list [binary format H*
66616c7365]] }
#@ catch { set ::compile_high_effort_area_in_incremental [list [binary format H*
64656661756c74]] }
#@ catch { set ::remove_unloaded_register [list [binary format H* 66616c7365]] }
#@ catch { set ::test_enable_scan_reordering_in_compile_incremental [list [binary
format H* 74727565]] }
#@ catch { set ::sdc_runtime_hier_block_pins_timing_path_threshold [list [binary
format H* 353030]] }
#@ catch { set ::auto_link_disable [list [binary format H* 66616c7365]] }
#@ catch { set ::write_name_nets_same_as_ports [list [binary format H* 66616c7365]]
}
#@ catch { set ::vhdlout_bit_type [list [binary format H* 7374645f6c6f676963]] }
#@ catch { set ::upf_iso_map_exclude_zpr_clamp_lib_cells [list [binary format H*
66616c7365]] }
#@ catch { set ::reoptimize_design_changed_list_file_name "" }
#@ catch { set ::cache_write "" }
#@ catch { set ::link_force_case [list [binary format H*
636865636b5f7265666572656e6365]] }
#@ ##@@@## gen_common_shell_read_lib
#@ eval {read_lib
tcbn07_bwph240l11p57pd_pm_ulvttt_0p85v_85c_typical_hm_lvf_p_ccs.lib -no_warnings}
#@ ##@@@##
#@ set lc_write_view_db_file false
#@ set librs [get_libs]
#@ for {set i 0} {$i < [ sizeof $librs ]} {incr i 1} {
#@ set lib [index_collection $librs $i]
#@ redirect -var a "query_object $lib"
#@ regexp {{(")?([^"]*)(")?}} $a b c d e
#@ write_lib $d -o $nglc_result_path/$nglc_log_path/$d.db
#@ }
#@ exit

You might also like