command
command
source /cad/synopsys/synthesis/cur/admin/setup/.synopsys_dc.setup
#@ # -- Starting source /cad/synopsys/synthesis/cur/admin/setup/.synopsys_dc.setup
#@ #
#@ # ".synopsys_dc.setup" Initialization File for
#@ #
#@ # Dc_Shell and Design_Analyzer
#@ #
#@ # 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.
#@ #
#@ # Each logical grouping of variables is commented as to their
#@ # nature and effect on the Synthesis Commands. Examples of
#@ # variable groups are the Compile Variable Group, which affects
#@ # the designs produced by the COMPILE command, and the Schematic
#@ # Variable Group, which affects the output of the create_schematic
#@ # command.
#@ #
#@ # You can type "man <group_name>_variables" in dc_shell or
#@ # design_analyzer to get help about a group of variables.
#@ # For instance, to get help about the "system" variable group,
#@ # type "help system_variables". You can also type
#@ # "man <variable name>", to get help on the that variable's
#@ # group.
#@ #
#@
#@ # System variables
#@ set sh_command_abbrev_mode "Anywhere"
#@ set sh_continue_on_error "true"
#@ update_app_var -default true sh_continue_on_error
#@ set sh_enable_page_mode "true"
#@ update_app_var -default true sh_enable_page_mode
#@ set sh_source_uses_search_path "true"
#@ update_app_var -default true sh_source_uses_search_path
#@ if {$synopsys_program_name == "dc_shell" || \
#@ $synopsys_program_name == "de_shell" || \
#@ $synopsys_program_name == "dc_sms_shell" } {
#@ set sh_new_variable_message "false"
#@ update_app_var -default false sh_new_variable_message
#@ } else {
#@ set sh_new_variable_message "true"
#@ update_app_var -default true sh_new_variable_message
#@ }
#@
#@ if {$synopsys_program_name == "dc_shell"} {
#@ set html_log_enable "false"
#@ set html_log_filename "default.html"
#@ }
#@
#@ if {$synopsys_program_name == "de_shell"} {
#@ set de_log_html_filename "default.html"
#@ }
#@
#@ if {$synopsys_program_name == "dc_shell" || $synopsys_program_name ==
"de_shell"} {
#@ lappend auto_path [file join ${synopsys_root} auxx syn lib]
#@ package require cae
#@ }
#@ # -- Starting source /cad/synopsys/synthesis/cur/auxx/tcllib/lib/tcl8.6/tm.tcl
#@ # -- Starting source
/cad/synopsys/synthesis/cur/auxx/tcllib/lib/tcl8.6/package.tcl
#@ # package.tcl --
#@ #
#@ # utility procs formerly in init.tcl which can be loaded on demand
#@ # for package management.
#@ #
#@ # Copyright (c) 1991-1993 The Regents of the University of California.
#@ # Copyright (c) 1994-1998 Sun Microsystems, Inc.
#@ #
#@ # See the file "license.terms" for information on usage and redistribution
#@ # of this file, and for a DISCLAIMER OF ALL WARRANTIES.
#@ #
#@
#@ namespace eval tcl::Pkg {}
#@
#@ # ::tcl::Pkg::CompareExtension --
#@ #
#@ # Used internally by pkg_mkIndex to compare the extension of a file to a given
#@ # extension. On Windows, it uses a case-insensitive comparison because the
#@ # file system can be file insensitive.
#@ #
#@ # Arguments:
#@ # fileName name of a file whose extension is compared
#@ # ext (optional) The extension to compare against; you must
#@ # provide the starting dot.
#@ # Defaults to [info sharedlibextension]
#@ #
#@ # Results:
#@ # Returns 1 if the extension matches, 0 otherwise
#@
#@ proc tcl::Pkg::CompareExtension {fileName {ext {}}} {
#@ global tcl_platform
#@ if {$ext eq ""} {set ext [info sharedlibextension]}
#@ if {$tcl_platform(platform) eq "windows"} {
#@ return [string equal -nocase [file extension $fileName] $ext]
#@ } else {
#@ # Some unices add trailing numbers after the .so, so
#@ # we could have something like '.so.1.2'.
#@ set root $fileName
#@ while {1} {
#@ set currExt [file extension $root]
#@ if {$currExt eq $ext} {
#@ return 1
#@ }
#@
#@ # The current extension does not match; if it is not a numeric
#@ # value, quit, as we are only looking to ignore version number
#@ # extensions. Otherwise we might return 1 in this case:
#@ # tcl::Pkg::CompareExtension foo.so.bar .so
#@ # which should not match.
#@
#@ if {![string is integer -strict [string range $currExt 1 end]]} {
#@ return 0
#@ }
#@ set root [file rootname $root]
#@ }
#@ }
#@ }
#@
#@ # pkg_mkIndex --
#@ # This procedure creates a package index in a given directory. The package
#@ # index consists of a "pkgIndex.tcl" file whose contents are a Tcl script that
#@ # sets up package information with "package require" commands. The commands
#@ # describe all of the packages defined by the files given as arguments.
#@ #
#@ # Arguments:
#@ # -direct (optional) If this flag is present, the generated
#@ # code in pkgMkIndex.tcl will cause the package to be
#@ # loaded when "package require" is executed, rather
#@ # than lazily when the first reference to an exported
#@ # procedure in the package is made.
#@ # -verbose (optional) Verbose output; the name of each file that
#@ # was successfully rocessed is printed out. Additionally,
#@ # if processing of a file failed a message is printed.
#@ # -load pat (optional) Preload any packages whose names match
#@ # the pattern. Used to handle DLLs that depend on
#@ # other packages during their Init procedure.
#@ # dir - Name of the directory in which to create the index.
#@ # args - Any number of additional arguments, each giving
#@ # a glob pattern that matches the names of one or
#@ # more shared libraries or Tcl script files in
#@ # dir.
#@
#@ proc pkg_mkIndex {args} {
#@ set usage {"pkg_mkIndex ?-direct? ?-lazy? ?-load pattern? ?-verbose? ?--?
dir ?pattern ...?"}
#@
#@ set argCount [llength $args]
#@ if {$argCount < 1} {
#@ return -code error "wrong # args: should be\n$usage"
#@ }
#@
#@ set more ""
#@ set direct 1
#@ set doVerbose 0
#@ set loadPat ""
#@ for {set idx 0} {$idx < $argCount} {incr idx} {
#@ set flag [lindex $args $idx]
#@ switch -glob -- $flag {
#@ -- {
#@ # done with the flags
#@ incr idx
#@ break
#@ }
#@ -verbose {
#@ set doVerbose 1
#@ }
#@ -lazy {
#@ set direct 0
#@ append more " -lazy"
#@ }
#@ -direct {
#@ append more " -direct"
#@ }
#@ -load {
#@ incr idx
#@ set loadPat [lindex $args $idx]
#@ append more " -load $loadPat"
#@ }
#@ -* {
#@ return -code error "unknown flag $flag: should be\n$usage"
#@ }
#@ default {
#@ # done with the flags
#@ break
#@ }
#@ }
#@ }
#@
#@ set dir [lindex $args $idx]
#@ set patternList [lrange $args [expr {$idx + 1}] end]
#@ if {![llength $patternList]} {
#@ set patternList [list "*.tcl" "*[info sharedlibextension]"]
#@ }
#@
#@ try {
#@ set fileList [glob -directory $dir -tails -types {r f} -- \
#@ {*}$patternList]
#@ } on error {msg opt} {
#@ return -options $opt $msg
#@ }
#@ foreach file $fileList {
#@ # For each file, figure out what commands and packages it provides.
#@ # To do this, create a child interpreter, load the file into the
#@ # interpreter, and get a list of the new commands and packages that
#@ # are defined.
#@
#@ if {$file eq "pkgIndex.tcl"} {
#@ continue
#@ }
#@
#@ set c [interp create]
#@
#@ # Load into the child any packages currently loaded in the parent
#@ # interpreter that match the -load pattern.
#@
#@ if {$loadPat ne ""} {
#@ if {$doVerbose} {
#@ tclLog "currently loaded packages: '[info loaded]'"
#@ tclLog "trying to load all packages matching $loadPat"
#@ }
#@ if {![llength [info loaded]]} {
#@ tclLog "warning: no packages are currently loaded, nothing"
#@ tclLog "can possibly match '$loadPat'"
#@ }
#@ }
#@ foreach pkg [info loaded] {
#@ if {![string match -nocase $loadPat [lindex $pkg 1]]} {
#@ continue
#@ }
#@ if {$doVerbose} {
#@ tclLog "package [lindex $pkg 1] matches '$loadPat'"
#@ }
#@ try {
#@ load [lindex $pkg 0] [lindex $pkg 1] $c
#@ } on error err {
#@ if {$doVerbose} {
#@ tclLog "warning: load [lindex $pkg 0]\
#@ [lindex $pkg 1]\nfailed with: $err"
#@ }
#@ } on ok {} {
#@ if {$doVerbose} {
#@ tclLog "loaded [lindex $pkg 0] [lindex $pkg 1]"
#@ }
#@ }
#@ if {[lindex $pkg 1] eq "Tk"} {
#@ # Withdraw . if Tk was loaded, to avoid showing a window.
#@ $c eval [list wm withdraw .]
#@ }
#@ }
#@
#@ $c eval {
#@ # Stub out the package command so packages can require other
#@ # packages.
#@
#@ rename package __package_orig
#@ proc package {what args} {
#@ switch -- $what {
#@ require {
#@ return; # Ignore transitive requires
#@ }
#@ default {
#@ __package_orig $what {*}$args
#@ }
#@ }
#@ }
#@ proc tclPkgUnknown args {}
#@ package unknown tclPkgUnknown
#@
#@ # Stub out the unknown command so package can call into each other
#@ # during their initialilzation.
#@
#@ proc unknown {args} {}
#@
#@ # Stub out the auto_import mechanism
#@
#@ proc auto_import {args} {}
#@
#@ # reserve the ::tcl namespace for support procs and temporary
#@ # variables. This might make it awkward to generate a
#@ # pkgIndex.tcl file for the ::tcl namespace.
#@
#@ namespace eval ::tcl {
#@ variable dir ;# Current directory being processed
#@ variable file ;# Current file being processed
#@ variable direct ;# -direct flag value
#@ variable x ;# Loop variable
#@ variable debug ;# For debugging
#@ variable type ;# "load" or "source", for -direct
#@ variable namespaces ;# Existing namespaces (e.g., ::tcl)
#@ variable packages ;# Existing packages (e.g., Tcl)
#@ variable origCmds ;# Existing commands
#@ variable newCmds ;# Newly created commands
#@ variable newPkgs {} ;# Newly created packages
#@ }
#@ }
#@
#@ $c eval [list set ::tcl::dir $dir]
#@ $c eval [list set ::tcl::file $file]
#@ $c eval [list set ::tcl::direct $direct]
#@
#@ # Download needed procedures into the child because we've just deleted
#@ # the unknown procedure. This doesn't handle procedures with default
#@ # arguments.
#@
#@ foreach p {::tcl::Pkg::CompareExtension} {
#@ $c eval [list namespace eval [namespace qualifiers $p] {}]
#@ $c eval [list proc $p [info args $p] [info body $p]]
#@ }
#@
#@ try {
#@ $c eval {
#@ set ::tcl::debug "loading or sourcing"
#@
#@ # we need to track command defined by each package even in the
#@ # -direct case, because they are needed internally by the
#@ # "partial pkgIndex.tcl" step above.
#@
#@ proc ::tcl::GetAllNamespaces {{root ::}} {
#@ set list $root
#@ foreach ns [namespace children $root] {
#@ lappend list {*}[::tcl::GetAllNamespaces $ns]
#@ }
#@ return $list
#@ }
#@
#@ # init the list of existing namespaces, packages, commands
#@
#@ foreach ::tcl::x [::tcl::GetAllNamespaces] {
#@ set ::tcl::namespaces($::tcl::x) 1
#@ }
#@ foreach ::tcl::x [package names] {
#@ if {[package provide $::tcl::x] ne ""} {
#@ set ::tcl::packages($::tcl::x) 1
#@ }
#@ }
#@ set ::tcl::origCmds [info commands]
#@
#@ # Try to load the file if it has the shared library extension,
#@ # otherwise source it. It's important not to try to load
#@ # files that aren't shared libraries, because on some systems
#@ # (like SunOS) the loader will abort the whole application
#@ # when it gets an error.
#@
#@ if {[::tcl::Pkg::CompareExtension $::tcl::file [info
sharedlibextension]]} {
#@ # The "file join ." command below is necessary. Without
#@ # it, if the file name has no \'s and we're on UNIX, the
#@ # load command will invoke the LD_LIBRARY_PATH search
#@ # mechanism, which could cause the wrong file to be used.
#@
#@ set ::tcl::debug loading
#@ load [file join $::tcl::dir $::tcl::file]
#@ set ::tcl::type load
#@ } else {
#@ set ::tcl::debug sourcing
#@ source [file join $::tcl::dir $::tcl::file]
#@ set ::tcl::type source
#@ }
#@
#@ # As a performance optimization, if we are creating direct
#@ # load packages, don't bother figuring out the set of commands
#@ # created by the new packages. We only need that list for
#@ # setting up the autoloading used in the non-direct case.
#@ if {!$::tcl::direct} {
#@ # See what new namespaces appeared, and import commands
#@ # from them. Only exported commands go into the index.
#@
#@ foreach ::tcl::x [::tcl::GetAllNamespaces] {
#@ if {![info exists ::tcl::namespaces($::tcl::x)]} {
#@ namespace import -force ${::tcl::x}::*
#@ }
#@
#@ # Figure out what commands appeared
#@
#@ foreach ::tcl::x [info commands] {
#@ set ::tcl::newCmds($::tcl::x) 1
#@ }
#@ foreach ::tcl::x $::tcl::origCmds {
#@ unset -nocomplain ::tcl::newCmds($::tcl::x)
#@ }
#@ foreach ::tcl::x [array names ::tcl::newCmds] {
#@ # determine which namespace a command comes from
#@
#@ set ::tcl::abs [namespace origin $::tcl::x]
#@
#@ # special case so that global names have no
#@ # leading ::, this is required by the unknown
#@ # command
#@
#@ set ::tcl::abs \
#@ [lindex [auto_qualify $::tcl::abs ::] 0]
#@
#@ if {$::tcl::x ne $::tcl::abs} {
#@ # Name changed during qualification
#@
#@ set ::tcl::newCmds($::tcl::abs) 1
#@ unset ::tcl::newCmds($::tcl::x)
#@ }
#@ }
#@ }
#@ }
#@
#@ # Look through the packages that appeared, and if there is a
#@ # version provided, then record it
#@
#@ foreach ::tcl::x [package names] {
#@ if {[package provide $::tcl::x] ne ""
#@ && ![info exists ::tcl::packages($::tcl::x)]} {
#@ lappend ::tcl::newPkgs \
#@ [list $::tcl::x [package provide $::tcl::x]]
#@ }
#@ }
#@ }
#@ } on error msg {
#@ set what [$c eval set ::tcl::debug]
#@ if {$doVerbose} {
#@ tclLog "warning: error while $what $file: $msg"
#@ }
#@ } on ok {} {
#@ set what [$c eval set ::tcl::debug]
#@ if {$doVerbose} {
#@ tclLog "successful $what of $file"
#@ }
#@ set type [$c eval set ::tcl::type]
#@ set cmds [lsort [$c eval array names ::tcl::newCmds]]
#@ set pkgs [$c eval set ::tcl::newPkgs]
#@ if {$doVerbose} {
#@ if {!$direct} {
#@ tclLog "commands provided were $cmds"
#@ }
#@ tclLog "packages provided were $pkgs"
#@ }
#@ if {[llength $pkgs] > 1} {
#@ tclLog "warning: \"$file\" provides more than one package ($pkgs)"
#@ }
#@ foreach pkg $pkgs {
#@ # cmds is empty/not used in the direct case
#@ lappend files($pkg) [list $file $type $cmds]
#@ }
#@
#@ if {$doVerbose} {
#@ tclLog "processed $file"
#@ }
#@ }
#@ interp delete $c
#@ }
#@
#@ append index "# Tcl package index file, version 1.1\n"
#@ append index "# This file is generated by the \"pkg_mkIndex$more\" command\
n"
#@ append index "# and sourced either when an application starts up or\n"
#@ append index "# by a \"package unknown\" script. It invokes the\n"
#@ append index "# \"package ifneeded\" command to set up package-related\n"
#@ append index "# information so that packages will be loaded automatically\n"
#@ append index "# in response to \"package require\" commands. When this\n"
#@ append index "# script is sourced, the variable \$dir must contain the\n"
#@ append index "# full path name of this file's directory.\n"
#@
#@ foreach pkg [lsort [array names files]] {
#@ set cmd {}
#@ lassign $pkg name version
#@ lappend cmd ::tcl::Pkg::Create -name $name -version $version
#@ foreach spec [lsort -index 0 $files($pkg)] {
#@ foreach {file type procs} $spec {
#@ if {$direct} {
#@ set procs {}
#@ }
#@ lappend cmd "-$type" [list $file $procs]
#@ }
#@ }
#@ append index "\n[eval $cmd]"
#@ }
#@
#@ set f [open [file join $dir pkgIndex.tcl] w]
#@ puts $f $index
#@ close $f
#@ }
#@
#@ # tclPkgSetup --
#@ # This is a utility procedure use by pkgIndex.tcl files. It is invoked as
#@ # part of a "package ifneeded" script. It calls "package provide" to indicate
#@ # that a package is available, then sets entries in the auto_index array so
#@ # that the package's files will be auto-loaded when the commands are used.
#@ #
#@ # Arguments:
#@ # dir - Directory containing all the files for this package.
#@ # pkg - Name of the package (no version number).
#@ # version - Version number for the package, such as 2.1.3.
#@ # files - List of files that constitute the package. Each
#@ # element is a sub-list with three elements. The first
#@ # is the name of a file relative to $dir, the second is
#@ # "load" or "source", indicating whether the file is a
#@ # loadable binary or a script to source, and the third
#@ # is a list of commands defined by this file.
#@
#@ proc tclPkgSetup {dir pkg version files} {
#@ global auto_index
#@
#@ package provide $pkg $version
#@ foreach fileInfo $files {
#@ set f [lindex $fileInfo 0]
#@ set type [lindex $fileInfo 1]
#@ foreach cmd [lindex $fileInfo 2] {
#@ if {$type eq "load"} {
#@ set auto_index($cmd) [list load [file join $dir $f] $pkg]
#@ } else {
#@ set auto_index($cmd) [list source [file join $dir $f]]
#@ }
#@ }
#@ }
#@ }
#@
#@ # tclPkgUnknown --
#@ # This procedure provides the default for the "package unknown" function. It
#@ # is invoked when a package that's needed can't be found. It scans the
#@ # auto_path directories and their immediate children looking for pkgIndex.tcl
#@ # files and sources any such files that are found to setup the package
#@ # database. As it searches, it will recognize changes to the auto_path and
#@ # scan any new directories.
#@ #
#@ # Arguments:
#@ # name - Name of desired package. Not used.
#@ # version - Version of desired package. Not used.
#@ # exact - Either "-exact" or omitted. Not used.
#@
#@ proc tclPkgUnknown {name args} {
#@ global auto_path env
#@
#@ if {![info exists auto_path]} {
#@ return
#@ }
#@ # Cache the auto_path, because it may change while we run through the
#@ # first set of pkgIndex.tcl files
#@ set old_path [set use_path $auto_path]
#@ while {[llength $use_path]} {
#@ set dir [lindex $use_path end]
#@
#@ # Make sure we only scan each directory one time.
#@ if {[info exists tclSeenPath($dir)]} {
#@ set use_path [lrange $use_path 0 end-1]
#@ continue
#@ }
#@ set tclSeenPath($dir) 1
#@
#@ # Get the pkgIndex.tcl files in subdirectories of auto_path directories.
#@ # - Safe Base interpreters have a restricted "glob" command that
#@ # works in this case.
#@ # - The "catch" was essential when there was no safe glob and every
#@ # call in a safe interp failed; it is retained only for corner
#@ # cases in which the eventual call to glob returns an error.
#@ catch {
#@ foreach file [glob -directory $dir -join -nocomplain \
#@ * pkgIndex.tcl] {
#@ set dir [file dirname $file]
#@ if {![info exists procdDirs($dir)]} {
#@ try {
#@ source $file
#@ } trap {POSIX EACCES} {} {
#@ # $file was not readable; silently ignore
#@ continue
#@ } on error msg {
#@ tclLog "error reading package index file $file: $msg"
#@ } on ok {} {
#@ set procdDirs($dir) 1
#@ }
#@ }
#@ }
#@ }
#@ set dir [lindex $use_path end]
#@ if {![info exists procdDirs($dir)]} {
#@ set file [file join $dir pkgIndex.tcl]
#@ # safe interps usually don't have "file exists",
#@ if {([interp issafe] || [file exists $file])} {
#@ try {
#@ source $file
#@ } trap {POSIX EACCES} {} {
#@ # $file was not readable; silently ignore
#@ continue
#@ } on error msg {
#@ tclLog "error reading package index file $file: $msg"
#@ } on ok {} {
#@ set procdDirs($dir) 1
#@ }
#@ }
#@ }
#@
#@ set use_path [lrange $use_path 0 end-1]
#@
#@ # Check whether any of the index scripts we [source]d above set a new
#@ # value for $::auto_path. If so, then find any new directories on the
#@ # $::auto_path, and lappend them to the $use_path we are working from.
#@ # This gives index scripts the (arguably unwise) power to expand the
#@ # index script search path while the search is in progress.
#@ set index 0
#@ if {[llength $old_path] == [llength $auto_path]} {
#@ foreach dir $auto_path old $old_path {
#@ if {$dir ne $old} {
#@ # This entry in $::auto_path has changed.
#@ break
#@ }
#@ incr index
#@ }
#@ }
#@
#@ # $index now points to the first element of $auto_path that has
#@ # changed, or the beginning if $auto_path has changed length Scan the
#@ # new elements of $auto_path for directories to add to $use_path.
#@ # Don't add directories we've already seen, or ones already on the
#@ # $use_path.
#@ foreach dir [lrange $auto_path $index end] {
#@ if {![info exists tclSeenPath($dir)] && ($dir ni $use_path)} {
#@ lappend use_path $dir
#@ }
#@ }
#@ set old_path $auto_path
#@ }
#@ }
#@
#@ # tcl::MacOSXPkgUnknown --
#@ # This procedure extends the "package unknown" function for MacOSX. It scans
#@ # the Resources/Scripts directories of the immediate children of the auto_path
#@ # directories for pkgIndex files.
#@ #
#@ # Arguments:
#@ # original - original [package unknown] procedure
#@ # name - Name of desired package. Not used.
#@ # version - Version of desired package. Not used.
#@ # exact - Either "-exact" or omitted. Not used.
#@
#@ proc tcl::MacOSXPkgUnknown {original name args} {
#@ # First do the cross-platform default search
#@ uplevel 1 $original [linsert $args 0 $name]
#@
#@ # Now do MacOSX specific searching
#@ global auto_path
#@
#@ if {![info exists auto_path]} {
#@ return
#@ }
#@ # Cache the auto_path, because it may change while we run through the
#@ # first set of pkgIndex.tcl files
#@ set old_path [set use_path $auto_path]
#@ while {[llength $use_path]} {
#@ set dir [lindex $use_path end]
#@
#@ # Make sure we only scan each directory one time.
#@ if {[info exists tclSeenPath($dir)]} {
#@ set use_path [lrange $use_path 0 end-1]
#@ continue
#@ }
#@ set tclSeenPath($dir) 1
#@
#@ # get the pkgIndex files out of the subdirectories
#@ # Safe interpreters do not use tcl::MacOSXPkgUnknown - see init.tcl.
#@ foreach file [glob -directory $dir -join -nocomplain \
#@ * Resources Scripts pkgIndex.tcl] {
#@ set dir [file dirname $file]
#@ if {![info exists procdDirs($dir)]} {
#@ try {
#@ source $file
#@ } trap {POSIX EACCES} {} {
#@ # $file was not readable; silently ignore
#@ continue
#@ } on error msg {
#@ tclLog "error reading package index file $file: $msg"
#@ } on ok {} {
#@ set procdDirs($dir) 1
#@ }
#@ }
#@ }
#@ set use_path [lrange $use_path 0 end-1]
#@
#@ # Check whether any of the index scripts we [source]d above set a new
#@ # value for $::auto_path. If so, then find any new directories on the
#@ # $::auto_path, and lappend them to the $use_path we are working from.
#@ # This gives index scripts the (arguably unwise) power to expand the
#@ # index script search path while the search is in progress.
#@ set index 0
#@ if {[llength $old_path] == [llength $auto_path]} {
#@ foreach dir $auto_path old $old_path {
#@ if {$dir ne $old} {
#@ # This entry in $::auto_path has changed.
#@ break
#@ }
#@ incr index
#@ }
#@ }
#@
#@ # $index now points to the first element of $auto_path that has
#@ # changed, or the beginning if $auto_path has changed length Scan the
#@ # new elements of $auto_path for directories to add to $use_path.
#@ # Don't add directories we've already seen, or ones already on the
#@ # $use_path.
#@ foreach dir [lrange $auto_path $index end] {
#@ if {![info exists tclSeenPath($dir)] && ($dir ni $use_path)} {
#@ lappend use_path $dir
#@ }
#@ }
#@ set old_path $auto_path
#@ }
#@ }
#@
#@ # ::tcl::Pkg::Create --
#@ #
#@ # Given a package specification generate a "package ifneeded" statement
#@ # for the package, suitable for inclusion in a pkgIndex.tcl file.
#@ #
#@ # Arguments:
#@ # args arguments used by the Create function:
#@ # -name packageName
#@ # -version packageVersion
#@ # -load {filename ?{procs}?}
#@ # ...
#@ # -source {filename ?{procs}?}
#@ # ...
#@ #
#@ # Any number of -load and -source parameters may be
#@ # specified, so long as there is at least one -load or
#@ # -source parameter. If the procs component of a module
#@ # specifier is left off, that module will be set up for
#@ # direct loading; otherwise, it will be set up for lazy
#@ # loading. If both -source and -load are specified, the
#@ # -load'ed files will be loaded first, followed by the
#@ # -source'd files.
#@ #
#@ # Results:
#@ # An appropriate "package ifneeded" statement for the package.
#@
#@ proc ::tcl::Pkg::Create {args} {
#@ append err(usage) "[lindex [info level 0] 0] "
#@ append err(usage) "-name packageName -version packageVersion"
#@ append err(usage) "?-load {filename ?{procs}?}? ... "
#@ append err(usage) "?-source {filename ?{procs}?}? ..."
#@
#@ set err(wrongNumArgs) "wrong # args: should be \"$err(usage)\""
#@ set err(valueMissing) "value for \"%s\" missing: should be \"$err(usage)\""
#@ set err(unknownOpt) "unknown option \"%s\": should be \"$err(usage)\""
#@ set err(noLoadOrSource) "at least one of -load and -source must be given"
#@
#@ # process arguments
#@ set len [llength $args]
#@ if {$len < 6} {
#@ error $err(wrongNumArgs)
#@ }
#@
#@ # Initialize parameters
#@ array set opts {-name {} -version {} -source {} -load {}}
#@
#@ # process parameters
#@ for {set i 0} {$i < $len} {incr i} {
#@ set flag [lindex $args $i]
#@ incr i
#@ switch -glob -- $flag {
#@ "-name" -
#@ "-version" {
#@ if {$i >= $len} {
#@ error [format $err(valueMissing) $flag]
#@ }
#@ set opts($flag) [lindex $args $i]
#@ }
#@ "-source" -
#@ "-load" {
#@ if {$i >= $len} {
#@ error [format $err(valueMissing) $flag]
#@ }
#@ lappend opts($flag) [lindex $args $i]
#@ }
#@ default {
#@ error [format $err(unknownOpt) [lindex $args $i]]
#@ }
#@ }
#@ }
#@
#@ # Validate the parameters
#@ if {![llength $opts(-name)]} {
#@ error [format $err(valueMissing) "-name"]
#@ }
#@ if {![llength $opts(-version)]} {
#@ error [format $err(valueMissing) "-version"]
#@ }
#@
#@ if {!([llength $opts(-source)] || [llength $opts(-load)])} {
#@ error $err(noLoadOrSource)
#@ }
#@
#@ # OK, now everything is good. Generate the package ifneeded statment.
#@ set cmdline "package ifneeded $opts(-name) $opts(-version) "
#@
#@ set cmdList {}
#@ set lazyFileList {}
#@
#@ # Handle -load and -source specs
#@ foreach key {load source} {
#@ foreach filespec $opts(-$key) {
#@ lassign $filespec filename proclist
#@
#@ if { [llength $proclist] == 0 } {
#@ set cmd "\[list $key \[file join \$dir [list $filename]\]\]"
#@ lappend cmdList $cmd
#@ } else {
#@ lappend lazyFileList [list $filename $key $proclist]
#@ }
#@ }
#@ }
#@
#@ if {[llength $lazyFileList]} {
#@ lappend cmdList "\[list tclPkgSetup \$dir $opts(-name)\
#@ $opts(-version) [list $lazyFileList]\]"
#@ }
#@ append cmdline [join $cmdList "\\n"]
#@ return $cmdline
#@ }
#@
#@ interp alias {} ::pkg::create {} ::tcl::Pkg::Create
#@ # -- End source /cad/synopsys/synthesis/cur/auxx/tcllib/lib/tcl8.6/package.tcl
#@ # Copyright (c) 2016 Synopsys, Inc. This Synopsys software and all
#@ # associated documentation are proprietary to Synopsys, Inc. and may
#@ # only be used pursuant to the terms and conditions of a written
#@ # license agreement with Synopsys, Inc. All other use, reproduction,
#@ # modification, or distribution of the Synopsys software or the
#@ # associated documentation is strictly prohibited.
#@
#@ package ifneeded cae 1.0 [list source [file join $dir syn.tcl]]
#@ package ifneeded cae::utils 1.0 [list source [file join $dir utils utils.tcl]]
#@ # -- End source /cad/synopsys/synthesis/cur/auxx/syn/lib/pkgIndex.tcl
#@ # -- Starting source
/cad/synopsys/synthesis/cur/auxx/tcllib/lib/itcl4.2.1/pkgIndex.tcl
#@ # -- Starting source
/cad/synopsys/synthesis/cur/auxx/tcllib/lib/iwidgets4.1/pkgIndex.tcl
#@ # -- Starting source
/cad/synopsys/synthesis/cur/auxx/tcllib/snps_tcl/snpsTest/pkgIndex.tcl
#@ # -- Starting source
/cad/synopsys/synthesis/cur/auxx/tcllib/snps_tcl/snpsTclPro/pkgIndex.tcl
#@ # -- Starting source
/cad/synopsys/synthesis/cur/auxx/tcllib/snps_tcl/snpsUtils/pkgIndex.tcl
#@ # -- Starting source
/cad/synopsys/synthesis/cur/auxx/tcllib/snps_tcl/pkgIndex.tcl
#@ # -- Starting source
/cad/synopsys/synthesis/cur/auxx/tcllib/lib/tcl8.6/tcltest/pkgIndex.tcl
#@ # -- Starting source
/cad/synopsys/synthesis/cur/auxx/tcllib/lib/tcl8.6/msgcat/pkgIndex.tcl
#@ # -- Starting source
/cad/synopsys/synthesis/cur/auxx/tcllib/lib/tcl8.6/reg/pkgIndex.tcl
#@ # -- Starting source
/cad/synopsys/synthesis/cur/auxx/tcllib/lib/tcl8.6/http1.0/pkgIndex.tcl
#@ # -- Starting source
/cad/synopsys/synthesis/cur/auxx/tcllib/lib/tcl8.6/dde/pkgIndex.tcl
#@ # -- Starting source
/cad/synopsys/synthesis/cur/auxx/tcllib/lib/tcl8.6/http/pkgIndex.tcl
#@ # -- Starting source
/cad/synopsys/synthesis/cur/auxx/tcllib/lib/tcl8.6/opt/pkgIndex.tcl
#@ # -- Starting source
/cad/synopsys/synthesis/cur/auxx/tcllib/lib/tcl8.6/platform/pkgIndex.tcl
#@ # Copyright (c) 2016 Synopsys, Inc. This Synopsys software and all
#@ # associated documentation are proprietary to Synopsys, Inc. and may
#@ # only be used pursuant to the terms and conditions of a written
#@ # license agreement with Synopsys, Inc. All other use, reproduction,
#@ # modification, or distribution of the Synopsys software or the
#@ # associated documentation is strictly prohibited.
#@
#@ # primary file of syn package
#@
#@ # require all the sub-packages (if any)
#@
#@ # name of the provided package
#@
#@ package provide cae 1.0
#@
#@ # create command group after loading sub packages
#@ # because last group is listed first by "help"
#@
#@ create_command_group "syn" \
#@ -info "synthesis utilities"
#@
#@ namespace eval ::cae {
#@ variable selfdir [file dirname [info script]]
#@ variable scripts [list \
#@ auto_path_groups.tcl \
#@ ]
#@ variable script
#@ }
#@
#@ # source encrypted version if available
#@ # encrypted commands must use "define_proc_attributes -hide_body"
#@
#@ foreach ::cae::script ${::cae::scripts} {
#@ if { [file exists ${::cae::selfdir}/${::cae::script}.e] } {
#@ source ${::cae::selfdir}/${::cae::script}.e
#@ } else {
#@ source ${::cae::selfdir}/${::cae::script}
#@ }
#@ }
#@ # -- Starting source
/cad/synopsys/synthesis/cur/auxx/syn/lib/auto_path_groups.tcl
#@ # Copyright (c) 2016-2017 Synopsys, Inc. This Synopsys software and all
#@ # associated documentation are proprietary to Synopsys, Inc. and may
#@ # only be used pursuant to the terms and conditions of a written
#@ # license agreement with Synopsys, Inc. All other use, reproduction,
#@ # modification, or distribution of the Synopsys software or the
#@ # associated documentation is strictly prohibited.
#@
#@ package require cae::utils
#@ # -- Starting source /cad/synopsys/synthesis/cur/auxx/syn/lib/utils/utils.tcl
#@ # Copyright (c) 2016 Synopsys, Inc. This Synopsys software and all
#@ # associated documentation are proprietary to Synopsys, Inc. and may
#@ # only be used pursuant to the terms and conditions of a written
#@ # license agreement with Synopsys, Inc. All other use, reproduction,
#@ # modification, or distribution of the Synopsys software or the
#@ # associated documentation is strictly prohibited.
#@
#@ # primary file of cae::utils package
#@
#@ # name of the provided package
#@
#@ package provide cae::utils 1.0
#@
#@ namespace eval ::cae::utils {
#@ }
#@
#@ proc ::cae::utils::msg { type s } {
#@ switch -glob -- ${type} {
#@ i* { return "INFO: ${s}" }
#@ w* { return "WARNING: ${s}" }
#@ e* { return "ERROR: ${s}" }
#@ }
#@ return
#@ }
#@ # -- End source /cad/synopsys/synthesis/cur/auxx/syn/lib/utils/utils.tcl
#@
#@ namespace eval ::cae {
#@
#@ # note: check if these are all necessary
#@ variable auto_path_groups_messages {ATTR-3 OPT-806 OPT-774 UID-101 TIM-134
TIM-99 OPT-806 MWUI-203 MW-212 TIM-112}
#@
#@ # default prefix for path groups
#@ variable auto_path_groups_prefix synopsys_pg_
#@ # default slack for path groups
#@ variable auto_path_groups_slack 0.0
#@ # default max for path groups
#@ variable auto_path_groups_max 0
#@ # default verbosity
#@ variable auto_path_groups_verbose false
#@ # default priority
#@ variable auto_path_groups_priority 1
#@ # default min_regs_per_hierarchy
#@ variable auto_path_groups_min_regs_per_hierarchy 10
#@ # registers path group suffix
#@ variable auto_path_groups_reg_suffix to_regs_
#@ # macro path group suffix
#@ variable auto_path_groups_to_macro_suffix to_macros_
#@ # macro path group suffix
#@ variable auto_path_groups_from_macro_suffix from_macros_
#@ # ICG path group suffix
#@ variable auto_path_groups_icg_suffix to_ICGs
#@ # input path group suffix
#@ variable auto_path_groups_input_suffix inputs
#@ # output path group suffix
#@ variable auto_path_groups_output_suffix outputs
#@ # feedthrough path group suffix
#@ variable auto_path_groups_feedthrough_suffix feedthrough
#@ # user path groups
#@ variable auto_path_groups_user_path_groups_file
auto_path_groups.user_path_groups.tcl
#@ }
#@
#@ proc create_auto_path_groups { args } {
#@ variable ::cae::auto_path_groups_messages
#@ variable ::cae::auto_path_groups_prefix
#@ variable ::cae::auto_path_groups_slack
#@ variable ::cae::auto_path_groups_max
#@ variable ::cae::auto_path_groups_verbose
#@ variable ::cae::auto_path_groups_priority
#@ variable ::cae::auto_path_groups_min_regs_per_hierarchy
#@ variable ::cae::auto_path_groups_reg_suffix
#@ variable ::cae::auto_path_groups_to_macro_suffix
#@ variable ::cae::auto_path_groups_from_macro_suffix
#@ variable ::cae::auto_path_groups_icg_suffix
#@ variable ::cae::auto_path_groups_input_suffix
#@ variable ::cae::auto_path_groups_output_suffix
#@ variable ::cae::auto_path_groups_feedthrough_suffix
#@ variable ::cae::auto_path_groups_user_path_groups_file
#@
#@ set options(-slack) ${auto_path_groups_slack}
#@ set options(-max) ${auto_path_groups_max}
#@ set options(-prefix) ${auto_path_groups_prefix}
#@ set options(-verbose) ${auto_path_groups_verbose}
#@ set options(-priority) ${auto_path_groups_priority}
#@ set options(-min_regs_per_hierarchy) $
{auto_path_groups_min_regs_per_hierarchy}
#@ set options(-exclude) [list]
#@ set options(-user_path_groups_file) $
{auto_path_groups_user_path_groups_file}
#@
#@ parse_proc_arguments -args ${args} options
#@
#@ if { [info exists options(-file)] } {
#@ if { [catch {open $options(-file) w} fileId] } {
#@ return -code error [::cae::utils::msg e ${fileId}]
#@ }
#@ }
#@
#@ # save user path groups
#@ if { ![info exists options(-skip)] } {
#@ echo [::cae::utils::msg i "Saving user path groups to $options(-
user_path_groups_file)..."]
#@ if { [file exist $options(-user_path_groups_file)] } {
#@ echo [::cae::utils::msg w "File $options(-user_path_groups_file)
already exists and will be overwritten..."]
#@ }
#@ if { [catch {open "| grep \"^group_path\" > $options(-
user_path_groups_file)" w} channelId] } {
#@ return -code error [::cae::utils::msg e ${channelId}]
#@ }
#@ redirect -channel ${channelId} { write_script -nosplit }
#@ set r [catch {close ${channelId}} msg]
#@ switch ${r} {
#@ 0 { echo [::cae::utils::msg i "User path groups saved"] }
#@ 1 { echo [::cae::utils::msg i "No user path groups to save"] }
#@ default { return -code error [::cae::utils::msg e ${msg}] }
#@ }
#@ }
#@
#@ set total 0
#@
#@ suppress_message ${auto_path_groups_messages}
#@ switch -- $options(-mode) {
#@ "rtl" {
#@ # create one path group per hierarchy
#@
#@ echo [::cae::utils::msg i "Collecting hierarchies without
optimize_registers..."]
#@ set optimize_registers_cells [get_cells -hier -filter
{is_hierarchical==true && optimize_registers==true}]
#@ if { $options(-verbose) } {
#@ set optimize_registers_cells_names [lsort [get_object_name $
{optimize_registers_cells}]]
#@ echo [::cae::utils::msg i "cells with optimize_registers: $
{optimize_registers_cells_names}"]
#@ }
#@ set optimize_registers_sub_cells {}
#@ foreach_in_collection cell ${optimize_registers_cells} {
#@ redirect -file /dev/null {current_instance ${cell}}
#@ append_to_collection optimize_registers_sub_cells \
#@ [get_cells -hier -filter {is_hierarchical==true &&
(optimize_registers==false || undefined(optimize_registers))}]
#@ }
#@ redirect -file /dev/null {current_instance}
#@ if { $options(-verbose) } {
#@ set optimize_registers_sub_cells_names [lsort [get_object_name $
{optimize_registers_sub_cells}]]
#@ echo [::cae::utils::msg i "sub-cells of cells with
optimize_registers: ${optimize_registers_sub_cells_names}"]
#@ }
#@ set path_group_cells [get_cells -hier -filter {is_hierarchical==true
&& is_sequential==true && (optimize_registers==false ||
undefined(optimize_registers))}]
#@ set path_group_cells [remove_from_collection ${path_group_cells} $
{optimize_registers_sub_cells}]
#@
#@ echo [::cae::utils::msg i "Collected [sizeof_collection $
{path_group_cells}] hierarchies without optimize_registers"]
#@
#@ set path_group_names [lsort [get_object_name ${path_group_cells}]]
#@
#@ if { $options(-verbose) } {
#@ echo [::cae::utils::msg i "cells for which path groups will be
created:"]
#@ foreach path_group_name ${path_group_names} {
#@ echo [::cae::utils::msg i " ${path_group_name}"]
#@ }
#@ }
#@
#@ echo [::cae::utils::msg i "Creating path groups for hierarchies
without optimize_registers..."]
#@ set counter 0
#@ foreach path_group_name ${path_group_names} {
#@ set number_of_registers [sizeof_collection [get_cells $
{path_group_name}/* -filter "is_hierarchical==false && is_sequential==true"]]
#@ if { ${number_of_registers} > $options(-
min_regs_per_hierarchy) } {
#@ echo [::cae::utils::msg i "Number of sequential cells found
in ${path_group_name} hierarchy: ${number_of_registers}"]
#@ set command "group_path -name $options(-prefix)$
{auto_path_groups_reg_suffix}${counter} -to \[get_cells ${path_group_name}/* -
filter \"is_hierarchical==false && is_sequential==true\"\] -priority $options(-
priority)"
#@ echo [::cae::utils::msg i ${command}]
#@ if { [info exists options(-file)] } {
#@ puts ${fileId} ${command}
#@ }
#@ eval ${command}
#@ incr counter
#@ } else {
#@ echo [::cae::utils::msg i "Not enough sequential cells found
in ${path_group_name} hierarchy (${number_of_registers}), skipping..."]
#@ }
#@ }
#@ echo [::cae::utils::msg i "Number of reg path groups created: $
{counter}"]
#@ set total [expr {${total} + ${counter}}]
#@ }
#@ "mapped" {
#@ # create one path group per hierarchy not meeting timing
#@
#@ array unset fail
#@ echo [::cae::utils::msg i "Collecting hierarchies with timing
violations..."]
#@ foreach_in_collection pin [all_registers -data_pins] {
#@ set slack [get_attribute ${pin} max_slack]
#@ if { ${slack} < $options(-slack) && ${slack} != "" } {
#@ set cell [get_cells -of_objects ${pin}]
#@ set full_name [get_attribute ${cell} full_name]
#@ set name [get_attribute ${cell} name]
#@ if {[string length ${full_name}] > [string length ${name}]}
{
#@ set length [expr [string length ${full_name}] - [string
length ${name}] - 1]
#@ set hierarchy [string range ${full_name} 0 [expr $
{length} - 1]]
#@ } else {
#@ set hierarchy ""
#@ }
#@ if { ![info exists fail(${hierarchy})] ||
#@ ([info exists fail(${hierarchy})] && ${slack} < $fail($
{hierarchy})) } {
#@ set fail(${hierarchy}) ${slack}
#@ }
#@ }
#@ }
#@ echo [::cae::utils::msg i "Collected [array size fail] hierarchies
with timing violations"]
#@
#@ if { $options(-max) > 0 } {
#@ echo [::cae::utils::msg i "Keeping only $options(-max)
hierarchies with worst timing violations"]
#@ set hierarchy_slack_list [lsort -stride 2 -index 1 -real -
increasing [array get fail]]
#@ set hierarchy_slack_list [lrange ${hierarchy_slack_list} 0 [expr
{2 * $options(-max) - 1}]]
#@ array unset fail
#@ array set fail ${hierarchy_slack_list}
#@ }
#@
#@ set path_group_names [lsort [array names fail]]
#@
#@ if { $options(-verbose) } {
#@ echo [::cae::utils::msg i "hierarchies for which path groups
will be created:"]
#@ foreach path_group_name ${path_group_names} {
#@ echo [::cae::utils::msg i " ${path_group_name} $fail($
{path_group_name})"]
#@ }
#@ }
#@
#@ echo [::cae::utils::msg i "Creating path groups for hierarchies with
timing violations..."]
#@ set counter 0
#@ foreach path_group_name ${path_group_names} {
#@ if { ${path_group_name} == "" } {
#@ set command "group_path -name $options(-prefix)$
{auto_path_groups_reg_suffix}${counter} -to \[get_cells * -filter
{is_hierarchical==false && is_sequential==true}\] -priority $options(-priority)"
#@ } else {
#@ set command "group_path -name $options(-prefix)$
{auto_path_groups_reg_suffix}${counter} -to \[get_cells ${path_group_name}/* -
filter {is_hierarchical==false && is_sequential==true}\] -priority $options(-
priority)"
#@ }
#@ echo [::cae::utils::msg i ${command}]
#@ if { [info exists options(-file)] } {
#@ puts ${fileId} ${command}
#@ }
#@ eval ${command}
#@ incr counter
#@ }
#@ echo [::cae::utils::msg i "Number of reg path groups created: $
{counter}"]
#@ set total [expr {${total} + ${counter}}]
#@
#@ }
#@
#@ }
#@
#@ # macro path groups
#@ if { [lsearch $options(-exclude) macro] == -1} {
#@ echo [::cae::utils::msg i "Creating macro path groups..."]
#@ if { [shell_is_in_topographical_mode] } {
#@ #set macro_cells [all_macro_cells]
#@ #set macro_cells [remove_from_collection [all_macro_cells]
[get_cells -quiet -hier -all -filter "is_physical_only==true"]]
#@ #set macro_cells [remove_from_collection [all_macro_cells] [get_cells -
quiet -hier -all -filter "is_physical_only==true || is_block_abstraction==true"]]
#@ set tmp_val TRUE
#@ if { [info exists ::all_macro_include_physical_hierarchy] } {
#@ set tmp_val $::all_macro_include_physical_hierarchy
#@ }
#@ if { [info exists ::dcnxt_exclude_physical_hierarchy_macro] &&
#@ ($::dcnxt_exclude_physical_hierarchy_macro eq "FALSE" ||
$::dcnxt_exclude_physical_hierarchy_macro eq "false") } {
#@ set ::all_macro_include_physical_hierarchy TRUE
#@ } else {
#@ set ::all_macro_include_physical_hierarchy FALSE
#@ }
#@ set macro_cells_no_abs [remove_from_collection [all_macro_cells]
[get_cells -quiet -hier -all -filter "is_block_abstraction==true"]]
#@ set macro_cells [remove_from_collection $macro_cells_no_abs [get_cells -
quiet -hier -all -filter "is_physical_only==true"]]
#@ set ::all_macro_include_physical_hierarchy $tmp_val
#@ } else {
#@ set macro_cells [get_cells -hier * -filter "is_macro_cell == true"]
#@ }
#@ if { [sizeof_collection ${macro_cells}] != 0 } {
#@ set path_group_names [get_object_name ${macro_cells}]
#@ set counter 0
#@ foreach path_group_name ${path_group_names} {
#@ set command "group_path -name $options(-prefix)$
{auto_path_groups_to_macro_suffix}${counter} -to \[get_cells ${path_group_name}\] -
priority $options(-priority)"
#@ echo [::cae::utils::msg i ${command}]
#@ if { [info exists options(-file)] } {
#@ puts ${fileId} ${command}
#@ }
#@ eval ${command}
#@ incr counter
#@ set command "group_path -name $options(-prefix)$
{auto_path_groups_from_macro_suffix}${counter} -from \[get_cells $
{path_group_name}\] -priority $options(-priority)"
#@ echo [::cae::utils::msg i ${command}]
#@ if { [info exists options(-file)] } {
#@ puts ${fileId} ${command}
#@ }
#@ eval ${command}
#@ incr counter
#@ }
#@ echo [::cae::utils::msg i "Number of macro path groups created: $
{counter}"]
#@ set total [expr {${total} + ${counter}}]
#@ } else {
#@ echo [::cae::utils::msg i "No macro found, skipping..."]
#@ }
#@ }
#@
#@ # ICG path groups
#@ if { [lsearch $options(-exclude) ICG] == -1} {
#@ echo [::cae::utils::msg i "Creating ICG path groups..."]
#@ set all_icg_cells [get_cells -hier -filter "full_name=~*latch ||
full_name=~*u_clkgate && defined(clock_gating_integrated_cell)"]
#@ if { [sizeof_collection ${all_icg_cells}] } {
#@ set counter 0
#@ set command "group_path -name $options(-prefix)$
{auto_path_groups_icg_suffix} -to \[get_cells -hier -filter \"full_name=~*latch ||
full_name=~*u_clkgate && defined(clock_gating_integrated_cell)\"\] -priority
$options(-priority)"
#@ echo [::cae::utils::msg i ${command}]
#@ if { [info exists options(-file)] } {
#@ puts ${fileId} ${command}
#@ }
#@ eval ${command}
#@ incr counter
#@ echo [::cae::utils::msg i "Number of ICG path groups created: $
{counter}"]
#@ set total [expr {${total} + ${counter}}]
#@ } else {
#@ echo [::cae::utils::msg i "No ICG found, skipping..."]
#@ }
#@ }
#@
#@ # IO path groups
#@ if { [lsearch $options(-exclude) IO] == -1} {
#@ echo [::cae::utils::msg i "Creating IO path groups..."]
#@ set counter 0
#@ set command "group_path -name $options(-prefix)$
{auto_path_groups_input_suffix} -from \[ remove_from_collection \[all_inputs\] \
[get_ports \[get_attribute \[get_clocks -filter defined(sources)\] sources\]\] \]"
#@ echo [::cae::utils::msg i ${command}]
#@ if { [info exists options(-file)] } {
#@ puts ${fileId} ${command}
#@ }
#@ eval ${command}
#@ incr counter
#@ set command "group_path -name $options(-prefix)$
{auto_path_groups_output_suffix} -to \[all_outputs\]"
#@ echo [::cae::utils::msg i ${command}]
#@ if { [info exists options(-file)] } {
#@ puts ${fileId} ${command}
#@ }
#@ eval ${command}
#@ incr counter
#@ set command "group_path -name $options(-prefix)$
{auto_path_groups_feedthrough_suffix} -from \[ remove_from_collection \
[all_inputs\] \[get_ports \[get_attribute \[get_clocks -filter defined(sources)\]
sources\]\] \] -to \[all_outputs\]"
#@ echo [::cae::utils::msg i ${command}]
#@ if { [info exists options(-file)] } {
#@ puts ${fileId} ${command}
#@ }
#@ eval ${command}
#@ incr counter
#@ echo [::cae::utils::msg i "Number of IO path groups created: $
{counter}"]
#@ set total [expr {${total} + ${counter}}]
#@ }
#@
#@ unsuppress_message ${auto_path_groups_messages}
#@
#@ echo [::cae::utils::msg i "Total number of path groups created: ${total}"]
#@
#@ if { [info exists options(-file)] } {
#@ close ${fileId}
#@ }
#@
#@ return
#@ }
#@
#@ define_proc_attributes create_auto_path_groups \
#@ -command_group syn -dont_abbrev -hide_body \
#@ -info "Creates path groups for current design" \
#@ -define_args {
#@ { -mode "creates path groups for unmapped/mapped netlist" mode
one_of_string {required value_help {values {rtl mapped}}} }
#@ { -exclude "excludes specific path groups (IO ICG macro) (default: empty
list)" list list {optional} }
#@ { -slack "slack value used to select hierarchy violating timing
(default: 0.0) - mapped mode only" slack float optional }
#@ { -max "maximum number of paths groups (default: 0=unlimited) - mapped
mode only" max int optional }
#@ { -min_regs_per_hierarchy "minimum number of registers per hierarchy
(default: 10) - rtl mode only" min_regs int optional }
#@ { -prefix "path group name prefix (default: synopsys_pg_)" prefix string
optional }
#@ { -file "file name to dump group_path commands" file_name string
optional }
#@ { -verbose "verbose mode" "" boolean optional }
#@ { -user_path_groups_file "save user path groups to this file" file_name
string optional }
#@ { -skip "do not save user path groups" "" boolean optional }
#@ }
#@
#@ proc remove_auto_path_groups { args } {
#@ variable ::cae::auto_path_groups_messages
#@ variable ::cae::auto_path_groups_prefix
#@ variable ::cae::auto_path_groups_verbose
#@ variable ::cae::auto_path_groups_user_path_groups_file
#@
#@ set options(-prefix) ${auto_path_groups_prefix}
#@ set options(-verbose) ${auto_path_groups_verbose}
#@ set options(-user_path_groups_file) $
{auto_path_groups_user_path_groups_file}
#@
#@ parse_proc_arguments -args ${args} options
#@
#@ if { [info exists options(-file)] } {
#@ if {[catch {open $options(-file) w } fileId] } {
#@ return -code error [::cae::utils::msg e ${fileId}]
#@ }
#@ }
#@
#@ suppress_message ${auto_path_groups_messages}
#@ set path_group_names [get_object_name [get_path_group -filter "full_name =~
$options(-prefix)*"]]
#@ foreach path_group_name ${path_group_names} {
#@ set command "remove_path_group ${path_group_name}"
#@ echo [::cae::utils::msg i ${command}]
#@ if { [info exists options(-file)] } {
#@ puts ${fileId} ${command}
#@ }
#@ eval ${command}
#@ }
#@ echo [::cae::utils::msg i "Number of path groups removed: [llength $
{path_group_names}]"]
#@ unsuppress_message ${auto_path_groups_messages}
#@
#@ if { [info exists options(-file)] } {
#@ close ${fileId}
#@ }
#@
#@ # restore user path groups
#@ if { ![info exists options(-skip)] } {
#@ echo [::cae::utils::msg i "Restoring user path groups from $options(-
user_path_groups_file)..."]
#@ if { [file exist $options(-user_path_groups_file)] } {
#@ if { [file size $options(-user_path_groups_file)] != 0} {
#@ source -continue_on_error $options(-user_path_groups_file)
#@ } else {
#@ echo [::cae::utils::msg i "No user path groups to restore"]
#@ }
#@ file delete -force $options(-user_path_groups_file)
#@ } else {
#@ echo [::cae::utils::msg w "File $options(-user_path_groups_file)
doesn't exist"]
#@ }
#@ }
#@
#@ return
#@ }
#@
#@ define_proc_attributes remove_auto_path_groups \
#@ -command_group syn -dont_abbrev -hide_body \
#@ -info "Removes path groups for current design" \
#@ -define_args {
#@ { -prefix "path group name prefix (default: synopsys_pg)" prefix string
optional }
#@ { -file "file name to dump group_path commands" file_name string
optional }
#@ { -verbose "verbose mode" "" boolean optional }
#@ { -user_path_groups_file "restore user path groups from this file"
file_name string optional }
#@ { -skip "do not restore user path groups" "" boolean optional }
#@ }
#@
#@ # -- End source /cad/synopsys/synthesis/cur/auxx/syn/lib/auto_path_groups.tcl
#@
#@ if { [string compare $dc_shell_mode "tcl"] == 0 } {
#@ set sh_enable_line_editing "true"
#@ set sh_line_editing_mode "emacs"
#@ }
#@
#@ if {$synopsys_program_name == "icc_shell"} {
#@ if {"$sh_output_log_file" == ""} {
#@ set sh_output_log_file "icc_output.txt"
#@ }
#@
#@ ## the variable sh_redirect_progress_messages only makes it possible
#@ ## for some commands to redirect progress messages to the log file,thereby
#@ ## bypassing the console and reducing the volume of messages on the console.
#@ set sh_redirect_progress_messages true
#@ }
#@
#@
#@ # Suppress new variable messages for the following variables
#@ array set auto_index {}
#@ set auto_oldpath ""
#@
#@ # Enable customer support banner on fatal
#@ if { $sh_arch == "linux" || $sh_arch == "amd64" || $sh_arch == "linux64"
||\
#@ $sh_arch == "suse32" || $sh_arch == "suse64" || \
#@ $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.
#@ #
#@ if { [string compare $dc_shell_mode "tcl"] == 0 } {
#@ source $synopsys_root/auxx/syn/.dc_common_procs.tcl
#@ if {$synopsys_program_name != "dc_sms_shell"} {
#@ source $synopsys_root/auxx/syn/.dc_procs.tcl
#@ }
#@ }
#@ # -- Starting source /cad/synopsys/synthesis/cur/auxx/syn/.dc_common_procs.tcl
#@ ##############################################################################
#@ #
#@ #
#@ # FILE: auxx/syn/.dc_common_procs.tcl
#@ #
#@ # ABSTRACT: These procedures are part of the PrimeTime and DC
#@ # user interface.
#@ # They are loaded by .synopsys_pt.setup and .synopsys_dc.setup.
#@ #
#@ ##############################################################################
#@ #
#@ #
#@
#@
#@ ##############################################################################
#@ #
#@ #
#@ # PROCEDURE: group_variable
#@ #
#@ # ABSTRACT: Add a variable to the specified variable group.
#@ # This command is typically used by the system
#@ # administrator only.
#@ #
#@ # Below the proc is the command which creates the command
#@ # help information and semantic data for the argument.
#@ #
#@ # RETURNS: 1 if it is successful.
#@ # error code if the variable does not exist.
#@ # error code of the variable is already in the group.
#@ #
#@ # SYNTAX: group_variable group_name variable_name
#@ #
#@ ##############################################################################
#@ #
#@
#@
#@ proc group_variable { args } {
#@ global _Variable_Groups
#@
#@ parse_proc_arguments -args $args resarr
#@ set group $resarr(group)
#@ set var $resarr(variable_name)
#@
#@ if { ![info exists _Variable_Groups($group)] } {
#@ set _Variable_Groups($group) ""
#@ }
#@
#@ # Verify that var exists as a global variable
#@
#@ set cmd "uplevel #0 \{info exists $var\}"
#@ if { ![eval $cmd] } {
#@ return -code error "Variable '$var' is not defined."
#@ }
#@
#@ # Only add it if it's not already there
#@
#@ if { [lsearch $_Variable_Groups($group) $var] == -1 } {
#@ lappend _Variable_Groups($group) $var
#@ }
#@
#@ return 1
#@ }
#@
#@ define_proc_attributes group_variable \
#@ -info "Add a variable to a variable group" \
#@ -command_group "Builtins" -permanent -dont_abbrev \
#@ -define_args {
#@ {group "Variable group name" group}
#@ {variable_name "Variable name" variable_name}}
#@
#@ ##############################################################################
#@ #
#@ #
#@ # PROCEDURE: print_variable_group
#@ #
#@ # ABSTRACT: Shows variables and their values defined in the given group.
#@
#@ #
#@ # Below the proc is the command which creates the command
#@ # help information and semantic data for the argument.
#@ #
#@ # RETURNS: 1 if it is successful.
#@ # error code of the variable group does not exist.
#@ #
#@ # SYNTAX: print_variable_group group_name
#@ #
#@ ##############################################################################
#@ #
#@
#@ proc print_variable_group { args } {
#@ global _Variable_Groups
#@
#@ parse_proc_arguments -args $args resarr
#@ set group $resarr(group)
#@
#@ if { [string compare $group "all"] == 0 } {
#@ set cmd "uplevel #0 \{printvar\}"
#@ return [eval $cmd]
#@ }
#@
#@ if { ![info exists _Variable_Groups($group)] } {
#@ return -code error "Variable group '$group' does not exist."
#@ }
#@
#@ # Print out each global variable in the list. To be totally bulletproof,
#@ # test that each variable in the group is still defined. If not, remove
#@ # it from the list.
#@
#@ foreach var [lsort $_Variable_Groups($group)] {
#@ set cmd "uplevel #0 \{info exists $var\}"
#@ if { ![eval $cmd] } {
#@ # Remove it
#@ set n [lsearch $_Variable_Groups($group) $var]
#@ set $_Variable_Groups($group) [lreplace $_Variable_Groups($group) $n $n]
#@ } else {
#@ # Print it.
#@ set cmd "uplevel #0 \{set $var\}"
#@ set val [eval $cmd]
#@ echo [format "%-25s = \"%s\"" $var $val]
#@ }
#@ }
#@
#@ return 1
#@ }
#@
#@ define_proc_attributes print_variable_group \
#@ -info "Print the contents of a variable group" \
#@ -command_group "Builtins" -permanent \
#@ -define_args {{group "Variable group name" group}}
#@
#@
#@
#@ ##############################################################################
#@ #
#@ #
#@ # PROCEDURE: _Variable_Groups_Get_Groups
#@ #
#@ # ABSTRACT: Return a list of all variable groups. This command is hidden
#@ # and is used by Design Vision.
#@ #
#@ # RETURNS: Tcl list of all variable groups including group all
#@ #
#@ # SYNTAX: _Variable_Groups_Get_Groups
#@ ##############################################################################
#@ #
#@
#@ proc _Variable_Groups_Get_Groups { } {
#@ global _Variable_Groups
#@
#@ set groups [array names _Variable_Groups]
#@ append groups " all"
#@ return $groups
#@ }
#@ define_proc_attributes _Variable_Groups_Get_Groups -hidden
#@
#@
#@ ##############################################################################
#@ #
#@ #
#@ # PROCEDURE: _Variable_Groups_Get_Variables_Of_Group
#@ #
#@ # ABSTRACT: Return a list of all variables of a variable group.
#@ # It also works for pseudo group all.
#@ #
#@ # RETURNS: Tcl list of all variables of a variable group including
#@ # pseudo group all
#@ #
#@ # SYNTAX: _Variable_Groups_Get_Groups
#@ ##############################################################################
#@ #
#@
#@ proc _Variable_Groups_Get_Variables_Of_Group { group } {
#@ global _Variable_Groups
#@
#@ if { [string compare $group "all"] == 0 } {
#@ set itr [array startsearch _Variable_Groups]
#@ for { } { [array anymore _Variable_Groups $itr]} { } {
#@ set index [array nextelement _Variable_Groups $itr]
#@ append vars $_Variable_Groups($index)
#@ }
#@ array donesearch _Variable_Groups $itr
#@ return $vars
#@ }
#@
#@ if { ![info exists _Variable_Groups($group)] } {
#@ return -code error "Variable group '$group' does not exist."
#@ }
#@
#@ # Test if all variables in the list of variables are still defined.
#@ # Remove not existing variables.
#@ foreach var [lsort $_Variable_Groups($group)] {
#@ set cmd "uplevel #0 \{info exists $var\}"
#@ if { ![eval $cmd] } {
#@ # Remove it
#@ set n [lsearch $_Variable_Groups($group) $var]
#@ set $_Variable_Groups($group) [lreplace $_Variable_Groups($group) $n $n]
#@ }
#@ }
#@ return $_Variable_Groups($group)
#@ }
#@ define_proc_attributes _Variable_Groups_Get_Variables_Of_Group -hidden
#@
#@ # -- End source /cad/synopsys/synthesis/cur/auxx/syn/.dc_common_procs.tcl
#@ ##############################################################################
#@ #
#@ #
#@ # FILE: auxx/syn/.dc_procs.tcl
#@ #
#@ # ABSTRACT: These procedures are part of the Design Compiler Tcl
#@ # user interface.
#@ # They are loaded by .synopsys_dc.setup.
#@ #
#@ ##############################################################################
#@ #
#@ #
#@
#@ ##############################################################################
#@ #
#@ #
#@ # PROCEDURE: read_verilog
#@ #
#@ # ABSTRACT: Emulate PT's read_verilog command in DC:
#@ #
#@ # Usage: read_verilog # Read one or more verilog files
#@ # *[-hdl_compiler] (Use HDL Compiler (ignored))
#@ # file_names (Files to read)
#@ #
#@ # Modified: Bharat 11/17/99. Use uplevel to ensure that the command
#@ # sees user/hidden variables from the top level. Star 92970.
#@ #
#@ # Modified: Evan Rosser, 12/5/01. Support -netlist and -rtl flags.
#@ #
#@ ##############################################################################
#@ #
#@
#@ if { $synopsys_program_name != "icc_shell" } {
#@ proc read_verilog { args } {
#@ parse_proc_arguments -args $args ra
#@
#@ set cmd [format {read_file -format verilog %s %s [list %s]} \
#@ [array names ra -rtl] \
#@ [array names ra -netlist] \
#@ $ra(file_names)]
#@ return [uplevel #0 $cmd]
#@ }
#@
#@ define_proc_attributes read_verilog \
#@ -info " Read one or more verilog files" \
#@ -permanent \
#@ -define_args {
#@ {file_names "Files to read" file_names list required}
#@ {-netlist "Use structural Verilog netlist reader" "" boolean optional}
#@ {-rtl "Use RTL Verilog compiler (Presto or HDLC)" "" boolean optional}
#@ {-hdl_compiler "Use HDL Compiler (ignored)" "" boolean {hidden optional}}
#@ }
#@ }
#@
#@ ##############################################################################
#@ #
#@ #
#@ # PROCEDURE: read_sverilog
#@ #
#@ # ABSTRACT: Emulate PT's read_sverilog command in DC:
#@ #
#@ # Usage: read_sverilog # Read one or more systemverilog files
#@ # *[-hdl_compiler] (Use HDL Compiler (ignored))
#@ # file_names (Files to read)
#@ #
#@ # Modified: Yong Xiao, 01/31/2003: Copied from read_verilog to support
#@ # systemverilog input.
#@ #
#@ ##############################################################################
#@ #
#@
#@ proc read_sverilog { args } {
#@ parse_proc_arguments -args $args ra
#@
#@ set cmd [format {read_file -format sverilog %s %s [list %s]} \
#@ [array names ra -rtl] \
#@ [array names ra -netlist] \
#@ $ra(file_names)]
#@ return [uplevel #0 $cmd]
#@ }
#@
#@ define_proc_attributes read_sverilog \
#@ -info " Read one or more systemverilog files" \
#@ -permanent \
#@ -define_args {
#@ {file_names "Files to read" file_names list required}
#@ {-netlist "Use structural Verilog netlist reader" "" boolean optional}
#@ {-rtl "Use RTL Systemverilog compiler (Presto or HDLC)" "" boolean optional}
#@ {-hdl_compiler "Use HDL Compiler (ignored)" "" boolean {hidden optional}}
#@ }
#@
#@ ##############################################################################
#@ #
#@ #
#@ # PROCEDURE: read_vhdl
#@ #
#@ # ABSTRACT: Emulate PT's read_vhdl command in DC:
#@ #
#@ # Usage: read_vhdl # Read one or more vhdl files
#@ # file_names (Files to read)
#@ #
#@ #
#@ ##############################################################################
#@ #
#@
#@ proc read_vhdl { args } {
#@ parse_proc_arguments -args $args ra
#@
#@ set cmd [format {read_file -format vhdl %s [list %s]} \
#@ [array names ra -netlist] \
#@ $ra(file_names)]
#@ return [uplevel #0 $cmd]
#@ }
#@
#@ define_proc_attributes read_vhdl \
#@ -info " Read one or more vhdl files" \
#@ -permanent \
#@ -define_args {
#@ {file_names "Files to read" file_names list required}
#@ {-netlist "Use structural VHDL netlist reader" "" boolean optional}
#@ }
#@
#@ ##############################################################################
#@ #
#@ #
#@ # PROCEDURE: read_db
#@ #
#@ # ABSTRACT: Emulate PT's read_db command in DC:
#@ #
#@ # Usage:
#@ # read_db # Read one or more db files
#@ # *[-netlist_only] (Do not read any attributes from db (ignored))
#@ # *[-library] (File is a library DB (ignored))
#@ # file_names (Files to read)
#@ #
#@ #
#@ ##############################################################################
#@ #
#@
#@ proc read_db { args } {
#@ parse_proc_arguments -args $args ra
#@
#@ set cmd [format {read_file -format db [list %s]} $ra(file_names)]
#@ return [uplevel #0 $cmd]
#@ }
#@
#@ define_proc_attributes read_db \
#@ -info " Read one or more db files" \
#@ -permanent \
#@ -define_args {
#@ {file_names "Files to read" file_names list required}
#@ {-netlist_only "Do not read any attributes from db (ignored)" "" boolean
{hidden optional}}
#@ {-library "File is a library DB (ignored)" "" boolean {hidden optional}}
#@ }
#@
#@ ##############################################################################
#@ #
#@ #
#@ # PROCEDURE: read_edif
#@ #
#@ # ABSTRACT: Emulate PT's read_edif command in DC:
#@ #
#@ # Usage:
#@ # read_edif # Read one or more edif files
#@ # *[-complete_language] (Use ptxr to read the file (ignored))
#@ # file_names (Files to read)
#@ #
#@ #
#@ ##############################################################################
#@ #
#@ proc read_edif { args } {
#@ parse_proc_arguments -args $args ra
#@
#@ set cmd [format {read_file -format edif [list %s]} $ra(file_names)]
#@ return [uplevel #0 $cmd]
#@ }
#@
#@ define_proc_attributes read_edif \
#@ -info " Read one or more edif files" \
#@ -permanent \
#@ -define_args {
#@ {file_names "Files to read" file_names list required}
#@ {-complete_language "Use ptxr to read the file (ignored)" "" boolean
{hidden optional}}
#@ }
#@
#@
#@ ##############################################################################
#@ #
#@ #
#@ # PROCEDURE: read_ddc
#@ #
#@ # ABSTRACT: Shorthand for "read_file -format ddc":
#@ #
#@ # Usage:
#@ # read_ddc # Read one or more ddc files
#@ # *[-scenarios] only read constraints for specified scenarios
#@ # *[-active_scenarios] only activate the specified scenarios
#@ # file_names (Files to read)
#@ #
#@ #
#@ ##############################################################################
#@ #
#@
#@ proc read_ddc { args } {
#@ parse_proc_arguments -args $args ra
#@
#@ set cmd "read_file -format ddc"
#@ if { [ info exists ra(-scenarios) ] } {
#@ set cmd "$cmd -scenarios { $ra(-scenarios) }"
#@ }
#@ if { [ info exists ra(-active_scenarios) ] } {
#@ set cmd "$cmd -active_scenarios { $ra(-active_scenarios) }"
#@ }
#@ set cmd "$cmd { $ra(file_names) }"
#@ return [uplevel \#0 $cmd]
#@ }
#@
#@ define_proc_attributes read_ddc \
#@ -info "Read one or more ddc files" \
#@ -permanent \
#@ -define_args {
#@ {file_names "Files to read" file_names list required}
#@ {-scenarios "list of scenarios to be read from ddc file"
#@ scenario_list list optional}
#@ {-active_scenarios "list of scenarios to be made active"
#@ active_scenario_list list optional}}
#@
#@
#@
#@ ##############################################################################
#@ #
#@ # PROCEDURE: source_tcl_file
#@ #
#@ # ABSTRACT: generic procedure to source another tcl file
#@ #
#@ # Arguments:
#@ # filename tcl filename
#@ # dir directory to check for file
#@ # msg verbose message
#@ # verbose verbose mode
#@ #
#@ # Usage:
#@ #
#@ ##############################################################################
#@ #
#@ proc source_tcl_file { filename dir msg {verbose 1} } {
#@ set __qual_pref_file [file join $dir $filename]
#@ if {[file exists $__qual_pref_file]} {
#@ if { $verbose } {
#@ echo $msg $__qual_pref_file
#@ }
#@ # use catch to recover from errors in the pref file
#@ echo_trace "Sourcing " $__qual_pref_file
#@ # to speed up sourcing use read and eval
#@ set f [open $__qual_pref_file]
#@ if {[catch {namespace eval :: [read -nonewline $f]} __msg]} {
#@ echo Error: Error during sourcing of $__qual_pref_file
#@ if {$__msg != ""} { echo $__msg }
#@ # actually, it looks like $__msg is always null after
#@ # source fails
#@ }
#@ close $f
#@ } else {
#@ echo_trace "Info: File '" $__qual_pref_file "' does not exist!"
#@ }
#@ }
#@ define_proc_attributes source_tcl_file -hidden
#@
#@
#@
#@ ##############################################################################
#@ #
#@ # PROCEDURE: echo_trace
#@ #
#@ # ABSTRACT: echo only in trace modus
#@ #
#@ ##############################################################################
#@ #
#@ proc echo_trace { args } {
#@ if { [info exists ::env(TCL_TRACE)] } {
#@ echo TRACE\> [join $args "" ]
#@ }
#@ }
#@ define_proc_attributes echo_trace -hidden
#@
#@ #############################################################################
#@ #
#@ # Following procedures added for PC write_script
#@ #
#@ #
#@ #
#@ ############################################################################
#@
#@ proc set_cell_restriction { args } {
#@ parse_proc_arguments -args $args ra
#@
#@ set cmd [format {set_attribute %s -type integer restrictions %s } \
#@ $ra(cell) \
#@ $ra(value)]
#@ return [uplevel #0 $cmd]
#@
#@ }
#@ define_proc_attributes set_cell_restriction -hidden \
#@ -define_args { \
#@ {cell "cell_name" cell string required} \
#@ {value "value" value string required} \
#@ }
#@
#@
#@ proc set_cell_soft_keepout {args} {
#@ parse_proc_arguments -args $args ra
#@
#@ set cmd [format {set_keepout_margin -type soft -outer {%d %d %d %d} [list
%s] } \
#@ $ra(llx) \
#@ $ra(lly) \
#@ $ra(urx) \
#@ $ra(ury) \
#@ $ra(objects)]
#@ return [uplevel #0 $cmd]
#@
#@
#@ }
#@
#@ define_proc_attributes set_cell_soft_keepout -hidden \
#@ -define_args { \
#@ {llx "llx" llx float required} \
#@ {lly "lly" lly float required} \
#@ {urx "urx" urx float required} \
#@ {ury "ury" ury float required} \
#@ {objects "objects" objects list required} \
#@ }
#@
#@ proc set_cell_hard_keepout {args} {
#@ parse_proc_arguments -args $args ra
#@
#@ set cmd [format {set_keepout_margin -type soft -outer {%d %d %d %d} [list
%s] } \
#@ $ra(llx) \
#@ $ra(lly) \
#@ $ra(urx) \
#@ $ra(ury) \
#@ $ra(objects)]
#@ return [uplevel #0 $cmd]
#@
#@
#@ }
#@
#@ define_proc_attributes set_cell_hard_keepout -hidden \
#@ -define_args { \
#@ {llx "llx" llx float required} \
#@ {lly "lly" lly float required} \
#@ {urx "urx" urx float required} \
#@ {ury "ury" ury float required} \
#@ {objects "objects" objects list required} \
#@ }
#@
#@ set mw_use_pdb_lib_format false
#@
#@ ##############################################################################
#@ #
#@ # PROCEDURE: write_milkyway
#@ #
#@ # ABSTRACT: wrapper around save_mw_cel to support original write_milkyway
#@ # interface
#@ # if { [info commands open_mw_cel] == "open_mw_cel" } {}
#@ #
#@ ##############################################################################
#@
#@ if { [string match -nocase {*icc_shell*} $synopsys_program_name] } {
#@
#@ proc write_milkyway args {
#@
#@ parse_proc_arguments -args $args ra
#@
#@ set cmd [format {save_mw_cel -as %s %s %s %s %s} \
#@ $ra(-output)\
#@ [array names ra -overwrite] \
#@ [array names ra -create] \
#@ [array names ra -all] \
#@ [array names ra -dps]]
#@ return [uplevel #0 $cmd]
#@ }
#@
#@ define_proc_attributes write_milkyway -hidden \
#@ -info " Saves the design as milkyway CEL" \
#@ -define_args \
#@ {{-output fileName "Name" string {optional}} \
#@ {-overwrite "Overwrite the current version" "" boolean {optional}} \
#@ {-create "Create from scratch" "" boolean {hidden optional}} \
#@ {-all "Save all modified cells" "" boolean {hidden optional}} \
#@ {-dps "Save internal DPS design" "" boolean {hidden optional}}}
#@
#@ ##############################################################################
#@ #
#@ # PROCEDURE: read_milkyway
#@ #
#@ # ABSTRACT: wrapper around open_mw_cel to support original read_milkyway
#@ # interface
#@ # MODIFIED: To support DPS in Galileo we need to pass the filtering
#@ # parameters to the DPS command. (Pankaj Goswami, Mar09 2005)
#@ #
#@ ##############################################################################
#@
#@ proc read_milkyway args {
#@
#@ parse_proc_arguments -args $args ra
#@
#@ set cmd [format {open_mw_cel %s} \
#@ $ra() ]
#@
#@ if {[info exists ra(-library)]} {
#@ set cmd [concat [concat $cmd " -library " ] " $ra(-library) "]
#@ }
#@
#@ if {[info exists ra(-read_only)]} {
#@ lappend cmd {-readonly}
#@ }
#@
#@ # DPS specific stuff
#@ set dps_cmd "vh_set_current_partition "
#@ set read_mw_with_dps_filter false
#@
#@ if {[info exists ra(-vh_module_only)]} {
#@ append dps_cmd "-vh_module_only "
#@ set read_mw_with_dps_filter true
#@ }
#@
#@ if {[info exists ra(-vh_include)]} {
#@ append dps_cmd [concat " -vh_include " " \{ $ra(-vh_include) \}"]
#@ append dps_cmd " "
#@ set read_mw_with_dps_filter true
#@ }
#@
#@ if {[info exists ra(-vh_exclude)]} {
#@ append dps_cmd [concat " -vh_exclude" " \{ $ra(-vh_exclude) \}"]
#@ set read_mw_with_dps_filter true
#@ }
#@
#@ if { $read_mw_with_dps_filter == true } {
#@ # Call the DPS command to store the DPS filtering params.
#@ uplevel #0 $dps_cmd
#@ } else {
#@ # If there is no DPS filtering params, then we need to reset the
#@ # params which might have been stored from the provious command.
#@ append dps_cmd " -vh_reset_partition"
#@ uplevel #0 $dps_cmd
#@ }
#@ # End of DPS stuff
#@
#@ return [uplevel #0 $cmd]
#@ }
#@
#@ define_proc_attributes read_milkyway -hidden \
#@ -info " Read milkyway CEL from disk" \
#@ -define_args \
#@ {{-library "library name" "lib_name" string {optional}} \
#@ {-read_only "open design in read only mode" "" boolean {optional}} \
#@ {-version "version number of the CEL" "number" string {optional}} \
#@ {-vh_module_only "open design for DPS module only partition" "" boolean
{hidden optional}} \
#@ {-vh_include "list of designs to be included in the DPS partition"
"include_designs" list {hidden optional}} \
#@ {-vh_exclude "list of designs to be excluded in the DPS partition"
"exclude_designs" list {hidden optional}} \
#@ {"" fileName "CEL name" string {required}}}
#@
#@ }
#@
#@ ##############################################################################
#@ #
#@ # PROCEDURE: set_mw_technology_file
#@ #
#@ # ABSTRACT: wrapper around update_mw_lib
#@ #
#@ # HISTORY : 2009/6/21, yunz, support ALF reader in ICC
#@ #
#@ ##############################################################################
#@ if { [string match -nocase {*icc_shell*} $synopsys_program_name] ||
#@ ([string match -nocase {*d[ce]_shell*} $synopsys_program_name] &&
[shell_is_mwlib_enabled]) } {
#@
#@ proc set_mw_technology_file args {
#@
#@ parse_proc_arguments -args $args ra
#@
#@ set cmd ""
#@ set lib_name ""
#@ set pdb_file "tech.pdb"
#@ set log_file "log_file"
#@ set alf_file ""
#@
#@ if {[info exists ra(-technology)] && [info exists ra(-plib)]} {
#@ echo "Error: the $ra(-technology) and $ra(-plib) options are mutually
exclusive."
#@ return [uplevel #0 $cmd]
#@ } elseif {[info exists ra(-technology)] && [info exists ra(-alf)]} {
#@ echo "Error: the $ra(-technology) and $ra(-alf) options are mutually
exclusive."
#@ return [uplevel #0 $cmd]
#@ } elseif {[info exists ra(-plib)] && [info exists ra(-alf)]} {
#@ echo "Error: the $ra(-plib) and $ra(-alf) options are mutually exclusive."
#@ return [uplevel #0 $cmd]
#@ }
#@
#@ if {[info exists ra(-technology)]} {
#@
#@ set cmd [format {update_mw_lib -technology %s %s} \
#@ $ra(-technology) \
#@ $ra() ]
#@ }
#@
#@ if {[info exists ra(-alf)]} {
#@
#@ set cmd [format {update_mw_lib %s} \
#@ $ra() ]
#@
#@ set cmd [concat [concat $cmd " -alf " ] " $ra(-alf) "]
#@ }
#@
#@ return [uplevel #0 $cmd]
#@ }
#@
#@ define_proc_attributes set_mw_technology_file -hide_body \
#@ -info " Set technology file for the library " \
#@ -define_args \
#@ {{-technology "Technology file name" "tech_file" string {optional}} \
#@ {-alf "alf file name" "file_name" string {optional}}\
#@ {"" "Library name" "libName" string {required}}}
#@
#@ ##############################################################################
#@ #
#@ # PROCEDURE: rebuild_mw_lib
#@ #
#@ # ABSTRACT: wrapper around update_mw_lib
#@ #
#@ ##############################################################################
#@
#@ proc rebuild_mw_lib args {
#@
#@ parse_proc_arguments -args $args ra
#@
#@ set cmd [format {update_mw_lib -rebuild %s} \
#@ $ra() ]
#@
#@ return [uplevel #0 $cmd]
#@ }
#@
#@ define_proc_attributes rebuild_mw_lib -hide_body \
#@ -info " Rebuild the library " \
#@ -define_args \
#@ {{"" "Library name" "libName" string {required}}}
#@
#@ ##############################################################################
#@ #
#@ # PROCEDURE: set_mw_lib_reference
#@ #
#@ # ABSTRACT: Procedure to set ref lib list or ref ctrl file
#@ #
#@ ##############################################################################
#@
#@ proc set_mw_lib_reference args {
#@
#@ parse_proc_arguments -args $args ra
#@
#@ set cmd ""
#@
#@ if {[info exists ra(-mw_reference_library)]} {
#@ set cmd [format {set_reference_control_file -reference_libraries {%s} %s} \
#@ $ra(-mw_reference_library) \
#@ $ra() ]
#@ }
#@
#@ if {[info exists ra(-reference_control_file)]} {
#@ set cmd [format {set_reference_control_file -file %s %s} \
#@ $ra(-reference_control_file) \
#@ $ra() ]
#@ }
#@ return [uplevel #0 $cmd]
#@ }
#@
#@ define_proc_attributes set_mw_lib_reference -hide_body \
#@ -info " Set reference for the library " \
#@ -define_args \
#@ {{-mw_reference_library "List of reference libraries" "lib_list" list
{optional}} \
#@ {-reference_control_file "Reference control file" "file_name" string
{optional}} \
#@ {"" "Library name" "libName" string {required}}}
#@
#@ #
#@ ##############################################################################
#@ #
#@ # PROCEDURE: create_mw_lib
#@ #
#@ # ABSTRACT: wrapper around MWUI create_mw_lib
#@ #
#@ ##############################################################################
#@
#@ proc create_mw_lib args {
#@
#@ parse_proc_arguments -args $args ra
#@
#@ set cmd ""
#@ set lib_name ""
#@ set pdb_file "tech.pdb"
#@ set log_file "log_file"
#@
#@ if {[info exists ra(-ignore_case)]} {
#@ set cmd [format {org_create_mw_lib %s} \
#@ $ra() ]
#@ } else {
#@ set cmd [format {org_create_mw_lib -case_sensitive %s} \
#@ $ra() ]
#@ }
#@
#@ if {[info exists ra(-technology)]} {
#@ set cmd [concat [concat $cmd " -technology " ] " $ra(-technology) "]
#@ }
#@
#@ if {[info exists ra(-ignore_tf_error)]} {
#@ set cmd [concat $cmd " -ignore_tf_error " ]
#@ }
#@
#@ if {[info exists ra(-hier_separator)]} {
#@ set cmd [concat [concat $cmd " -hier_seperator " ] " $ra(-hier_separator) "]
#@ }
#@
#@ if {[info exists ra(-bus_naming_style)]} {
#@ set cmd [concat [concat $cmd " -bus_naming_style " ] " {$ra(-
bus_naming_style)} "]
#@ }
#@
#@
#@ if {[info exists ra(-reference_control_file)]} {
#@ set cmd [concat [concat $cmd " -reference_control_file " ] " $ra(-
reference_control_file) "]
#@ }
#@
#@ if {[info exists ra(-mw_reference_library)]} {
#@ set cmd [concat [concat [concat $cmd " -mw_reference_library {" ] " $ra(-
mw_reference_library) "] "}"]
#@ }
#@
#@ if { ![uplevel #0 $cmd] } {
#@ return 0
#@ }
#@
#@ set cmd ""
#@
#@ if {[info exists ra(-open)]} {
#@ uplevel #0 $cmd
#@ set cmd [format {open_mw_lib %s} \
#@ $ra() ]
#@ }
#@
#@ return [uplevel #0 $cmd]
#@ }
#@
#@ define_proc_attributes create_mw_lib -hide_body \
#@ -info " Create a milkyway library " \
#@ -define_args \
#@ {{-technology "Technology file name" "file_name" string {optional}} \
#@ {-ignore_tf_error "Ignore the error in technology file" "" boolean
{hidden optional}} \
#@ {-hier_separator "Hierarchical separator, default is backslash / "
"separator" string {hidden optional}} \
#@ {-bus_naming_style "Bus naming style" "bus_naming_style" string
{optional}} \
#@ {-ignore_case "Make case insensitive" "" boolean {hidden optional}} \
#@ {-case_sensitive "Make case sensitive" "" boolean {hidden optional}} \
#@ {-mw_reference_library "List of reference libraries" "lib_list" list
{optional}} \
#@ {-reference_control_file "Reference control file" "file_name" string
{optional}} \
#@ {-open "Open the library after creation" "" boolean {optional}} \
#@ {"" "Library name to create" "libName" string {required}}}
#@
#@ #
#@ ##############################################################################
#@ #
#@ # PROCEDURE: report_mw_lib
#@ #
#@ # ABSTRACT: wrapper around MWUI report_mw_lib
#@ #
#@ ##############################################################################
#@
#@ proc report_mw_lib args {
#@
#@ parse_proc_arguments -args $args ra
#@
#@ set cmd ""
#@
#@ if {[info exists ra(-mw_reference_library)]} {
#@ if {[info exists ra()]} {
#@ set cmd [format {org_report_mw_lib -mw_reference_library %s} $ra() ]
#@ } else {
#@ set cmd [format {org_report_mw_lib -mw_reference_library} ]
#@ }
#@ return [uplevel #0 $cmd]
#@ }
#@
#@ if {[info exists ra(-unit_range)]} {
#@ if {[info exists ra()]} {
#@ set cmd [format {org_report_mw_lib -unit_range %s} \
#@ $ra() ]
#@ } else {
#@ echo "Error : Library name must be specified when using this option"
#@ return 0;
#@ }
#@ return [uplevel #0 $cmd]
#@ }
#@
#@ }
#@
#@ define_proc_attributes report_mw_lib -hide_body \
#@ -info " Report information about the library " \
#@ -define_args \
#@ {{-unit_range "Report unit range of library" "" boolean {optional}} \
#@ {-mw_reference_library "Report list of reference libraries" "" boolean
{optional}} \
#@ {"" "Library to be reported" "libName" string {optional}}}
#@
#@ ##############################################################################
#@ #
#@ # PROCEDURE: close_mw_lib
#@ #
#@ # ABSTRACT: Wrapper around close_mw_lib to handle -save option properly
#@ # - save_mw_cel to save current cel with dc_netlist
#@ # - close_mw_cel to close current cel
#@ # - save_open_cels to save other open cels before closing library
#@ #
#@ ##############################################################################
#@
#@ proc close_mw_lib args {
#@
#@ parse_proc_arguments -args $args ra
#@
#@ if {$args == ""} {
#@ set cmd [format {icc_is_dc_up} ]
#@ if {[uplevel #0 $cmd]} {
#@ set cmd [format {remove_design -quiet -designs} ]
#@ if {[uplevel #0 $cmd]} {
#@ set cmd [format {org_close_mw_lib } ]
#@ return [uplevel #0 $cmd]
#@ } else {
#@ return 0
#@ }
#@ } else {
#@ set cmd [format {org_close_mw_lib } ]
#@ return [uplevel #0 $cmd]
#@ }
#@ }
#@
#@ if {[info exists ra(-save)]} {
#@
#@ set cmd [format {save_mw_cel} ]
#@ if {![uplevel #0 $cmd]} {
#@ return
#@ }
#@
#@ set cmd [format {close_mw_cel} ]
#@ if {![uplevel #0 $cmd]} {
#@ return
#@ }
#@
#@ set cmd [format {save_open_cels} ]
#@ if {![uplevel #0 $cmd]} {
#@ return
#@ }
#@ }
#@
#@ set cmd [format {org_close_mw_lib} ]
#@ return [uplevel #0 $cmd]
#@ }
#@
#@ if { [string match -nocase {*icc_shell*} $synopsys_program_name] } {
#@ define_proc_attributes close_mw_lib -hide_body \
#@ -info " Closes the milkyway library " \
#@ -define_args \
#@ {{-save "Save open cels" "" boolean {optional}} \
#@ {"" "libraries to be closed" "lib list" list {hidden optional}}}
#@ } else {
#@ define_proc_attributes close_mw_lib -hide_body \
#@ -info " Closes the milkyway library " \
#@ -define_args \
#@ {{-no_save "Don't save open cels" "" boolean {hidden optional}} \
#@ {"" "libraries to be closed" "lib list" list {hidden optional}}}
#@ }
#@ ##############################################################################
#@ #
#@ # PROCEDURE: write_mw_lib_files
#@ #
#@ # ABSTRACT: Write technology or reference control file
#@ # History: Yun Zhang 2012/12/11, public option -stream_layer_map_file
#@ # History: Yun Zhang 2012/9/5. support new hidden option -
vt_cell_placement_properties
#@ # History: Yun Zhang 2011/12/5. add new hidden option -stream_layer_map_file
#@ #
#@ ##############################################################################
#@ proc write_mw_lib_files args {
#@
#@ parse_proc_arguments -args $args ra
#@
#@ set cmd ""
#@
#@ if {[info exists ra(-reference_control_file)]} {
#@ #Option -reference_contrl_file, -plib and -technology are exclusive.
#@ # If both of them are set at the same time, error reported.
#@ # 9000273455, by xqsun, 2009/2/4
#@ if {[info exists ra(-technology)]} {
#@ echo "Error: Cannot specify '-reference_control_file' with '-technology'.
(CMD-001)"
#@ return 0
#@ } elseif {[info exists ra(-plib)]} {
#@ echo "Error: Cannot specify '-reference_control_file' with '-plib'.(CMD-
001)"
#@ return 0
#@ } elseif {[info exists ra(-vt_cell_placement_properties)]} {
#@ echo "Error: Cannot specify '-reference_control_file' with '-
vt_cell_placement_properties'.(CMD-001)"
#@ return 0
#@ } elseif {[info exists ra(-stream_layer_map_file)]} {
#@ echo "Error: Cannot specify '-reference_control_file' with '-
stream_layer_map_file'.(CMD-001)"
#@ return 0
#@ } else {
#@ set cmd [format {report_mw_lib_ref_ctrl_file -output %s %s} \
#@ $ra(-output) \
#@ $ra() ]
#@ return [uplevel #0 $cmd]
#@ }
#@ }
#@
#@ if {[info exists ra(-technology)]} {
#@ if {[info exists ra(-plib)]} {
#@ echo "Error: Cannot specify '-technology' with '-plib'.(CMD-001)"
#@ return 0
#@ } elseif {[info exists ra(-vt_cell_placement_properties)]} {
#@ echo "Error: Cannot specify '-technology' with '-
vt_cell_placement_properties'.(CMD-001)"
#@ return 0
#@ } elseif {[info exists ra(-stream_layer_map_file)]} {
#@ echo "Error: Cannot specify '-technology' with '-stream_layer_map_file'.
(CMD-001)"
#@ return 0
#@ } else {
#@ set cmd [format {org_report_mw_lib -output %s %s} \
#@ $ra(-output) \
#@ $ra() ]
#@ return [uplevel #0 $cmd]
#@ }
#@ }
#@
#@ if {[info exists ra(-vt_cell_placement_properties)]} {
#@ if {[info exists ra(-stream_layer_map_file)]} {
#@ echo "Error: Cannot specify '-vt_cell_placement_properties' with '-
stream_layer_map_file'.(CMD-001)"
#@ return 0
#@ } else {
#@ set cmd [format {org_report_mw_lib -vt_cell_placement_properties -output
%s %s} \
#@ $ra(-output) \
#@ $ra() ]
#@ return [uplevel #0 $cmd]
#@ }
#@ }
#@
#@ if {[info exists ra(-stream_layer_map_file)]} {
#@ set cmd [format {org_report_mw_lib -stream_layer_map_file %s -output %s
%s} \
#@ $ra(-stream_layer_map_file) \
#@ $ra(-output) \
#@ $ra() ]
#@ return [uplevel #0 $cmd]
#@ }
#@
#@ }
#@
#@ define_proc_attributes write_mw_lib_files -hide_body \
#@ -info " Write technology or reference control file " \
#@ -define_args \
#@ {{-technology "Dump technology file" "" boolean {optional}} \
#@ {-vt_cell_placement_properties "Dump multi-VT cells' implant layer
information of library" "" boolean {optional hidden}} \
#@ {-reference_control_file "Dump reference control file" "" boolean
{optional}} \
#@ {-stream_layer_map_file "Dump layer map file during stream in/out" ""
string {optional}} \
#@ {-output "Output file" "file_name" string {required}} \
#@ {"" "Library to be reported" "libName" string {required}}}
#@ }
#@ ##############################################################################
#@ #
#@ # PROCEDURE: close_mw_cel
#@ #
#@ # ABSTRACT: Wrapper around close_mw_cel to add -save option
#@ # remove_timing_design is the command to shutdown dc netlist
#@ #
#@ ##############################################################################
#@ if { [string match -nocase {*icc_shell*} $synopsys_program_name] } {
#@
#@ proc close_mw_cel args {
#@
#@ parse_proc_arguments -args $args ra
#@
#@ global mw_is_all_views
#@ set cmd [format {icc_is_dc_up} ]
#@ set dc_is_up [uplevel #0 $cmd]
#@
#@ set cmd_close [format {org_close_mw_cel} ]
#@
#@ if {[info exists ra(-all_views)]} {
#@ set cmd_close [format {%s -all_views} $cmd_close]
#@ set mw_is_all_views 1
#@ }
#@ if {[info exists ra(-all_versions)]} {
#@ set cmd_close [format {%s -all_versions} $cmd_close]
#@ }
#@ if {[info exists ra(-save)]} {
#@ set cmd_close [format {%s -save} $cmd_close]
#@ }
#@ if {[info exists ra(-verbose)]} {
#@ set cmd_close [format {%s -verbose} $cmd_close]
#@ }
#@ if {[info exists ra(-hierarchy)]} {
#@ set cmd_close [format {%s -hierarchy} $cmd_close]
#@ }
#@
#@ ui_util_clean_saved_lib_attr $args
#@
#@ set cmd ""
#@ set lcels ""
#@ set is_current_closed 1
#@
#@ if {[info exists ra()]} {
#@ set lcels $ra()
#@ }
#@ set len [string length $lcels]
#@ if {$len > 0} {
#@ set is_current_closed [is_current_mw_cel $lcels]
#@ set cmd_close [format {%s {%s}} $cmd_close $lcels]
#@ }
#@ if {[uplevel #0 $cmd_close]} {
#@ set mw_is_all_views 0
#@ if {$dc_is_up == 1} {
#@ if {$is_current_closed == 1} {
#@ set cmd [format {remove_design -quiet -designs} ]
#@ return [uplevel #0 $cmd]
#@ }
#@ return 1
#@ } else {
#@ return 1
#@ }
#@ } else {
#@ set mw_is_all_views 0
#@ return 0
#@ }
#@ }
#@
#@ define_proc_attributes close_mw_cel -hide_body \
#@ -info " Closes the design " \
#@ -define_args \
#@ {{-save "Save the design" "" boolean {optional}} \
#@ {-discard "Discard any changes" "" boolean {optional hidden}} \
#@ {-verbose "Print out debugging messages" "" boolean {optional hidden}} \
#@ {-hierarchy "Close top design and its child designs" "" boolean
{optional}} \
#@ {-all_views "Close all views of the design" "" boolean {optional}} \
#@ {-all_versions "Close all versions of the design" "" boolean {optional}} \
#@ {"" "designs to be closed" "design list" list {optional}}}
#@
#@ ##############################################################################
#@ #
#@ # PROCEDURE: save_all_mw_cel
#@ #
#@ # ABSTRACT: Wrapper around save_mw_cel to save all the open cels. Needed for
Black box flow.
#@ #
#@ ##############################################################################
#@
#@ proc save_all_mw_cels { } {
#@ set top_cel [get_attribute [current_mw_cel] name]
#@
#@ set cels [fp_get_open_cells]
#@
#@ foreach cel $cels {
#@ if {$cel != $top_cel} {
#@ current_mw_cel $cel
#@
#@ save_mw_cel
#@ }
#@ }
#@
#@ current_mw_cel $top_cel
#@
#@ save_mw_cel
#@ }
#@
#@ icc_hide_cmd save_all_mw_cels
#@
#@ ##############################################################################
#@ # PROCEDURE: execute_command_and_create_cel_from_scratch
#@ # ABSTRACT: This procedure executes the given command and creates the CEL
#@ # from scratch after executing this command.
#@ ##############################################################################
#@ proc execute_command_and_create_cel_from_scratch {org_cmd_name args} {
#@ global mw_create_cel_force
#@ global mw_enable_auto_cel
#@ global mw_force_auto_cel
#@
#@ set lib [current_mw_lib]
#@
#@ # If no MW lib, design is not from MW. Execute the original command
#@ # and return.
#@ if {$lib == ""} {
#@ return [eval $org_cmd_name $args]
#@ }
#@
#@ # Get values of few variables.
#@ set incr_mode $mw_create_cel_force
#@ set mw_create_cel_force TRUE
#@
#@ # Get auto cel mode, disable it temporarily if enabled.
#@ set auto_cel_mode $mw_enable_auto_cel
#@ set mw_enable_auto_cel FALSE
#@
#@ # Check if the already existing CEL is auto-CEL.
#@ set auto_cel 0
#@ if {[is_cel_auto_cel]} {
#@ set auto_cel 1
#@ } elseif {![get_top_cel_mwid]} {
#@ set auto_cel 1
#@ }
#@
#@
#@ # Run the original command, if not successful restore the incr_mode
#@ # variable and return. No CEL is created.
#@ if {![eval $org_cmd_name $args]} {
#@ set mw_create_cel_force $incr_mode
#@ set mw_enable_auto_cel $auto_cel_mode
#@ return 0
#@ }
#@
#@ # Restore auto_cel mode
#@ set mw_enable_auto_cel $auto_cel_mode
#@
#@ # Now create auto or real CEL depending on what the original CEL was.
#@ if {$auto_cel == "1"} {
#@ # Force creation of auto-CEL, since commands other than read_def/pdef
#@ # do not decouple CEL from DC.
#@
#@ set mw_force_auto_cel TRUE
#@ set cmd [format {save_mw_cel -auto}]
#@ } else {
#@ if [get_top_cel_mwid] {
#@ set cmd [format {save_mw_cel -create}]
#@ echo "Information: Command not supported by incr. update or write-thru."
#@ echo " Creating new CEL from scratch, old CEL will be closed."
#@ }
#@ }
#@
#@ # Create the Auto CEL or normal CEL from scratch.
#@ if {![uplevel #0 $cmd]} {
#@ set mw_create_cel_force $incr_mode
#@ set mw_force_auto_cel FALSE
#@ return 0
#@ }
#@
#@ set mw_create_cel_force $incr_mode
#@ set mw_force_auto_cel FALSE
#@ return 1
#@ }
#@
#@ define_proc_attributes execute_command_and_create_cel_from_scratch -hidden \
#@ -hide_body
#@
#@ ##############################################################################
#@ # PROCEDURE: read_def
#@ # ABSTRACT: Wrapper around read_def to handle incremental update properly
#@ # if MW based read_def is used, bypass the wrapper
#@ # enable_milkyway_def_reader_writer must be TRUE and use_pdb_lib_format must
#@ # be false for MW read_Def to be run, use wrapper if either condition fails
#@ ##############################################################################
#@ rename -force dc_read_def org_read_def
#@ icc_hide_cmd org_read_def
#@ proc dc_read_def args {
#@ parse_proc_arguments -args $args ra
#@
#@ return [eval execute_command_and_create_cel_from_scratch "org_read_def" $args]
#@ }
#@
#@ define_proc_attributes dc_read_def -hide_body \
#@ -info " Read a def file " \
#@ -define_args \
#@ {{-design "name of design for which clusters are to be read" "" string
{optional}} \
#@ {-quiet "do not print out any warnings" "" boolean {optional}} \
#@ {-verbose "print out more warnings" "" boolean {optional}} \
#@ {-allow_physical_cells "allow physical cells" "" boolean {optional}} \
#@ {-allow_physical_ports "allow physical ports" "" boolean {optional}} \
#@ {-allow_physical_nets "allow physical nets" "" boolean {optional}} \
#@ {-skip_signal_nets "skip signal nets" "" boolean {optional}} \
#@ {-incremental "incremental" "" boolean {optional}} \
#@ {-enforce_scaling "enforce_scaling" "" boolean {optional}} \
#@ {-move_bounds "move bounds" "" boolean {optional}} \
#@ {"" "input def file names" "input_def_file_name" string {required}}}
#@
#@
#@ ##############################################################################
#@ # PROCEDURE: group
#@ # ABSTRACT: Wrapper around group to handle incremental update properly
#@ ##############################################################################
#@ rename -force group org_group
#@ icc_hide_cmd org_group
#@ proc group args {
#@ parse_proc_arguments -args $args ra
#@ return [eval execute_command_and_create_cel_from_scratch "org_group" $args]
#@ }
#@
#@ define_proc_attributes group -hide_body \
#@ -info " create new hierarchy" \
#@ -define_args \
#@ {{-except "cells not to be included in the group" "exclude_list" list
{optional}}
#@ {-design_name "name of design created for new hierarchy" "design_name"
string {optional}}
#@ {-cell_name "name of cell created for new hierarchy" "cell_name" string
{optional}}
#@ {-logic "group any combinational elements" "" boolean {optional}}
#@ {-pla "group any PLA elements" "" boolean {optional}}
#@ {-fsm "group all elements part of a finite state machine" "" boolean
{optional}}
#@ {-hdl_block "name of hdl_block to group" "" string {optional}}
#@ {-hdl_bussed "group all bussed gates under this block" "" boolean
{optional}}
#@ {-hdl_all_blocks "group all hdl blocks under this block" "" boolean
{optional}}
#@ {-soft "set the group_name attribute" "" boolean {optional}}
#@ {"" "cells to be included in the group" "cell_list" list {optional}}}
#@
#@ ##############################################################################
#@ # PROCEDURE: copy_design
#@ # ABSTRACT: Wrapper around copy_design to handle incremental update properly
#@ ##############################################################################
#@ rename -force copy_design org_copy_design
#@ icc_hide_cmd org_copy_design
#@ proc copy_design args {
#@ parse_proc_arguments -args $args ra
#@ return [eval execute_command_and_create_cel_from_scratch "org_copy_design"
$args]
#@ }
#@
#@ define_proc_attributes copy_design -hide_body \
#@ -info " copy_design" \
#@ -define_args \
#@ {{"design" "List of designs to be copied" "design_list" list {required}}
#@ {"name" "Name of new design or target file" "target_name" string
{required}}}
#@
#@ ##############################################################################
#@ # PROCEDURE: create_design
#@ # ABSTRACT: Wrapper around create_design to handle incremental update
properly
#@ ##############################################################################
#@ rename -force create_design org_create_design
#@ icc_hide_cmd org_create_design
#@ proc create_design args {
#@ parse_proc_arguments -args $args ra
#@ return [eval execute_command_and_create_cel_from_scratch "org_create_design"
$args]
#@ }
#@
#@ define_proc_attributes create_design -hide_body \
#@ -info " Creates a design in dc_shell memory" \
#@ -define_args \
#@ {{"design" "name of the design to create" "<design_name>" string {required}}
#@ {"name" "name of file for design; optional" "<file_name>" string
{optional}}}
#@
#@ ##############################################################################
#@ # PROCEDURE: reset_design
#@ # ABSTRACT: Wrapper around reset_design to handle incremental update
properly
#@ ##############################################################################
#@ #rename -force reset_design org_reset_design
#@ #icc_hide_cmd org_reset_design
#@ #proc reset_design args {
#@ # parse_proc_arguments -args $args ra
#@ # return [eval execute_command_and_create_cel_from_scratch "org_reset_design"
$args]
#@ #}
#@
#@ ##############################################################################
#@ # PROCEDURE: rename_design
#@ # ABSTRACT: Wrapper around rename_design to handle incremental update
properly
#@ ##############################################################################
#@ rename -force rename_design org_rename_design
#@ icc_hide_cmd org_rename_design
#@ proc rename_design args {
#@ parse_proc_arguments -args $args ra
#@ return [eval execute_command_and_create_cel_from_scratch "org_rename_design"
$args]
#@ }
#@
#@ define_proc_attributes rename_design -hide_body \
#@ -info " rename_design" \
#@ -define_args \
#@ {{"design" "List of designs to be renamed" "design_list" list {required}}
#@ {"name" "Name of new design or target file" "target_name" string
{required}}}
#@
#@ }
#@
#@ ##############################################################################
#@ # If we are in icc_shell (i.e. Galileo) then
#@ # load the procedures to switch between DC and Milkyway collections.
#@ # Set the default to MW collection unless otherwise specified.
#@ ##############################################################################
#@ if { [string match -nocase {*icc_shell*} $synopsys_program_name] } {
#@ # load the procedures that switch between DC and MW collections
#@ source $synopsys_root/auxx/syn/collection_procs.tcl
#@
#@ set CS mw
#@
#@ # see if the user wants DC
#@ if {! [catch {getenv USE_DC_COLLECTIONS_ONLY}] &&
#@ [getenv USE_DC_COLLECTIONS_ONLY] } {
#@ set CS dc
#@ }
#@
#@ # set the collection source now
#@ redirect /dev/null {
#@ if {[catch {set_collection_mode -handle $CS}]} {
#@ catch {set_collection_option -handle $CS}
#@ }
#@ }
#@
#@ unset CS
#@ }
#@
#@ ##############################################################################
#@ # procedure for route command
#@ # echo the command to a temp tcl file for seperate process to pick up
#@ ##############################################################################
#@ if { [string match -nocase {*icc_shell*} $synopsys_program_name] } {
#@ rename -force route org_route
#@ icc_hide_cmd org_route
#@ proc route args {
#@ set route_cmd_file_name ".route_cmd.tcl"
#@ set route_cmd_temp_file_name ".route_cmd.tcl.temp"
#@ set fp [open $route_cmd_file_name "w"]
#@ set route_cmd [concat "sep_proc_route " $args " -child"]
#@ puts $fp $route_cmd
#@ close $fp
#@
#@ uplevel #0 rename -force route route_temp_proc
#@ uplevel #0 rename -force org_route route
#@ set status [ uplevel #0 route $args ]
#@ uplevel #0 rename -force route org_route
#@ uplevel #0 rename -force route_temp_proc route
#@
#@ if { [info exist status ] == 1 } {
#@ return $status
#@ }
#@ return
#@ }
#@ }
#@
#@ ##############################################################################
#@ # Tcl Command: set_ignore_cell
#@ # Description: Load the command only in IC Compiler (icc_shell)
#@ ##############################################################################
#@ if { [string match -nocase {*icc_shell*} $synopsys_program_name] } {
#@ source $synopsys_root/auxx/syn/psyn/ideal_cell.tcl.e
#@ }
#@
#@ ##############################################################################
#@ # Tcl Command: check_physical_design
#@ # Description: Load the command only in IC Compiler (icc_shell)
#@ ##############################################################################
#@ if { [string match -nocase {*icc_shell*} $synopsys_program_name] } {
#@ # Load the compiled Tcl byte-code:
#@ # 9000784997: Do not log to command.log when sourcing .tbc files
#@ set prev_sh_source_logging [get_app_var sh_source_logging]
#@ set_app_var sh_source_logging 0
#@ source $synopsys_root/auxx/syn/psyn/check_physical_design_core.tbc
#@ source $synopsys_root/auxx/syn/psyn/check_physical_design_utils.tbc
#@ source $synopsys_root/auxx/syn/psyn/check_physical_design_flows.tbc
#@ source $synopsys_root/auxx/syn/psyn/check_physical_design_reports.tbc
#@ source $synopsys_root/auxx/syn/psyn/check_physical_design_ui.tbc
#@ source $synopsys_root/auxx/syn/psyn/sanity_setup_opt.tbc
#@ source $synopsys_root/auxx/syn/psyn/sanity_setup_cmd.tbc
#@ source $synopsys_root/auxx/syn/psyn/sanity_setup_rpt.tbc
#@ source $synopsys_root/auxx/syn/psyn/create_qor_snapshot.tbc
#@ source $synopsys_root/auxx/syn/psyn/report_qor_snapshot.tbc
#@ source $synopsys_root/auxx/syn/psyn/msgParser.tbc
#@ source $synopsys_root/auxx/syn/psyn/displacement_gui.tbc
#@ source $synopsys_root/auxx/syn/psyn/categorize_timing_gui.tbc
#@ set_app_var sh_source_logging $prev_sh_source_logging
#@
#@ source $synopsys_root/auxx/syn/psyn/mcmm_utils.tcl.e
#@ source $synopsys_root/auxx/syn/psyn/propagate_all_clocks.tcl.e
#@ }
#@
#@ if { [string match -nocase {*dc_shell*} $synopsys_program_name] &&
[shell_is_in_topographical_mode] } {
#@ # 9000784997: Do not log to command.log when sourcing .tbc files
#@ set prev_sh_source_logging [get_app_var sh_source_logging]
#@ set_app_var sh_source_logging 0
#@ source $synopsys_root/auxx/syn/psyn/create_qor_snapshot.tbc
#@ source $synopsys_root/auxx/syn/psyn/report_qor_snapshot.tbc
#@ set_app_var sh_source_logging $prev_sh_source_logging
#@
#@ source $synopsys_root/auxx/syn/psyn/mcmm_utils.tcl.e
#@ }
#@
#@ if { [string match -nocase {*icc_shell*} $synopsys_program_name] } {
#@ source $synopsys_root/auxx/syn/psyn/write_timing_context.tcl.e;
#@ source $synopsys_root/auxx/syn/psyn/write_scenarios.tbc;
#@ }
#@
#@ if { [string match -nocase {*dc_shell*} $synopsys_program_name] || [string match
-nocase {*de_shell*} $synopsys_program_name] } {
#@ source $synopsys_root/auxx/syn/dct/write_timing_context_v2_0.tcl.e;
#@ }
#@ # -- Starting source
/cad/synopsys/synthesis/cur/auxx/syn/dct/write_timing_context_v2_0.tcl.e
#@
#@
#@ if { $synopsys_program_name == "de_shell" } {
#@ # 9000784997: Do not log to command.log when sourcing .tbc files
#@ set prev_sh_source_logging [get_app_var sh_source_logging]
#@ set_app_var sh_source_logging 0
#@ source $synopsys_root/auxx/syn/psyn/create_qor_snapshot.tbc
#@ source $synopsys_root/auxx/syn/psyn/report_qor_snapshot.tbc
#@ set_app_var sh_source_logging $prev_sh_source_logging
#@
#@ source $synopsys_root/auxx/syn/psyn/mcmm_utils.tcl.e
#@ }
#@
#@ ##############################################################################
#@ # ICC setup and hiding commands/procs etc
#@ ##############################################################################
#@
#@ if { [string match -nocase {*icc_shell*} $synopsys_program_name] } {
#@ #set save_mw_cel_lib_setup TRUE
#@ #set auto_restore_mw_cel_lib_setup FALSE
#@
#@ alias create_wiring_keepout create_wiring_keepouts
#@ alias get_wiring_keepout get_wiring_keepouts
#@ alias get_placement_keepout get_placement_keepouts
#@ alias create_placement_keepout create_placement_keepouts
#@
#@ icc_hide_cmd execute_command_and_create_cel_from_scratch
#@ icc_hide_cmd dc_read_def
#@ icc_hide_cmd read_edif
#@ icc_hide_cmd read_sverilog
#@ icc_hide_cmd read_vhdl
#@ icc_hide_cmd set_collection_mode
#@ icc_hide_cmd return_dc_collection
#@ icc_hide_cmd return_mw_collection
#@ set mw_use_pdb_lib_format true
#@ }
#@
#@
#@ ##############################################################################
#@ # Tcl Command: get_dont_touch_nets
#@ # Description: wrapper of "get_nets -filter dont_touch_reason==mv"
#@ ##############################################################################
#@ if { [string match -nocase {*icc_shell*} $synopsys_program_name] } {
#@
#@ proc get_dont_touch_nets args {
#@
#@ parse_proc_arguments -args $args ra
#@
#@ set cmd [format {get_nets}]
#@
#@ if {[info exists ra()]} {
#@ set cmd [format {%s {%s}} $cmd $ra()]
#@ }
#@ if {[info exists ra(-type)]} {
#@ set cmd [format {%s -filter dont_touch_reasons=~*%s*} $cmd $ra(-type)]
#@ }
#@ if {[info exists ra(-hierarchical)]} {
#@ set cmd [format {%s -hierarchical} $cmd]
#@ }
#@ if {[info exists ra(-quiet)]} {
#@ set cmd [format {%s -quiet} $cmd]
#@ }
#@ if {[info exists ra(-regexp)]} {
#@ set cmd [format {%s -regexp} $cmd]
#@ }
#@ if {[info exists ra(-nocase)]} {
#@ set cmd [format {%s -nocase} $cmd]
#@ }
#@ if {[info exists ra(-exact)]} {
#@ set cmd [format {%s -exact} $cmd]
#@ }
#@
#@ return [uplevel #0 $cmd]
#@ }
#@
#@ define_proc_attributes get_dont_touch_nets \
#@ -info " Get dont_touch nets " \
#@ -permanent \
#@ -define_args { \
#@ {"" "Match net names against patterns" "patterns" list {optional}} \
#@ {-type "Match net dont_touch reasons" "reasons" list {required}} \
#@ {-hierarchical "Search level-by-level in current instance" "" boolean
{optional}} \
#@ {-quiet "Suppress all messages" "" boolean {optional hidden}} \
#@ {-regexp "Patterns are full regular expressions" "" boolean {optional
hidden}} \
#@ {-nocase "With -regexp, matches are case-insensitive" "" boolean {optional
hidden}} \
#@ {-exact "Wildcards are considered as plain characters" "" boolean {optional
hidden}} \
#@ }
#@
#@ alias get_dont_touch_net get_dont_touch_nets
#@ }
#@
#@
#@ ##############################################################################
#@ # return the first {index value} pair in Tcl array ary.
#@ ##############################################################################
#@ proc _snps_array_peek { level ary } {
#@ upvar #$level $ary loc_ary
#@ set ret [list]
#@ if {[array exists loc_ary] == 0} {
#@ return $ret
#@ }
#@ if {[catch {set token [array startsearch loc_ary]}]} {
#@ return $ret
#@ }
#@ while {[array anymore loc_ary $token]} {
#@ set k [array nextelement loc_ary $token]
#@ set v $loc_ary($k)
#@ set ret [list $k $v]
#@ break
#@ }
#@ array donesearch loc_ary $token
#@ return $ret;
#@ }
#@ define_proc_attributes _snps_array_peek -hidden
#@
#@
#@ ##############################################################################
#@ # Tcl Command: filter_collection
#@ # Description: DC wrapper for filter_collection with fixes of direction filter
#@ #
#@ # This is a fix for DC's filter using "direction" attribute. This
#@ # attribute is of integer type, but user wants a string format
#@ ##############################################################################
#@ if {[string match -nocase {*icc_shell*} $synopsys_program_name] == 0} {
#@ rename -force -hidden filter_collection _real_filter_collection
#@ proc filter_collection {args} {
#@ parse_proc_arguments -args $args ra
#@
#@ set regexp ""
#@ set nocase ""
#@ if {[info exist ra(-regexp)]} {
#@ set regexp "-regexp"
#@ }
#@ if {[info exist ra(-nocase)]} {
#@ set nocase "-nocase"
#@ }
#@ set coll $ra(collection1)
#@
#@ # _real_filter_collection silently returns in this error condition
#@ if {[catch {set coll_size [sizeof_collection $coll]}] || $coll_size <= 0} {
#@ return [list]
#@ }
#@
#@ if {$::sh_translate_direction_attribute == true} {
#@ set filter_expr [replace_direction $coll $ra(expression)]
#@ } else {
#@ set filter_expr $ra(expression)
#@ }
#@
#@ # if $ra(expression) is not empty but filter_expr is, collection is
heterogrnous
#@ # and expression has "direction" as substring. We have to walk through all
objects
#@ if {[string length $filter_expr] == 0 && [string length $ra(expression)] != 0}
{
#@ set part1 [format {_real_filter_collection %s %s } $regexp $nocase]
#@ set results ""
#@ set subclxn ""
#@ set subsize [expr [sizeof_collection $coll]/80 + 10]
#@ set counter 0
#@ foreach_in_collection obj $coll {
#@ incr counter
#@ set cmd [format {%s %s {%s}} $part1 $obj [replace_direction $obj
$ra(expression)]]
#@ append_to_collection subclxn [uplevel #0 $cmd]
#@ if {[expr $counter % $subsize] == 0} {
#@ append_to_collection results $subclxn
#@ set subclxn ""
#@ }
#@ }
#@ if {[sizeof_collection $subclxn] != 0} {
#@ append_to_collection results $subclxn
#@ }
#@ return $results
#@ } else {
#@ set cmd [format {_real_filter_collection %s %s %s {%s}} \
#@ $regexp $nocase $coll $filter_expr]
#@ return [uplevel #0 $cmd]
#@ }
#@ }
#@ define_proc_attributes filter_collection \
#@ -info " Filter a collection, resulting in new collection " \
#@ -permanent \
#@ -define_args { \
#@ {-regexp "Operators =~ and !~ use regular expressions" "" boolean
{optional}} \
#@ {-nocase "Case insensitive string match" "" boolean {optional}} \
#@ {collection1 "Collection to filter" "collection1" string {required}} \
#@ {expression "Filter expression" "expression" string {required}} \
#@ }
#@
#@ }
#@
#@ ############################################
#@ # ppizarro: 12/2020
#@ # Fast Mode
#@ # ---> controled by "enable_fast_mode"
#@ # When variable enable_fast_mode is set to true other variables are set
according
#@ # to values defined in ::fastMode::fast_mode_variables
#@ # ONLY the variables defined in the dict are changed.
#@ # we keep track of any changes by adding traces to those variables
#@ #
#@ # -> All sub vars which form the fast mode var will be set to the correct fast
mode values
#@ # -> Any attempt to change the value of the sub vars which form the
fast_mode_var to a non-default fast mode value, will be warned with appropriate
message.
#@ # -> Any attempt to change the value of the sub vars which form the
fast_mode_var to same value as fast mode, will be a no-op.
#@ #
#@ ############################################
#@ namespace eval ::fastMode {
#@ variable fastModeOrig [dict create]
#@ }
#@
#@ proc ::fastMode::createFastModeVar {} {
#@ set ::enable_fast_mode FALSE
#@ trace add variable ::enable_fast_mode write [list ::fastMode::fastModeChange
$::enable_fast_mode]
#@ trace add variable ::enable_fast_mode unset ::fastMode::fastModeUnset
#@ }
#@
#@ proc ::fastMode::traceVars {} {
#@ dict for {varName value} $::fastMode::fast_mode_variables {
#@ trace add variable ::$varName write [list ::fastMode::tracedVarChange
$varName]
#@ }
#@ }
#@
#@ proc ::fastMode::unTraceVars {} {
#@ dict for {varName value} $::fastMode::fast_mode_variables {
#@ trace remove variable ::$varName write [list ::fastMode::tracedVarChange
$varName]
#@ }
#@ }
#@
#@ proc ::fastMode::tracedVarChange {oldValue varName empty op} {
#@ variable fastModeOrig
#@ #if new value is different than fastmode value
#@ if {[set ::$varName] != [dict get $::fastMode::fast_mode_variables $varName]}
{
#@ #issue warning
#@ puts "Warning: Value [set ::$varName] for $varName is not part of FastMode"
#@ #remove from "reset values" -> fastModeOrig
#@ dict unset fastModeOrig $varName
#@ } else {
#@ #if value is the same, but it's not on the dict we need to re-add
#@ if {![dict exists fastModeOrig $varName]} {
#@ dict set fastModeOrig $varName $oldValue
#@ }
#@ }
#@
#@ }
#@
#@ proc ::fastMode::fastModeUnset {fastModevarName empty op} {
#@ #this is called by the unset trace
#@ #if unset, the intention is to disable fastmode
#@ #we disable fast_mode
#@ ::fastMode::disableVars
#@ #and recreate and add traces to "enable_fast_mode" to always have the variable
traced
#@ ::fastMode::createFastModeVar
#@ }
#@
#@ proc ::fastMode::enableVars {} {
#@ variable fastModeOrig
#@ #foreach declared variable
#@ dict for {varName value} $::fastMode::fast_mode_variables {
#@ #store original value -> $varName $::$varName -> testVal value
#@ if [info exists ::$varName] {
#@ dict set fastModeOrig $varName [set ::[set varName]]
#@ } else {
#@ dict set fastModeOrig $varName "__FASTMODE__UNSET__"
#@ }
#@ #set new value
#@ set ::$varName $value
#@ }
#@ ::fastMode::traceVars
#@ }
#@
#@ proc ::fastMode::disableVars {} {
#@ variable fastModeOrig
#@ ::fastMode::unTraceVars
#@ #foreach saved variable
#@ dict for {varName origValue} $fastModeOrig {
#@ #set new value
#@ if {$origValue eq "__FASTMODE__UNSET__"} {
#@ unset ::$varName
#@ } elseif {$origValue} {
#@ set ::$varName "TRUE"
#@ } else {
#@ set ::$varName "FALSE"
#@ }
#@ dict unset fastModeOrig $varName
#@ }
#@ }
#@
#@ proc ::fastMode::fastModeChange {origValue fastModevarName empty op} {
#@ if { ![string is boolean [set ::$fastModevarName]] } {
#@ puts "Value for $fastModevarName is not a boolean, please use TRUE or FALSE"
#@ set ::$fastModevarName $origValue
#@ }
#@ #if enabled
#@ if {[set ::$fastModevarName]} {
#@ ::fastMode::enableVars
#@ } else {
#@ ::fastMode::disableVars
#@ }
#@ }
#@
#@ #this is to avoid double sourcing, just safer operation
#@ if {![info exists ::fastMode::sourced] || ! $::fastMode::sourced} {
#@ set ::fastMode::sourced true
#@ #these are the defined fast_mode_variables and their values
#@ set ::fastMode::fast_mode_variables [dict create \
#@ "all_regs_skip_dw_netlisting" TRUE \
#@ "enable_connectivity_fanin_fanout" TRUE \
#@ "ui_copy_design_fast_lookup" TRUE \
#@ "no_netlist_collection_update_due_to_path_collection_change"
TRUE \
#@ "preserve_collections_in_compile" FALSE \
#@ ]
#@ ::fastMode::createFastModeVar
#@ }
#@
#@ # -- End source /cad/synopsys/synthesis/cur/auxx/syn/.dc_procs.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 files.
#@ #
#@ #
#@
#@ # from the System Variable Group
#@ set link_library { * your_library.db }
#@
#@ set search_path [list . ${synopsys_root}/libraries/syn
${synopsys_root}/dw/syn_ver ${synopsys_root}/dw/sim_ver]
#@ set target_library your_library.db
#@ set synthetic_library ""
#@ set command_log_file "./command.log"
#@ set designer ""
#@ set company ""
#@ set find_converts_name_lists "false"
#@
#@ set symbol_library your_library.sdb
#@
#@ # Turn on Formality SVF recording
#@ if { $synopsys_program_name == "dc_shell" || \
#@ $synopsys_program_name == "de_shell" || \
#@ $synopsys_program_name == "design_vision" } {
#@ set_svf -default default.svf
#@ }
#@
#@ # from the Schematic Variable Group
#@
#@ # from the Plot Variable Group
#@ # [froi] 07/06/2012: Remove old Design Analyzer plot_command variable
#@ #if { $sh_arch == "hp700" } {
#@ # set plot_command "lp -d"
#@ #} else {
#@ # set plot_command "lpr -Plw"
#@ #}
#@
#@ 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 arch_init_path ${synopsys_root}/${sh_arch}/motif/syn/uid
#@ set auto_link_disable "false"
#@ set auto_link_options "-all"
#@ set uniquify_naming_style "%s_%d"
#@ set verbose_messages "true"
#@ set echo_include_commands "true"
#@ set svf_file_records_change_names_changes "true"
#@ set change_names_update_inst_tree "true"
#@ set change_names_dont_change_bus_members false
#@ set default_name_rules ""
#@ #set tdrc_enable_clock_table_creation "true"
#@
#@ #
#@ # Compile Variable Group:
#@ #
#@ # These variables affect the designs created by the COMPILE command.
#@ #
#@ set compile_assume_fully_decoded_three_state_busses "false"
#@ set compile_no_new_cells_at_top_level "false"
#@ set compile_dont_touch_annotated_cell_during_inplace_opt "false"
#@ set compile_update_annotated_delays_during_inplace_opt "true"
#@ set compile_instance_name_prefix "U"
#@ set compile_instance_name_suffix ""
#@ set compile_negative_logic_methodology "false"
#@ set compile_disable_hierarchical_inverter_opt "false"
#@ set compile_use_low_timing_effort "false"
#@ set compile_fix_cell_degradation "false"
#@ set compile_preserve_subdesign_interfaces "false"
#@ set compile_enable_constant_propagation_with_no_boundary_opt "true"
#@ set port_complement_naming_style "%s_BAR"
#@ set compile_implementation_selection "true"
#@ set compile_delete_unloaded_sequential_cells "true"
#@ set reoptimize_design_changed_list_file_name ""
#@ set compile_checkpoint_phases "false"
#@ set compile_cpu_limit 0.0
#@ set compile_log_format " %elap_time %area %wns %tns %drc %endpoint";
#@ set compile_top_all_paths "false"
#@ set compile_top_acs_partition "false"
#@ set default_port_connection_class "universal"
#@ set compile_hold_reduce_cell_count "false"
#@ set compile_retime_license_behavior "wait"
#@ set dont_touch_nets_with_size_only_cells "false"
#@ if { $synopsys_program_name == "dc_shell" && [shell_is_in_topographical_mode] }
{
#@ set dct_prioritize_area_correlation "false"
#@ set compile_error_on_missing_physical_cells "false"
#@ }
#@
#@ set ldd_return_val 0
#@ if { [string compare $dc_shell_mode "default"] == 0 } {
#@ set ldd_script ${synopsys_root}/auxx/syn/scripts/list_duplicate_designs.dcsh
#@ alias list_duplicate_designs "include -quiet ldd_script; dc_shell_status =
ldd_return_val "
#@
#@ }
#@ if { [string compare $dc_shell_mode "tcl"] == 0 } {
#@ if {$synopsys_program_name != "dc_sms_shell"} {
#@ source ${synopsys_root}/auxx/syn/scripts/list_duplicate_designs.tcl
#@ # 9000784997: Do not log to command.log when sourcing .tbc files
#@ set prev_sh_source_logging [get_app_var sh_source_logging]
#@ set_app_var sh_source_logging 0
#@ source ${synopsys_root}/auxx/syn/scripts/analyze_datapath.tbc
#@ set_app_var sh_source_logging $prev_sh_source_logging
#@ }
#@ }
#@ # -- Starting source
/cad/synopsys/synthesis/cur/auxx/syn/scripts/list_duplicate_designs.tcl
#@ #######################################################################
#@ #
#@ # list_duplicate_designs.tcl 21 Sept. 2006
#@ #
#@ # List designs in dc_shell memory that have the same design name
#@ #
#@ # COPYRIGHT (C) 2006, SYNOPSYS INC., ALL RIGHTS RESERVED.
#@ #
#@ #######################################################################
#@
#@ proc list_duplicate_designs { args } {
#@ parse_proc_arguments -args $args ra
#@
#@ # Get the list of duplicate designs
#@ set the_pid [pid]
#@ set rand_1 [expr int(rand() * 100000)]
#@ set temp_file_1 [format "/tmp/ldd_design_%s_%s" $the_pid $rand_1]
#@
#@ redirect $temp_file_1 { foreach_in_collection ldd_design [find design "*"] {
#@ echo [get_object_name $ldd_design]
#@ } }
#@
#@ set rand_2 [expr int(rand() * 100000)]
#@ set temp_file_2 [format "/tmp/ldd_design_%s_%s" $the_pid $rand_2]
#@
#@ sh sort $temp_file_1 | uniq -d | tee $temp_file_2
#@ file delete $temp_file_1
#@
#@ # Report duplicates
#@ if { ! [file size $temp_file_2] } {
#@ echo [concat {No duplicate designs found.}]
#@ set ldd_return_val 0
#@ } else {
#@ set rand_3 [expr int(rand() * 100000)]
#@ set temp_file_3 [format "/tmp/ldd_design_%s_%s" $the_pid $rand_3]
#@ echo {Warning: Multiple designs in memory with the same design name.}
#@ echo {}
#@ echo { Design File Path}
#@ echo { ------ ---- ----}
#@ list_designs -table > $temp_file_3
#@ echo [sh fgrep -f $temp_file_2 $temp_file_3 | sort | grep -v
'Design.*File.*Path']
#@ file delete $temp_file_3
#@ set ldd_return_val 1
#@ }
#@
#@ # Clean up
#@ file delete $temp_file_2
#@
#@ set list_duplicate_designs1 $ldd_return_val
#@ }
#@
#@ define_proc_attributes list_duplicate_designs \
#@ -info " List designs of same names" \
#@ -permanent \
#@ -define_args {
#@ }
#@ # -- End source
/cad/synopsys/synthesis/cur/auxx/syn/scripts/list_duplicate_designs.tcl
#@
#@
#@ set compile_log_format " %elap_time %area %wns %tns %drc %endpoint";
#@
#@ set compile_top_all_paths "false"
#@ alias compile_inplace_changed_list_file_name \
#@ reoptimize_design_changed_list_file_name
#@
#@ #
#@ # These variables affects compile, report_timing and report_constraints
#@ # commands.
#@ #
#@ set enable_recovery_removal_arcs "false"
#@ set timing_report_attributes {dont_touch dont_use map_only size_only ideal_net
infeasible_paths}
#@
#@ #
#@ # Multibit Variable Group:
#@ #
#@ # These variables affect the multibit mapping functionality
#@ #
#@
#@ set bus_multiple_separator_style ","
#@ set bus_multiple_name_separator_style ",,"
#@
#@ #
#@ # ILM Variable Group:
#@ #
#@ # These variables affect Interface Logic Model functionality
#@ #
#@
#@ set ilm_ignore_percentage 25
#@
#@ #
#@ # Estimator Variable Group:
#@ #
#@ # These variables affect the designs created by the ESTIMATE command.
#@ #
#@ set estimate_resource_preference "fast"
#@ alias est_resource_preference estimate_resource_preference
#@ set lbo_lfo_enable_at_pin_count 3
#@ set lbo_cells_in_regions "false"
#@
#@ # Synthetic Library Group:
#@ #
#@ # These variable affect synthetic library processing.
#@ #
#@ set synlib_dont_get_license {}
#@ set synlib_library_list {DW01 DW02 DW03 DW04 DW05 DW06 DW07}
#@ set synlib_wait_for_design_license {}
#@ set synlib_dwhomeip {}
#@
#@ #
#@ # Insert_DFT Variable Group:
#@ #
#@ #set test_default_client_order [list]
#@ set insert_dft_clean_up "true"
#@ set insert_test_design_naming_style "%s_test_%d"
#@ # /*insert_test_scan_chain_only_one_clock = "false"
#@ # Replace by command line option (star 17215) -- Denis Martin 28-Jan-93*/
#@ set test_clock_port_naming_style "test_c%s"
#@ set test_scan_clock_a_port_naming_style "test_sca%s"
#@ set test_scan_clock_b_port_naming_style "test_scb%s"
#@ set test_scan_clock_port_naming_style "test_sc%s"
#@ set test_scan_enable_inverted_port_naming_style "test_sei%s"
#@ set test_scan_enable_port_naming_style "test_se%s"
#@ set test_scan_in_port_naming_style "test_si%s%s"
#@ set test_scan_out_port_naming_style "test_so%s%s"
#@ set test_non_scan_clock_port_naming_style "test_nsc_%s"
#@ set test_default_min_fault_coverage 95
#@ set test_dedicated_subdesign_scan_outs "false"
#@ set test_disable_find_best_scan_out "false"
#@ set test_dont_fix_constraint_violations "false"
#@ set test_isolate_hier_scan_out 0
#@ set test_mode_port_naming_style "test_mode%s"
#@ set test_mode_port_inverted_naming_style "test_mode_i%s"
#@ set compile_dont_use_dedicated_scanout 1
#@ set test_mux_constant_si "false"
#@
#@ #
#@ # Analyze_Scan Variable Group:
#@ #
#@ # These variables affect the designs created by the PREVIEW_SCAN command.
#@ #
#@ set test_preview_scan_shows_cell_types "false"
#@ set test_scan_link_so_lockup_key "l"
#@ set test_scan_link_wire_key "w"
#@ set test_scan_segment_key "s"
#@ set test_scan_true_key "t"
#@
#@ #
#@ # bsd Variable Group:
#@
#@ # These variables affect the report generated by the check_bsd command
#@ # and the BSDLout generated by the write_bsdl command.
#@ #
#@ set test_user_test_data_register_naming_style "UTDR%d"
#@
#@ set test_user_defined_instruction_naming_style "USER%d"
#@
#@ set test_bsdl_default_suffix_name "bsdl"
#@
#@ set test_bsdl_max_line_length 80
#@
#@ set test_cc_ir_masked_bits 0
#@
#@ set test_cc_ir_value_of_masked_bits 0
#@
#@ set test_bsd_allow_tolerable_violations "false"
#@ set test_bsd_optimize_control_cell "false"
#@ set test_bsd_control_cell_drive_limit 0
#@ set test_bsd_manufacturer_id 0
#@ set test_bsd_part_number 0
#@ set test_bsd_version_number 0
#@ set bsd_max_in_switching_limit 60000
#@ set bsd_max_out_switching_limit 60000
#@
#@ #
#@ # TestManager Variable Group:
#@ #
#@ # These variables affect the TestManager methodology.
#@ #
#@ set multi_pass_test_generation "false"
#@
#@ #
#@ # TestSim Variable Group:
#@ #
#@ # These variables affect the TestSim behavior.
#@ #
#@ # set testsim_print_stats_file "true"
#@
#@ # Test DRC Variable Group:
#@ #
#@ # These variables affect the check_test command.
#@ #
#@ set test_capture_clock_skew "small_skew"
#@ set test_allow_clock_reconvergence "true"
#@ set test_check_port_changes_in_capture "true"
#@ set test_infer_slave_clock_pulse_after_capture "infer"
#@
#@ #
#@ # Test Variable Group:
#@ #
#@ # These variables affect the rtldrc, check_test, write_test_protocol
#@ # and write_test command.
#@ #
#@ set test_default_delay 0.0
#@ set test_default_bidir_delay 0.0
#@ set test_default_strobe 40.0
#@ set test_default_strobe_width 0.0
#@ set test_default_period 100.0
#@ set test_stil_max_line_length 72
#@
#@ #added for B-2008.09-place_opt-004 to disable this option in ICC
#@
#@ if { $synopsys_program_name != "icc_shell"} {
#@ set test_write_four_cycle_stil_protocol "false"
#@ set test_protocol_add_cycle "true"
#@ set test_stil_multiclock_capture_procedures "false"
#@ set write_test_new_translation_engine "false"
#@ set test_default_scan_style "multiplexed_flip_flop"
#@ set test_jump_over_bufs_invs "true"
#@ set test_point_keep_hierarchy "false"
#@ set test_mux_constant_so "false"
#@ set test_use_test_models "false"
#@ set test_stil_netlist_format "db"
#@ group_variable test "test_protocol_add_cycle"
#@ group_variable test "test_write_four_cycle_stil_protocol"
#@ group_variable test "test_stil_multiclock_capture_procedures"
#@ group_variable test "test_default_scan_style"
#@ group_variable preview_scan "test_jump_over_bufs_invs"
#@ group_variable insert_dft "test_point_keep_hierarchy"
#@ group_variable insert_dft "test_mux_constant_so"
#@ group_variable test "test_stil_netlist_format"
#@ }
#@ set test_rtldrc_latch_check_style "default"
#@ set test_enable_capture_checks "true"
#@ set ctldb_use_old_prot_flow "false"
#@ set test_bsd_default_delay 0.0
#@ set test_bsd_default_bidir_delay 0.0
#@ set test_bsd_default_strobe 95.0
#@ set test_bsd_default_strobe_width 0.0
#@
#@ #
#@ # Test Variable Group:
#@ #
#@ # These variables affects the set_scan_state command.
#@ #
#@
#@ set compile_seqmap_identify_shift_registers_with_synchronous_logic_ascii false
#@
#@ #
#@ # Write_Test Variable Group:
#@ #
#@ # These variables affect output of the WRITE_TEST command.
#@ #
#@ set write_test_input_dont_care_value "X"
#@ set write_test_vector_file_naming_style "%s_%d.%s"
#@ set write_test_scan_check_file_naming_style "%s_schk.%s"
#@ set write_test_pattern_set_naming_style "TC_Syn_%d"
#@ set write_test_max_cycles 0
#@ set write_test_max_scan_patterns 0
#@ # /*retain "tssi_ascii" (equivalent to "tds") for backward compatability */
#@ set write_test_formats {synopsys tssi_ascii tds verilog vhdl wgl}
#@ set write_test_include_scan_cell_info "true"
#@ set write_test_round_timing_values "true"
#@
#@
#@ #
#@ # Schematic and EDIF and Hdl Variable Groups:
#@ #
#@ # These variables affect the schematics created by the
#@ # create_schematic command, define the behavior of the
#@ # DC system EDIF interface, and are for controlling hdl
#@ # reading.
#@ #
#@ set bus_dimension_separator_style {][}
#@ set bus_naming_style {%s[%d]}
#@
#@
#@ #
#@ # Schematic and EDIF Variable Groups:
#@ #
#@ # These variables affect the schematics created by the
#@ # create_schematic command and define the behavior of
#@ # the DC system EDIF interface.
#@ #
#@ set bus_range_separator_style ":"
#@
#@
#@ #
#@ # EDIF and Io Variable Groups:
#@ #
#@ # These variables define the behavior of the DC system EDIF interface and
#@ # define the behavior of the DC system interfaces, i.e. LSI, Mentor, TDL, SGE,#
etc.
#@
#@ set bus_inference_descending_sort "true"
#@ set bus_inference_style ""
#@ set write_name_nets_same_as_ports "false"
#@ #
#@ # Schematic Variable Group:
#@ #
#@ # These variables affect the schematics created by the
#@ # create_schematic command.
#@ #
#@ set font_library "1_25.font"
#@ set generic_symbol_library "generic.sdb"
#@
#@ #
#@ # Io Variable Group:
#@ #
#@ # These variables define the behavior of the DC system
#@ # interfaces, i.e. LSI, Mentor, TDL, SGE, etc.
#@ #
#@ #set db2sge_output_directory ""
#@ #set db2sge_scale "2"
#@ #set db2sge_overwrite "true"
#@ #set db2sge_display_symbol_names "false"
#@
#@
#@ #set db2sge_display_pin_names "false"
#@ #set db2sge_display_instance_names "false"
#@ #set db2sge_use_bustaps "false"
#@ #set db2sge_use_compound_names "true"
#@ #set db2sge_bit_type "std_logic"
#@ #set db2sge_bit_vector_type "std_logic_vector"
#@ #set db2sge_one_name "'1'"
#@ #set db2sge_zero_name "'0'"
#@ #set db2sge_unknown_name "'X'"
#@ #set db2sge_target_xp "false"
#@ #set db2sge_tcf_package_file "synopsys_tcf.vhd"
#@ #set db2sge_use_lib_section ""
#@ #set db2sge_script ""
#@ #set db2sge_command ""
#@
#@ # set equationout_and_sign "*"
#@ # set equationout_or_sign "+"
#@ # set equationout_postfix_negation "true"
#@
#@ # # [wjchen] 2006/08/14: The following variables are obsoleted for DC
simpilification.
#@ #set lsiin_net_name_prefix "NET_"
#@ #set lsiout_inverter_cell ""
#@ #set lsiout_upcase "true"
#@
#@ #set mentor_bidirect_value "INOUT"
#@ #set mentor_do_path ""
#@ #set mentor_input_output_property_name "PINTYPE"
#@ #set mentor_input_value "IN"
#@ #set mentor_logic_one_value "1SF"
#@ #set mentor_logic_zero_one_property_name "INIT"
#@ #set mentor_logic_zero_value "0SF"
#@ #set mentor_output_value "OUT"
#@ #set mentor_primitive_property_name "PRIMITIVE"
#@ #set mentor_primitive_property_value "MODULE"
#@ #set mentor_reference_property_name "COMP"
#@ #set mentor_search_path ""
#@ #set mentor_write_symbols "true"
#@
#@ ## [wjchen] 0606_simp
#@ #set pla_read_create_flip_flop "false"
#@ #set tdlout_upcase "true"
#@
#@ # # [wjchen] 2006/08/14: The following4 variables are obsoleted for DC
simpilification.
#@ # set xnfout_constraints_per_endpoint "50"
#@ # set xnfout_default_time_constraints true
#@ # set xnfout_clock_attribute_style "CLK_ONLY"
#@ # set xnfout_library_version ""
#@
#@ # # [wjchen] 2006/08/11: The following 8 variables are obsoleted for DC
simpilification.
#@ # set xnfin_family "4000"
#@ # set xnfin_ignore_pins "GTS GSR GR"
#@ # set xnfin_dff_reset_pin_name "RD"
#@ # set xnfin_dff_set_pin_name "SD"
#@ # set xnfin_dff_clock_enable_pin_name "CE"
#@ # set xnfin_dff_data_pin_name "D"
#@ # set xnfin_dff_clock_pin_name "C"
#@ # set xnfin_dff_q_pin_name "Q"
#@ #
#@
#@ #
#@ # EDIF Variable Group:
#@ #
#@ # These variables define the behavior of the DC system
#@ # EDIF interface.
#@ #
#@
#@ ##[wjchen] 2006/08/24
#@
#@ # set bus_extraction_style {%s[%d:%d]}
#@
#@ ##[wjchen] 2006/08/24
#@ #set edifin_autoconnect_offpageconnectors "false"
#@ #set edifin_autoconnect_ports "false"
#@ #set edifin_dc_script_flag ""
#@ #set edifin_delete_empty_cells "true"
#@ #set edifin_delete_ripper_cells "true"
#@ #set edifin_ground_net_name ""
#@ #set edifin_ground_net_property_name ""
#@ #set edifin_ground_net_property_value ""
#@ #set edifin_ground_port_name ""
#@ #set edifin_instance_property_name ""
#@ #set edifin_portinstance_disabled_property_name ""
#@ #set edifin_portinstance_disabled_property_value ""
#@ #set edifin_portinstance_property_name ""
#@ #set edifin_power_net_name ""
#@ #set edifin_power_net_property_name ""
#@ #set edifin_power_net_property_value ""
#@ #set edifin_power_port_name ""
#@ #set edifin_use_identifier_in_rename "false"
#@ #set edifin_view_identifier_property_name ""
#@ #set edifin_lib_logic_1_symbol ""
#@ #set edifin_lib_logic_0_symbol ""
#@ #set edifin_lib_in_port_symbol ""
#@ #set edifin_lib_out_port_symbol ""
#@ #set edifin_lib_inout_port_symbol ""
#@ #set edifin_lib_in_osc_symbol ""
#@ #set edifin_lib_out_osc_symbol ""
#@ #set edifin_lib_inout_osc_symbol ""
#@ #set edifin_lib_mentor_netcon_symbol ""
#@ #set edifin_lib_ripper_bits_property ""
#@ #set edifin_lib_ripper_bus_end ""
#@ #set edifin_lib_ripper_cell_name ""
#@ #set edifin_lib_ripper_view_name ""
#@ #set edifin_lib_route_grid 1024
#@ #set edifin_lib_templates {}
#@ #set edifout_dc_script_flag ""
#@ #set edifout_design_name "Synopsys_edif"
#@ #set edifout_designs_library_name "DESIGNS"
#@ #set edifout_display_instance_names "false"
#@ #set edifout_display_net_names "false"
#@ #set edifout_external "true"
#@ #set edifout_external_graphic_view_name "Graphic_representation"
#@ #set edifout_external_netlist_view_name "Netlist_representation"
#@ #set edifout_external_schematic_view_name "Schematic_representation"
#@ #set edifout_ground_name "logic_0"
#@ #set edifout_ground_net_name ""
#@ #set edifout_ground_net_property_name ""
#@ #set edifout_ground_net_property_value ""
#@ #set edifout_ground_pin_name "logic_0_pin"
#@ #set edifout_ground_port_name "GND"
#@ #set edifout_instance_property_name ""
#@ #set edifout_instantiate_ports "false"
#@ #set edifout_library_graphic_view_name "Graphic_representation"
#@ #set edifout_library_netlist_view_name "Netlist_representation"
#@ #set edifout_library_schematic_view_name "Schematic_representation"
#@ #set edifout_merge_libraries "false"
#@ #set edifout_multidimension_arrays "false"
#@ #set edifout_name_oscs_different_from_ports "false"
#@ #set edifout_name_rippers_same_as_wires "false"
#@ #set edifout_netlist_only "false"
#@ #set edifout_no_array "false"
#@ #set edifout_numerical_array_members "false"
#@ #set edifout_pin_direction_in_value ""
#@ #set edifout_pin_direction_inout_value ""
#@ #set edifout_pin_direction_out_value ""
#@ #set edifout_pin_direction_property_name ""
#@ #set edifout_pin_name_property_name ""
#@ #set edifout_portinstance_disabled_property_name ""
#@ #set edifout_portinstance_disabled_property_value ""
#@ #set edifout_portinstance_property_name ""
#@ #set edifout_power_and_ground_representation "cell"
#@ #set edifout_power_name "logic_1"
#@ #set edifout_power_net_name ""
#@ #set edifout_power_net_property_name ""
#@ #set edifout_power_net_property_value ""
#@ #set edifout_power_pin_name "logic_1_pin"
#@ #set edifout_power_port_name "VDD"
#@ #set edifout_skip_port_implementations "false"
#@ #set edifout_target_system ""
#@ #set edifout_top_level_symbol "true"
#@ #set edifout_translate_origin ""
#@ #set edifout_unused_property_value ""
#@ #set edifout_write_attributes "false"
#@ #set edifout_write_constraints "false"
#@ #set edifout_write_properties_list {}
#@ #set read_name_mapping_nowarn_libraries {}
#@ #set write_name_mapping_nowarn_libraries {}
#@
#@ #
#@ # Hdl and Vhdlio Variable Groups:
#@ #
#@ # These variables are for controlling hdl reading, writing,
#@ # and optimizing.
#@ #
#@ set hdlin_unified_rtl_read "FALSE"
#@ set hdlin_vcs_home ""
#@ set hdlin_legacy_naming "FALSE"
#@ set hdlin_naming_register_suffix_on_field "FALSE"
#@ set hdlin_enable_upf_compatible_naming "FALSE"
#@ set hdlin_auto_save_templates "FALSE"
#@ set hdlin_generate_naming_style "%s_%d"
#@ set hdlin_enable_relative_placement "rb"
#@ set hdlin_mux_rp_limit "128x4"
#@ set hdlin_generate_separator_style "_"
#@ set hdlin_ignore_textio_constructs "TRUE"
#@ set hdlin_infer_function_local_latches "FALSE"
#@ set hdlin_infer_local_sync_enable_only "FALSE"
#@ set hdlin_keep_signal_name "all_driving"
#@ set hdlin_module_arch_name_splitting "FALSE"
#@ set hdlin_preserve_sequential "none"
#@ set hdlin_presto_net_name_prefix "N"
#@ set hdlin_presto_cell_name_prefix "C"
#@ set hdlin_v2005_replication_semantics "TRUE"
#@ set hdlin_strict_verilog_reader "FALSE"
#@ set hdlin_prohibit_nontri_multiple_drivers "TRUE"
#@ if { $synopsys_program_name == "de_shell" } {
#@ set hdlin_elab_errors_deep "TRUE"
#@ } else {
#@ set hdlin_elab_errors_deep "FALSE"
#@ }
#@ set hdlin_mux_size_min 2
#@ set hdlin_subprogram_default_values "FALSE"
#@ set hdlin_field_naming_style ""
#@ set hdlin_upcase_names "FALSE"
#@ set hdlin_sv_union_member_naming "FALSE"
#@ set hdlin_enable_hier_map "FALSE"
#@ set hdlin_sv_interface_only_modules ""
#@ set port_dimension_mismatch_error "TRUE"
#@ set hdlin_elaborate_black_box ""
#@ set hdlin_elaborate_black_box_all_except ""
#@ set hdlin_report_info "TRUE"
#@ set hdlin_report_time 1
#@ set hdlin_report_mem 100
#@ set hdlin_intermediate_file_method "legacy"
#@ set hdlin_sv_enable_rtl_attributes "FALSE"
#@ set hdlin_vhdl_std 2008
#@ set hdlin_vhdl93_concat "TRUE"
#@ set hdlin_vhdl_syntax_extensions "FALSE"
#@ set hdlin_analyze_verbose_mode 0
#@ set hdlin_report_sequential_pruning "FALSE"
#@ set hdlin_sv_enforce_standalone_generate_blocks "TRUE"
#@ set hdlin_vrlg_std 2005
#@ set hdlin_sverilog_std 2017
#@ set hdlin_while_loop_iterations 4096
#@ set hdlin_reporting_level "basic"
#@ set hdlin_autoread_verilog_extensions ".v"
#@ set hdlin_autoread_sverilog_extensions ".sv .sverilog"
#@ set hdlin_autoread_vhdl_extensions ".vhd .vhdl"
#@ set hdlin_autoread_exclude_extensions ""
#@ set hdlin_analyze_prioritize_command_line_defines "TRUE"
#@
#@ set bus_minus_style "-%d"
#@ set hdlin_latch_always_async_set_reset FALSE
#@ set hdlin_ff_always_sync_set_reset FALSE
#@ set hdlin_ff_always_async_set_reset TRUE
#@ set hdlin_always_fsm_complete FALSE
#@ set hdlin_failsafe_fsm TRUE
#@ set hdlin_check_input_netlist FALSE
#@ set hdlin_check_no_latch FALSE
#@ set hdlin_mux_for_array_read_sparseness_limit 90
#@ set hdlin_tic_tic_discards_whitespace TRUE
#@ set hdlin_infer_mux "default"
#@ set hdlin_mux_oversize_ratio 100
#@ set hdlin_mux_size_limit 32
#@ set hdlin_mux_size_only 1
#@ set hdlin_infer_multibit "default_none"
#@ set hdlin_enable_rtldrc_info "false"
#@ set hdlin_enable_ieee_1735_support "true"
#@ set hdlin_interface_port_ABI 2
#@ set hdlin_interface_port_downto "FALSE"
#@ set hdlin_shorten_long_module_name "false"
#@ set hdlin_module_name_limit 256
#@ set hdlin_enable_assertions "FALSE"
#@ set hdlin_enable_configurations "FALSE"
#@ set hdlin_sv_blackbox_modules ""
#@ set hdlin_sv_tokens "FALSE"
#@ set hdlin_enable_persistent_macros "FALSE"
#@ set hdlin_persistent_macros_filename "syn_auto_generated_macro_file.sv"
#@ set hdlin_sv_packages "dont_chain"
#@ set hdlin_verification_priority "FALSE"
#@ set hdlin_enable_elaborate_ref_linking "FALSE"
#@ set hdlin_enable_hier_naming "FALSE"
#@ set hdlin_enable_elaborate_update "true"
#@ set hdlin_vhdl_mixed_language_instantiation "FALSE"
#@ set hdlin_netlist_unloaded_signals "FALSE"
#@ set hdlin_generate_operator_sharing_data "FALSE"
#@ set hdl_preferred_license ""
#@ set hdl_keep_licenses "true"
#@ set hlo_resource_allocation "constraint_driven"
#@ set sdfout_top_instance_name ""
#@ set sdfout_time_scale 1.0
#@ set sdfout_min_rise_net_delay 0.
#@ set sdfout_min_fall_net_delay 0.
#@ set sdfout_min_rise_cell_delay 0.
#@ set sdfout_min_fall_cell_delay 0.
#@ set sdfout_write_to_output "false"
#@ set sdfout_allow_non_positive_constraints "false"
#@ set sdfin_top_instance_name ""
#@ set sdfin_min_rise_net_delay 0.
#@ set sdfin_min_fall_net_delay 0.
#@ set sdfin_min_rise_cell_delay 0.
#@ set sdfin_min_fall_cell_delay 0.
#@ set sdfin_rise_net_delay_type "maximum"
#@ set sdfin_fall_net_delay_type "maximum"
#@ set sdfin_rise_cell_delay_type "maximum"
#@ set sdfin_fall_cell_delay_type "maximum"
#@ set site_info_file ${synopsys_root}/admin/license/site_info
#@ if { [string compare $dc_shell_mode "tcl"] == 0 } {
#@ alias site_info sh cat $site_info_file
#@ } else {
#@ alias site_info "sh cat site_info_file"
#@ }
#@ set template_naming_style "%s_%p"
#@ set template_parameter_style "%s%d"
#@ set template_separator_style "_"
#@ set verilogout_equation "false"
#@ set verilogout_ignore_case "false"
#@ set verilogout_no_tri "false"
#@ set verilogout_inout_is_in "false"
#@ set verilogout_single_bit "false"
#@ set verilogout_higher_designs_first "FALSE"
#@ # set verilogout_levelize "FALSE"
#@ set verilogout_include_files {}
#@ set verilogout_unconnected_prefix "SYNOPSYS_UNCONNECTED_"
#@ set verilogout_show_unconnected_pins "FALSE"
#@ set verilogout_no_negative_index "FALSE"
#@ #set enable_2003.03_verilog_reader TRUE
#@ # to have a net instead of 1'b0 and 1'b1 in inouts:
#@ set verilogout_indirect_inout_connection "FALSE"
#@
#@ # set vhdlout_architecture_name "SYN_%a_%u"
#@ set vhdlout_bit_type "std_logic"
#@ # set vhdlout_bit_type_resolved "TRUE"
#@ set vhdlout_bit_vector_type "std_logic_vector"
#@ # set vhdlout_conversion_functions {}
#@ # set vhdlout_dont_write_types "FALSE"
#@ set vhdlout_equations "FALSE"
#@ set vhdlout_one_name "'1'"
#@ set vhdlout_package_naming_style "CONV_PACK_%d"
#@ set vhdlout_preserve_hierarchical_types "VECTOR"
#@ set vhdlout_separate_scan_in "FALSE"
#@ set vhdlout_single_bit "USER"
#@ set vhdlout_target_simulator ""
#@ set vhdlout_three_state_name "'Z'"
#@ set vhdlout_three_state_res_func ""
#@ # set vhdlout_time_scale 1.0
#@ set vhdlout_top_configuration_arch_name "A"
#@ set vhdlout_top_configuration_entity_name "E"
#@ set vhdlout_top_configuration_name "CFG_TB_E"
#@ set vhdlout_unknown_name "'X'"
#@ set vhdlout_upcase "FALSE"
#@ set vhdlout_use_packages {IEEE.std_logic_1164}
#@ set vhdlout_wired_and_res_func ""
#@ set vhdlout_wired_or_res_func ""
#@ set vhdlout_write_architecture "TRUE"
#@ set vhdlout_write_components "TRUE"
#@ set vhdlout_write_entity "TRUE"
#@ set vhdlout_write_top_configuration "FALSE"
#@ # set vhdlout_synthesis_off "TRUE"
#@ set vhdlout_zero_name "'0'"
#@ #set vhdlout_levelize "FALSE"
#@ set vhdlout_dont_create_dummy_nets "FALSE"
#@ set vhdlout_follow_vector_direction "TRUE"
#@
#@
#@ # vhdl netlist reader variables
#@ set enable_vhdl_netlist_reader "FALSE"
#@
#@ # 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"
#@ # /*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
#@
#@ #
#@ # Gui Variable Group
#@ # used for design_vision and psyn_gui
#@ #
#@ set gui_auto_start 0
#@ set gui_start_option_no_windows 0
#@ group_variable gui_variables "gui_auto_start"
#@ group_variable gui_variables "gui_start_option_no_windows"
#@
#@ #
#@ # If you like emacs, uncomment the next line
#@ # set text_editor_command "emacs -fn 8x13 %s &" ;
#@
#@ # You can delete pairs from this list, but you can't add new ones
#@ # unless you also update the UIL files. So, customers can not add
#@ # dialogs to this list, only Synopsys can do that.
#@ #
#@ set view_independent_dialogs { "test_report" " Test Reports " \
#@ "report_print" " Report " \
#@ "report_options" " Report Options " \
#@ "report_win" " Report Output " \
#@ "manual_page" " Manual Page " }
#@
#@ # if color Silicon Graphics workstation
#@ if { [info exists x11_vendor_string] && [info exists x11_is_color]} {
#@ if { $x11_vendor_string == "Silicon" && $x11_is_color == "true" } {
#@ set x11_set_cursor_foreground "magenta"
#@ set view_use_small_cursor "true"
#@ set view_set_selecting_color "white"
#@ }
#@ }
#@
#@ # if running on an Apollo machine
#@ set found_x11_vendor_string_apollo 0
#@ set found_arch_apollo 0
#@ if { [info exists x11_vendor_string]} {
#@ if { $x11_vendor_string == "Apollo "} {
#@ set found_x11_vendor_string_apollo 1
#@ }
#@ }
#@ if { [info exists arch]} {
#@ if { $arch == "apollo"} {
#@ set found_arch_apollo 1
#@ }
#@ }
#@ if { $found_x11_vendor_string_apollo == 1 || $found_arch_apollo == 1} {
#@ set enable_page_mode "false"
#@ } else {
#@ set enable_page_mode "true"
#@ }
#@
#@ # don't work around this bug on the Apollo
#@ if { $found_x11_vendor_string_apollo == 1} {
#@ set view_extend_thick_lines "false"
#@ } else {
#@ set view_extend_thick_lines "true"
#@ }
#@
#@ #
#@ # Suffix Variable Group:
#@ #
#@ # Suffixes recognized by the Design Analyzer menu in file choices
#@ #
#@ if { $synopsys_program_name == "design_vision" || $synopsys_program_name ==
"psyn_gui" } {
#@ # For star 93040 do NOT include NET in list, 108991 : pdb suffix added
#@ set view_read_file_suffix {db gdb sdb pdb edif eqn fnc lsi mif pla st tdl v
vhd vhdl xnf}
#@ } else {
#@ set view_read_file_suffix {db gdb sdb edif eqn fnc lsi mif NET pla st tdl v
vhd vhdl xnf}
#@ }
#@
#@ set view_analyze_file_suffix {v vhd vhdl}
#@ set view_write_file_suffix {gdb db sdb do edif eqn fnc lsi NET neted pla st
tdl v vhd vhdl xnf}
#@ set view_execute_script_suffix {.script .scr .dcs .dcv .dc .con}
#@ set view_arch_types {sparcOS5 hpux10 rs6000 sgimips}
#@
#@ #
#@ # links_to_layout Variable Group:
#@ #
#@ # These variables affect the read_timing, write_timing
#@ # set_annotated_delay, compile, create_wire_load and reoptimize_design
#@ # commands.
#@ #
#@ if {$synopsys_program_name != "dc_sms_shell"} {
#@ set auto_wire_load_selection "true"
#@ set compile_create_wire_load_table "false"
#@ }
#@ set rtl_load_resistance_factor 0.0
#@
#@ # power Variable Group:
#@ #
#@ # These variables affect the behavior of power optimization and analysis.
#@ #
#@
#@ set power_keep_license_after_power_commands "false"
#@ set power_rtl_saif_file "power_rtl.saif"
#@ set power_sdpd_saif_file "power_sdpd.saif"
#@ set power_preserve_rtl_hier_names "false"
#@ set power_do_not_size_icg_cells "true"
#@ set power_hdlc_do_not_split_cg_cells "false"
#@ set power_cg_flatten "false"
#@ set power_opto_extra_high_dynamic_power_effort "false"
#@ set power_default_static_probability 0.5
#@ set power_default_toggle_rate 0.1
#@ set power_default_toggle_rate_type "fastest_clock"
#@ set power_model_preference "nlpm"
#@ set power_sa_propagation_effort "low"
#@ set power_sa_propagation_verbose "false"
#@ set power_fix_sdpd_annotation "true"
#@ set power_fix_sdpd_annotation_verbose "false"
#@ set power_sdpd_message_tolerance 0.00001
#@ set do_operand_isolation "false"
#@ set power_cg_module_naming_style ""
#@ set power_cg_cell_naming_style ""
#@ set power_cg_gated_clock_net_naming_style ""
#@ set power_rclock_use_asynch_inputs "false"
#@ set power_rclock_inputs_use_clocks_fanout "true"
#@ set power_rclock_unrelated_use_fastest "true"
#@ set power_lib2saif_rise_fall_pd "false"
#@ set power_min_internal_power_threshold ""
#@
#@
#@ # SystemC related variables
#@ set systemcout_levelize "true"
#@ set systemcout_debug_mode "false"
#@
#@ # ACS Variables
#@ if { [info exists acs_work_dir] } {
#@ set acs_area_report_suffix "area"
#@ set acs_autopart_max_area "0.0"
#@ set acs_autopart_max_percent "0.0"
#@ set acs_budgeted_cstr_suffix "con"
#@ set acs_compile_script_suffix "autoscr"
#@ set acs_constraint_file_suffix "con"
#@ set acs_cstr_report_suffix "cstr"
#@ set acs_db_suffix "db"
#@ set acs_dc_exec ""
#@ set acs_default_pass_name "pass"
#@ set acs_exclude_extensions {}
#@ set acs_exclude_list [list $synopsys_root]
#@ set acs_global_user_compile_strategy_script "default"
#@ set acs_hdl_verilog_define_list {}
#@ set acs_hdl_source {}
#@ set acs_lic_wait 0
#@ set acs_log_file_suffix "log"
#@ set acs_make_args "set acs_make_args"
#@ set acs_make_exec "gmake"
#@ set acs_makefile_name "Makefile"
#@ set acs_num_parallel_jobs 1
#@ set acs_override_report_suffix "report"
#@ set acs_override_script_suffix "scr"
#@ set acs_qor_report_suffix "qor"
#@ set acs_timing_report_suffix "tim"
#@ set acs_use_autopartition "false"
#@ set acs_use_default_delays "false"
#@ set acs_user_budgeting_script "budget.scr"
#@ set acs_user_compile_strategy_script_suffix "compile"
#@ set acs_verilog_extensions {.v}
#@ set acs_vhdl_extensions {.vhd}
#@ set acs_work_dir [pwd]
#@ set check_error_list [list \
#@ CMD-004 CMD-006 CMD-007 CMD-008 CMD-009 CMD-010 CMD-011 CMD-012 \
#@ CMD-014 CMD-015 CMD-016 CMD-019 CMD-026 CMD-031 CMD-037 \
#@ DB-1 \
#@ DCSH-11 \
#@ DES-001 \
#@ ACS-193 \
#@ FILE-1 FILE-2 FILE-3 FILE-4 \
#@ LINK-7 LINT-7 LINT-20 LNK-023 \
#@ OPT-100 OPT-101 OPT-102 OPT-114 OPT-124 OPT-127 OPT-128 OPT-155 \
#@ OPT-157 OPT-181 OPT-462 \
#@ UI-11 UI-14 UI-15 UI-16 UI-17 UI-19 UI-20 UI-21 UI-22 UI-23 UI-40 \
#@ UI-41 \
#@ UID-4 UID-6 UID-7 UID-8 UID-9 UID-13 UID-14 UID-15 UID-19 UID-20 \
#@ UID-25 UID-27 UID-28 UID-29 UID-30 UID-32 UID-58 UID-87 UID-103 \
#@ UID-109 UID-270 UID-272 UID-403 UID-440 UID-444 \
#@ UIO-2 UIO-3 UIO-4 UIO-25 UIO-65 UIO-66 UIO-75 UIO-94 UIO-95 \
#@ EQN-6 EQN-11 EQN-15 EQN-16 EQN-18 EQN-20 \
#@ ]
#@ set ilm_preserve_core_constraints "false"
#@ }
#@
#@ #
#@ #
#@ # DesignTime Variable Group
#@ #
#@ # The variables which affect the DesignTime timing engine
#@ #
#@
#@ set case_analysis_log_file ""
#@ set case_analysis_sequential_propagate "false"
#@ set create_clock_no_input_delay "false"
#@ set disable_auto_time_borrow "false"
#@ set disable_case_analysis "false"
#@ set disable_conditional_mode_analysis "false"
#@ set disable_library_transition_degradation "false"
#@ set dont_bind_unused_pins_to_logic_constant "false"
#@ set enable_slew_degradation "true"
#@ set high_fanout_net_pin_capacitance 1.000000
#@ set high_fanout_net_threshold 1000
#@ set lib_thresholds_per_lib "true"
#@ set rc_adjust_rd_when_less_than_rnet "true"
#@ set rc_ceff_delay_min_diff_ps 0.250000
#@ set rc_degrade_min_slew_when_rd_less_than_rnet "false"
#@ set rc_driver_model_max_error_pct 0.160000
#@ set rc_filter_rd_less_than_rnet "true"
#@ set rc_input_threshold_pct_fall 50.000000
#@ set rc_input_threshold_pct_rise 50.000000
#@ set rc_output_threshold_pct_fall 50.000000
#@ set rc_output_threshold_pct_rise 50.000000
#@ set rc_rd_less_than_rnet_threshold 0.450000
#@ set rc_slew_derate_from_library 1.000000
#@ set rc_slew_lower_threshold_pct_fall 20.000000
#@ set rc_slew_lower_threshold_pct_rise 20.000000
#@ set rc_slew_upper_threshold_pct_fall 80.000000
#@ set rc_slew_upper_threshold_pct_rise 80.000000
#@ set timing_disable_cond_default_arcs "false"
#@ #timing_enable_multiple_clocks_per_reg is on by default
#@ #set timing_enable_multiple_clocks_per_reg "false"
#@ set timing_report_attributes {dont_touch dont_use map_only size_only ideal_net
infeasible_paths}
#@ set timing_self_loops_no_skew "false"
#@ set when_analysis_permitted "true"
#@ set when_analysis_without_case_analysis "false"
#@
#@
#@ #
#@ # Variable Group Definitions:
#@ #
#@ # The group_variable() command groups variables for display
#@ # in the "File/Defaults" dialog and defines groups of variables
#@ # for the list() command.
#@ #
#@
#@ set enable_instances_in_report_net "true"
#@ # Set report options env variables
#@ set view_report_interactive "true"
#@ set view_report_output2file "false"
#@ set view_report_append "true"
#@
#@ if { $synopsys_program_name != "ptxr" } {
#@
#@ group_variable report_variables "enable_instances_in_report_net"
#@ group_variable report_variables "view_report_interactive"
#@ group_variable report_variables "view_report_output2file"
#@ group_variable report_variables "view_report_append"
#@
#@ # "links_to_layout" variables are used by multiple commands
#@ # auto_wire_load_selection is also in the "compile" variable group.
#@ group_variable links_to_layout "auto_wire_load_selection"
#@
#@ # variables starting with "compile" are also in the compile variable group
#@ group_variable links_to_layout
"compile_dont_touch_annotated_cell_during_inplace_opt"
#@
#@ group_variable links_to_layout
"compile_update_annotated_delays_during_inplace_opt"
#@ group_variable links_to_layout "compile_create_wire_load_table"
#@
#@ group_variable links_to_layout "reoptimize_design_changed_list_file_name"
#@ group_variable links_to_layout "sdfout_allow_non_positive_constraints"
#@
#@ } ;# $synopsys_program_name != "ptxr"
#@
#@ #
#@ # to find the XErrorDB and XKeySymDB for X11 file
#@ set motif_files ${synopsys_root}/admin/setup
#@ # set filename for logging input file
#@ set filename_log_file "filenames.log"
#@ # whether to delete the filename log after the normal exits
#@ set exit_delete_filename_log_file "true"
#@
#@ # executable to fire off RTLA/BCV
#@ set xterm_executable "xterm"
#@
#@ if { $synopsys_program_name != "ptxr" } {
#@
#@ # "system" variables are used by multiple commands
#@ group_variable system auto_link_disable
#@ group_variable system auto_link_options
#@ group_variable system command_log_file
#@ group_variable system company
#@ group_variable system compatibility_version
#@
#@ if { [string compare $dc_shell_mode "default"] == 0 } {
#@ group_variable system "current_design"
#@ group_variable system "current_instance"
#@ group_variable system "dc_shell_status"
#@ } else {
#@ set current_design ""
#@ set current_instance ""
#@ group_variable system "current_design"
#@ group_variable system "current_instance"
#@ }
#@
#@ group_variable system "designer"
#@ group_variable system "echo_include_commands"
#@ group_variable system "enable_page_mode"
#@ group_variable system "change_names_update_inst_tree"
#@ group_variable system "change_names_dont_change_bus_members"
#@ group_variable system "default_name_rules"
#@ group_variable system "verbose_messages"
#@ group_variable system "link_library"
#@ group_variable system "link_force_case"
#@ group_variable system "search_path"
#@ group_variable system "synthetic_library"
#@ group_variable system "target_library"
#@ group_variable system "uniquify_naming_style"
#@ group_variable system "suppress_errors"
#@ group_variable system "find_converts_name_lists"
#@ group_variable system "filename_log_file"
#@ group_variable system "exit_delete_filename_log_file"
#@ group_variable system "syntax_check_status"
#@ group_variable system "context_check_status"
#@
#@ #/* "compile" variables are used by the compile command */
#@ group_variable compile "compile_assume_fully_decoded_three_state_busses"
#@ group_variable compile "compile_no_new_cells_at_top_level"
#@ group_variable compile
"compile_dont_touch_annotated_cell_during_inplace_opt"
#@ group_variable compile "reoptimize_design_changed_list_file_name"
#@ group_variable compile "compile_create_wire_load_table"
#@ group_variable compile "compile_update_annotated_delays_during_inplace_opt"
#@ group_variable compile "compile_instance_name_prefix"
#@ group_variable compile "compile_instance_name_suffix"
#@ group_variable compile "compile_negative_logic_methodology"
#@ group_variable compile "compile_disable_hierarchical_inverter_opt"
#@
#@ group_variable compile "port_complement_naming_style"
#@ group_variable compile "auto_wire_load_selection"
#@ group_variable compile "rtl_load_resistance_factor"
#@ group_variable compile "compile_implementation_selection"
#@ group_variable compile "compile_use_low_timing_effort"
#@ group_variable compile "compile_fix_cell_degradation"
#@ group_variable compile "compile_preserve_subdesign_interfaces"
#@ group_variable compile
"compile_enable_constant_propagation_with_no_boundary_opt"
#@ group_variable compile "compile_delete_unloaded_sequential_cells"
#@ group_variable compile "enable_recovery_removal_arcs"
#@ group_variable compile "compile_checkpoint_phases"
#@ group_variable compile "compile_cpu_limit"
#@ group_variable compile "compile_top_all_paths"
#@ group_variable compile "compile_top_all_paths"
#@ group_variable compile "compile_top_acs_partition"
#@ group_variable compile "default_port_connection_class"
#@ group_variable compile "compile_retime_license_behavior"
#@ group_variable compile "dont_touch_nets_with_size_only_cells"
#@ group_variable compile "compile_seqmap_no_scan_cell"
#@
#@ if { $synopsys_program_name == "dc_shell" &&
[shell_is_in_topographical_mode] } {
#@ group_variable compile "dct_prioritize_area_correlation"
#@ group_variable compile "compile_error_on_missing_physical_cells"
#@ }
#@
#@ # "multibit" variables are used by the the multibit mapping functionality
#@
#@ group_variable multibit "bus_multiple_separator_style"
#@
#@ # "ilm" variables are used by Interface Logic Model functionality
#@
#@ group_variable ilm "ilm_ignore_percentage"
#@
#@ # "estimate" variables are used by the estimate command
#@ # The estimate command also recognizes the "compile" variables.
#@ group_variable estimate "estimate_resource_preference"
#@
#@ # "synthetic_library" variables
#@ group_variable synlib "cache_dir_chmod_octal"
#@ group_variable synlib "cache_file_chmod_octal"
#@ group_variable synlib "cache_read"
#@ group_variable synlib "cache_read_info"
#@ group_variable synlib "cache_write"
#@ group_variable synlib "cache_write_info"
#@ group_variable synlib "synlib_dont_get_license"
#@ group_variable synlib "synlib_wait_for_design_license"
#@ group_variable synlib "synthetic_library"
#@
#@ # "insert_dft" variables are used by the insert_dft and preview_dft commands
#@ #group_variable insert_dft "test_default_client_order"
#@ group_variable insert_dft "insert_dft_clean_up"
#@ group_variable insert_dft "insert_test_design_naming_style"
#@ group_variable insert_dft "test_clock_port_naming_style"
#@ group_variable insert_dft "test_default_min_fault_coverage"
#@ group_variable insert_dft "test_scan_clock_a_port_naming_style"
#@ group_variable insert_dft "test_scan_clock_b_port_naming_style"
#@ group_variable insert_dft "test_scan_clock_port_naming_style"
#@ group_variable insert_dft "test_scan_enable_inverted_port_naming_style"
#@ group_variable insert_dft "test_scan_enable_port_naming_style"
#@ group_variable insert_dft "test_scan_in_port_naming_style"
#@ group_variable insert_dft "test_scan_out_port_naming_style"
#@ group_variable insert_dft "test_non_scan_clock_port_naming_style"
#@ group_variable insert_dft "test_dedicated_subdesign_scan_outs"
#@ group_variable insert_dft "test_disable_find_best_scan_out"
#@ group_variable insert_dft "test_dont_fix_constraint_violations"
#@ group_variable insert_dft "test_isolate_hier_scan_out"
#@ group_variable insert_dft "test_mode_port_naming_style"
#@ group_variable insert_dft "test_mode_port_inverted_naming_style"
#@ group_variable insert_dft "compile_dont_use_dedicated_scanout"
#@ group_variable insert_dft "test_mux_constant_si"
#@
#@ # "preview_scan" variables are used by the preview_scan command
#@ group_variable preview_scan "test_preview_scan_shows_cell_types"
#@ group_variable preview_scan "test_scan_link_so_lockup_key"
#@ group_variable preview_scan "test_scan_link_wire_key"
#@ group_variable preview_scan "test_scan_segment_key"
#@ group_variable preview_scan "test_scan_true_key"
#@
#@ # "bsd" variables are used by the check_bsd and write_bsdl commands
#@ group_variable bsd "test_user_test_data_register_naming_style"
#@ group_variable bsd "test_user_defined_instruction_naming_style"
#@ group_variable bsd "test_bsdl_default_suffix_name"
#@ group_variable bsd "test_bsdl_max_line_length"
#@ group_variable bsd "test_cc_ir_masked_bits"
#@ group_variable bsd "test_cc_ir_value_of_masked_bits"
#@
#@ group_variable bsd "test_bsd_allow_tolerable_violations"
#@ group_variable bsd "test_bsd_optimize_control_cell"
#@ group_variable bsd "test_bsd_control_cell_drive_limit"
#@ group_variable bsd "test_bsd_manufacturer_id"
#@ group_variable bsd "test_bsd_part_number"
#@ group_variable bsd "test_bsd_version_number"
#@ group_variable bsd "bsd_max_in_switching_limit"
#@ group_variable bsd "bsd_max_out_switching_limit"
#@
#@ # testmanager variables
#@ group_variable testmanager "multi_pass_test_generation"
#@
#@ # "testsim" variables
#@ # group_variable testsim "testsim_print_stats_file"
#@
#@ # "test" variables
#@ group_variable test "test_default_bidir_delay"
#@ group_variable test "test_default_delay"
#@ group_variable test "test_default_period"
#@ group_variable test "test_default_strobe"
#@ group_variable test "test_default_strobe_width"
#@ group_variable test "test_capture_clock_skew"
#@ group_variable test "test_allow_clock_reconvergence"
#@ group_variable test "test_check_port_changes_in_capture"
#@ group_variable test "test_stil_max_line_length"
#@ group_variable test "test_infer_slave_clock_pulse_after_capture"
#@ group_variable test "test_rtldrc_latch_check_style"
#@ group_variable test "test_enable_capture_checks"
#@
#@ # "write_test" variables are used by the write_test command
#@ group_variable write_test "write_test_formats"
#@ group_variable write_test "write_test_include_scan_cell_info"
#@ group_variable write_test "write_test_input_dont_care_value"
#@ group_variable write_test "write_test_max_cycles"
#@ group_variable write_test "write_test_max_scan_patterns"
#@ group_variable write_test "write_test_pattern_set_naming_style"
#@ group_variable write_test "write_test_scan_check_file_naming_style"
#@ group_variable write_test "write_test_vector_file_naming_style"
#@ group_variable write_test "write_test_round_timing_values"
#@
#@ group_variable view "test_design_analyzer_uses_insert_scan"
#@
#@ # "io" variables are used by the read, read_lib, db2sge and write commands
#@ group_variable io "bus_inference_descending_sort"
#@ group_variable io "bus_inference_style"
#@ #group_variable io "db2sge_output_directory"
#@ #group_variable io "db2sge_scale"
#@ #group_variable io "db2sge_overwrite"
#@ #group_variable io "db2sge_display_symbol_names"
#@ #group_variable io "db2sge_display_pin_names"
#@ #group_variable io "db2sge_display_instance_names"
#@ #group_variable io "db2sge_use_bustaps"
#@ #group_variable io "db2sge_use_compound_names"
#@ #group_variable io "db2sge_bit_type"
#@ #group_variable io "db2sge_bit_vector_type"
#@ #group_variable io "db2sge_one_name"
#@ #group_variable io "db2sge_zero_name"
#@ #group_variable io "db2sge_unknown_name"
#@ #group_variable io "db2sge_target_xp"
#@ #group_variable io "db2sge_tcf_package_file"
#@ #group_variable io "db2sge_use_lib_section"
#@ #group_variable io "db2sge_script"
#@ #group_variable io "db2sge_command"
#@
#@ # group_variable io "equationout_and_sign"
#@ # group_variable io "equationout_or_sign"
#@ # group_variable io "equationout_postfix_negation"
#@
#@ # group_variable io "lsiin_net_name_prefix"
#@ # group_variable io "lsiout_inverter_cell"
#@ # group_variable io "lsiout_upcase"
#@
#@ #group_variable io "mentor_bidirect_value"
#@ #group_variable io "mentor_do_path"
#@ #group_variable io "mentor_input_output_property_name"
#@ #group_variable io "mentor_input_value"
#@ #group_variable io "mentor_logic_one_value"
#@ #group_variable io "mentor_logic_zero_one_property_name"
#@ #group_variable io "mentor_logic_zero_value"
#@ #group_variable io "mentor_output_value"
#@ #group_variable io "mentor_primitive_property_name"
#@ #group_variable io "mentor_primitive_property_value"
#@ #group_variable io "mentor_reference_property_name"
#@ #group_variable io "mentor_search_path"
#@ #group_variable io "mentor_write_symbols"
#@ # group_variable io "pla_read_create_flip_flop"
#@ # group_variable io "tdlout_upcase"
#@ group_variable io "write_name_nets_same_as_ports"
#@
#@ # # [wjchen] 2006/08/14: The following 4 variables are obsoleted for DC
simpilification.
#@
#@ # group_variable io "xnfout_constraints_per_endpoint"
#@ # group_variable io "xnfout_default_time_constraints"
#@ # group_variable io "xnfout_clock_attribute_style"
#@ # group_variable io "xnfout_library_version"
#@
#@ # # [wjchen] 2006/08/11: The following 8 variables are obsoleted for DC
simpilification.
#@ # group_variable io "xnfin_family"
#@ # group_variable io "xnfin_ignore_pins"
#@ # group_variable io "xnfin_dff_reset_pin_name"
#@ # group_variable io "xnfin_dff_set_pin_name"
#@ # group_variable io "xnfin_dff_clock_enable_pin_name"
#@ # group_variable io "xnfin_dff_data_pin_name"
#@ # group_variable io "xnfin_dff_clock_pin_name" ;
#@ # group_variable io "xnfin_dff_q_pin_name";
#@
#@ group_variable io "sdfin_min_rise_net_delay" ;
#@ group_variable io "sdfin_min_fall_net_delay" ;
#@ group_variable io "sdfin_min_rise_cell_delay" ;
#@ group_variable io "sdfin_min_fall_cell_delay" ;
#@ group_variable io "sdfin_rise_net_delay_type" ;
#@ group_variable io "sdfin_fall_net_delay_type" ;
#@ group_variable io "sdfin_rise_cell_delay_type" ;
#@ group_variable io "sdfin_fall_cell_delay_type" ;
#@ group_variable io "sdfin_top_instance_name" ;
#@ group_variable io "sdfout_time_scale" ;
#@ group_variable io "sdfout_write_to_output" ;
#@ group_variable io "sdfout_top_instance_name" ;
#@ group_variable io "sdfout_min_rise_net_delay" ;
#@ group_variable io "sdfout_min_fall_net_delay" ;
#@ group_variable io "sdfout_min_rise_cell_delay" ;
#@ group_variable io "sdfout_min_fall_cell_delay" ;
#@ group_variable io "read_db_lib_warnings" ;
#@ group_variable io "read_translate_msff" ;
#@ group_variable io "libgen_max_differences" ;
#@
#@ # #[wjchen] 2006/08/22: The following variables are hidden for XG mode for DC
simpilification.
#@ # group_variable io "read_name_mapping_nowarn_libraries" ;
#@ # group_variable io "write_name_mapping_nowarn_libraries" ;
#@
#@
#@ # "edif" variables are used by the EDIF format read, read_lib, write,
#@ # and write_lib commands
#@ # group_variable edif "bus_dimension_separator_style" ;
#@ # group_variable edif "bus_extraction_style" ;
#@ group_variable edif "bus_inference_descending_sort" ;
#@ group_variable edif "bus_inference_style" ;
#@ group_variable edif "bus_naming_style" ;
#@ group_variable edif "bus_range_separator_style" ;
#@ # group_variable edif "edifin_autoconnect_offpageconnectors" ;
#@ # group_variable edif "edifin_autoconnect_ports" ;
#@ # group_variable edif "edifin_delete_empty_cells" ;
#@ # group_variable edif "edifin_delete_ripper_cells" ;
#@ # group_variable edif "edifin_ground_net_name" ;
#@ # group_variable edif "edifin_ground_net_property_name" ;
#@ # group_variable edif "edifin_ground_net_property_value" ;
#@ # group_variable edif "edifin_ground_port_name" ;
#@ # group_variable edif "edifin_instance_property_name" ;
#@ # group_variable edif "edifin_portinstance_disabled_property_name" ;
#@ # group_variable edif "edifin_portinstance_disabled_property_value" ;
#@ # group_variable edif "edifin_portinstance_property_name" ;
#@ # group_variable edif "edifin_power_net_name" ;
#@ # group_variable edif "edifin_power_net_property_name" ;
#@ # group_variable edif "edifin_power_net_property_value" ;
#@ # group_variable edif "edifin_power_port_name" ;
#@ # group_variable edif "edifin_use_identifier_in_rename" ;
#@ # group_variable edif "edifin_view_identifier_property_name" ;
#@ # group_variable edif "edifin_dc_script_flag" ;
#@ # group_variable edif "edifin_lib_logic_1_symbol" ;
#@ # group_variable edif "edifin_lib_logic_0_symbol" ;
#@ # group_variable edif "edifin_lib_in_port_symbol" ;
#@ # group_variable edif "edifin_lib_out_port_symbol" ;
#@ # group_variable edif "edifin_lib_inout_port_symbol" ;
#@ # group_variable edif "edifin_lib_in_osc_symbol" ;
#@ # group_variable edif "edifin_lib_out_osc_symbol" ;
#@ # group_variable edif "edifin_lib_inout_osc_symbol" ;
#@ # group_variable edif "edifin_lib_mentor_netcon_symbol" ;
#@ # group_variable edif "edifin_lib_ripper_bits_property" ;
#@ # group_variable edif "edifin_lib_ripper_bus_end" ;
#@ # group_variable edif "edifin_lib_ripper_cell_name" ;
#@ # group_variable edif "edifin_lib_ripper_view_name" ;
#@ # group_variable edif "edifin_lib_route_grid" ;
#@ # group_variable edif "edifin_lib_templates" ;
#@ # group_variable edif "edifout_dc_script_flag" ;
#@ # group_variable edif "edifout_design_name" ;
#@ # group_variable edif "edifout_designs_library_name" ;
#@ # group_variable edif "edifout_display_instance_names" ;
#@ # group_variable edif "edifout_display_net_names" ;
#@ # group_variable edif "edifout_external" ;
#@ # group_variable edif "edifout_external_graphic_view_name" ;
#@ # group_variable edif "edifout_external_netlist_view_name" ;
#@ # group_variable edif "edifout_external_schematic_view_name" ;
#@ # group_variable edif "edifout_ground_name" ;
#@ # group_variable edif "edifout_ground_net_name" ;
#@ # group_variable edif "edifout_ground_net_property_name" ;
#@ # group_variable edif "edifout_ground_net_property_value" ;
#@ # group_variable edif "edifout_ground_pin_name" ;
#@ # group_variable edif "edifout_ground_port_name" ;
#@ # group_variable edif "edifout_instance_property_name" ;
#@ # group_variable edif "edifout_instantiate_ports" ;
#@ # group_variable edif "edifout_library_graphic_view_name" ;
#@ # group_variable edif "edifout_library_netlist_view_name" ;
#@ # group_variable edif "edifout_library_schematic_view_name" ;
#@ # group_variable edif "edifout_merge_libraries" ;
#@ # group_variable edif "edifout_multidimension_arrays" ;
#@ # group_variable edif "edifout_name_oscs_different_from_ports" ;
#@ # group_variable edif "edifout_name_rippers_same_as_wires" ;
#@ # group_variable edif "edifout_netlist_only" ;
#@ # group_variable edif "edifout_no_array" ;
#@ # group_variable edif "edifout_numerical_array_members" ;
#@ # group_variable edif "edifout_pin_direction_property_name" ;
#@ # group_variable edif "edifout_pin_direction_in_value" ;
#@ # group_variable edif "edifout_pin_direction_inout_value" ;
#@ # group_variable edif "edifout_pin_direction_out_value" ;
#@ # group_variable edif "edifout_pin_name_property_name" ;
#@ # group_variable edif "edifout_portinstance_disabled_property_name" ;
#@ # group_variable edif "edifout_portinstance_disabled_property_value" ;
#@ # group_variable edif "edifout_portinstance_property_name"
#@ # group_variable edif "edifout_power_and_ground_representation"
#@ # group_variable edif "edifout_power_name"
#@ # group_variable edif "edifout_power_net_name"
#@ # group_variable edif "edifout_power_net_property_name"
#@ # group_variable edif "edifout_power_net_property_value"
#@ # group_variable edif "edifout_power_pin_name"
#@ # group_variable edif "edifout_power_port_name"
#@ # group_variable edif "edifout_skip_port_implementations"
#@ # group_variable edif "edifout_target_system"
#@ # group_variable edif "edifout_top_level_symbol"
#@ # group_variable edif "edifout_translate_origin"
#@ # group_variable edif "edifout_unused_property_value"
#@ # group_variable edif "edifout_write_attributes"
#@ # group_variable edif "edifout_write_constraints"
#@ # group_variable edif "edifout_write_properties_list"
#@ # group_variable edif "write_name_nets_same_as_ports"
#@
#@ # "hdl" variables are variables pertaining to hdl reading and optimizing
#@ group_variable hdl "hdlin_unified_rtl_read"
#@ group_variable hdl "hdlin_vcs_home"
#@ group_variable hdl "hdlin_legacy_naming"
#@ group_variable hdl "bus_dimension_separator_style"
#@ group_variable hdl "bus_minus_style"
#@ group_variable hdl "bus_naming_style"
#@ group_variable hdl "hdlin_ignore_textio_constructs"
#@ group_variable hdl "hdlin_latch_always_async_set_reset"
#@ group_variable hdl "hdlin_ff_always_sync_set_reset"
#@ group_variable hdl "hdlin_ff_always_async_set_reset"
#@ group_variable hdl "hdlin_always_fsm_complete"
#@ group_variable hdl "hdlin_failsafe_fsm"
#@ group_variable hdl "hdlin_check_input_netlist"
#@ group_variable hdl "hdlin_check_no_latch"
#@ group_variable hdl "hdlin_tic_tic_discards_whitespace"
#@ group_variable hdl "hdlin_reporting_level"
#@ group_variable hdl "hdlin_infer_mux"
#@ group_variable hdl "hdlin_mux_oversize_ratio"
#@ group_variable hdl "hdlin_mux_size_limit"
#@ group_variable hdl "hdlin_infer_multibit"
#@ group_variable hdl "hdl_preferred_license"
#@ group_variable hdl "hdl_keep_licenses"
#@ group_variable hdl "hlo_resource_allocation"
#@ group_variable hdl "template_naming_style"
#@ group_variable hdl "template_parameter_style"
#@ group_variable hdl "template_separator_style"
#@ group_variable hdl "verilogout_equation"
#@ group_variable hdl "verilogout_ignore_case"
#@ group_variable hdl "verilogout_no_tri"
#@ group_variable hdl "verilogout_inout_is_in"
#@ group_variable hdl "verilogout_single_bit"
#@ group_variable hdl "verilogout_higher_designs_first"
#@ # group_variable hdl "verilogout_levelize"
#@ group_variable hdl "verilogout_include_files"
#@ group_variable hdl "verilogout_unconnected_prefix"
#@ group_variable hdl "verilogout_show_unconnected_pins"
#@ group_variable hdl "verilogout_no_negative_index"
#@ group_variable hdl "hdlin_enable_rtldrc_info"
#@ group_variable hdl "hdlin_sv_blackbox_modules"
#@ group_variable hdl "hdlin_sv_enable_rtl_attributes"
#@ group_variable hdl "hdlin_enable_hier_map"
#@ group_variable hdl "hdlin_sv_interface_only_modules"
#@ group_variable hdl "hdlin_port_dimension_mismatch_error"
#@ group_variable hdl "hdlin_intermediate_file_method"
#@ group_variable hdl "hdlin_infer_function_local_latches"
#@ group_variable hdl "hdlin_infer_local_sync_enable_only"
#@ group_variable hdl "hdlin_module_arch_name_splitting"
#@ group_variable hdl "hdlin_mux_size_min"
#@ group_variable hdl "hdlin_prohibit_nontri_multiple_drivers"
#@ group_variable hdl "hdlin_subprogram_default_values"
#@ group_variable hdl "hdlin_upcase_names"
#@ group_variable hdl "hdlin_vhdl_std"
#@ group_variable hdl "hdlin_vhdl93_concat"
#@ group_variable hdl "hdlin_vhdl_syntax_extensions"
#@ group_variable hdl "hdlin_sv_enforce_standalone_generate_blocks"
#@ group_variable hdl "hdlin_vrlg_std"
#@ group_variable hdl "hdlin_while_loop_iterations"
#@ group_variable hdl "hdlin_auto_save_templates"
#@ group_variable hdl "hdlin_elab_errors_deep"
#@ group_variable hdl "hdlin_enable_assertions"
#@ group_variable hdl "hdlin_enable_configurations"
#@ group_variable hdl "hdlin_field_naming_style"
#@ group_variable hdl "hdlin_generate_naming_style"
#@ group_variable hdl "hdlin_generate_separator_style"
#@ group_variable hdl "hdlin_enable_relative_placement"
#@ group_variable hdl "hdlin_mux_rp_limit"
#@ group_variable hdl "hdlin_keep_signal_name"
#@ group_variable hdl "hdlin_module_name_limit"
#@ group_variable hdl "hdlin_mux_size_only"
#@ group_variable hdl "hdlin_preserve_sequential"
#@ group_variable hdl "hdlin_presto_cell_name_prefix"
#@ group_variable hdl "hdlin_presto_net_name_prefix"
#@ group_variable hdl "hdlin_strict_verilog_reader"
#@ group_variable hdl "hdlin_shorten_long_module_name"
#@ group_variable hdl "hdlin_sv_packages"
#@ group_variable hdl "hdlin_sv_tokens"
#@ group_variable hdl "hdlin_enable_elaborate_ref_linking"
#@ group_variable hdl "hdlin_enable_hier_naming"
#@ group_variable hdl "hdlin_enable_elaborate_update"
#@ group_variable hdl "hdlin_autoread_verilog_extensions"
#@ group_variable hdl "hdlin_autoread_sverilog_extensions"
#@ group_variable hdl "hdlin_autoread_vhdl_extensions"
#@ group_variable hdl "hdlin_autoread_exclude_extensions"
#@ group_variable hdl "hdlin_naming_register_suffix_on_field"
#@ group_variable hdl "hdlin_enable_upf_compatible_naming"
#@ group_variable hdl "hdlin_report_sequential_pruning"
#@ group_variable hdl "hdlin_analyze_verbose_mode"
#@ group_variable hdl "hdlin_enable_ieee_1735_support"
#@ group_variable hdl "hdlin_netlist_unloaded_signals"
#@ group_variable hdl "hdlin_report_info"
#@ group_variable hdl "hdlin_report_time"
#@ group_variable hdl "hdlin_report_mem"
#@ group_variable hdl "hdlin_analyze_prioritize_command_line_defines"
#@
#@ # "vhdlio" variables are variables pertaining to VHDL generation
#@ group_variable vhdlio "vhdllib_timing_mesg"
#@ group_variable vhdlio "vhdllib_timing_xgen"
#@ group_variable vhdlio "vhdllib_timing_checks"
#@ group_variable vhdlio "vhdllib_negative_constraint"
#@ group_variable vhdlio "vhdllib_pulse_handle"
#@ group_variable vhdlio "vhdllib_glitch_handle"
#@ group_variable vhdlio "vhdllib_architecture"
#@ group_variable vhdlio "vhdllib_tb_compare"
#@ group_variable vhdlio "vhdllib_tb_x_eq_dontcare"
#@ group_variable vhdlio "vhdllib_logic_system"
#@ group_variable vhdlio "vhdllib_logical_name"
#@
#@ # group_variable vhdlio "vhdlout_architecture_name"
#@ group_variable vhdlio "vhdlout_bit_type"
#@ # group_variable vhdlio "vhdlout_bit_type_resolved"
#@ group_variable vhdlio "vhdlout_bit_vector_type"
#@ # group_variable vhdlio "vhdlout_conversion_functions"
#@ # group_variable vhdlio "vhdlout_dont_write_types"
#@ group_variable vhdlio "vhdlout_equations"
#@ group_variable vhdlio "vhdlout_one_name"
#@ group_variable vhdlio "vhdlout_package_naming_style"
#@ group_variable vhdlio "vhdlout_preserve_hierarchical_types"
#@ group_variable vhdlio "vhdlout_separate_scan_in"
#@ group_variable vhdlio "vhdlout_single_bit"
#@ group_variable vhdlio "vhdlout_target_simulator"
#@ group_variable vhdlio "vhdlout_top_configuration_arch_name"
#@ group_variable vhdlio "vhdlout_top_configuration_entity_name"
#@ group_variable vhdlio "vhdlout_top_configuration_name"
#@ group_variable vhdlio "vhdlout_three_state_name"
#@ group_variable vhdlio "vhdlout_three_state_res_func"
#@ # group_variable vhdlio "vhdlout_time_scale"
#@ group_variable vhdlio "vhdlout_unknown_name"
#@ group_variable vhdlio "vhdlout_use_packages"
#@ group_variable vhdlio "vhdlout_wired_and_res_func"
#@ group_variable vhdlio "vhdlout_wired_or_res_func"
#@ group_variable vhdlio "vhdlout_write_architecture"
#@ group_variable vhdlio "vhdlout_write_entity"
#@ group_variable vhdlio "vhdlout_write_top_configuration"
#@ # group_variable vhdlio "vhdlout_synthesis_off"
#@ group_variable vhdlio "vhdlout_write_components"
#@ group_variable vhdlio "vhdlout_zero_name"
#@ # group_variable vhdlio "vhdlout_levelize"
#@ group_variable vhdlio "vhdlout_dont_create_dummy_nets"
#@ group_variable vhdlio "vhdlout_follow_vector_direction"
#@
#@ # "suffix" variables are used to find the suffixes of different file types
#@ group_variable suffix "view_execute_script_suffix"
#@ group_variable suffix "view_read_file_suffix"
#@ group_variable suffix "view_analyze_file_suffix"
#@ group_variable suffix "view_write_file_suffix"
#@
#@ # Meenakshi: Added new group scc (for SystemC compiler)
#@ group_variable scc {systemcout_levelize}
#@ group_variable scc {systemcout_debug_mode}
#@
#@ # "power" variables are for power-analysis.
#@ group_variable power {power_keep_license_after_power_commands}
#@ group_variable power {power_preserve_rtl_hier_names}
#@ group_variable power {power_do_not_size_icg_cells}
#@ group_variable power {power_hdlc_do_not_split_cg_cells}
#@ group_variable power {power_rtl_saif_file}
#@ group_variable power {power_sdpd_saif_file}
#@ group_variable power {power_cg_flatten}
#@ group_variable power {power_opto_extra_high_dynamic_power_effort}
#@ group_variable power {power_default_static_probability}
#@ group_variable power {power_default_toggle_rate}
#@ group_variable power {power_default_toggle_rate_type}
#@ group_variable power {power_model_preference}
#@ group_variable power {power_sa_propagation_effort}
#@ group_variable power {power_sa_propagation_verbose}
#@ group_variable power {power_fix_sdpd_annotation}
#@ group_variable power {power_fix_sdpd_annotation_verbose}
#@ group_variable power {power_sdpd_message_tolerance}
#@ group_variable power {power_rclock_use_asynch_inputs}
#@ group_variable power {power_rclock_inputs_use_clocks_fanout}
#@ group_variable power {power_rclock_unrelated_use_fastest}
#@ group_variable power {power_lib2saif_rise_fall_pd}
#@ group_variable power {power_min_internal_power_threshold}
#@ group_variable power {power_cg_module_naming_style}
#@ group_variable power {power_cg_cell_naming_style}
#@ group_variable power {power_cg_gated_clock_net_naming_style}
#@ group_variable power {do_operand_isolation}
#@
#@ # dpcm variables are used by DPCM lib and controllong DC when using DPCM
#@
#@ if { [info exists dpcm_debuglevel] } {
#@ group_variable dpcm "dpcm_debuglevel"
#@ group_variable dpcm "dpcm_rulespath"
#@ group_variable dpcm "dpcm_rulepath"
#@ group_variable dpcm "dpcm_tablepath"
#@ group_variable dpcm "dpcm_libraries"
#@ group_variable dpcm "dpcm_version"
#@ group_variable dpcm "dpcm_level"
#@ group_variable dpcm "dpcm_temperaturescope"
#@ group_variable dpcm "dpcm_voltagescope"
#@ group_variable dpcm "dpcm_functionscope"
#@ group_variable dpcm "dpcm_wireloadscope"
#@ group_variable dpcm "dpcm_slewlimit"
#@ group_variable dpcm "dpcm_arc_sense_mapping"
#@
#@ }
#@
#@ set dpcm_slewlimit "TRUE"
#@
#@ # executable to fire off RTLA/BCV
#@ group_variable hdl {xterm_executable}
#@
#@ # Variable group for Chip Compiler
#@ if {[info exists acs_work_dir]} {
#@ group_variable acs acs_area_report_suffix
#@ group_variable acs acs_autopart_max_area
#@ group_variable acs acs_autopart_max_percent
#@ group_variable acs acs_budgeted_cstr_suffix
#@ group_variable acs acs_compile_script_suffix
#@ group_variable acs acs_constraint_file_suffix
#@ group_variable acs acs_cstr_report_suffix
#@ group_variable acs acs_db_suffix
#@ group_variable acs acs_dc_exec
#@ group_variable acs acs_default_pass_name
#@ group_variable acs acs_exclude_extensions
#@ group_variable acs acs_exclude_list
#@ group_variable acs acs_global_user_compile_strategy_script
#@ group_variable acs acs_hdl_verilog_define_list
#@ group_variable acs acs_hdl_source
#@ group_variable acs acs_lic_wait
#@ group_variable acs acs_log_file_suffix
#@ group_variable acs acs_make_args
#@ group_variable acs acs_make_exec
#@ group_variable acs acs_makefile_name
#@ group_variable acs acs_num_parallel_jobs
#@ group_variable acs acs_override_report_suffix
#@ group_variable acs acs_override_script_suffix
#@ group_variable acs acs_qor_report_suffix
#@ group_variable acs acs_timing_report_suffix
#@ group_variable acs acs_use_autopartition
#@ group_variable acs acs_use_default_delays
#@ group_variable acs acs_user_budgeting_script
#@ group_variable acs acs_user_compile_strategy_script_suffix
#@ group_variable acs acs_verilog_extensions
#@ group_variable acs acs_vhdl_extensions
#@ group_variable acs acs_work_dir
#@ group_variable acs check_error_list
#@ group_variable acs ilm_preserve_core_constraints
#@
#@ }
#@
#@ #
#@ # DesignTime Variable Group timing
#@ #
#@
#@ group_variable timing case_analysis_log_file
#@ group_variable timing case_analysis_sequential_propagate
#@ group_variable timing case_analysis_with_logic_constants
#@ group_variable timing create_clock_no_input_delay
#@ group_variable timing disable_auto_time_borrow
#@ group_variable timing disable_case_analysis
#@ group_variable timing disable_conditional_mode_analysis
#@ group_variable timing disable_library_transition_degradation
#@ group_variable timing dont_bind_unused_pins_to_logic_constant
#@ group_variable timing enable_slew_degradation
#@ group_variable timing high_fanout_net_pin_capacitance
#@ group_variable timing high_fanout_net_threshold
#@ group_variable timing lib_thresholds_per_lib
#@ group_variable timing rc_adjust_rd_when_less_than_rnet
#@ group_variable timing rc_ceff_delay_min_diff_ps
#@ group_variable timing rc_degrade_min_slew_when_rd_less_than_rnet
#@ group_variable timing rc_driver_model_max_error_pct
#@ group_variable timing rc_filter_rd_less_than_rnet
#@ group_variable timing rc_input_threshold_pct_fall
#@ group_variable timing rc_input_threshold_pct_rise
#@ group_variable timing rc_output_threshold_pct_fall
#@ group_variable timing rc_output_threshold_pct_rise
#@ group_variable timing rc_rd_less_than_rnet_threshold
#@ group_variable timing rc_slew_derate_from_library
#@ group_variable timing rc_slew_lower_threshold_pct_fall
#@ group_variable timing rc_slew_lower_threshold_pct_rise
#@ group_variable timing rc_slew_upper_threshold_pct_fall
#@ group_variable timing rc_slew_upper_threshold_pct_rise
#@ group_variable timing timing_disable_cond_default_arcs
#@ # group_variable timing timing_enable_multiple_clocks_per_reg
#@ group_variable timing timing_report_attributes
#@ group_variable timing timing_self_loops_no_skew
#@ group_variable timing when_analysis_permitted
#@ group_variable timing when_analysis_without_case_analysis
#@
#@ } ;# $synopsys_program_name != "ptxr"
#@
#@ if { $synopsys_program_name == "icc_shell"} {
#@ #
#@ # IC Compile Variable Group:
#@ #
#@ # These variables affect the designs created by the route_opt command.
#@ #
#@ group_variable routeopt routeopt_checkpoint
#@ group_variable routeopt routeopt_disable_cpulimit
#@ }
#@
#@ if { $synopsys_program_name == "icc_shell"} {
#@ #
#@ # IC Compiler Variable Group: MCMM
#@ #
#@ # These variables affect Multi-Corner/Multi-Mode. Currently, MCMM is
#@ # only supported in ICC--hence the "icc_shell" qualification, above
#@ #
#@ group_variable MCMM mcmm_enable_high_capacity_flow
#@ }
#@
#@ # Aliases for backwards compatibility or other reasons
#@ group_variable compile {compile_log_format}
#@ alias view_cursor_number x11_set_cursor_number
#@ alias set_internal_load set_load
#@ alias set_internal_arrival set_arrival
#@ alias set_connect_delay "set_annotated_delay -net"
#@ alias create_test_vectors create_test_patterns
#@ alias compile_test insert_test
#@ alias check_clocks check_timing
#@ alias lint check_design
#@ # gen removed; alias gen create_schematic
#@ alias free remove_design
#@ alias group_bus create_bus
#@ alias ungroup_bus remove_bus
#@ alias groupvar group_variable
#@ alias report_constraints report_constraint
#@ alias report_attributes report_attribute
#@ alias fsm_reduce reduce_fsm
#@ alias fsm_minimize minimize_fsm
#@ alias disable_timing set_disable_timing
#@ alias dont_touch set_dont_touch
#@ alias dont_touch_network set_dont_touch_network
#@ alias dont_use set_dont_use
#@ alias fix_hold set_fix_hold
#@ alias prefer set_prefer
#@ alias remove_package "echo remove_package command is obsolete: packages are
stored on disk not in-memory:"
#@ alias analyze_scan preview_scan
#@ alias get_clock get_clocks
#@ alias dc_shell_is_in_incr_mode shell_is_in_xg_mode
#@ alias set_vh_module_options set_dps_module_options
#@ alias set_vh_physopt_options set_dps_options
#@ alias update_vh_design update_dps_design
#@ alias vh_start dps_start
#@ alias vh_end dps_end
#@ alias all_vh_modules all_dps_modules
#@ alias all_designs_of_vh all_designs_of_dps
#@ alias vh_use_auto_partitioning dps_auto_partitioning
#@ alias vh_write_changes dps_write_changes
#@ alias vh_read_changes dps_read_changes
#@ alias vh_write_module_clock dps_write_module_clock
#@ alias get_lib get_libs
#@
#@ # Enable unsupported psyn commands
#@ if { $synopsys_program_name == "psyn_shell" || $synopsys_program_name ==
"icc_shell"} {
#@ proc enable_unsupported_commands { { arg "default" } } {
#@ global cgpi_use_new_wire_factors
#@ global cgpi_use_relative_wire_factors
#@ global cgpi_use_new_path_factors
#@ global pwlm_use_new_wire_factors
#@ global pwlm_use_relative_wire_factors
#@ global pwlm_use_new_path_factors
#@ global psyn_unsupported_commands_dir
#@ global synopsys_root
#@ if {![info exists psyn_unsupported_commands_dir]} {
#@ set psyn_unsupported_commands_dir
$synopsys_root/auxx/syn/psyn/unsupported_commands
#@ }
#@ set psyn_unsupported_commands_option1 $arg
#@ if {[file readable $psyn_unsupported_commands_dir/setup.tcl]} {
#@ source $psyn_unsupported_commands_dir/setup.tcl
#@ } else {
#@ source -encrypted $psyn_unsupported_commands_dir/setup.tcl.e
#@ }
#@ }
#@ }
#@ # For Intel
#@ if { $synopsys_program_name == "icc_shell"} {
#@ set psyn_unsupported_commands_dir
$synopsys_root/auxx/syn/psyn/unsupported_commands
#@ source -encrypted $psyn_unsupported_commands_dir/max_dist.tcl.e
#@ }
#@
#@
#@ if { $synopsys_program_name == "icc_shell"} {
#@ # to enable CLE readline-ish terminal by default for ICC
#@ set sh_enable_line_editing true
#@
#@ # Astro forms create an enormous number of new variables which are
#@ # very annoying for users to see, so the default of this variable
#@ # for ICC is false
#@ set sh_new_variable_message false
#@ }
#@
#@ if { $synopsys_program_name == "icc_shell" || \
#@ (($synopsys_program_name == "dc_shell") &&
([shell_is_in_topographical_mode])) } {
#@ source $synopsys_root/auxx/syn/psyn/verify_ilm.tcl
#@ }
#@
#@ # Enable vh psyn commands
#@ if { $synopsys_program_name == "psyn_shell" } {
#@ proc enable_vh_flow { } {
#@ global VH_SCRIPT_FILE
#@ global synopsys_root
#@ global suppress_errors
#@ set suppress_errors "$suppress_errors CMD-041 UID-95 SEL-003 SEL-005"
#@ if {![info exists VH_SCRIPT_FILE]} {
#@ set VH_SCRIPT_FILE $synopsys_root/auxx/syn/psyn/vh_pc.tcl.e
#@ }
#@ if {[file readable $VH_SCRIPT_FILE]} {
#@ if {[string match *.tcl $VH_SCRIPT_FILE]} {
#@ source $VH_SCRIPT_FILE
#@ } else {
#@ source -encrypted $VH_SCRIPT_FILE
#@ }
#@ } else {
#@ puts "Error: VH script file $VH_SCRIPT_FILE not found."
#@ }
#@ }
#@ }
#@
#@
#@ #Turn on enable_netl_view to true by default.
#@ set enable_netl_view "TRUE"
#@
#@
#@ #Turn on physopt_bypass_multiple_plib_check by default
#@ if { $synopsys_program_name == "psyn_shell" } {
#@ set physopt_bypass_multiple_plib_check TRUE
#@ }
#@
#@ # The ls command is gone, now it is just an alias for dc_shell eqn mode
#@
#@ if { [string compare $dc_shell_mode "default"] == 0 } {
#@ if { ( $sh_arch == {mips}) && ( ( $synopsys_program_name ==
{design_analyzer}) || ( $isatty == 0)) } {
#@ alias ls "sh ls -a "
#@ } else {
#@ if { ( $sh_arch == {mips}) || ( $sh_arch == {necmips}) } {
#@ alias ls "sh ls -aC "
#@ } else {
#@ alias ls "sh ls -aC "
#@ }
#@ }
#@ }
#@
#@ # Aliases for RouteCompiler
#@ alias run_rodeo_router route66
#@
#@ # Removing route_global from the code. Earlier it was hidden. --Mukesh
#@ #proc route_global {} {
#@ # global route_global_keep_tmp_data
#@ # global rt66_dont_lock_dir
#@ #
#@ # set rt66_dont_lock_dir TRUE
#@ #
#@ # for { set i 0} {1==1} {incr i} {
#@ # set wdir [file join [pwd] ".route_global.$i"]
#@ # if {[file exist $wdir] == 0} {
#@ # break;
#@ # }
#@ # }
#@ #
#@ # set_routing_options -cut_out_covered_port CORE_ONLY
#@ # set_routing_options -internal_routing FALSE
#@ # set_routing_options -stick_routing FALSE
#@ #
#@ # ###puts "wdir = $wdir"
#@ #
#@ # set success [route66 -global -dontstop -dir $wdir]
#@ #
#@ # #clean tmp data if required:
#@ # if { $success == 1 } {
#@ # if [catch {string toupper $route_global_keep_tmp_data} result] {
#@ # #variable is not defined
#@ # ###puts "result_1 = $result => removing dir ..."
#@ # catch { file delete -force $wdir }
#@ # } else {
#@ # #variable is set to FALSE
#@ # if { [string compare $result "TRUE"] != 0} {
#@ # ###puts "result_2 = $result => removing dir ..."
#@ # catch { file delete -force $wdir }
#@ # }
#@ # }
#@ # }
#@ #
#@ # set rt66_dont_lock_dir FALSE
#@ # return 1
#@ #}
#@ #define_proc_attributes route_global -hidden
#@
#@ #/* Aliases added for report command */
#@ alias report_clock_constraint "report_timing -path end -to all_registers(-
data_pins)"
#@ alias report_clock_fanout "report_transitive_fanout -clock_tree"
#@ alias report_clocks report_clock
#@ alias report_synthetic report_cell
#@
#@ # Alias added for Ultra backward compatibility mode
#@ alias set_ultra_mode set_ultra_optimization
#@
#@ # alias for write_sge and menu item in DA for db2sge
#@
#@ #if { [string compare $dc_shell_mode "tcl"] == 0 } {
#@ # set db2sge_script ${synopsys_root}/admin/setup/.dc_write_sge.tcl
#@ #} else {
#@ # set db2sge_script ${synopsys_root}/admin/setup/.dc_write_sge
#@ #}
#@
#@ #set db2sge_command ${synopsys_root}/${sh_arch}/syn/bin/db2sge
#@ set view_script_submenu_items "\"DA to SGE Transfer\" write_sge"
#@
#@
#@ if { $synopsys_program_name != "lc_shell"} {
#@ # read schematic annotation setup file
#@ #source ${synopsys_root}/admin/setup/.dc_annotate
#@
#@ # setup the default layer settings
#@ #source ${synopsys_root}/admin/setup/.dc_layers
#@
#@ if {$synopsys_program_name != "dc_sms_shell"} {
#@ source ${synopsys_root}/admin/setup/.dc_name_rules
#@ }
#@ } else {
#@ #for read_lib -html
#@ source ${synopsys_root}/auxx/syn/lc/read_lib_html_msg_list.tcl
#@ }
#@ # -- Starting source /cad/synopsys/synthesis/cur/admin/setup/.dc_name_rules
#@ #
#@
#@ # .dc_name_rules Initialization file for
#@
#@ # Dc_Shell and Design_Analyzer
#@
#@ # This files defines name rules for target systems. Change_names
#@ # will use this rules to fix the object names.
#@
#@ #*/
#@
#@
#@ define_name_rules sverilog -type net -allow "a-z A-Z 0-9 _ " \
#@ -first_restrict "_ 0-9"
#@
#@ define_name_rules sverilog -type port -allow "a-z A-Z 0-9 _ " \
#@ -first_restrict "_ 0-9"
#@
#@ define_name_rules sverilog -type cell -allow "a-z A-Z 0-9 _ " \
#@ -first_restrict "_ 0-9"
#@ define_name_rules sverilog -reserved { "always" "always_comb" "always_ff" \
#@ "always_latch" "and" "assert" "assert_strobe" "assign" "automatic" \
#@ "begin" "bit" "break" "buf" "bufif0" "bufif1" "byte" "case" "casex" "casez"
\
#@ "cell" "changed" "char" "cmos" "config" "const" "continue" "deassign" \
#@ "default" "defparam" "design" "disable" "do" "edge" "else" "end" \
#@ "endcase" "endconfig" "endfunction" "endgenerate" "endinterface" "endmodule"
"endprimitive" \
#@ "endspecify" "endtable" "endtask" "endtransition" "enum" "event" "export"
"extern" \
#@ "for" "force" "forever" "fork" "forkjoin" "function" "generate" "genvar" \
#@ "highz0" "highz1" "if" "iff" "ifnone" "import" "incdir" "include" "initial"
\
#@ "inout" "input" "instance" "int" "integer" "interface" "join" "large" \
#@ "liblist" "library" "localparam" "logic" "longint" "longreal" "macromodule"
"medium" \
#@ "modport" "module" "nand" "negedge" "nmos" "nor" "noshowcancelled" "not"
"notif0" \
#@ "notif1" "or" "output" "packed" "parameter" "pmos" "posedge" \
#@ "primitive" "process" "priority" "pull0" "pull1" "pullup" "pulldown" \
#@ "pulsestyle_onevent" "pulsestyle_ondetect" \
#@ "rcmos" "real" "realtime" "reg" "release" "repeat" "return" "rnmos" "rpmos"
"rtran" \
#@ "rtranif0" "rtranif1" "scalared" "shortint" "shortreal" "showcancelled" \
#@ "signed" "small" "specify" "specparam" "static" \
#@ "strong0" "strong1" "struct" "supply0" "supply1" "table" "task" \
#@ "time" "timeprecision" "timeunit" "tran" "tranif0" "tranif1" "transition" "tri"
"tri0" "tri1" \
#@ "triand" "trior" "trireg" "type" "typedef" "union" "unique" "use" "unsigned"
"vectored" \
#@ "void" "wait" "wand" "weak0" "weak1" "while" "wire" "wor" "xor" "xnor" } \
#@ -special verilog -target_bus_naming_style {%s[%d]} \
#@ -flatten_multi_dimension_busses \
#@ -check_internal_net_name \
#@ -check_bus_indexing
#@
#@ define_name_rules verilog -type net -allow "a-z A-Z 0-9 _ " \
#@ -first_restrict "_ 0-9"
#@
#@ define_name_rules verilog -type port -allow "a-z A-Z 0-9 _ " \
#@ -first_restrict "_ 0-9"
#@
#@ define_name_rules verilog -type cell -allow "a-z A-Z 0-9 _ " \
#@ -first_restrict "_ 0-9"
#@ define_name_rules verilog -reserved { "always" \
#@ "and" "assign" "automatic" \
#@ "begin" "buf" "bufif0" "bufif1" "case" "casex" "casez" \
#@ "cell" "cmos" "config" "deassign" \
#@ "default" "defparam" "design" "disable" "edge" "else" "end" \
#@ "endcase" "endconfig" "endfunction" "endgenerate" "endmodule" "endprimitive"
\
#@ "endspecify" "endtable" "endtask" "event" \
#@ "for" "force" "forever" "fork" "function" "generate" "genvar" \
#@ "highz0" "highz1" "if" "ifnone" "incdir" "include" "initial" \
#@ "inout" "input" "instance" "integer" "join" "large" \
#@ "liblist" "library" "localparam" "macromodule" "medium" \
#@ "module" "nand" "negedge" "nmos" "nor" "noshowcancelled" "not" "notif0" \
#@ "notif1" "or" "output" "parameter" "pmos" "posedge" \
#@ "primitive" "pull0" "pull1" "pullup" "pulldown" \
#@ "pulsestyle_onevent" "pulsestyle_ondetect" \
#@ "rcmos" "real" "realtime" "reg" "release" "repeat" "rnmos" "rpmos" "rtran"
\
#@ "rtranif0" "rtranif1" "scalared" "showcancelled" \
#@ "signed" "small" "specify" "specparam" \
#@ "strong0" "strong1" "supply0" "supply1" "table" "task" \
#@ "time" "tran" "tranif0" "tranif1" "tri" "tri0" "tri1" \
#@ "triand" "trior" "trireg" "unsigned" "use" "vectored" \
#@ "wait" "wand" "weak0" "weak1" "while" "wire" "wor" "xor" "xnor" } \
#@ -special verilog -target_bus_naming_style {%s[%d]} \
#@ -flatten_multi_dimension_busses \
#@ -check_internal_net_name \
#@ -check_bus_indexing
#@
#@ define_name_rules verilog_1995 -type net -allow "a-z A-Z 0-9 _ " \
#@ -first_restrict "_ 0-9"
#@
#@ define_name_rules verilog_1995 -type port -allow "a-z A-Z 0-9 _ " \
#@ -first_restrict "_ 0-9"
#@
#@ define_name_rules verilog_1995 -type cell -allow "a-z A-Z 0-9 _ " \
#@ -first_restrict "_ 0-9"
#@ define_name_rules verilog_1995 -reserved { "always" \
#@ "and" "assign" \
#@ "begin" "buf" "bufif0" "bufif1" "case" "casex" "casez" \
#@ "cell" "cmos" "deassign" \
#@ "default" "defparam" "design" "disable" "edge" "else" "end" \
#@ "endcase" "endfunction" "endmodule" "endprimitive" \
#@ "endspecify" "endtable" "endtask" "event" \
#@ "for" "force" "forever" "fork" "function" \
#@ "highz0" "highz1" "if" "ifnone" "initial" \
#@ "inout" "input" "integer" "join" "large" \
#@ "macromodule" "medium" \
#@ "module" "nand" "negedge" "nmos" "nor" "notif0" \
#@ "notif1" "or" "output" "parameter" "pmos" "posedge" \
#@ "primitive" "pull0" "pull1" "pullup" "pulldown" \
#@ "rcmos" "real" "realtime" "reg" "release" "repeat" "rnmos" "rpmos" "rtran"
\
#@ "rtranif0" "rtranif1" "scalared" \
#@ "small" "specify" "specparam" \
#@ "strong0" "strong1" "supply0" "supply1" "table" "task" \
#@ "time" "tran" "tranif0" "tranif1" "tri" "tri0" "tri1" \
#@ "triand" "trior" "trireg" "vectored" \
#@ "wait" "wand" "weak0" "weak1" "while" "wire" "wor" "xor" "xnor" } \
#@ -special verilog -target_bus_naming_style {%s[%d]} \
#@ -flatten_multi_dimension_busses \
#@ -check_internal_net_name \
#@ -check_bus_indexing
#@
#@
#@ ####/* Name rule for VHDL */
#@
#@ ####/* Name rule for VHDL */
#@
#@ ####/* Name rule for VHDL */
#@
#@ define_name_rules vhdl -reserved_words { \
#@ "abs" "access" "after" "alias" "all" "and" \
#@ "architecture" "array" "assert" "attribute" \
#@ "begin" "block" "body" "buffer" "bus" \
#@ "case" "component" "configuration" "constant" \
#@ "disconnect" "downto" \
#@ "else" "elsif" "end" "entity" "exit" \
#@ "file" "for" "function" \
#@ "generate" "generic" "group" "guarded" \
#@ "if" "impure" "in" "inertial" "inout" "is" \
#@ "label" "library" "linkage" "literal" "loop" \
#@ "map" "mod" \
#@ "nand" "new" "next" "nor" "not" "null" \
#@ "of" "on" "open" "or" "others" "out" \
#@ "package" "port" "postponed" "procedure" "process" "pure" \
#@ "range" "record" "register" "reject" "rem" \
#@ "report" "return" "rol" "ror" \
#@ "select" "severity" "signal" "shared" "sla" "sll" \
#@ "sra" "srl" "subtype" \
#@ "then" "to" "transport" "type" \
#@ "unaffected" "units" "until" "use" \
#@ "variable" \
#@ "wait" "when" "while" "with" \
#@ "xnor" "xor"} \
#@ -case_insensitive \
#@ -target_bus_naming_style "%s(%d)" \
#@ -replacement_char "x" \
#@ -special vhdl
#@ define_name_rules vhdl -type net \
#@ -allowed "A-Z a-z _ 0-9 " \
#@ -first_restricted "0-9 _" \
#@ -last_restricted "_"
#@ define_name_rules vhdl -type port \
#@ -allowed "A-Z a-z _ 0-9 " \
#@ -first_restricted "0-9 _" \
#@ -last_restricted "_"
#@ define_name_rules vhdl -type cell \
#@ -allowed "A-Z a-z _ 0-9" \
#@ -first_restricted "0-9 _" \
#@ -last_restricted "_" \
#@
#@ define_name_rules vhdl -map { {{"__","_"},{"_$",""}} }
#@
#@ define_name_rules vhdl2008 -reserved_words { \
#@ "abs" "access" "after" "alias" "all" "and" \
#@ "architecture" "array" "assert" "assume" \
#@ "assume_guarantee" "attribute" \
#@ "begin" "block" "body" "buffer" "bus" \
#@ "case" "component" "configuration" "constant" \
#@ "context" "cover" "default" "disconnect" "downto" \
#@ "else" "elsif" "end" "entity" "exit" \
#@ "fairness" "file" "for" "force" "function" \
#@ "generate" "generic" "group" "guarded" \
#@ "if" "impure" "in" "inertial" "inout" "is" \
#@ "label" "library" "linkage" "literal" "loop" \
#@ "map" "mod" \
#@ "nand" "new" "next" "nor" "not" "null" \
#@ "of" "on" "open" "or" "others" "out" \
#@ "package" "parameter" "port" "postponed" "procedure" \
#@ "process" "property" "protected" "pure" \
#@ "range" "record" "register" "reject" "release" \
#@ "restrict" "restrict_guarantee" "rem" \
#@ "report" "return" "rol" "ror" \
#@ "select" "sequence" "severity" "signal" "shared" \
#@ "sla" "sll" "sra" "srl" "subtype" "strong" \
#@ "then" "to" "transport" "type" \
#@ "unaffected" "units" "until" "use" \
#@ "variable" "vmode" "vprop" "vunit" \
#@ "wait" "when" "while" "with" \
#@ "xnor" "xor"} \
#@ -case_insensitive \
#@ -target_bus_naming_style "%s(%d)" \
#@ -replacement_char "x" \
#@ -special vhdl
#@ define_name_rules vhdl2008 -type net \
#@ -allowed "A-Z a-z _ 0-9 " \
#@ -first_restricted "0-9 _" \
#@ -last_restricted "_"
#@ define_name_rules vhdl2008 -type port \
#@ -allowed "A-Z a-z _ 0-9 " \
#@ -first_restricted "0-9 _" \
#@ -last_restricted "_"
#@ define_name_rules vhdl2008 -type cell \
#@ -allowed "A-Z a-z _ 0-9" \
#@ -first_restricted "0-9 _" \
#@ -last_restricted "_" \
#@
#@ define_name_rules vhdl2008 -map { {{"__","_"},{"_$",""}} }
#@
#@
#@ ####/* Name rule for VHDL */
#@
#@
#@ ####/* Name rule for System Verilog with keywords updated to 1800-2017 */
#@ define_name_rules sverilog2017 -type net -allow "a-z A-Z 0-9 _ " \
#@ -first_restrict "_ 0-9"
#@
#@ define_name_rules sverilog2017 -type port -allow "a-z A-Z 0-9 _ " \
#@ -first_restrict "_ 0-9"
#@
#@ define_name_rules sverilog2017 -type cell -allow "a-z A-Z 0-9 _ " \
#@ -first_restrict "_ 0-9"
#@ define_name_rules sverilog2017 -reserved { "accept_on" "alias" "always"
"always_comb" \
#@ "always_ff" "always_latch" "and" "assert" "assign" \
#@ "assume" "automatic" "before" "begin" "bind" "bins" "binsof" "bit" "break" "buf"
"bufif0" \
#@ "bufif1" "byte" "case" "casex" "casez" "cell" "chandle" "checker" "class"
"clocking" "cmos" \
#@ "config" "const" "constraint" "context" "continue" "cover" "covergroup"
"coverpoint" "cross" \
#@ "deassign" "default" "defparam" "design" "disable" "dist" "do" "edge" "else"
"end" "endcase" \
#@ "endchecker" "endclass" "endclocking" "endconfig" "endfunction" "endgenerate"
"endgroup" \
#@ "endinterface" "endmodule" "endpackage" "endprimitive" "endprogram"
"endproperty" \
#@ "endsequence" "endspecify" "endtable" "endtask" "enum" "event" "eventually"
"expect" "export" \
#@ "extends" "extern" "final" "first_match" "for" "force" "foreach" "forever"
"fork" "forkjoin" \
#@ "function" "generate" "genvar" "global" "highz0" "highz1" "if" "iff" "ifnone"
"ignore_bins" \
#@ "illegal_bins" "implements" "implies" "import" "incdir" "include" "initial"
"inout" "input" \
#@ "inside" "instance" "int" "integer" "interconnect" "interface" "intersect"
"join" "join_any" \
#@ "join_none" "large" "let" "liblist" "library" "local" "localparam" "logic"
"longint" \
#@ "macromodule" "matches" "medium" "modport" "module" "nand" "negedge" "nettype"
"new" "nexttime" \
#@ "nmos" "nor" "noshowcancelled" "not" "notif0" "notif1" "null" "or" "output"
"package" "packed" \
#@ "parameter" "pmos" "posedge" "primitive" "priority" "program" "property"
"protected" "pull0" \
#@ "pull1" "pulldown" "pullup" "pulsestyle_ondetect" "pulsestyle_onevent" "pure"
"rand" "randc" \
#@ "randcase" "randsequence" "rcmos" "real" "realtime" "ref" "reg" "reject_on"
"release" "repeat" \
#@ "restrict" "return" "rnmos" "rpmos" "rtran" "rtranif0" "rtranif1" "s_always"
"s_eventually" \
#@ "s_nexttime" "s_until" "s_until_with" "scalared" "sequence" "shortint"
"shortreal" \
#@ "showcancelled" "signed" "small" "soft" "solve" "specify" "specparam" "static"
"string" "strong" \
#@ "strong0" "strong1" "struct" "super" "supply0" "supply1" "sync_accept_on"
"sync_reject_on" \
#@ "table" "tagged" "task" "this" "throughout" "time" "timeprecision" "timeunit"
"tran" "tranif0" \
#@ "tranif1" "tri" "tri0" "tri1" "triand" "trior" "trireg" "type" "typedef" "union"
"unique" \
#@ "unique0" "unsigned" "until" "until_with" "untyped" "use" "uwire" "var"
"vectored" "virtual" \
#@ "void" "wait" "wait_order" "wand" "weak" "weak0" "weak1" "while" "wildcard"
"wire" "with" \
#@ "within" "wor" "xnor" "xor"} \
#@ -special verilog -target_bus_naming_style {%s[%d]} \
#@ -flatten_multi_dimension_busses \
#@ -check_internal_net_name \
#@ -check_bus_indexing
#@ ####/* Name rule for System Verilog with keywords updated to 1800-2017 */
#@ ####/* END */
#@ # -- End source /cad/synopsys/synthesis/cur/admin/setup/.dc_name_rules
#@
#@ if { $synopsys_program_name == "psyn_gui"} {
#@ # read RouteCompiler GUI file for timing critical pathes.
#@ source ${synopsys_root}/auxx/syn/route_gui/write_route_timing_path.tcl
#@ }
#@
#@ # Set physopt_dw_opto to false
#@ if { [string match -nocase {*icc_shell*} $synopsys_program_name] } {
#@ set physopt_dw_opto FALSE
#@ }
#@
#@ #/* Read budgeting setup script */
#@
#@ if { [string compare $dc_shell_mode "default"] == 0 } {
#@
#@ # Need a encrypted file in Tcl format for budget.setup.et
#@ if { $sh_arch != "msvc50" && $sh_arch != "alpha_nt" } {
#@ # source -e synopsys_root + "/admin/setup/budget.setup.et"
#@ }
#@ }
#@
#@ if { $synopsys_program_name == "icc_shell"} {
#@ source $synopsys_root/auxx/syn/.icc_procs.tcl
#@ source -encrypted $synopsys_root/auxx/syn/cts/fast_atomic_cts.tcl.e
#@ }
#@
#@ if { $synopsys_program_name == "icc_shell"} {
#@ alias report_scenario report_scenarios
#@ }
#@
#@ # floorplanning preferences globals
#@ global fp_snap_type
#@
#@ set fp_snap_type(port) wiretrack
#@ set fp_snap_type(cell) litho
#@ set fp_snap_type(pin) wiretrack
#@ set fp_snap_type(movebound) litho
#@ set fp_snap_type(port_shape) wiretrack
#@ set fp_snap_type(wiring_keepout) wiretrack
#@ set fp_snap_type(placement_keepout) litho
#@ set fp_snap_type(net_shape) wiretrack
#@ set fp_snap_type(route_shape) wiretrack
#@ set fp_snap_type(none) litho
#@
#@ # STAR 9000615813. PWR-18 is no longer internally suppressed.
#@ # Instead call tcl suppress_message so that it can be unsuppressed by users in
#@ # command line if needed
#@ suppress_message PWR-18
#@
#@ # alias for write_sge is always the last line of the setup file
#@ #if { [string compare $dc_shell_mode "tcl"] == 0 } {
#@ # alias write_sge "source db2sge_script"
#@ #} else {
#@ # alias write_sge "include db2sge_script"
#@ #}
#@
#@ if { $dc_shell_mode == "tcl" } {
#@ # Configure Execute script dialog to display .tcl files
#@ set view_execute_script_suffix "$view_execute_script_suffix .tcl"
#@ }
#@
#@ #
#@ # Shirley Lu 5/15/2007
#@ #
#@ # Invoke NCX validation/correlation/fomatter from lc_shell:
#@ #
#@ # UNIX shell:
#@ # setenv SYNOPSYS_NCX_ROOT /mydisk/ncx_2007.06
#@ #
#@
#@ if {[info exists env(SYNOPSYS_NCX_ROOT)]} {
#@
#@ set ncx_path $env(SYNOPSYS_NCX_ROOT)/ncx/${sh_arch}/bin
#@
#@ #
#@ # check_ccs_lib
#@ # use libchecker under $ncx_path defined above
#@ # Disable this command since 2010.12-SP3 (should be done in 2010.12 release)
#@ #proc check_ccs_lib {args} {
#@ # global ncx_path
#@ # set cmdStr [linsert $args 0 ${ncx_path}/libchecker -lc_shell]
#@ # set cmd [open "| $cmdStr 2>@ stdout"]
#@ # catch {
#@ # while {[gets $cmd info] >= 0} {
#@ # echo $info
#@ # }
#@ # }
#@ # if {[catch {close $cmd} msg]} {
#@ # }
#@ #}
#@
#@ #
#@ # format_lib
#@ # use ncx under $ncx_path defined above
#@ # Disable format_lib command in 2014.09 release -- xwwang, 7/25/2014
#@ #proc format_lib {args} {
#@ # global ncx_path
#@ # echo "Warning: format_lib command is scheduled to become obsolete in a
future production release."
#@ # set cmdStr [linsert $args 0 ${ncx_path}/ncx -lc_shell]
#@ # set cmd [open "| $cmdStr 2>@ stdout"]
#@ # catch {
#@ # while {[gets $cmd info] >= 0} {
#@ # echo $info
#@ # }
#@ # }
#@ # if {[catch {close $cmd} msg]} {
#@ # }
#@ #}
#@
#@ }
#@
#@ proc valias {v_orig v_alias} {
#@ uplevel 1 "upvar 0 $v_orig $v_alias"
#@ }
#@
#@ set lc_run_from_legacy_library_compiler "true"
#@
#@ set lc_enable_legacy_library_compiler "false"
#@
#@ valias lc_enable_legacy_library_compiler lc_enable_common_shell_lc
#@
#@ if {[info exists ::env(SYNOPSYS_LC_ROOT)] && [file exists
$::env(SYNOPSYS_LC_ROOT)/$::sh_arch/lc/bin/lc_shell_exec]} {
#@ # make lc man pages search path override the default man page search path
#@ append man_path " $::env(SYNOPSYS_LC_ROOT)/doc/lc/man"
#@ } else {
#@ set lc_link "$::synopsys_root/$::sh_arch/syn/bin/lc_shell_exec"
#@ while { [file exists $lc_link] && [file type $lc_link] == "link"} {
#@ set lc_link [file readlink $lc_link]
#@ }
#@ # resolve symbol-link to get $exec_path of lc_shell_exec
#@ if { [file exists $lc_link] } {
#@ set LC_ROOT [file dirname [file dirname [file dirname [file dirname
$lc_link]]]]
#@ append man_path " $LC_ROOT/doc/lc/man"
#@ }
#@ }
#@
#@ source ${synopsys_root}/auxx/syn/lc_commands.tbc
#@ # -- Starting source /cad/synopsys/synthesis/cur/auxx/syn/lc_commands.tbc
#@ ##############################################################################
#@ # Author : Liping Zhao
#@ # History: 2016/11/21 created
#@ # Description: This is the source tcl file of run_nglc.tbc.
#@ # The procs are all for run library compiler under the hood.
#@ # These procs are exracted from .synopsys_dc.setup
#@ ##############################################################################
#@ # 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
#@ 43 0 435 61 0 0 324 0 5 43 43 -1 -1
#@ 435
#@ `:G<!(H&s!/HW<!(3E<!2`8s!egwpv2/YQ#/HW<!-Qr<!2`8s!5v!!!k!!!!*Qr<!3HN<!`w
#@ :C25v!!!3!!!!/oJ=!7;kpv:uW<!A^w!!/K!!!0J60%^d1J!B8#>!@lJs!@kUNwOmm<v9uW<
#@ !sPG>!?..rv-TA9v<;|Tv.EW<!uyY>!A:@rv-TA9v>A|Tv.EW<!vik>!xLxrv-TA9v@G|Tv.
#@ EW<!%&2?!a^!sv-TA9vCP|Tv.EW<!(8M?!gp<sv-TA9vFY|Tv.EW<!+Jh?!L'Osv-TA9vIb|
#@ Tv.EW<!-V%@!q9jsv-TA9vKh|Tv.EW<!0h@@!QE'tv-TA9vNq|Tv.EW<!2tR@!SQ9tv-TA9v
#@ Pv^Tv.EW<!4+e@!*dTtv-TA9vR(^Tv.EW<!7=+A!Xoftv-TA9vU1^Tv.EW<!9I=A!4--uv-T
#@ A9vW7^Tv.EW<!<xXA!v9?uv-TA9vZ@^Tv.EW<!>gjA!>KZuv-TA9vyF^Tv.EW<!Aw1B!D|uu
#@ v-TA9v_O^Tv.EW<!D6LB!Fi2!#-TA9vbX^Tv**!!
#@ 43
#@ @1IOwI7xOwMjrPwI%%n#I%%n#I%%n#I%%n#I%%n#I%%n#I%%n#@)0v
#@ 43
#@ I%%n#62qqvY(.OwI1IOwI1IOwI1IOwI1IOwI1IOwI1IOwI1IOw=ri!
#@ 61
#@ x
#@ 4
#@ ,CHr@
#@ x
#@ 23
#@ lj|Z?!aiaEw>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
#@ 18
#@ kaT5BnEi'Fh!cr@eRo;@Syw
#@ 0
#@ 0
#@ 0 0
#@ x
#@ 22
#@ epCkBo0m*EpvnX?3DccE,&MEFO(%
#@ x
#@ 7
#@ /^,8AY@c,
#@ x
#@ 20
#@ lj|Z?qd,r@eLa:@iqEY?%xRQB
#@ x
#@ 6
#@ !>PQ9/-v
#@ p
#@ 28 0 388 20 1 0 152 1 7 28 40 -1 -1
#@ 388
#@ 4;,>!8^w!!KJv!!,`&v!Wx;bB.A-0%v*<<!5>,>!fr2,!.oAv!#0E<!8u&s!5v!!!.!!!!7%
#@ `H&:N2,!Zus&!w6N<!X/ucJlb#pv.`A9v7>o=!?qcjw7/B=!4oSs!YGUNwTJpiw(W3,!<nk#
#@ !#0E<!:t;g%4;tl#Be64w==rH&F5v!!#g:,!:bY#!#0E<!C>YQ#88T=!?ryTv=,9s!5v!!!E
#@ #!!!*Qr<!B43kw4;tl#F(x4w2/Gpv6#1%!9F%sBMZ,HJv*<<!k-6,!y/:'!#0E<!82o=!B4m
#@ 4w3&5pvc!/J/io2,!+|&v!crgl5l/3,!4>##!#0E<!B4m4w>4`H&;N2,!KsI%!#0E<!9Sp3w
#@ m2_Q5io2,!+|&v!d&.36ci2,!+|&v!crgl5,Qr<!F25pve-AJ/**/!!8^w!!F;v!!)`vpv68
#@ #t!;Yq9-F^w!!.H!!!/&#t!Zmm<vHgm<v9>e`B-8giwv*<<!-'!!!
#@ 28
#@ Ca8h%Mk17#/pXo#SG5:vP4IOwLCdOwxE1((
#@ 40
#@ kfO1%/w*!!!|Q'(Vr3<!Yx?x'!w!!!Kt&S#px6L.EnUR#gI3kw
#@ 20
#@ x
#@ 0
#@
#@ x
#@ 13
#@ nEi'FrZ!iCnc%UA/v
#@ x
#@ 14
#@ -,ZS?w:7hCu5(yG?Mw
#@ x
#@ 7
#@ &OQ<@xe|+
#@ x
#@ 5
#@ ijkIDBv
#@ x
#@ 16
#@ k%PJ:qw!d;oLIU?f:6)<
#@ x
#@ 4
#@ m'cSA
#@ x
#@ 6
#@ 1lo(F^(%
#@ x
#@ 1
#@ P!
#@ x
#@ 9
#@ q3HQBb!cr@4v
#@ x
#@ 8
#@ OfS405Kb50
#@ x
#@ 1
#@ R!
#@ i
#@ 0
#@ x
#@ 15
#@ -#l#H8&Z)F5mNaEt-E-
#@ x
#@ 9
#@ V:wLD5Q<JDP!
#@ x
#@ 8
#@ %xRQB:p2TA
#@ x
#@ 8
#@ i%97A&jmMC
#@ x
#@ 8
#@ qLK;@0dhTA
#@ x
#@ 4
#@ :p2TA
#@ x
#@ 4
#@ &jmMC
#@ 1
#@ L 0 214 102 330 317 -1
#@ 0
#@ 1 4
#@ 4
#@ DQMV6
#@ 0 0 256
#@ 8
#@ rmBq@NjkSA
#@ 1 0 0
#@ 9
#@ rmBq@q,BCF4v
#@ 2 0 0
#@ 4
#@ %xRQB
#@ 3 0 0
#@ x
#@ 4
#@ 8w`TA
#@ x
#@ 7
#@ &OQ<@xe|+
#@ x
#@ 18
#@ kaT5BnEi'Fh!cr@eRo;@Syw
#@ x
#@ 2
#@ FVw
#@ x
#@ 5
#@ ijkIDBv
#@ x
#@ 15
#@ |1CO9@wLu5'@xg:T'^(
#@ x
#@ 137
#@ 6dV<+:tJTA5lC&G1RRU?Kr3F;m8gW?Olq58/Y:EF(FV5B%ZACFi35SA5lC&G1RRU?Kr3F;m8
#@ gW?Olq58mbB'F5-=JDmEL:@gy,x3&KQ3Bq9VgCkg,<@1;wLDCqm#H+3TfD-)0C+&@?x3ALFY
#@ ?k'cOBOfS40(I%lB#1-C+svV<+A!
#@ x
#@ 4
#@ !xMTA
#@ x
#@ 94
#@ 6dV<+:tJTA5lC&G1RRU?Kr3F;m8gW?Olq58/Y:EF(FV5B%ZACFi35SAu-%lBatxX?Ai0fDGh
#@ V*F'Z9fD50:s+>Ny|3hy*:@9j+50>w_vFlXKV@uB;:+a,v
#@ x
#@ 5
#@ 3aMTA@v
#@ x
#@ 0
#@
#@ x
#@ 13
#@ #k|Z?qd,r@u,aaE?v
#@ p
#@ 39 0 404 20 0 0 160 0 3 39 39 -1 -1
#@ 404
#@ w0E<!KN2,!Gx%%!#0E<!+`vpvTvZH/m&3,!/uJv!#0E<!9=J*'M`yTv8^w!!JGv!!*cvpv2/
#@ YQ#'qrD!:1fg&5v!!!/!!!!,|/=!dKn<v>Me`BJ>'0.#3WW!0#>6#6,Ts!TG;I/m&3,!/uJv
#@ !#0E<!Lm=+'M`yTv8^w!!a7#!!*cvpv7y60%'qrD!QV-4.5v!!!3!!!!1&|=!+`vpvMvf`B3
#@ n_c&v*<<!3c`W!.c8X!xSa<!=N2,!Jm@%!w6N<!0W&=!5v.w;)No7-G^w!!/K!!!2ylf%x(k
#@ q+.|Js!5v!!!J!!!!+Qr<!?eUqv*m!m#EaDbB/JHK%v*<<!7&B9vxSa<!=N2,!Jm@%!w6N<!
#@ 0W&=!7v.w;)No7-G^w!!/K!!!4nMH&x(kq+.|Js!5v!!!J!!!!+Qr<!Aqgqv*m!m#EaDbB/J
#@ HK%v*<<!:5|TvxSa<!=N2,!Jm@%!w6N<!0W&=!9v.w;)No7-G^w!!/K!!!6+/*'y+kq++BN!
#@ !
#@ 39
#@ ;vIOwKeHK%KeHK%KeHK%K=!kwK!P+'K!P+'K!P+'K!P+'8uJv
#@ 39
#@ b9+L%j@<L%j@<L%1nn*'iLwL.j^lL.j^lL.j^lL.iUQ1.@8Kv
#@ 20
#@ x
#@ 12
#@ kaT5B`qARA@/;EF
#@ x
#@ 4
#@ 8w`TA
#@ x
#@ 20
#@ lj|Z?qd,r@eLa:@iqEY?%xRQB
#@ x
#@ 7
#@ &OQ<@xe|+
#@ x
#@ 5
#@ s85)F1v
#@ x
#@ 0
#@
#@ x
#@ 4
#@ wm<eD
#@ x
#@ 3
#@ kL2-
#@ x
#@ 18
#@ kaT5Bm<NaE1fsiCqRo;@Syw
#@ i
#@ 0
#@ x
#@ 4
#@ MyB,E
#@ x
#@ 22
#@ kaT5Bm<NaEomK;@'(ur@g^CkBHSw
#@ x
#@ 22
#@ qd,r@l-?SAg%ap@vkT;@A*q=FFhw
#@ x
#@ 18
#@ kaT5BnEi'Fh!cr@eRo;@Syw
#@ x
#@ 19
#@ kaT5BnEi'Fh!cr@eRo;@05A&
#@ x
#@ 24
#@ kaT5Bd@YjB'p/fDsT/CFyqEY?m'cSA
#@ x
#@ 21
#@ kaT5Bd@YjB6>m#Hvd<iCgKxhC1v
#@ x
#@ 27
#@ kaT5BfR:LCfR9Z?qd,[email protected]^CkBf^;-
#@ x
#@ 28
#@ kaT5Bd@YjB1?0bEld1kBf=+Y?Xv|mA%0K(F
#@ x
#@ 15
#@ kaT5BgxUgCr6m*E_I-,
#@ 0
#@ 0
#@ 0 0
#@ x
#@ 15
#@ 3aMTAu'V5Bq`ewGh0<-
#@ p
#@ 40 0 331 15 0 0 160 0 3 40 40 -1 -1
#@ 331
#@ w0E<!-fSs!O,uc/ViA9v,|8X!M`yTv8^w!!B/v!!w-*!!*`vpv'qrD!-A77w-ivpvOmm<v>M
#@ e`BBKMT+#3WW!w0E<!2uSs!O,uc/ViA9v1l8X!M`yTv8^w!!B/v!!w-*!!,rXQ#'qrD!-A77
#@ w/&YQ#Omm<v>Me`BBKMT+#3WW!w0E<!4&Ts!O,uc/ViA9v3r8X!M`yTv8^w!!B/v!!w-*!!.
#@ /:3w'qrD!-A77w18:3wOmm<v>Me`BBKMT+#3WW!w0E<!6,Ts!O,uc/ViA9v5#9X!M`yTv8^w
#@ !!B/v!!w-*!!0Apiw'qrD!-A77w3JpiwOmm<v>Me`BBKMT+#3WW!w0E<!82Ts!O,uc/ViA9v
#@ 7)9X!M`yTv8^w!!B/v!!w-*!!2SQK%'qrD!-A77w5yQK%Omm<v'0!!
#@ 40
#@ /JHK%CeHK%CeHK%CeHK%CeHK%CeHK%CeHK%CeHK%CeHK%CeHK%
#@ 40
#@ QMbpvZMbpvZMbpvZMbpvZMbpvZMbpvZMbpvZMbpvZMbpvYMbpv
#@ 15
#@ x
#@ 4
#@ wm<eD
#@ x
#@ 3
#@ kL2-
#@ x
#@ 12
#@ kaT5B`qARA@/;EF
#@ i
#@ 0
#@ x
#@ 5
#@ 3aMTA@v
#@ x
#@ 0
#@
#@ x
#@ 18
#@ kaT5Bm<NaE1fsiCqRo;@Syw
#@ x
#@ 22
#@ kaT5Bm<NaEomK;@'(ur@g^CkBHSw
#@ x
#@ 18
#@ kaT5BnEi'Fh!cr@eRo;@Syw
#@ x
#@ 19
#@ kaT5BnEi'Fh!cr@eRo;@05A&
#@ x
#@ 24
#@ kaT5Bd@YjB'p/fDsT/CFyqEY?m'cSA
#@ x
#@ 21
#@ kaT5Bd@YjB6>m#Hvd<iCgKxhC1v
#@ x
#@ 27
#@ kaT5BfR:LCfR9Z?qd,[email protected]^CkBf^;-
#@ x
#@ 28
#@ kaT5Bd@YjB1?0bEld1kBf=+Y?Xv|mA%0K(F
#@ x
#@ 15
#@ kaT5BgxUgCr6m*E_I-,
#@ 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
#@ 13
#@ qd,r@dIa:@e-%lB.v
#@ x
#@ 6
#@ 'E%6B_-v
#@ p
#@ 1 0 7 1 0 0 4 0 2 1 1 -1 -1
#@ 7
#@ ,|&v!)'!!
#@ 1
#@ z
#@ 1
#@ '!
#@ 1
#@ x
#@ 21
#@ w3F/D'gi'FrZ!iCdIa:@e-%lB.v
#@ 0
#@ 0
#@ 1 1
#@ 4
#@ %N|(F
#@ 0 0 256
#@ x
#@ 21
#@ w3F/D'gi'FrZ!iCdIa:@e-%lB.v
#@ x
#@ 5
#@ %N|(FA!
#@ p
#@ 10 0 96 15 0 0 40 0 5 10 10 -1 -1
#@ 96
#@ )Nr<!8^w!!;o!!!w3E<!19N<!3|`W!7MkUv;u&s!5v!!!4!!!!2G^3w/)Ppv:&0s!5/|X!-B
#@ W<!?PC3w-`8s!75|X!-BW<!7NE<!?M1qv6P60%,?W<!69*!!
#@ 10
#@ Jwao#CV17#10!
#@ 10
#@ |3yS#Ct6Ow*-!
#@ 15
#@ x
#@ 14
#@ #k|Z?r0H8Aw9fwGJ%%
#@ x
#@ 18
#@ kaT5Bm<NaE1fsiCqRo;@Syw
#@ x
#@ 1
#@ P!
#@ x
#@ 15
#@ kaT5BgxUgCr6m*E_I-,
#@ x
#@ 22
#@ kaT5Bm<NaEomK;@'(ur@g^CkBHSw
#@ x
#@ 4
#@ *dmID
#@ x
#@ 1
#@ -v
#@ x
#@ 14
#@ 4rBfD1-0CFq&fwGJ%%
#@ x
#@ 27
#@ fF'Z?qd,r@dIa:@e-%lBpA>cEh7|7An1g+
#@ x
#@ 5
#@ )lP)F1v
#@ x
#@ 19
#@ ,v(Z?!aiaEmo3mBm+BRAyOl,
#@ x
#@ 4
#@ 8w`TA
#@ x
#@ 5
#@ s85)F1v
#@ x
#@ 21
#@ w3F/D'gi'FrZ!iCdIa:@VhrU@?v
#@ x
#@ 18
#@ #k|Z?(FuSAhaBq@c^CkBHSw
#@ 0
#@ 0
#@ 1 3
#@ 4
#@ %N|(F
#@ 0 0 256
#@ 8
#@ o4jY?m'cSA
#@ 1 0 0
#@ 4
#@ g3IID
#@ 2 0 0
#@ x
#@ 14
#@ #k|Z?r0H8Aw9fwGJ%%
#@ p
#@ 7 0 70 13 0 0 28 0 6 7 7 -1 -1
#@ 70
#@ )Nr<!I>e`B;a9?)v*<<!&<`W!*TA9v.lvpv3on9v?o=6#4;tl#9;T=!:Apiw3rn9v-W&=!Dv
#@ mjw/QE<!;#5pvw!!
#@ 7
#@ 3Y6OwDy##
#@ 7
#@ UN>N%Je|v
#@ 13
#@ x
#@ 3
#@ _e|+
#@ x
#@ 15
#@ kaT5BgxUgCr6m*E_I-,
#@ x
#@ 6
#@ sT2TAIPw
#@ x
#@ 8
#@ m'cSANjkSA
#@ x
#@ 1
#@ +v
#@ x
#@ 5
#@ n0Hr@7v
#@ x
#@ 12
#@ #graEv_Bq@,0B(F
#@ x
#@ 4
#@ m'cSA
#@ x
#@ 6
#@ gpbSAPSw
#@ x
#@ 6
#@ AP5cE?Sw
#@ x
#@ 18
#@ kaT5Bm<NaE1fsiCqRo;@Syw
#@ 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 88 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
#@ w3F/D'gi'FrZ!iCdIa:@VhrU@?v
#@ p
#@ 5 0 80 12 1 1 20 1 6 5 5 -1 -1
#@ 80
#@ 32fv!8^w!!y(#!!w3E<!(H&s!3)T=!9_Hjw1o=6#>J,>!g@#!!ee6(!G#+3-:|/=!?e64w1f
#@ As!3L2!!8^w!!/K!!!.8UNw>>##!
#@ 5
#@ RM+7,1!
#@ 5
#@ +T>5w/!
#@ 12
#@ x
#@ 0
#@
#@ x
#@ 4
#@ q'-W@
#@ x
#@ 11
#@ :6Hr@06FiCZLc,
#@ x
#@ 10
#@ 9&TbE#KffDb:%
#@ x
#@ 18
#@ kaT5Bm<NaE1fsiCqRo;@Syw
#@ x
#@ 1
#@ P!
#@ x
#@ 15
#@ kaT5BgxUgCr6m*E_I-,
#@ x
#@ 4
#@ @)qU@
#@ x
#@ 6
#@ sT2TAIPw
#@ x
#@ 7
#@ B9:8@g^;-
#@ x
#@ 1
#@ A!
#@ x
#@ 28
#@ kaT5Bd@YjB1?0bEld1kBf=+Y?Xv|mA%0K(F
#@ 1
#@ L 0 49 10 62 42 -1
#@ 1
#@ F
#@ 1 1 2
#@ 1
#@ 3
#@ 0 4
#@ 7
#@ B9:8@g^;-
#@ 0 0 0
#@ 0
#@
#@ 1 0 512
#@ 0
#@
#@ 2 0 512
#@ 3
#@ kL2-
#@ 3 0 0
#@ x
#@ 21
#@ w3F/D'gi'FrZ!iC`jbSAp#K^F<v
#@ p
#@ 3 0 36 10 0 0 16 0 6 3 3 -1 -1
#@ 36
#@ /rS=!;-x^)(H&s!,`yTv5Qr<!<)Ks!/HW<!Rlqo+/Zr!!
#@ 3
#@ <V##
#@ 3
#@ xrE!
#@ 10
#@ x
#@ 27
#@ kaT5BfR:LCfR9Z?qd,[email protected]^CkBf^;-
#@ x
#@ 5
#@ s85)F1v
#@ x
#@ 4
#@ m'cSA
#@ x
#@ 6
#@ gpbSAPSw
#@ x
#@ 6
#@ AP5cE?Sw
#@ x
#@ 18
#@ kaT5Bm<NaE1fsiCqRo;@Syw
#@ x
#@ 1
#@ P!
#@ x
#@ 15
#@ kaT5BgxUgCr6m*E_I-,
#@ x
#@ 15
#@ 3aMTAu'V5Bq`ewGh0<-
#@ x
#@ 0
#@
#@ 0
#@ 0
#@ 0 0
#@ x
#@ 27
#@ fF'Z?qd,r@dIa:@e-%lBpA>cEh7|7An1g+
#@ x
#@ 14
#@ (KxhCN1-.D%)^aEQ(%
#@ p
#@ 14 0 131 13 0 0 60 0 4 14 14 -1 -1
#@ 131
#@ ,|&v!,cSs!/)13w8;y`B64y`'#3WW!><u+!3oh)Bz1fSs!/)13w+l4pv(0*!!0KA9v.EW<!,
#@ H<<!2`8s!,|&v!1rSs!/)13w//Ypv(0*!!4oXQ#.EW<!,H<<!6`8s!,|&v!5)Ts!/)13w3G(
#@ qv(0*!!8>piw**!!
#@ 14
#@ 9yLm#Mngm#Engm#3<!
#@ 14
#@ f?J8#Engm#Engm#29!
#@ 13
#@ x
#@ 4
#@ DP)*F
#@ x
#@ 33
#@ =P6X5r*r<+fF'Z?w3F/D'gi'FrZ!iCdIa:@e-%lB.v
#@ x
#@ 5
#@ uKhgCA!
#@ x
#@ 7
#@ =P6X5R^`w
#@ x
#@ 31
#@ 91VE+ri+@G,XVTAp<HSAihrU@gKxhCnWg:@f4g+
#@ x
#@ 20
#@ 91VE+!aiaEvLQ3Bq9VgChIs#?
#@ x
#@ 51
#@ 4CDE+?NfCFP'bH0^YU^,ycU?+wDblB,7DoA;%#lB4RME+B`xQHw!saEQ0(d0:i,.
#@ x
#@ 38
#@ :tJTA6ovlBh|2jB'E(yGjf<iCulSCF3+uD+(XKV@K/qT,=;w
#@ x
#@ 38
#@ 9nATAqKDTAF.fK/6nCE+6NZ?E=Jd#Hg*;1C)+VE+(XKV@c,v
#@ x
#@ 40
#@ 9nATA,rP-E`:p!.).Kp-ZT<p>il+t+/=4=I<NQC+'OcC++xuC+
#@ x
#@ 56
#@ KW&dEn=+Y?w&|C+LReK/C?pBDbnmX?7,V`F'^m*E9H,502WIhCjcreDdRo;@QhNV,%*qU@
#@ x
#@ 1
#@ Iv
#@ x
#@ 4
#@ 2u5DF
#@ 0
#@ 0
#@ 2 2
#@ 8
#@ m'cSANjkSA
#@ 0 0 256
#@ 4
#@ %N|(F
#@ 1 0 256
#@ x
#@ 18
#@ #k|Z?(FuSAhaBq@c^CkBHSw
#@ p
#@ 8 0 116 12 0 0 36 0 6 8 8 -1 -1
#@ 116
#@ w0E<!1#T=!5S6jw0re9v;Yq9-#_w!!/K!!!)`vpv?ntt!5v!!!Q!!!!w-<<!1Gwjw*TA9v;,
#@ GUvn2_Q5m&3,!/uJv!#0E<!EOe*'R8:3w!N3,!/uJv!#0E<!Fg4+'8^w!!/K!!!,&tl#@_##
#@ !
#@ 8
#@ E'#i%b`oh%
#@ 8
#@ ;enF0^w'M%
#@ 12
#@ x
#@ 4
#@ m'cSA
#@ x
#@ 6
#@ 1lo(F^(%
#@ x
#@ 18
#@ kaT5Bm<NaE1fsiCqRo;@Syw
#@ x
#@ 1
#@ P!
#@ x
#@ 15
#@ kaT5BgxUgCr6m*E_I-,
#@ x
#@ 17
#@ 7pTZ?ve'Z?qUbOBgKxhC1v
#@ x
#@ 24
#@ kaT5Bd@YjB'p/fDsT/CFyqEY?m'cSA
#@ x
#@ 4
#@ 8w`TA
#@ x
#@ 15
#@ 7pTZ?3CpV@m@|mAytf+
#@ x
#@ 21
#@ kaT5Bd@YjB6>m#Hvd<iCgKxhC1v
#@ x
#@ 0
#@
#@ x
#@ 5
#@ s85)F1v
#@ 0
#@ 0
#@ 0 0
#@ x
#@ 19
#@ ,v(Z?!aiaEmo3mBm+BRAyOl,
#@ x
#@ 30
#@ o4jY?m'cSA:uMTAF%aWF4'MV6t!>SAa%YbD@Sw
#@ p
#@ 47 0 617 38 2 0 232 1 8 47 55 -1 -1
#@ 617
#@ =Sq9-|^w!!E8v!!#**!!&<`W!2?W<!-BE<!1H<<!4c&=!B4`H&_y)jBw=&9=v*<<!>Vq9-|^
#@ w!!E8v!!#**!!,rXQ#8c8=!3BE<!1H<<!4c&=!B4`H&+#PdBEfIQ,v*<<!w0E<!75T=!6G(q
#@ v2G^3w-u4Uv6/Ypv;,9s!5v!!!Q!!!!;.*kwgfvdB>'6<*v*<<!0G60%=,f=!M13-&<vNH&?
#@ _(;vZ+ic&8^w!!.H!!!6+/*'NMe`B.A-0%v*<<!MO_qv8^w!!.H!!!6+/*'PSe`BbiLQ5v*<
#@ <!E*<<!Z^w!!<r!!!/ApiwJ4nmwEk>:v<#Ts!Z+ic&8^w!!n^#!!:I+'(,e<)!p53,!0&Tv!
#@ #0E<!C1_':Les<!xSa<!Ar4dB.A-0%v*<<!Rd%8#DRE5w4Z/s!5v!!!+!!!!5/p<vKte`B@:
#@ u8Fv*<<!Ceq9-`^w!!HAv!!=d'w),e<)!HqQ>!NPbpv:N2,!+|&v!crgl5Z+ic&AY4,!^;L'
#@ !#0E<!X%2?!e-96wNd*svxY5:,5v!!!5!!!!D=V?!U5,UvC%DVv8^w!!+?!!!1;l!,;Vkt!5
#@ v!!!a!!!!qJqQ5824,!O6n%!,,:3wTo!%*5v!!!.!!!!U/qK&>N2,!+|&v!d&.36aRe`';o8
#@ X!Z+ic&QKf6wN-XsvjZs(1E!<rrbXkt!5v!!!O!!!!hF#!!GoRQ,6`8X!xKn<vujZRI#3WW!
#@ ?WW<!9rtsvm,o<vKte`B:Xs#)v*<<!%&yR5!6SQ,7c8X!Z+ic&z
#@ 47
#@ 8bgm#U(hm#Zsv+'`Q,N%Z'9h%XNgw)Sd&M%JLi-&PLdjwZsrL%Txmn#V4Uv
#@ 55
#@ !w!!!<Jr;veIr;v>@&a0l*sL%/w*!!2,QT#=b&M%wboZ-uDMU4WF.4wRxy4w#@;D)F;X!
#@ 38
#@ x
#@ 4
#@ *dmID
#@ x
#@ 1
#@ Hv
#@ x
#@ 18
#@ kaT5BnEi'Fh!cr@eRo;@Syw
#@ x
#@ 16
#@ JaGQB*kbD+))2dEV%BE+
#@ x
#@ 23
#@ lj|Z?!aiaEw>m#H8&Z)F5mNaEt-E-
#@ x
#@ 4
#@ J2*D+
#@ x
#@ 12
#@ vAE-0;oU6036viC
#@ x
#@ 1
#@ >v
#@ x
#@ 19
#@ kaT5BnEi'Fh!cr@eRo;@05A&
#@ x
#@ 21
#@ JaGQB*kbD+-,ZS?w:7hCMD/yEA!
#@ x
#@ 23
#@ lj|Z?!aiaEw>m#H8&Z)F5mNaEt-E-
#@ x
#@ 23
#@ lj|Z?!aiaEw>m#H8&Z)F5mNaEt-E-
#@ x
#@ 27
#@ kaT5BfR:LCfR9Z?qd,[email protected]^CkBf^;-
#@ x
#@ 18
#@ kaT5Bm<NaE1fsiCqRo;@Syw
#@ x
#@ 1
#@ P!
#@ x
#@ 15
#@ kaT5BgxUgCr6m*E_I-,
#@ x
#@ 10
#@ 3XKV@:.BbCMYw
#@ x
#@ 1
#@ Cv
#@ x
#@ 0
#@
#@ i
#@ 0
#@ x
#@ 4
#@ 8w`TA
#@ x
#@ 4
#@ DP)*F
#@ x
#@ 8
#@ 'paU64eWP.
#@ x
#@ 30
#@ ekTfD<T;*:3cN<@&2oC+jFfRA3V#D+0lTKDZKv
#@ x
#@ 1
#@ R!
#@ x
#@ 13
#@ Ip><@GtJV6t?_(2K!
#@ x
#@ 6
#@ :<ylBLYw
#@ x
#@ 5
#@ wRH<@8v
#@ x
#@ 7
#@ 9WmIDeI-,
#@ x
#@ 1
#@ X!
#@ x
#@ 7
#@ =P6X5R^`w
#@ x
#@ 1
#@ B!
#@ x
#@ 1
#@ A!
#@ x
#@ 5
#@ s85)F1v
#@ x
#@ 4
#@ +u(*F
#@ x
#@ 4
#@ u3uSA
#@ x
#@ 5
#@ )lP)F1v
#@ x
#@ 0
#@
#@ 2
#@ L 0 237 287 541 525 -1
#@ C 0 558 12 -1 -1 568
#@ 0
#@ 3 10
#@ 8
#@ o4jY?m'cSA
#@ 0 0 256
#@ 5
#@ f9&P9d!
#@ 1 0 256
#@ 15
#@ f9&P9RZwNBWW+l9Zyf+
#@ 2 0 256
#@ 4
#@ g3IID
#@ 3 0 0
#@ 3
#@ d4w,
#@ 4 0 0
#@ 4
#@ lWNeD
#@ 5 0 0
#@ 9
#@ ,uk)Fdd;JD1v
#@ 6 0 0
#@ 10
#@ jFfRAXOg:7x%%
#@ 7 0 0
#@ 4
#@ u3uSA
#@ 8 0 0
#@ 5
#@ bT/bE>v
#@ 9 0 0
#@ x
#@ 15
#@ qd,r@s&O+E,=^Z?YYK+
#@ p
#@ 9 0 82 14 0 0 36 0 5 9 9 -1 -1
#@ 82
#@ /rS=!1Gwjw'E&s!H=rH&*TA9v?Ae`B4v&*'v*<<!2uA=!1rSs!8BW<!:,,pv/#YQ#7c&v!.E
#@ W<!<,,pv15:3w88UNw88o9v8S:qvv!!
#@ 9
#@ AqCm#CV17#,!
#@ 9
#@ TFxS#Ct6Ow%!
#@ 14
#@ x
#@ 18
#@ kaT5Bm<NaE1fsiCqRo;@Syw
#@ x
#@ 1
#@ P!
#@ x
#@ 15
#@ kaT5BgxUgCr6m*E_I-,
#@ x
#@ 22
#@ kaT5Bm<NaEomK;@'(ur@g^CkBHSw
#@ x
#@ 21
#@ w3F/D'gi'FrZ!iCdIa:@VhrU@?v
#@ x
#@ 4
#@ *dmID
#@ x
#@ 1
#@ -v
#@ x
#@ 14
#@ 4rBfD1-0CFq&fwGJ%%
#@ x
#@ 29
#@ fF'Z?qd,r@s&O+E,=^Z?c_dX?,CHr@v9siC1v
#@ x
#@ 5
#@ )lP)F1v
#@ x
#@ 19
#@ ,v(Z?!aiaEmo3mBm+BRAyOl,
#@ x
#@ 4
#@ 8w`TA
#@ x
#@ 5
#@ s85)F1v
#@ x
#@ 21
#@ w3F/D'gi'FrZ!iC`jbSAp#K^F<v
#@ 0
#@ 0
#@ 1 3
#@ 4
#@ %N|(F
#@ 0 0 256
#@ 8
#@ o4jY?m'cSA
#@ 1 0 0
#@ 4
#@ g3IID
#@ 2 0 0
#@ x
#@ 29
#@ fF'Z?qd,r@s&O+E,=^Z?c_dX?,CHr@v9siC1v
#@ x
#@ 13
#@ m'cSANjkSA'E%6B?v
#@ p
#@ 9 0 109 8 1 1 36 1 4 9 9 -1 -1
#@ 109
#@ ,|&v!,cSs!8^w!!MPv!!%<`W!C&0s!d!!!!eC#!!XJIL&,|&v!35>:v1fSs!4!MU!)0*!!1T
#@ yTv.EW<!?JJ`B64y`'#3WW!><u+!3oh)Bz.EW<!,H<<!3`8s!,|&v!2uSs!z
#@ 9
#@ W,Vf&F@`g%*!
#@ 9
#@ lB/n#b1Vm#)!
#@ 8
#@ x
#@ 4
#@ DP)*F
#@ x
#@ 30
#@ 91VE+yM*:@!^IIDX_!Y?o4jY?r^oRAuoggCOSw
#@ x
#@ 28
#@ kaT5Bd@YjB1?0bEld1kBf=+Y?Xv|mA%0K(F
#@ x
#@ 8
#@ i%97AgkyC+
#@ x
#@ 0
#@
#@ x
#@ 36
#@ =P6X5r*r<+fF'Z?qd,r@s&O+E,=^Z?c_dX?,CHr@pN_TA
#@ x
#@ 7
#@ =P6X5R^`w
#@ x
#@ 4
#@ 2u5DF
#@ 1
#@ L 0 36 12 51 29 -1
#@ 1
#@ F
#@ 1 2 3
#@ 1
#@ 4
#@ 2 5
#@ 8
#@ m'cSANjkSA
#@ 0 0 256
#@ 4
#@ %N|(F
#@ 1 0 256
#@ 0
#@
#@ 2 0 512
#@ 0
#@
#@ 3 0 512
#@ 2
#@ =Jw
#@ 4 0 0
#@ x
#@ 18
#@ qd,r@yR>SAfsUgCkg,<@b:%
#@ x
#@ 11
#@ 0Q%hCgKxhC,tEw
#@ p
#@ 10 0 99 15 0 0 40 0 5 10 10 -1 -1
#@ 99
#@ /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<!9NE<!BS:qv7YQK%(w!!
#@ 10
#@ GFIOwG17n#3B!
#@ 10
#@ Vv)7#Gh17#0-!
#@ 15
#@ x
#@ 18
#@ kaT5Bm<NaE1fsiCqRo;@Syw
#@ x
#@ 1
#@ P!
#@ x
#@ 15
#@ kaT5BgxUgCr6m*E_I-,
#@ x
#@ 22
#@ kaT5Bm<NaEomK;@'(ur@g^CkBHSw
#@ x
#@ 4
#@ *dmID
#@ x
#@ 1
#@ -v
#@ x
#@ 14
#@ 4rBfD1-0CFq&fwGJ%%
#@ x
#@ 4
#@ DP)*F
#@ x
#@ 36
#@ =P6X5r*r<+fF'Z?qd,r@yR>SAfsUgCg'm*E!YfRA(pDTA
#@ x
#@ 7
#@ A;lcE_iGw
#@ x
#@ 7
#@ =P6X5R^`w
#@ x
#@ 5
#@ )lP)F1v
#@ x
#@ 19
#@ ,v(Z?!aiaEmo3mBm+BRAyOl,
#@ x
#@ 5
#@ s85)F1v
#@ x
#@ 21
#@ w3F/D'gi'FrZ!iC`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
#@ 22
#@ qd,r@f9DTAf=+Y?/EelBu'VgCBJw
#@ p
#@ 11 0 113 17 0 0 44 0 5 11 11 -1 -1
#@ 113
#@ )Nr<!8^w!!;o!!!w3E<!19N<!3|`W!7MkUv;u&s!5v!!!4!!!!2G^3w/)Ppv:&0s!5/|X!-B
#@ W<!6TN<!6`8s!62|X!6&'v!1fSs!7Yw4w5G(qv4Gpiw5|8X!<vR4w2,f=!=fAs!9)s<!z
#@ 11
#@ Jwao#I7*1%<#0v
#@ 11
#@ |3yS#G17n#7ZE!
#@ 17
#@ x
#@ 14
#@ #k|Z?r0H8Aw9fwGJ%%
#@ x
#@ 18
#@ kaT5Bm<NaE1fsiCqRo;@Syw
#@ x
#@ 1
#@ P!
#@ x
#@ 15
#@ kaT5BgxUgCr6m*E_I-,
#@ x
#@ 22
#@ kaT5Bm<NaEomK;@'(ur@g^CkBHSw
#@ x
#@ 4
#@ *dmID
#@ x
#@ 1
#@ -v
#@ x
#@ 14
#@ 4rBfD1-0CFq&fwGJ%%
#@ x
#@ 4
#@ DP)*F
#@ x
#@ 45
#@ =P6X5r*r<+fF'Z?qd,r@f9DTAf=+Y?/EelBu'VgCjxTZ?,CHr@(okcE1v
#@ x
#@ 7
#@ A;lcE_iGw
#@ x
#@ 7
#@ =P6X5R^`w
#@ x
#@ 5
#@ )lP)F1v
#@ x
#@ 19
#@ ,v(Z?!aiaEmo3mBm+BRAyOl,
#@ x
#@ 5
#@ s85)F1v
#@ x
#@ 4
#@ 8w`TA
#@ x
#@ 21
#@ w3F/D'gi'FrZ!iC`jbSAp#K^F<v
#@ 0
#@ 0
#@ 1 3
#@ 9
#@ o4jY?m'cSAQ!
#@ 0 0 256
#@ 8
#@ o4jY?m'cSA
#@ 1 0 0
#@ 2
#@ Mtw
#@ 2 0 0
#@ x
#@ 15
#@ rpwhC;Z2b3<?<+EfqT+
#@ 0
#@ 0
#@ }
#@ # -- End source /cad/synopsys/synthesis/cur/auxx/syn/lc_commands.tbc
#@
#@ if { $synopsys_program_name == "dc_shell" && \
#@ [shell_is_in_topographical_mode] && [string match "*NXT Version*"
$sh_full_product_version]} {
#@ source ${synopsys_root}/auxx/syn/libcorr.tbc
#@ }
#@
#@ if {$synopsys_program_name == "dc_shell"} {
#@ if {[string match "*NXT Version*" $sh_full_product_version]} {
#@ source ${synopsys_root}/auxx/syn/scripts/set_cdc_restrictions.tbc
#@ }
#@ }
#@ # -- Starting source
/cad/synopsys/synthesis/cur/auxx/syn/scripts/set_cdc_restrictions.tbc
#@
#@ # -- End source /cad/synopsys/synthesis/cur/admin/setup/.synopsys_dc.setup
#@ enable_write_lib_mode
#@ read_lib tcbn07_bwph240l11p57pd_pm_ulvttt_0p85v_85c_typical_hm_lvf_p_ccs.lib -
no_warnings >> lib_conv.log
#@ write_lib tcbn07_bwph240l11p57pd_pm_ulvttt_0p85v_85c_typical_ccs -format db -
output ./tcbn07_bwph240l11p57pd_pm_ulvttt_0p85v_85c_typical_hm_lvf_p_ccs.db
#@ exit