Skip to content
Ch 01 / 16 Chapter 1: Tool, project and session qualification
CHAPTER 1

Tool, project and session qualification

Before a single cell is placed, we need to know which tool, which interface, which inputs and which settings produced the numbers we are about to read. Every later chapter assumes this chapter passed.

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 trueWhy
The methodology states the qualified Innovus release and buildWithout a stated target, no version check can pass or fail.
The intended UI (Legacy or Common UI) is decided per script setCommands are not interchangeable between the two interpreters.
A project configuration lists input paths, PG net names and output directoriesThe checks compare the session against this list.
A methodology baseline of non-default settings existsreport_command_mode output is only useful against a baseline.
Licences for the features the flow needs are confirmedA 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.

Do not edit a saved database

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.

S-01Release and build
Question it answersIs this the Innovus release and build the methodology qualified?
StageSession start
ProductInnovus Implementation. The reference entry names no separate licence requirement for this command.
Required stateAny time; no design needs to be loaded.
Legacy UI
getVersion
getVersion -major
Common UINot yet verified No Common UI form is printed. The provided files do not document one.
MappingNot 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 viewWhole session. Major means the first number: a database saved by a newer major version does not restore in an older tool.
Effect on sessionreads or reports only
OutputA version string on the console and in the log.
Fields that matterThe full string including build, not only the major version.
HealthyExact match with the methodology release and build.
WarningSame major version, different build. Allowed only if the methodology says builds are interchangeable.
Hard stopDifferent major release from the qualified one, with no approval on record.
Common misuseComparing only the major version, so two different builds look identical.
Root cause and fixFix the tool path or module load in the startup environment, not inside the Innovus script.
Rerun after a fixRestart the session and rerun every check in this chapter.
VerificationLegacy syntax checked against the Innovus Legacy text reference.
S-02Active user interface
Question it answersIs this session running the interface that the scripts were written for?
StageSession start
ProductInnovus Implementation. The reference entry names no separate licence requirement for this command.
Required stateAny time.
Legacy UI
innovus          ;# no -stylus option: Legacy UI
is_common_ui_mode
Common UI
innovus -stylus Verified
is_common_ui_mode Documented For Both, Cui Not Executed
The 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.
Mappingsame 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 viewWhole session.
Effect on sessionchanges analysis configuration. Some commands in this card only read or report.
Outputis_common_ui_mode returns 1 in Common UI and 0 in Legacy UI.
Fields that matterThe return value.
HealthyThe value matches the script set: 0 for Legacy scripts, 1 for Common UI scripts.
WarningNone; this check is binary.
Hard stopMismatch between the return value and the script set.
Common misuseSourcing 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 fixRestart with or without -stylus as required.
Rerun after a fixRestart the session; nothing from the mismatched session can be reused.
VerificationLegacy 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.

S-03Log location and message history
Question it answersWhere is the evidence for this session written, and did loading produce errors or unexpected warnings?
StageAfter init_design or restoreDesign
ProductInnovus Implementation. The reference entry names no separate licence requirement for this command.
Required stateDesign loaded.
Legacy UI
getLogFileName -fullPath
report_message
report_message -errors -count
report_message -suppressed
Common UINot yet verified No Common UI form is printed. The provided files do not document one.
MappingNot 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 viewMessages issued since the tool was launched, including any before the load, so compare with a snapshot taken before loading.
Effect on sessionreads or reports only
OutputA summary table of message IDs with counts; with arguments, a Tcl return value.
Fields that matterMessage ID, severity and count, and the closing line that totals warnings and errors. Also every suppressed ID.
HealthyZero errors. Every warning ID is known for this flow or explained. Every suppressed ID is in the methodology baseline.
WarningNew warning IDs that did not appear in the last good run.
Hard stopAny error during design load, or any warning ID the methodology classifies as fatal.
Common misuseReading 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 fixTrace the first occurrence of each new ID in the log and fix the input that caused it.
Rerun after a fixReload the design in a fresh session; compare the message table again.
VerificationLegacy syntax checked against the Innovus Legacy text reference.
S-04Non-default settings
Question it answersWhich mode settings differ from the tool defaults, and are they the ones the methodology expects?
StageAfter the flow settings are applied
ProductInnovus Implementation. The reference entry names no separate licence requirement for this command.
Required stateDesign loaded and the flow setup sourced.
Legacy UI
report_command_mode -non_default
report_command_mode -user
Common UINot yet verified No Common UI form is printed. The provided files do not document one.
MappingNot 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 sessionreads or reports only
OutputA list of mode options and values on the console.
Fields that matterOption name and value.
HealthyThe list matches the methodology baseline exactly.
WarningExtra options with a plausible reason, such as a debug setting left from an earlier run.
Hard stopA setting that changes analysis behaviour and is not in the baseline, or a baseline setting that is missing.
Common misuseRunning it before the setup scripts are sourced, which proves nothing about the run that follows.
Root cause and fixRemove the stray setting at its source script, not by resetting it later in the flow.
Rerun after a fixRe-source the setup in a fresh session and repeat the comparison.
VerificationLegacy syntax checked against the Innovus Legacy text reference.
S-05Compute resources
Question it answersDoes the session have the threads, memory and disk the run needs?
StageAfter setup
ProductInnovus 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 stateAny 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.
Mappingdifferent: 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 viewHost and session.
Effect on sessionreads or reports only
OutputConsole values.
Fields that matterThread 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).
HealthyValues within the job request.
WarningFree disk space close to the expected size of reports and saved databases.
Hard stopNo free space in the run directory, which makes saved databases and reports incomplete.
Common misuseReading the free space that report_disk gives for its default directory, /tmp, when the run writes elsewhere.
Root cause and fixChange the job request or clean the run area.
Rerun after a fixRepeat the check before the next expensive step.
VerificationLegacy syntax checked against the Innovus Legacy text reference.
S-06Checkpoint provenance
Question it answersIs the design in memory exactly the saved checkpoint we think it is?
StageWhen continuing from a saved database
ProductInnovus Implementation. The reference entry names no separate licence requirement for this command.
Required stateFresh 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
Mappingdifferent 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 viewWhole 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 sessionchanges analysis configuration; updates the design database; writes files
OutputThe restored session; saveDesign writes a database directory and a restore file.
Fields that matterRestore messages, and the design name, stage label and save time recorded by your flow.
HealthyOne restore, no file-check error, design name and stage match the handoff record.
WarningRestore succeeds but the handoff record does not state which stage the save came from.
Hard stopFile-check error on restore, or a second restore in the same session.
Common misuseCopying a database directory and editing a path inside it to make it restore.
Root cause and fixRestore with the restore options for new LEF or MMMC files, or regenerate the save from its source session.
Rerun after a fixRestore again in a fresh session; rerun S-03 and S-04.
VerificationLegacy syntax checked against the Innovus Legacy text reference.
Licences

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.

ArtefactContentRead for
Run manifestrelease string, UI mode, host, threads, log path, checkpoint name, stage label, datetraceability of every later report
Message tablereport_message output after loadnew or unexpected IDs
Mode diffreport_command_mode -non_default outputsettings that differ from the baseline
Resource snapshotpeak memory and free diskrisk of an incomplete run

1.6 Healthy, suspicious and hard-stop examples

FindingStatusWhy
Release string matches methodology exactlyPASSThe run is reproducible against the qualified tool.
Same major release, different buildWARN / REVIEWAllowed only with a methodology statement; otherwise ask.
is_common_ui_mode returns 1 while Legacy scripts are sourcedHARD STOPEvery later command result is unreliable.
Two new warning IDs after loadWARN / REVIEWExplain each before closing the gate.
Error messages during loadHARD STOPThe design in memory is not the intended design.
Licences for later stepsNOT EVALUATEDgetLicenseStatus shows only what is checked out now; confirm the rest outside the tool.
Low-power checks in a single-supply blockNOT APPLICABLEState 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.

Example: session gate in Legacy UIEnvironment-specific
## 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 comparisonSynthetic report, not tool output
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.

CHAPTER 1 SANITY CHECKS

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.

CardCheck and whenCommandHealthyReviewHard stop
S-01Release and build
Session start
getVersion
getVersion -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-02Active user interface
Session start
innovus
is_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-03Log location and message history
After init_design or restoreDesign
getLogFileName -fullPath
report_message
report_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-04Non-default settings
After the flow settings are applied
report_command_mode -non_default
report_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-05Compute resources
After setup
getMultiCpuUsage -localCpu
getLicenseStatus
report_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-06Checkpoint provenance
When continuing from a saved database
restoreDesign <name>.enc.dat <top>
saveDesign <name>.enc
set 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.
CHAPTER 1 CHEAT SHEET

1.10 Command cheat sheet: Tool, project and session

Legacy UI commands. Angle brackets are placeholders, and values shown are examples, not project limits.

CommandWhat it produces
Release and interface
getVersionThe full release and build string. Record it in the run manifest.
getVersion -majorThe first number of the version plus one digit after the decimal point. Handy for a coarse script check, not for qualification.
innovus -stylusShell startup. Starts the session in the Stylus Common UI; without -stylus the session is Legacy UI.
is_common_ui_modeReturns 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
getLogFileNameThe name of the current log file.
getLogFileName -fullPathThe absolute path of the log file, for the run manifest.
getCmdLogFileNameThe name of the current command log file, which records every command the session ran.
report_messageA summary table of every message ID issued so far, with severity, count and summary, ending in a total of warnings and errors.
report_message -errorsA Tcl list of the error IDs issued in this session.
report_message -errors -countA Tcl list of {ID count} pairs for every error ID. An empty list means no errors.
report_message -warnings -countA Tcl list of {ID count} pairs for every warning ID.
report_message -allA Tcl list of every issued message ID, excluding suppressed ones.
report_message -suppressedA 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_limitRemoves 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_defaultEvery *Mode option whose value differs from the default.
report_command_mode -userEvery *Mode option that has been set manually.
getDesignModeThe current setDesignMode settings.
getAnalysisModeThe current setAnalysisMode settings, with name, value, type and whether the user set them.
getImportModeThe current setImportMode settings, which control how the netlist and design files are read.
Compute resources
getMultiCpuUsage -localCpuThe number of local threads requested.
getMultiCpuUsage -verboseA message with the current multi-CPU setting.
setMultiCpuUsage -localCpu <n>Sets the number of local threads. Changes the session; record the value.
checkMultiCpuUsageWhether distributed processing works in this environment and every configured CPU is reachable. Run after setDistributeHost and setMultiCpuUsage.
getDistributeHost -modeThe distributed-processing mode set with setDistributeHost.
getLicenseStatusA summary of every licence the session has checked out. Record it in the run manifest.
report_resource -peakThe peak memory used so far.
report_diskDisk 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>.encA restore file <name>.enc and the database directory <name>.enc.dat.
saveDesign <name>.enc -tgzThe 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 trueDefault. A restore error if any file in the saved directory was edited, renamed or deleted.
set restore_db_stop_at_design_in_memory 1Default. An error if restoreDesign is called a second time in the same session.
get_metric <pattern>The current state of the named metrics.