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

maeReadResDB

maeReadResDB(
[ ?historyName t_historyName ] 
[ ?session t_sessionName ] 
[ ?run t_runName ]
)
=> h_resultsDBObj / nil

Description

Returns a handle to the results database for the given history.

This handle provides read-only access to the results database that contains objects of the following types:

There is a hierarchical relationship between the instances of these objects. For example, a point is associated with one or more corners. Each corner is associated with one or more tests. Each test is associated with zero or more outputs, and so on. As a result of this relationship, for an object, you can access the properties of the object itself and other objects related to it.

Each object has:

In addition, the result database provides a function help() for each object of the above mentioned types to displays the list and description of functions that can be called using that particular object. For example, function call help('corner) displays a list of all the functions that can be called using an object of type corner. help('all) displays help for all the object types.

Arguments

?historyName t_historyName

Name of the history for which results are required. If not specified last active run will be used.

?session t_sessionName

Name of the session.

If not specified, the current session is used.

?run t_runName

Name of the run plan.

This argument is considered only when the ?historyName argument is not used.

Value Returned

h_resultsDBObj

The handle to the results database is returned.

nil

The handle to the results database is not returned.

Examples

Returns a handle to access the results for a history named Interactive.1.

maeReadResDB( ?historyName "Interactive.1" )
=> t

Opens the results database and displays built-in help.

rdb = maeReadResDB( ?historyName "Interactive.1" ) 
=> axlrdb@0x18b5e200
rdb -> help()

Help is displayed in the CIW.

As shown in the help above, you can use the handle to access specific results from the results database.
; The following statement returns the point object for design point 1 pt = rdb->point(1) => axlrdbd@0x18b5e230 ; The following code prints corner name, test name, output name and its value ; for each output of type expression

foreach(out pt->outputs(?type 'expr ?sortBy 'corner)

printf("corner=%s, test=%s, output=%s, value=%L\n" out->cornerName out->testName out->name out->value)
)
corner=C0, test=test1, output=VAR("val1"), value=99.22984
corner=C0, test=test1, output=freq_res, value=5.112893e+08
corner=C0, test=test2, output=(((xmin(mag(IF("/I0/p1")) 1) / 1000000) - 200) * 4), value=1299.23
corner=C0, test=test2, output=myCalib, value=99.22984
corner=C0, test=test2, output=calib_dummy, value=1
(axlrdbo@0x18476638 axlrdbo@0x18476620 axlrdbo@0x184765f0 axlrdbo@0x184765c axlrdbo@0x18476590)

Prints the results of reliability analysis.

rdb=maeReadResDB(?historyName "Interactive.1")
reportport=outfile("./reportport.txt")
foreach(point rdb->points()
fprintf(reportport "Processing point %L\n" point->id)
foreach(corner rdb->corners()
fprintf(reportport " Corner %L pointID %L\n" corner->name corner->pointID)

foreach(relxSetup corner->relxSetups()
    fprintf(reportport "  RelxSetup: %L Age:%L \n" relxSetup->name relxSetup->age)
    foreach(test relxSetup->tests()
        fprintf(reportport "   Test: %L\n" test->name)
        foreach(output test->outputs()
     unless(output->value=='Error || !output->value
fprintf(reportport " Output: %L=%L\n" output->name output->value)
)
)
)
)
)
)
close(reportport)
view("./reportport.txt")

The .txt file that contains the report is displayed as shown below.

Prints the results of reliability analysis when the setup contains aging scenarios:

rdb1=maeReadResDB(?historyName "Interactive.3")
reportport1=outfile("./reportport1.txt")
foreach(point rdb1->points()
  fprintf(reportport1 "Processing point %L\n" point->id)
  foreach(param point->params()
     when(equal(param->name "RelxScenario")
    fprintf(reportport1 "  Param %L=%L\n" param->name param->value)
  )
  )
  foreach(relxSetup point->relxSetups()
  fprintf(reportport1 "  RelxSetup: %L Age:%L CornerName:%L\n" relxSetup->name relxSetup->age relxSetup->cornerName)
  foreach(test relxSetup->tests()
      fprintf(reportport1 "   Test: %L\n" test->name)
      foreach(output test->outputs()
          unless(output->value=='Error || !output->value
       fprintf(reportport1 "    Output: %L=%L\n" output->name output->value)
)
)
)
)
)
close(reportport1)
view("./reportport1.txt")

The txt file that contains the report is displayed as shown below.

Returns the r and p values from the results of Monte Carlo analysis.

rdb = (maeReadResDB ?historyName "MonteCarlo.0")
myoutputs = (setof x rdb->outputs(?type 'expr) (and (equal x->name "UGF")))
myoutputvalues = (mapcar (lambda (x) (x->value)) myoutputs)
yvec = (drCreateVec 'double myoutputvalues)
xvec = (drCreateVec 'double (mapcar (lambda (x) (x->pointID)) myoutputs))
mywave = (drCreateWaveform xvec yvec)
myqq2 = (normalQQ (histogram2D mywave 10 "standard" nil nil))
printf("r = %f\n" myqq2->correlation) printf("p = %f\n" myqq2->pValue) => srrVec:0x37f331d0 srrVec:0x37f331e0 srrWave:0x37f770d0 srrWave:0x37f770f0 r = 0.976763 t p = 0.053200 t

Prints the parameter combinations for all points in the history Interactive.4.

rdb=maeReadResDB(?historyName "Interactive.4")
printf(" Params %L\n" mapcar(lambda((x) sprintf(nil "%s=%L" x->name x->value)) rdb->params()))
=> Params ("age=0" "vcontrol=1.8" "vdd=2" "age=-1" "vcontrol=1.8" "vdd=\"2.2\"" "age=\"5_yr\"" "vcontrol=1.8" "vdd=2" "age=\"10_yr\"" "vcontrol=1.8" "vdd=2" "age=0" "vcontrol=2" "vdd=2" "age=-1" "vcontrol=2" "vdd=\"2.2\"" "age=\"5_yr\"" "vcontrol=2" "vdd=2" "age=\"10_yr\"" "vcontrol=2" "vdd=2")

Return to top
 ⠀
X