Product Documentation
Virtuoso ADE SKILL Reference
Product Version IC23.1, November 2023

axlToolSetOpPointInfo

axlToolSetOpPointInfo( 
g_sessionID 
t_testName
[ ?instanceName t_instanceName ]
[ ?parameters t_parameters ]
) 
=> o_sevOpPoint / nil 

Description

Adds the signal specified for the oppoint type item to the Output Setup table in a test setup and returns the signal object.

Arguments

g_sessionID

ID of the current session.

t_testName

Name of the test.

?instanceName t_instanceName

Name of the instance.

?parameters t_parameters

Operating point parameters related to the specified instance.

Value Returned

o_sevOpPoint

Returns the signal object when adding the signal output to the test successfully.

nil

Returns nil if the operation is unsuccessful.

Examples

Adds an oppoint type signal to the output setup.

sessionId=axlGetWindowSession(hiGetCurrentWindow)
testName="myoalib:ampTest:1"
axlToolSetOpPointInfo(sessionId testName ?instanceName "/R2" ?parameters "res")
=> sevOpPointStruct@0x2f207140

Working with Signals or Triggers

The session functions are a known set of states. Any transition from one state to another is called an event. You can specify customized actions to be automatically performed whenever an event occurs. You can do this by registering callbacks for these events or signals. In Qt terminology, these events are known as signals and the callbacks are known as slots.

To execute callbacks or slots for signals, perform the following tasks:

  1. Define a callback function
    Define any SKILL function that you need to call when an event occurs in an ADE session. It is recommended to define this procedure in the .cdsinit file.
    You can use any other SKILL function in this callback function.
  2. Connect the defined callback function with the signal
    Connect the custom SKILL function defined in step 1 with the required signal or event by using the axlSessionConnect SKILL function in the .cdsinit file.
  3. Register the callback when a session is launched
    To make the callback function available for calling, it is required to register the function by using the axlSessionRegisterCreationCallback SKILL function in the .cdsinit file.
    To know the signature of a trigger, you can use the axlSessionSignalSignature SKILL function.

The following examples show how you can register callbacks and call them at runtime from a session:

Example 1: To automatically disable corners when ADE is launched

Add the following code in .cdsinit to register a callback that disables all corners after ADE is launched:

(defun ADEexampletrigger_postInstall_disable_corners (session)
(let (sdb)
sdb = (axlGetMainSetupDB session) ; setup DB handle
(axlSetAllCornersEnabled sdb nil)
)
)
(axlSessionRegisterCreationCallback (lambda (session) (axlSessionConnect session "postInstall" 'ADEexampletrigger_postInstall_disable_corners)))

Example 2: To send an email after a run is finished

The following example connects a procedure to the runFinished trigger to send an email on completion of a simulation run:

(defun ADEexampletrigger_runFinished_email (session _runid histid _errorid)
(let (email history lib cell view message command)
email = "user@cadence.com"    ;send email with subject "ADE run finished - <history> - <lib> <cell> <view>"
history = (axlGetHistoryName histid)
lib = (axlGetSessionLibName session)
cell = (axlGetSessionCellName session)
view = (axlGetSessionViewName session)
   (sprintf message "ADE run finished - %s - %s %s %s" history lib cell view)
; mutt command (no body) e.g.:  mutt -s 'the subject' user@address.com < /dev/null
   (sprintf command "mutt -s '%s' %s < /dev/null" message email)
(system command)
   ; print message to CIW/CDS.log
(printf "\n%s\n" message)
)
)
(axlSessionRegisterCreationCallback (lambda (session) (axlSessionConnect session "runFinished" 'ADEexampletrigger_runFinished_email)))

Example 3: To automatically print the job policy settings to CDS.log when a run starts

(defun ADEexampletrigger_runStarted_print_jobpolicy (_session _runid histid)
(let (jp)
   (printf "\nStarting ADE run %s\n" (axlGetHistoryName histid))
(when (maeGetJobControlMode) == "LSCS"
jp = (maeGetJobPolicy ?jobType "netlisting")
(printf "Job Policy (Netlisting):\n")
(foreach p jp->?
printf "%s=%s\n" p (get jp p))
)
)
jp = (maeGetJobPolicy)
(printf "\nJob Policy (Simulation):\n")
(foreach p jp->?
(printf "%s=%s\n" p (get jp p))
)
   )
)
(axlSessionRegisterCreationCallback (lambda (session) (axlSessionConnect session "runStarted" 'ADEexampletrigger_runStarted_print_jobpolicy)))

Example 4: To automatically change the job policy per ADE test based on the simulation setup

(defun ADEexampletrigger_preRun_pertest_jobpolicy (@rest _args)
(let (tests cmdbase jp unimode)
; Simplistic example to set a per-test job policy based on simulation options ; This is an LSF bsub command example where the -J option (job name) is modified ; per test cmdbase = "bsub -q cic -K"    tests = (maeGetSetup ?typeName "tests" ?enabled t)
   (foreach test tests
unimode = (asiGetHighPerformanceOptionVal (maeGetTestSession test) 'uniMode)
   (if (maeHasTestJobPolicy test) then
jp = (maeGetJobPolicy ?testName test)
else
jp = maeGetJobPolicy()
; Could choose to load from a named policy, see maeGetJobPolicyByName
)

            (case unimode
("Spectre"
jp->distributionmethod = "Command"
jp->jobsubmitcommand = (sprintf nil "%s -J SPECTRE" cmdbase)
jp->name = "LSF Spectre"
(maeSetJobPolicy jp ?testName test)
)
                ("APS"
jp->distributionmethod = "Command"
jp->jobsubmitcommand = (sprintf nil "%s -J APS" cmdbase)
jp->name = "LSF APS"
(maeSetJobPolicy jp ?testName test)
)
                ("Spectre X"
jp->distributionmethod = "Command"
jp->jobsubmitcommand = (sprintf nil "%s -J SPECTREX" cmdbase)
jp->name = "LSF SpectreX"
(maeSetJobPolicy jp ?testName test)
)
)
)
)
)
(axlSessionRegisterCreationCallback (lambda (session) (axlSessionConnect session "preRun" 'ADEexampletrigger_preRun_pertest_jobpolicy)))

Example 5: To automatically perform a task after the setup is saved

(defun ADEexampletrigger_setupSaved_doaction (_session)
printf("\nSetup is saved!!\n")
)
(axlSessionRegisterCreationCallback (lambda (session) (axlSessionConnect session "setupSaved" 'ADEexampletrigger_setupSaved_doaction)))

Example 6: To automatically add a variable to an ADE test when created


(defun ADEexampletrigger_postCreatedTest_addvar (_session testname)
    (maeSetVar "VDD" "1.1" ?typeName "test" ?typeValue (list testname))
)
(axlSessionRegisterCreationCallback (lambda (session) (axlSessionConnect session "postCreatedTest" 'ADEexampletrigger_postCreatedTest_addvar)))

Return to top
 ⠀
X