Eetop - CN VoltusMIGcom
Eetop - CN VoltusMIGcom
Cadence Design Systems, Inc. (Cadence), 2655 Seely Ave., San Jose, CA 95134, USA.
Trademarks: Trademarks and service marks of Cadence Design Systems, Inc. (Cadence)
contained in this document are attributed to Cadence with the appropriate symbol. For queries
regarding Cadence’s trademarks, contact the corporate legal department at the address shown
above or call 1-800-862-4522.
Restricted Print Permission: This publication is protected by copyright and any unauthorized use
of this publication may violate copyright, trademark, and other laws. Except as specified in this
permission statement, this publication may not be copied, reproduced, modified, published,
uploaded, posted, transmitted, or distributed in any way, without prior written permission from
Cadence. This statement grants you permission to print one (1) hard copy of this publication subject
to the following conditions:
1. The publication may be used solely for personal, informational, and noncommercial purposes;
2. The publication may not be modified in any way;
3. Any copy of the publication or portion thereof must include all original copyright, trademark,
and other proprietary notices and this permission statement; and
4. Cadence reserves the right to revoke this authorization at any time, and any such use shall be
discontinued immediately upon written notice from Cadence.
Disclaimer: Information in this publication is subject to change without notice and does not
represent a commitment on the part of Cadence. The information contained herein is the proprietary
and confidential information of Cadence or its licensors, and is supplied subject to, and may be
used only by Cadence’s customer in accordance with, a written agreement between Cadence and
its customer. Except as may be explicitly set forth in such agreement, Cadence does not make, and
expressly disclaims, any representations or warranties as to the completeness, accuracy or
usefulness of the information contained in this document. Cadence does not warrant that use of
such information will not infringe any third party rights, nor does Cadence assume any liability for
damages or costs of any kind that may result from use of such information.
Contents
About This Manual 5
How This Document Is Organized 5
Related Documents 5
Voltus Stylus Common UI Documentation 5
1 6
Introduction to Stylus 6
2 13
Stylus Common UI Initialization 13
Common UI Initialization Flow and Considerations 13
Initialization Flow 14
Initialization Considerations 16
Flows in Common UI and the Supported Tools 18
Initialization 21
Initialization Flows - MMMC Mode and Simple 23
Initialization Flow - MMMC Mode 24
Initialization Flow - Simple 27
3 29
Database Access and Handling 29
Working with get_db and set_db 29
Legacy vs. Stylus Common UI Database Object Commands 32
Dual Ported Objects 34
Significant get_db Objects 35
4 38
Foundation Flows 38
Related Information 38
5 39
Flowkit 39
The Flowkit Stylus Flow 39
Related Information 42
6 44
flowtool 44
Related Information 45
7 46
Uniform Logging 46
8 49
Uniform Startup 49
Related Information 50
9 51
Metrics 51
Stylus Common UI Metrics 51
Metric Commands 53
Metric Object Definition 54
Snapshots 55
Snapshots Hierarchy and Inheritance 57
Snapshots Inheritance 58
Streaming Metrics 60
Related Documents
For more information about Stylus Common UI, see the following documents. You can access these
and other Cadence documents using the Cadence Help documentation system.
Introduction to Stylus
The Stylus Common User Interface (Common UI from this point onwards) has been designed to be
used across Genus, Joules, Modus, Innovus, Tempus, and Voltus tools. By providing a common
interface from RTL to signoff, Common UI enhances user experience by making it easier to work
with multiple Cadence products.
Common UI simplifies command naming and aligns common implementation methods across
Cadence digital and signoff tools. For example, the processes of design initialization, database
access, command consistency, and metric collection have all been streamlined and simplified. In
addition, updated and shared methods have been added to run, define, and deploy reference flows.
These updated interfaces and reference flows increase productivity by delivering a familiar interface
across core implementation and signoff products. You can take advantage of consistently robust
RTL-to-signoff reporting and management, as well as a customizable environment.
The key features of Common UI are:
Common database access methods in all tools
You can now use a single command, get_db, to query and filter all database
attributes. get_db replaces dbGet, get_ccopt_property, and various other get methods. It
includes get_property timing attributes, although get_property is still retained for SDC
usage.
The set_db and reset_db commands are the companion commands to set values.
For more information, refer to the Working with get_db and set_db chapter of the
Stylus Common UI Migration Guide.
Common initialization flow with common MMMC file
The initialization flow is now the same for all the tools and uses the same MMMC file.
A new timing_condition object has been added to the existing MMMC syntax in the MMMC
file. This object is required by Common UI and makes it possible to:
Remove all timing data from power_intent files
Bind power_domains to the MMMC timing data more easily.
For more information, refer to the Common UI Initialization Flow and Considerations
chapter of the Stylus Common UI Migration Guide and the following initialization-related
commands in the Text Command Reference:
read_mmmc
read_physical
read_netlist
read_power_intent
init_design
Common GUI
Common UI provides a uniform graphical user interface across tools with consistent menus,
widgets, and forms. The menus are organized in the same order, although each tool only
shows the menus or sub-menus for commands supported by that tool. The widgets and forms
for common commands and windows are the same.
assignBump assign_bumps
-area -area
-constraint_file -constraint_file
...
...
For example, the legacy command
innovus 1> assignBump -multiBumpToMultiPad
is
innovus 1> assign_bumps -multi_bumps_to_multi_pads
in Common UI.
You can use the eval_legacy command to run a legacy command in the legacy Tcl
interpreter. In normal usage, this command is not required. However, it may be needed
in cases where some legacy usage is not yet available in Common UI. This command is
intended as a temporary workaround as users transition to Common UI and will be
removed in a future release.
Consistent usage across tools
All global values are now root attributes and accessed the same way across tools.
The previous setXXXMode options and global Tcl vars are replaced with root attributes
that are accessed/modified with get_db/set_db/reset_db. You can check the mapping of
these legacy mode commands by using the get_common_ui_map command. For example,
you can check the mapping for the legacy setDesignMode command as follows:
innovus 2> get_common_ui_map setDesignMode
setDesignMode set_db
-addPhysicalCell add_filler_cell_name_style
-expressRoute design_express_route
-flowEffort design_flow_effort
...
You can also check the mapping for any legacy Tcl global in the same way:
innovus 2> get_common_ui_map dbgLefDefOutVersion
dbgLefDefOutVersion write_def_lef_out_version
scripts into Common UI Tcl scripts. Although this command does not handle 100% of the
legacy commands, it does handle most of the legacy commands and adds comments
were manual checking or fixing is needed.
A single help command can now be used to obtain information about attributes.
commands, messages, and objects. The help command facilitates discovery and self-
help. It supports pattern matching across command, object and attribute names.
For more information on using help, see help.
Instead of selecting objects of a specific type, if you want to select objects within a
specific area or defined by a specific location, you can use
the gui_select command in Common UI.
Similarly, a single command, deselect_obj, can be used to deselect different
types of objects. The deselect_obj command in Common UI replaces the
following legacy deselection commands:
deselect_bump
deselectBusGuide
deselectGroup
deselectInst
deselectInstByCellName
deselectInstOnNet
deselectIOPin
deselectModule
deselectNet
deselectPin
Instead of deselecting objects of a specific type, if you want to deselect all objects
or objects within a specific area or defined by a specific location, you can use
the gui_deselect command in Common UI.
The delete_obj command can replace some of the legacy delete* commands.
The following obj_types can be deleted through this command: bump bus_guide,
custom_line, custom_rect, custom_text, group, marker, net_group, pin_guide,
pin_group, pin_blockage, place_blockage, resize_blockage, route_blockage, row,
special_wire, special_via, and text.
Note that several delete_* commands have special options, so they have been
retained in Common UI.
Uniform logging
Command logging plays a vital role in the debug process. Stylus Common UI provides
uniform logging across products by logging all commands in the log file, irrespective of
whether they are issued interactively or through startup files and scripts.
For more information, refer to the Uniform Startup chapter of the Innovus Stylus Common UI
Migration Guide.
Initialization Flow
The steps in the basic flow of Common UI Initialization are explained in the table below.
1. Timing During the Timing step, the timing libraries and constraints are specified. The
Timing step is a combination of Setup and Load. The data that is loaded are the
library sets pointed to by the set_analysis_view in the MMMC file.
2. In this step, the physical data is loaded into the database. Both LEF and
Physical OpenAccess (OA) data are supported. Captables and QRC files are defined in
the MMMC file with the create_rc_corner command. Therefore, loading of these
is deferred to init when the full MMMC data is available.
This step is optional because Synthesis and STA do not always require
physical data. It is also optional for implementation to support timing
regressions.
The Physical Step is a Load function. All data specified in this step is loaded
into the database.
3. Design In the Design step, the design data is in the form of a Verilog gate level netlist, or
in the form of Verilog, VHDL, or System Verilog RTL. In the case of a netlist, a
single command will read the netlist as well as elaborate. After this single
command, the database is fully populated with the design data.
In the case of RTL, there is a two-step process – reading the RTL and then
elaborating. Reading the RTL is with the specific language and parameters.
Elaborating is assembling the RTL into a fully-populated and consistent design
view. Elaboration can also do additional RTL reads to resolve missing blocks,
depending on the RTL search paths. Once elaboration is complete, the design
is consistent.
An optional floorplan can be loaded after the design is elaborated. Both the
Innovus floorplan file format and the DEF file format are supported. If a floorplan
file format is used, it must be read before the power intent is read. This ensures
that the power intent power rails and definitions are used.
The Design Step is always a Load function.
4. Power During the Power Step, the power intent is set up in the database attributes.
Both CPF and IEEE 1801 are supported. In Common UI, timing intent is
removed from power intent. As a result, if the CPF contains timing intent
(nominal conditions or analysis views), an error will be issued unless the user
specifies to ignore the timing.
The Power Step is optional and only required if the design needs a
power_intent file. Only db attributes are set during this step. Binding of power
domains, loading of power cells, etc is not done until the Init Step.
5. Init The Init step is when the full database is prepared for execution. The constraints
are loaded into the correct mode, the power intent is loaded and applied to the
appropriate instances, and the operating conditions are applied to the power
domains. Extensive error checking is performed, including checking of objects,
and checking for completeness of data. Once the init step is complete, the
design is fully ready for execution.
Initialization Considerations
Following are the design initialization considerations:
Synthesis Considerations
Implementation Considerations
STA Considerations
Synthesis Considerations
Library Data
HDL elaboration requires the library data to prevent unresolved references. HDL can contain
references to macros and standard cells. The current elaborator makes assumptions about
port directions if a library cell is not present, and these assumptions can dramatically impact
the resulting netlist. As a result, library data is needed before the design elaboration.
Physical Data
Synthesis does not always require physical data, that is, LEF, OA or QRC files. Reading this
data is optional.
Design Manipulation
HDL elaboration can be quite complex due to various factors such as different languages and
design parameters. For example, in some flows the full chip is elaborated to determine the
parameters for the CPU. The design is then re-elaborated at the CPU level with the
parameters. In addition, you may ungroup or rename the hierarchy before applying power
intent or timing intent. Therefore, the initialization flow must support breaks for the commands
after design import and before applying timing or power intent.
Simple Mode
Both a simple setup, and an MMMC setup are supported.
Implementation Considerations
Back end is relatively simple from an initialization perspective. If timing is needed, only an MMMC
setup is allowed, and design manipulation are not required. However, the design, timing, and
power intent should be fully resolved before execution.
Immediate Implementation Load
In Common UI, the implementation immediately loads some data. In Innovus legacy usage,
all loading of data is deferred until init_design. In Common UI, specific data is loaded into the
database at command invocation. This immediate load will be common across Synthesis,
Implementation, and STA.
Physical Only Flow
Common UI supports a physical only flow – using OA/LEF without the logical or timing
libraries. This is enabled by reading the physical data first without reading the timing data.
When a physical-only flow is used, the timing setup and power intent setup is skipped.
STA Considerations
Simple Mode
STA needs to support a simple non-MMMC mode. The mechanism will be identical between
synthesis and STA.
Physical Data
STA does not always require physical data, such as OA and QRC. Reading this data is
optional.
The following table shows the different flows in Common UI and the tools that they support.
The following table shows the different flows in Common UI and the tools that they support.
Initialization
Initialization is the first step in Stylus Common UI. It is the process of reading libraries, physical
Initialization is the first step in Stylus Common UI. It is the process of reading libraries, physical
data, HDL/netlist, power intent, and constraints. After initialization, the design is in a consistent
state, and is ready for manipulation or timing.
Earlier, various tools used different initialization strategies. For example, Genus used an
incremental approach, with each command being an autonomous operation. Once the libraries
were loaded, the user could query the libraries. On the other hand, Innovus uses a setup or load
strategy where variables are first defined pointing to the various design elements. Then, an
initialization command is issued and all the elements are loaded at once. Tempus supports
versions of both these strategies.
In Common UI, there is a single initialization methodology that works across Genus, Innovus, and
Tempus. Common UI provides two options in the initialization strategy, one for MMMC (Multi-Mode,
Multi-Corner) and one for a “simple” methodology. The simple methodology does not require
detailed MMMC.
The Common UI initialization strategy mostly has autonomous commands, with the db being in a
consistent state after each initialization step is completed. The exception to this are power intent
and full MMMC timing commands. These commands are deferred until an initialization command is
issued.
Types of Initialization
The following table describes the various initialization types.
Types Description
Setup Sets the Common UI database attributes with the specified information. However, it
does not populate the database. Some basic error checking may be done, but only on
the database objects.
Load Loads the database with the specified objects. Error checking on the data being
loaded can be done. The database is consistent, but is not yet ready for execution.
Init Populates the database with the full object set and does binding between timing
modes and domains. The database is fully consistent and Common UI is ready for
execution.
design manipulation. In this step the error checking is limited to CPF or UPF syntax checking.
After this command is issued and the user is satisfied with the results, the next step is initialization.
Initialization Flow - MMMC Mode - Init Step
The init_design command is an explicit command that causes the full system to be initialized.
With this step, the remaining MMMC timing information is loaded, the power intent is initialized, the
modes are bound to the power domains, and the design is prepared for timing. Once init is
complete, the database is completely consistent and is ready for execution.
In this step, libraries are loaded with the read_libs command. This command sets the appropriate
MMMC attributes with default names.
Initialization Flow - Simple - Physical Step
In the Physical Step, LEF or OA databases are loaded via read_physical as done in the MMMC
Physical Step. In addition, QRC files can be loaded with read_qrc. This will effectively do a
create_rc_corner –name default_emulate_rc_corner, and will update the delay corner to include
this default RC corner.
Initialization Flow - Simple - Design Step
This step is identical to the MMMC Design Step. Both command sets (read_netlist or
read_hdl/elaborate) are supported. The read_def command is also supported as an optional
step.The read_floorplan command is not supported because Innovus does not support the simple
mode.
Initialization Flow - Simple - Power Step
Power intent is not supported in the Simple mode. If read_libs was used to initialize the libraries,
read_power_intent will return an error.
get_db insts -if {.name == i1/*} #returns all inst objects with .name matching i1/*
get_db insts .name i1/* #returns all inst names (not objects) matching i1/*
below:
help -obj pin #note, "help pin:" also works, the : means only -obj help is desired,
so then -obj is not needed
Attributes:
arrival_max_fall(pin)
Returns the latest falling arrival time ...
arrival_max_rise(pin)
...
You can also use the <tab> key to see the attribute names of the current object when entering a
get_db command:
dbGet $my_pins.??
If some of the values are not computed (like timing-graph data), and you want to force them to be
computed anyway, run:
get_db $my_pins .slack_max* -computed
Object: pin:top/CG/BC1/Y
slack_max: 9227.4
slack_max_edge: rise
slack_max_fall: inf
slack_max_rise: 9227.4
...
Object Chaining
Object chaining enables you to link to the related objects allowed like dbGet.
Note: dbGet requires no space before the "." (dbGet $nets.name), but get_db requires at least one
space before the "."
For example:
Pins or ports that drive a specific pin:
get_db pin:top/rst_reg/D .net.drivers
Examples
The following command finds all the insts that start with i1/i2/ and end with _buf:
get_db insts i1/i2/*_buf
inst:top/i1/i2/test_buf inst:top/i1/i2/i3/test_buf ...
The following get_db command uses -foreach to count the number of base_cell used in the
netlist inside the cell_count Tcl array.
get_db insts .base_cell -foreach {incr cell_count($obj(.name))}
array get cell_count #write out the array with the counts
BUF1 20 AND2 30 ...
The following command defines a user-defined attribute, and then adds it on a net based on
its fanout:
define_attribute high_fanout \
-category test \
-data_type bool \
-obj_type net
set_db [get_db nets -if {.num_loads > 20}] .high_fanout true
get_db net:clk .high_fanout
true
The following command count all the pins below the hinst, or all pins at one level of the
hierarchy
llength [get_db hinst:tdsp_core/ALU_32_INST .insts.pins]
llength [get_db hinst:tdsp_core/ALU_32_INST .local_insts.pins]
The following command filters out the buffer cells, and counts them in buf_count:
get_db insts -if {.base_cell.is_buffer==true} \
-foreach {incr buf_count($obj(.base_cell.name))}
array get buf_count
BUF1X 20 BUF2X 30 ...
get_db insts -if {.name == i1/*} #return all inst objects with .name matching i1/*
get_db insts .name i1/* #return all inst names (not objects) matching i1/*
Some examples of usage of the legacy and stylus common UI database object commands are:
Note: get_db requires a space before the .attribute name, while dbGet does not allow a space.
References
For more information, see:
dbGet
dbSet
get_db
set_db
get_db/set_db commands allow both a DPO list and a collection from SDC commands like
get_pins as input, but only returns objects in a DPO Tcl list.
For example, if your design is called top, then the output is something like this:
set i1_insts [get_db insts i1/*]
You can also use the DPO name directly for input. So the last three queries in the table above could
be done more easily this way:
References
For more information, see:
get_db
set_db
head <none> Not used. The head attributes (like layers) are
directly available from the root.
fplan <none> Not used. The topCell.fplan attributes (such
as rows, blockages, and bndrys) are directly in
the design object.
libCell base_cell A library base_cell (like AND2) created from the
LEF and Liberty .lib definitions. This is the
library data that does not vary with different
timing corners, so pin names, LEF attributes,
and .lib attributes (like is_flop) are here.
Most base_cells have multiple lib_cells (.lib
data) attached for each timing corner, unless it
is a physical-only base_cell like a filler cell that
has no lib_cell.
So every inst has a base_cell, but every
base_cell does not have a lib_cell.
library_set
opcond
rc_corner
timing_condition
arc
lib_arc
timing_point
timing_path
path_group
clock_spine
flexible_htree
skew_group
Foundation Flows
The foundation flow is a code generation engine that takes a Tcl variable array (vars) that defines
both the library/design data as well as tool options or flow control and generates a set of scripts to
execute a baseline flow. Each flow step is a single Tcl script that gets executed via a Makefile. An
example of a simple example flow (default baseline flow) and the scripts that execute the flow is
shown below:
The flow can be broken down into two areas: design initialization and design execution. Design
initialization takes place as part of run_init.tcl and is supported by the FF/init.tcl and
FF/view_definition.tcl files, which define the design and library data required to construct the
initial database.
In addition, the flow can be customized through the use of tags and plug-ins that allow you to
augment or override the flow commands within the sequence of flow steps. It means that tag and
plug-in files are included as part of the flow step script.
The Foundation Flow has been replaced with a more integrated approach to flow construction and
execution that works across the entire flow seamless in the Stylus Common UI.
Related Information
Flowkit
flowtool
Flowkit
Flowkit enables the previous step scripts (standalone Tcl files) become flow objects, which are
stored in the database. In the example below, the flow block is defined as a flow of sub-flows, which
map to the same basic flow sequence as the foundation flow:
create_flow -name block {flow:fplan flow:prects flow:cts flow:route flow:postroute}
Also, there is design_config.tcl, which contains the design initialization commands and
the mmmc_config.tcl, which is the flowkit equivalent of the view_definition.tcl files.
The tool_steps.tcl file contains the create_flow_step commands for the steps associated with a
particular tool (Genus, Innovus, or Tempus). For a multi-tool flow (as depicted below), the block flow
would be pre-pended with flow:synth (genus) and post-pended with flow:sta (tempus).
Since the flow definitions for the (sub)flows specify the tool, flowkit knows how to launch them.
Example:
create_flow -name prects -tool tempus {flow_start run_place_opt flow_finish}
Each of the sub-flow consists of the flow steps. The flow customization is done by creating the
specified flow steps and attaching them before or after one of these flow steps.
For example, the previous pre_cts plug-in in the foundation flow would be handled in the following
way. Consider a plug-in file (plug/pre_cts.tcl) that contains the following:
set_interactive_constraint_modes [all_constraint_modes -active]
reset_propagated_clock [all_clocks]
The stylus flowkit cts flow is defined as the following sequence of steps:
create_flow –name cts –tool tempus \
You can create a flow step that contains the plug-in commands (if necessary, convert the legacy
plug-in commands to Common UI commands and use convert_legacy_to_common_ui).
create_flow_step –name pre_cts {
reset_propagated_clock [all_clocks]
This flow step would then be added to the flow before the add_clock_spec flow step:
edit_flow –append flow_step:pre_cts –before flow_step:add_clock_spec
The flow execution is managed by a new executable called flowtool, as show below, so make is no
longer necessary.
The foundation flow setup.tcl contained variable definitions that the code generator would use to
create the command sequence and determine the flow step sequence (for
example, place_opt_design and fix_hold). With a flowkit, write_flow_template allows you to
enable features that control the step content and the sequence of the flow templates that are
generated.
With respect to the variable definition in the setup.tcl that is used to map commands or command
options, the large majority of these now map directly to Common UI attributes, which makes the
need for a layer of abstraction unnecessary:
Additionally, the rest of the vars were used to define the timing information for the MMMC view
definition file generation (for
example, library_sets, rc_corners, delay_corners, constraint_modes, and analysis_views). The
Common UI (and hence the flowkit) requires additional migration of the view definition file. In
particular, the new MMMC syntax has a new object called the timing condition. Here is an example
of converting a legacy MMMC file to CUI syntax:
The timing condition object defines the operating condition and library set:
Parameter Description
-opcond_library string Specifies name of library to search for the named opcond.
In addition, the timing_condition argument to create_delay_corner supports the new syntax for
power domain binding:
The command update_delay_corner is no longer necessary because the power domains are bound
directly to a timing condition using the @ syntax.
Related Information
Flowkit Commands and Attributes
flowtool
flowtool
flowtool is an external command in Unix for running flows to work interactively within a Tcl session
and is used for:
Hierarchical flows in which multiple independent block flows run in parallel.
Each step of a flow in its own session to improve productivity (in the absence of session
reset).
Flows that cover required tools (in particular, RTL-GDSII flows).
In addition to providing another interface to the existing flowkit functionality, the flowtool enables
multi-session, multi-tool, and branching flows.
Make versus flowtool
The command behavior of make varies significantly across platforms (BSD and GNU), and the
capabilities of GNU in particular varies significantly across versions. This can be mitigated by
writing to a lowest common denominator, but still creates a testing issue.
make targets are the files that are regenerated based on other files. This model works well for
compiling C, but not for the complex flows. Currently, the foundation flow gets around this problem
by creating dummy files corresponding to steps run. This works, but can lead to unexpected
behavior if you do not know the location. Another strategy is to use the databases saved at the end
of steps instead of the dummy files. This is less clear in the cases where steps do not create a
database (notably, partition).
A significant problem with the make approach is that details of the flow, most importantly the flow
order, are embedded in the Makefile. When these details change, the Makefile must be regenerated
which is contradicts the desire to perform codegen only once. The complexity of using make in a
dynamic flow environment can be avoided by developing a tool which is more tailored to running
flows. flowtool is specialized for running flows across multiple tools and multiple sessions and
overcomes the limitations described previously.
flowtool has the following advantages over make:
flowtool is entirely self-contained and independent of the flow. The make approach requires a
flow-specific Makefile to be generated for each project.
You can modify the command line syntax based on the specific task, unlike being restricted to
Related Information
For more information on flowtool syntax and parameters, see the flowtool section in the Stylus
Common UI Text Command Reference document.
Uniform Logging
Command logging plays a vital role in the debug process. The Stylus Common UI provides improved and uniform logging across
products by logging all commands in the log file, irrespective of whether they are issued interactively or through startup files and
scripts.
In Common UI, logging is verbose by default for all commands, except those originating through user procs. The following table
shows how logging works for commands issued using various methods:
Issued Similar to interactive typing On selecting Timing -> Report Timing from the GUI menu, log file will show:
through
@innovus 1> report_timing
GUI
Product Verbose logging, by default If you add the following to the ./.cadence/innovus/innovus.tcl startup file:
startup files puts "inside [info filename]"
To turn off verbose logging,
set the shell envar the log file, by default, shows:
CDS_STYLUS_SOURCE_VERBOSE #@ Loading startup files ...
to 0, @innovus 1> source .cadence/innovus/innovus.tcl
which will set #@ Begin verbose source .cadence/innovus/innovus.tcl
source_verbose to false at @file 1 : puts “inside [info filename]”
startup inside ./cadence/innovus/innovus.tcl
#@ End verbose source .cadence/innovus/innovus.tcl
Product Verbose logging, by default If the file run.tcl contains the following:
startup proc test {} {puts “This is a test”}
To turn off verbose logging,
options test
set the shell envar
(- CDS_STYLUS_SOURCE_VERBOSE and the product is started with:
files and -
to 0, innovus -stylus -files run.tcl
execute)
which will
the log file, by default, shows:
set source_verbose to #@ Loading startup files ...
false at startup @innovus 1> source .cadence/innovus/innovus.tcl
#@ Begin verbose source .cadence/innovus/innovus.tcl
@file 1 : puts “inside [info filename]”
inside ./cadence/innovus/innovus.tcl
#@ End verbose source .cadence/innovus/innovus.tcl
#@ Processing -files option
@innovus 2> source run.tcl
#@ Begin verbose source /proj/scripts/run.tcl
@file 1: proc test {} {puts “This is a test”}
@file 2: test
This is a test
#@ End verbose source /proj/scripts/run.tcl
Uniform Startup
In Stylus Common UI, the bootstrap files are loaded in a consistent order across all tools - Genus,
Innovus, Joules, Modus, Tempus, and Voltus. The startup sequence is listed in the table below:
1 ~/.cadence/<tool>/{gui.pref.tcl, ~/.cadence/innovus/{gui.pref.tcl,
gui.color.tcl, workspaces} in the home gui.color.tcl, workspaces}
directory if the GUI is enabled.
2 .cadence/<tool>/{gui.pref.tcl, .cadence/innovus/{gui.pref.tcl,
gui.color.tcl, workspaces/} in the current gui.color.tcl, workspaces/}
directory if the GUI is enabled.
Note: The -stylus usage sets the source_verbose root attribute to true at startup. The GUI
preference init files (1 and 2 above) ignore this setting, but the non-GUI preference initialization files
above (3, 4, 5, and 6) will use verbose logging by default. If the shell
envar CDS_STYLUS_SOURCE_VERBOSE exists and has a boolean value, then
the source_verbose attribute will be set to the envar value at startup. So you can turn off verbose
logging at startup by using the following command:
setenv CDS_STYLUS_SOURCE_VERBOSE 0
Related Information
innovus command in the Text Command Reference
Metrics
Using the Common UI metric infrastructure, you can define and capture metric snapshots,
using the create_snapshot command, at specific points in the flow such that metric extraction
is not required, and/or timing/power analysis will be calculated at the point the snapshot is
saved.
Timing/power metrics are reported based on the last calculated value. You need to ensure
that the metrics are updated prior to saving the metric snapshot. All commands that save
metrics call create_snapshot to save metrics in a consistent manner.
Because this data will get saved as part of the database (during write_db), it can be used
across multiple runs for building design project summary pages.
Metrics Overview
A metric is the core representative of a piece of data. A metric has a name and a value. The value
should have an SI unit specified wherever possible. The TCL command for setting a metric is
set_metric.
The following command would set the value of the worst negative setup slack (all path
groups) to 0.100 ns.
set_metric -name timing.setup.wns -value {0.100ns}
The following commands would set the value of the total area of the design to 100 um.
set_metric -name design.area -value {100um}
Metric Names
Metric names are standardized across the tools so that the same name will contain the same data.
This means that each tool will populate a metric with a value that represents the same semantic
value. This value can be compared across the runs. The names are look hierarchical with the use of
the ".". Use of "." allows grouping common metrics through their names. For example, consider the
following metric names and how they could be represented as a hierarchy.
Metric Values
Metric values can be of many types but are most often a number. Wherever possible, the unit should
be defined so that the metric display can always show the values in the same units. This will
prevent different tools from producing numbers in different units.
Related Information
Metric Commands
Snapshots
Streaming Metrics
Metric Commands
The following table shows some metric commands in Common UI:
Command Description
Related Information
Stylus Common UI Metrics
Snapshots
Streaming Metrics
default_unit String Default unit for the metric (assumed for value)
tcl TCL List of TCL commands or proc to generate (return) the metric that
is of the format { <value> <unit>}
Related Information
Stylus Common UI Metrics
Metric Commands
Snapshots
Streaming Metrics
Snapshots
The metric stream is collected and structured with the use of snapshots. A snapshot records all the
current values of the metrics and stores them in the database. You can create a snapshot by using
the create_snapshot command.
create_snapshot -name my_first_snapshot
You can use snapshots to check what happened during the flow:
In the above example, four snapshots, init, place, clock, and route were created. You can check this
in the Simple Unified Metrics html file and the Advanced Unified Metrics server in a table. For
example:
clock -0.050 ns
init -0.100 ns
place -0.500 ns
route -0.075 ns
Related Information
Stylus Common UI Metrics
Metric Commands
Streaming Metrics
| |--- place_work
| `--- place_finish
|--- clock
`--- route
In the html file, a table is produced with a link for the "place" snapshot. When you click this link, it
will show the lower hierarchy steps that were included through the use of the stack.
Note: While using the stack it is important to remember that the system is working with a stream of
data. Therefore, when you push, a lower level of hierarchy is created, and when you pop the stack,
the generated child snapshots are included in the next snapshot to be created.
Snapshots Inheritance
When a hierarchy is produced, the parent snapshot automatically inherits metric values from the last
child snapshot. For example, consider the following:
> set_metric -name m -value 1
> create_snapshot -name before_parent
> push_snapshot_stack
> set_metric -name m -value 2
> create_snapshot -name child_A
> set_metric -name m -value 3
In this example, the snapshot "parent" will inherit the value for M that was captured by snapshot
"child_B", that is, '3'.
Values are only inherited if that metric is not explicitly set during the parent. For example, consider
the slight modification of the above example:
Related Information
Stylus Common UI Metrics
Metric Commands
Snapshots
Streaming Metrics
Streaming Metrics
The UM-enabled tools will automatically produce data as it is available. For example, the diagram
below shows the execution (in this case within Innovus) of some of the TCL commands and the
example metrics that are produced into the metric stream. If the same metric name is produced, only
the latest value is remembered by the tool, that is, the metrics will naturally overwrite each other.
Related Information
Stylus Common UI Metrics
Metric Commands
Snapshots