Tool, project and session qualification
1.1 Stage purpose
Session qualification establishes the identity of a run. It answers four questions: is this the qualified Innovus release, is the session in the interface the scripts were written for, are the inputs and settings the ones the methodology requires, and can the result be traced back to a known checkpoint. None of these checks analyse the design data. However, a mistake here quietly invalidates everything downstream. A script written for the Legacy UI running in a Common UI session, or a session restored from an edited database, can produce reports that look normal and mean nothing.
Let us consider a common situation. A block is handed from one engineer to another as a saved database. The second engineer restores it, reruns timing, and gets a different worst slack. Before anyone debugs timing, the first question is whether the two sessions were the same release, with the same non-default settings, restored from the same unmodified database. In most cases the difference is found here, not in the design.
1.2 Entry prerequisites
| Must already be true | Why |
|---|---|
| The methodology states the qualified Innovus release and build | Without a stated target, no version check can pass or fail. |
| The intended UI (Legacy or Common UI) is decided per script set | Commands are not interchangeable between the two interpreters. |
| A project configuration lists input paths, PG net names and output directories | The checks compare the session against this list. |
| A methodology baseline of non-default settings exists | report_command_mode output is only useful against a baseline. |
| Licences for the features the flow needs are confirmed | A missing feature can turn a later check into NOT EVALUATED. |
1.3 Relevant files and analysis context
The files that matter at this stage are the startup script, the project configuration, the log file of the session, and, when work continues from an earlier step, the saved database. In the Legacy UI, saveDesign test writes a small file named test containing the restore command, and a directory test.dat holding the database. The usual convention is to name the save with an .enc suffix, so the directory becomes name.enc.dat and is restored with restoreDesign name.enc.dat top.
Two global variables protect provenance. restore_db_file_check defaults to true, and makes the restore fail if any file inside the saved directory was edited, renamed or deleted. restore_db_stop_at_design_in_memory defaults to 1, and stops a second restoreDesign in the same session. The reference explicitly recommends against restoring twice in one session, because settings from the first database might not be cleaned up. Thus, a qualification run should restore exactly once, in a fresh session, with both globals left at their defaults. Three further rules matter for a handoff. A database saved by a newer major version, meaning the first number, does not restore in an older tool. Relative paths in the saved globals expect the working directory of the saving session, unless setImportMode -syncRelativePath is true. The file check covers the files inside the saved directory, while external LEF, .lib and SDC files are referenced by full path or link unless saveDesign -libs was used, so record their revision as well. Preservation attributes from SDC and .lib files, such as dont_touch and dont_use, are applied at the first read and not again by restoreDesign, so the restored database is what holds them.
The reference states that the contents of a saved database should never be modified. If a library path must change, use the restore options for new LEF or MMMC files instead of editing files inside the directory. A hand-edited database that restores is worse than one that fails, because it hides the edit.
1.4 Checks and command cards
1.4.1 Pre-stage checks: before loading anything
Two checks run before any design data is loaded, because they decide whether the rest of the script is even the right script: the release and the interface.
| Question it answers | Is this the Innovus release and build the methodology qualified? |
|---|---|
| Stage | Session start |
| Product | Innovus Implementation. The reference entry names no separate licence requirement for this command. |
| Required state | Any time; no design needs to be loaded. |
| Legacy UI | getVersion getVersion -major |
| Common UI | Not yet verified No Common UI form is printed. The provided files do not document one. |
|---|---|
| Mapping | Not established in the provided documentation |
| Options used | -major returns only the first number of the version plus one digit after the decimal point, which is convenient for a script comparison. |
| Scope and view | Whole session. Major means the first number: a database saved by a newer major version does not restore in an older tool. |
| Effect on session | reads or reports only |
| Output | A version string on the console and in the log. |
| Fields that matter | The full string including build, not only the major version. |
| Healthy | Exact match with the methodology release and build. |
| Warning | Same major version, different build. Allowed only if the methodology says builds are interchangeable. |
| Hard stop | Different major release from the qualified one, with no approval on record. |
| Common misuse | Comparing only the major version, so two different builds look identical. |
| Root cause and fix | Fix the tool path or module load in the startup environment, not inside the Innovus script. |
| Rerun after a fix | Restart the session and rerun every check in this chapter. |
| Verification | Legacy syntax checked against the Innovus Legacy text reference. |
| Question it answers | Is this session running the interface that the scripts were written for? |
|---|---|
| Stage | Session start |
| Product | Innovus Implementation. The reference entry names no separate licence requirement for this command. |
| Required state | Any time. |
| Legacy UI | innovus ;# no -stylus option: Legacy UI is_common_ui_mode |
| Common UI | innovus -stylus Verifiedis_common_ui_mode Documented For Both, Cui Not ExecutedThe reference describes is_common_ui_mode as the switch for a script that can be sourced in either interface. Its execution in a Common UI session was not observed for this edition. |
|---|---|
| Mapping | same name; startup switch selects the UI |
| Options used | -stylus is a startup option of the innovus command. With it the session starts in the Stylus Common UI; without it, in the Legacy UI. |
| Scope and view | Whole session. |
| Effect on session | changes analysis configuration. Some commands in this card only read or report. |
| Output | is_common_ui_mode returns 1 in Common UI and 0 in Legacy UI. |
| Fields that matter | The return value. |
| Healthy | The value matches the script set: 0 for Legacy scripts, 1 for Common UI scripts. |
| Warning | None; this check is binary. |
| Hard stop | Mismatch between the return value and the script set. |
| Common misuse | Sourcing a Common UI script in a Legacy session and treating the errors as design problems. The eval_common_ui command exists in Legacy for transition, but the reference says commands whose behaviour differs from Legacy will not work properly through it, so it is not a native equivalent. |
| Root cause and fix | Restart with or without -stylus as required. |
| Rerun after a fix | Restart the session; nothing from the mismatched session can be reused. |
| Verification | Legacy syntax checked against the Innovus Legacy text reference. |
1.4.2 Post-stage checks: after the design is loaded or restored
Once a design is in memory, the session has a log, a message history and a set of mode settings. These are what we read next.
| Question it answers | Where is the evidence for this session written, and did loading produce errors or unexpected warnings? |
|---|---|
| Stage | After init_design or restoreDesign |
| Product | Innovus Implementation. The reference entry names no separate licence requirement for this command. |
| Required state | Design loaded. |
| Legacy UI | getLogFileName -fullPath report_message report_message -errors -count report_message -suppressed |
| Common UI | Not yet verified No Common UI form is printed. The provided files do not document one. |
|---|---|
| Mapping | Not established in the provided documentation |
| Options used | -fullPath returns the absolute path of the log, which a script can record in its manifest.-errors -count returns a Tcl list of {ID count} pairs for every error ID issued, instead of printing the table. An empty list means no errors.-suppressed returns the IDs that are suppressed in this session. Suppressed IDs do not appear in the other lists, so a suppression hides evidence. |
| Scope and view | Messages issued since the tool was launched, including any before the load, so compare with a snapshot taken before loading. |
| Effect on session | reads or reports only |
| Output | A summary table of message IDs with counts; with arguments, a Tcl return value. |
| Fields that matter | Message ID, severity and count, and the closing line that totals warnings and errors. Also every suppressed ID. |
| Healthy | Zero errors. Every warning ID is known for this flow or explained. Every suppressed ID is in the methodology baseline. |
| Warning | New warning IDs that did not appear in the last good run. |
| Hard stop | Any error during design load, or any warning ID the methodology classifies as fatal. |
| Common misuse | Reading only the console. The console and log are subject to the message display limit, which is 20 per public command by default, so a repeated message might be printed only that often while it occurred many more. |
| Root cause and fix | Trace the first occurrence of each new ID in the log and fix the input that caused it. |
| Rerun after a fix | Reload the design in a fresh session; compare the message table again. |
| Verification | Legacy syntax checked against the Innovus Legacy text reference. |
| Question it answers | Which mode settings differ from the tool defaults, and are they the ones the methodology expects? |
|---|---|
| Stage | After the flow settings are applied |
| Product | Innovus Implementation. The reference entry names no separate licence requirement for this command. |
| Required state | Design loaded and the flow setup sourced. |
| Legacy UI | report_command_mode -non_default report_command_mode -user |
| Common UI | Not yet verified No Common UI form is printed. The provided files do not document one. |
|---|---|
| Mapping | Not established in the provided documentation |
| Options used | -non_default reports *Mode options whose value differs from the default.-user reports *Mode options that have been set manually. |
| Scope and view | *Mode command options for the whole session. Tcl globals and message suppression are not covered; check them with report_hidden_usage on the scripts and report_message -suppressed. |
| Effect on session | reads or reports only |
| Output | A list of mode options and values on the console. |
| Fields that matter | Option name and value. |
| Healthy | The list matches the methodology baseline exactly. |
| Warning | Extra options with a plausible reason, such as a debug setting left from an earlier run. |
| Hard stop | A setting that changes analysis behaviour and is not in the baseline, or a baseline setting that is missing. |
| Common misuse | Running it before the setup scripts are sourced, which proves nothing about the run that follows. |
| Root cause and fix | Remove the stray setting at its source script, not by resetting it later in the flow. |
| Rerun after a fix | Re-source the setup in a fresh session and repeat the comparison. |
| Verification | Legacy syntax checked against the Innovus Legacy text reference. |
| Question it answers | Does the session have the threads, memory and disk the run needs? |
|---|---|
| Stage | After setup |
| Product | Innovus Implementation. Multi-CPU use interacts with licensing: getMultiCpuUsage has a -keepLicense option that shows the setMultiCpuUsage licence setting. Confirm multi-CPU licence availability with your site. |
| Required state | Any time after setup. |
| Legacy UI | getMultiCpuUsage -localCpu getLicenseStatus report_resource -peak report_disk -dir <run_dir> |
| Common UI | set_db max_cpus_per_server <n> Verified (Setter Only)set_db max_cpus_per_server appears in the RAK lab as a Common UI setter. A Common UI read form was not shown, so no read equivalent is printed here. |
|---|---|
| Mapping | different: CUI form shown is a setter, not a query |
| Options used | -localCpu returns the number of local threads requested.-peak reports the peak memory used so far, which is small right after setup; read it again at the end of heavy steps.-dir reports used and free space for the given directory; the default is /tmp. Without it the command also reports the current working directory. |
| Scope and view | Host and session. |
| Effect on session | reads or reports only |
| Output | Console values. |
| Fields that matter | Thread count, checked-out licences, peak memory, free disk space in the run directory, each compared with the job request (the resources asked for from the batch system or the project configuration). |
| Healthy | Values within the job request. |
| Warning | Free disk space close to the expected size of reports and saved databases. |
| Hard stop | No free space in the run directory, which makes saved databases and reports incomplete. |
| Common misuse | Reading the free space that report_disk gives for its default directory, /tmp, when the run writes elsewhere. |
| Root cause and fix | Change the job request or clean the run area. |
| Rerun after a fix | Repeat the check before the next expensive step. |
| Verification | Legacy syntax checked against the Innovus Legacy text reference. |
| Question it answers | Is the design in memory exactly the saved checkpoint we think it is? |
|---|---|
| Stage | When continuing from a saved database |
| Product | Innovus Implementation. The reference entry names no separate licence requirement for this command. |
| Required state | Fresh session. |
| Legacy UI | restoreDesign <name>.enc.dat <top> saveDesign <name>.enc set restore_db_stop_at_design_in_memory 1 ;# default set restore_db_file_check true ;# default |
| Common UI | write_db <dir> Verified |
|---|---|
| Mapping | different command, equivalence of saved content not verified; no verified Common UI restore form |
| Options used | fileName for saveDesign, the name of the restore file; the database goes into fileName.dat.global defaults leave both restore globals at their defaults so an edited database or a second restore is caught.-lef_files, -mmmcFile on restoreDesign replace the saved LEF or MMMC files and skip the file check for them, so record any replacement as a deviation.saveDesign to the location the design was restored from overwrites that checkpoint; produce checkpoints in a separate step, not inside the gate. |
| Scope and view | Whole database. What comes back depends on what was saved: timing graph and RC data are optional, so timing or extraction might need to be repeated. |
| Effect on session | changes analysis configuration; updates the design database; writes files |
| Output | The restored session; saveDesign writes a database directory and a restore file. |
| Fields that matter | Restore messages, and the design name, stage label and save time recorded by your flow. |
| Healthy | One restore, no file-check error, design name and stage match the handoff record. |
| Warning | Restore succeeds but the handoff record does not state which stage the save came from. |
| Hard stop | File-check error on restore, or a second restore in the same session. |
| Common misuse | Copying a database directory and editing a path inside it to make it restore. |
| Root cause and fix | Restore with the restore options for new LEF or MMMC files, or regenerate the save from its source session. |
| Rerun after a fix | Restore again in a fresh session; rerun S-03 and S-04. |
| Verification | Legacy syntax checked against the Innovus Legacy text reference. |
The command getLicenseStatus displays a summary of the licences the session has checked out. That shows what this session holds now, not whether a feature that a later step needs will be available when it is asked for. Thus, record the getLicenseStatus output in the run manifest, and confirm the features needed later with your site licence tool or administrator. Until then, that part stays NOT EVALUATED.
1.5 Required reports, artefacts and how to read them
The output of this chapter is a short manifest rather than a long report. It is written by the qualification script and kept next to every report the run produces, so that any later number can be traced back to its session.
| Artefact | Content | Read for |
|---|---|---|
| Run manifest | release string, UI mode, host, threads, log path, checkpoint name, stage label, date | traceability of every later report |
| Message table | report_message output after load | new or unexpected IDs |
| Mode diff | report_command_mode -non_default output | settings that differ from the baseline |
| Resource snapshot | peak memory and free disk | risk of an incomplete run |
1.6 Healthy, suspicious and hard-stop examples
| Finding | Status | Why |
|---|---|---|
| Release string matches methodology exactly | PASS | The run is reproducible against the qualified tool. |
| Same major release, different build | WARN / REVIEW | Allowed only with a methodology statement; otherwise ask. |
| is_common_ui_mode returns 1 while Legacy scripts are sourced | HARD STOP | Every later command result is unreliable. |
| Two new warning IDs after load | WARN / REVIEW | Explain each before closing the gate. |
| Error messages during load | HARD STOP | The design in memory is not the intended design. |
| Licences for later steps | NOT EVALUATED | getLicenseStatus shows only what is checked out now; confirm the rest outside the tool. |
| Low-power checks in a single-supply block | NOT APPLICABLE | State it once in the manifest. |
1.7 Debugging, corrective action and reruns
Most session problems are environment problems. The tool path, the module that sets it, and the startup options belong to the environment, so the fix belongs there too. It is better to fail the session early, before loading the design, than to add workarounds inside the Innovus script. A workaround inside the script makes the next run depend on the same mistake.
After any fix in this chapter, the rerun is always a fresh session. Nothing that depends on the session state can be partially rerun.
## Release and UI gate, Legacy UI session
## The qualified release string comes from the project configuration
set qual_build $::proj(qual_release)
set ver [getVersion]
if {$ver ne $qual_build} {
puts "HARD STOP: release $ver differs from $qual_build"
}
if {[is_common_ui_mode]} {
puts "HARD STOP: Legacy scripts sourced in a Common UI session"
}
puts "log: [getLogFileName -fullPath]"
## report_message -errors -count returns a list of {ID count} pairs
set errs [report_message -errors -count]
if {[llength $errs]} {
puts "HARD STOP: errors after load: $errs"
}
puts "suppressed IDs: [report_message -suppressed]" The script only reports. It does not exit, change a setting or save anything, so it is safe to source at the start of any run. The qualified release is read from a project configuration array, named proj here as an illustration. In a real flow the gate decision is written to the manifest rather than only printed.
1.7.1 Worked example: a different worst slack after handoff
run A (handoff) run B (receiver) release <rel> build A release <rel> build B UI mode 0 (Legacy) UI mode 0 (Legacy) restore blk.enc.dat, 1 time restore blk.enc.dat, 2 times non-default 14 options non-default 16 options setup WNS -0.012 setup WNS -0.031
Let us read it in the order of this chapter. The builds differ, which is a warning at most. The UI is the same. However, run B restored twice in one session, which the reference advises against, and it has two extra non-default options. Before looking at any timing path, the receiver should restore once in a fresh session, diff the mode settings against the baseline, and only then compare slack. In such a situation, the remaining difference, if any, is a real difference and is worth debugging.
1.8 Exit criteria and stage checklist
- Release. getVersion matches the methodology release and build, or the difference is approved.
- Interface. is_common_ui_mode matches the script set.
- Log. The full log path is recorded in the manifest.
- Messages. No errors after load; every warning ID is known or explained; every suppressed ID is in the baseline.
- Settings. report_command_mode -non_default matches the baseline.
- Resources. Threads, peak memory and free disk are within the job request.
- Provenance. Exactly one restore in a fresh session, with restore globals at their defaults.
- Licences. getLicenseStatus output recorded; features needed later confirmed outside the tool, otherwise NOT EVALUATED.
Thus, session qualification is short, but it is the only chapter whose failure cannot be detected later from the design reports. If it is skipped, a release or interface mismatch shows up as a timing or connectivity anomaly several stages later, and the investigation starts in the wrong place. In the next chapter we load the design and check that what is in memory is the netlist and library set the project intended.
1.9 Sanity check cheat sheet: Tool, project and session
One row per command card. Read left to right: the check, the command that answers it, then what a healthy result, a result to review and a hard stop look like. Judge every row against your project budgets, because this book sets no universal limits.
| Card | Check and when | Command | Healthy | Review | Hard stop |
|---|---|---|---|---|---|
| S-01 | Release and build Session start | getVersiongetVersion -major | Exact match with the methodology release and build. | Same major version, different build. Allowed only if the methodology says builds are interchangeable. | Different major release from the qualified one, with no approval on record. |
| S-02 | Active user interface Session start | innovusis_common_ui_mode | The value matches the script set: 0 for Legacy scripts, 1 for Common UI scripts. | None; this check is binary. | Mismatch between the return value and the script set. |
| S-03 | Log location and message history After init_design or restoreDesign | getLogFileName -fullPathreport_messagereport_message -errors -count | Zero errors. Every warning ID is known for this flow or explained. Every suppressed ID is in the methodology baseline. | New warning IDs that did not appear in the last good run. | Any error during design load, or any warning ID the methodology classifies as fatal. |
| S-04 | Non-default settings After the flow settings are applied | report_command_mode -non_defaultreport_command_mode -user | The list matches the methodology baseline exactly. | Extra options with a plausible reason, such as a debug setting left from an earlier run. | A setting that changes analysis behaviour and is not in the baseline, or a baseline setting that is missing. |
| S-05 | Compute resources After setup | getMultiCpuUsage -localCpugetLicenseStatusreport_resource -peak | Values within the job request. | Free disk space close to the expected size of reports and saved databases. | No free space in the run directory, which makes saved databases and reports incomplete. |
| S-06 | Checkpoint provenance When continuing from a saved database | restoreDesign <name>.enc.dat <top>saveDesign <name>.encset restore_db_stop_at_design_in_memory 1 | One restore, no file-check error, design name and stage match the handoff record. | Restore succeeds but the handoff record does not state which stage the save came from. | File-check error on restore, or a second restore in the same session. |
1.10 Command cheat sheet: Tool, project and session
Legacy UI commands. Angle brackets are placeholders, and values shown are examples, not project limits.
| Command | What it produces |
|---|
| Release and interface | |
|---|---|
getVersion | The full release and build string. Record it in the run manifest. |
getVersion -major | The first number of the version plus one digit after the decimal point. Handy for a coarse script check, not for qualification. |
innovus -stylus | Shell startup. Starts the session in the Stylus Common UI; without -stylus the session is Legacy UI. |
is_common_ui_mode | Returns 1 in a Common UI session and 0 in a Legacy UI session. |
eval_common_ui "<cui command>" | Runs a Common UI command from a Legacy session. A transition aid only; commands that behave differently in Legacy do not work properly through it. |
| Help and documentation | |
|---|---|
help <command> | The syntax of a command or global, or the summary text of a message ID. |
help -k <keyword> | A list of every command associated with the keyword. |
man <command> | The full man page of a command, global or message ID. |
check_syntax <script.tcl> | A lint report for Innovus Tcl scripts: misspelled commands, variables used before they are set and similar errors. |
report_hidden_usage <files> | A summary of hidden globals and mode options used in the given scripts. Use it before moving scripts to a new release. |
| Log and messages | |
|---|---|
getLogFileName | The name of the current log file. |
getLogFileName -fullPath | The absolute path of the log file, for the run manifest. |
getCmdLogFileName | The name of the current command log file, which records every command the session ran. |
report_message | A summary table of every message ID issued so far, with severity, count and summary, ending in a total of warnings and errors. |
report_message -errors | A Tcl list of the error IDs issued in this session. |
report_message -errors -count | A Tcl list of {ID count} pairs for every error ID. An empty list means no errors. |
report_message -warnings -count | A Tcl list of {ID count} pairs for every warning ID. |
report_message -all | A Tcl list of every issued message ID, excluding suppressed ones. |
report_message -suppressed | A Tcl list of the message IDs suppressed in this session. Suppressed IDs hide evidence, so compare this list with the baseline. |
set_message -id <ids> -no_limit | Removes any existing display limit on the given message IDs (the default is 20 per public command). Suppressed IDs stay suppressed. Changes the session; record it. |
| Settings | |
|---|---|
report_command_mode -non_default | Every *Mode option whose value differs from the default. |
report_command_mode -user | Every *Mode option that has been set manually. |
getDesignMode | The current setDesignMode settings. |
getAnalysisMode | The current setAnalysisMode settings, with name, value, type and whether the user set them. |
getImportMode | The current setImportMode settings, which control how the netlist and design files are read. |
| Compute resources | |
|---|---|
getMultiCpuUsage -localCpu | The number of local threads requested. |
getMultiCpuUsage -verbose | A message with the current multi-CPU setting. |
setMultiCpuUsage -localCpu <n> | Sets the number of local threads. Changes the session; record the value. |
checkMultiCpuUsage | Whether distributed processing works in this environment and every configured CPU is reachable. Run after setDistributeHost and setMultiCpuUsage. |
getDistributeHost -mode | The distributed-processing mode set with setDistributeHost. |
getLicenseStatus | A summary of every licence the session has checked out. Record it in the run manifest. |
report_resource -peak | The peak memory used so far. |
report_disk | Disk metrics for the current working directory and /tmp, plus used and free space for the -dir directory (default /tmp). Also returns a Tcl list. |
report_disk -dir <run_dir> | Used and free space for the run directory. |
| Save, restore and provenance | |
|---|---|
saveDesign <name>.enc | A restore file <name>.enc and the database directory <name>.enc.dat. |
saveDesign <name>.enc -tgz | The database as a single gzipped tar file, with library references copied inside. |
restoreDesign <name>.enc.dat <top> | The saved design in memory. Timing or RC data may need recomputing, depending on what was saved. |
restoreDesign -noTiming <name>.enc.dat <top> | The saved design without timing libraries and MMMC data, for physical-only work. |
set restore_db_file_check true | Default. A restore error if any file in the saved directory was edited, renamed or deleted. |
set restore_db_stop_at_design_in_memory 1 | Default. An error if restoreDesign is called a second time in the same session. |
get_metric <pattern> | The current state of the named metrics. |