• Skip to main content
  • Skip to search
  • Skip to footer
Cadence Home
  • This search text may be transcribed, used, stored, or accessed by our third-party service providers per our Cookie Policy and Privacy Policy.

  1. Community Forums
  2. Custom IC SKILL
  3. Adexl Results Data Access for a Custom Results Export F...

Stats

  • Locked Locked
  • Replies 4
  • Subscribers 144
  • Views 16471
  • Members are here 0
This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

Adexl Results Data Access for a Custom Results Export Format

Curtisma
Curtisma over 7 years ago

Hello:

I am trying to create a function that can be run with an adexl session that saves output data from a corner's run in a specific format.  The first step is to get the data from the results.  At the moment I am only interested in DC results but I may expand it later to include other results.  Since I am running it over corners it seems like I have to open the overall results directory to the list of corners and their results directory number and then open the results directory from each corner individually to get the actual data for that corner.  Is this necessary?  Is there a way to get the data in a waveform or object over corners directly?  Otherwise do I need to add a loop over the corners and open the result directory of each corner?

Another way of approaching this would be to save the data as a csv and then open the csv and convert it to my format.  Is there a SKILL function for running the "Save to CSV" function that you can run using the button to save the results table data in ADEXL?

Also, my function for getting the waveform from the expression obtained from the output object seems overly complicated.  Is there a simpler way to do this? I was able to simplify by using eval, but is there another function that handles referencing to other outputs, etc?  What do famEval and awvEval do?  When I use them on output->expression, they just give me back my input, a two element list with the access function and then the signal/net as the elements.  e.g.(VS ("/DIO4/V_DIO"))

    /*****************************************************************
  *                                                                *
  *                       apExportResultStc                        *
  *                                                                *
  *    Exports the current results in STC output format            *
  *                                                                *
  *****************************************************************/
  defun( apExportResultStc ()
	let((sess hist resultsDir sdb tests outputs testId testSess testHist currExpr documentsDir)
		sess = axlGetWindowSession()
		unless(sess error("Could not find current ADE XL session"))
		hist = axlGetCurrentHistory(sess)
		when(zerop(hist) (error "Cannot open result - No current history"))
		;resultsDir =axlGetHistoryResultsDir (hist)
		sdb = axlGetMainSetupDB(sess)
		documentsDir = strcat(axlGetSetupDBDir(sdb) "/documents")
		tests = axlGetTests(sdb)
		foreach(test cadr(tests)
		; Make sure the history item had the test enabled
		testHist = axlGetTest(axlGetHistoryCheckpoint(hist) test)
      	when((and testHist (null (zerop testHist)) (axlGetEnabled testHist))
			testId = axlGetToolSession(sess test)
			testSess = asiGetSession(testId)
			outputs = asiGetOutputList(testSess)
			resultsDir = axlGetHistoryResultsDir(hist)
			resultsDir = strcat(resultsDir "/psf/" test "/psf")
			openResults(resultsDir test)
			foreach(output outputs
				;(printf "Plotting %s\n" output~>name)
				currExpr = output~>expression
				when(((strlen(output~>name) > 3) && member(substring(output~>name 1 3) '("VDC" "IDC")))
					currExpr = output~>expression
					currentWave = apGetWaveFromExpr(currExpr outputs)
; DO I need to iterate over the corners' results directories or is there a way to get the results from the main psf directory? ) ) ; foreach output ) ; when ) ; foreach test t ) ; let ) ; defun apExportResultStc ;apGetWaveFromExpr ; Returns the waveform for the provided output expression. ; ; INPUTS ; in - The expression of the output whose wave will be returned ; outputs - A list of all the outputs in the current test. procedure(apGetWaveFromExpr(in outputs) let((out) cond( (listp(in) out = eval(in) ;case(car(in) ;(VT out = v(cadr(in) ?result 'tran)) ;(VDC out = v(cadr(in) ?result 'dcOp)) ;(IT out = i(cadr(in) ?result 'tran)) ;(IDC out = i(cadr(in) ?result 'dcOp)) ;(VS out = v(cadr(in) ?result 'dcOp)) ;(IS out = i(cadr(in) ?result 'dcOp)) ;((nil) out = nil) ;(t out = nil ; error("Unrecognized expression")) ;) ) ;in is a symbol that is the name of another output (symbolp(in) && listp(cdr(nthelem(lindex(outputs~>name symbolToString(in)) outputs)~>expression)) (out = apGetWaveFromExpr((nthelem(lindex(outputs~>name symbolToString(in)) outputs)~>expression) outputs))) (t (out = nil))) out))

-Curtis

  • Cancel
Parents
  • mschw
    mschw over 7 years ago

    Dear Curtis,

    regarding your sub-question how to save the simulation results to .csv via SKILL: You could use axlExportOutputView(), e.g. axlExportOutputView( axlGetWindowSession() "myResults.csv" "").

    Kind regards,

    Matthias

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • Andrew Beckett
    Andrew Beckett over 7 years ago in reply to mschw

    Curtis,

    This is probably a bit of a bigger question than I have time to deal with myself in the next week so I'd suggest you log a case with customer support... (may come back to haunt me internally if you do that though!). Would need me to carefully read the code, do some experiments - and my bandwidth is limited due to some other projects in the next week.

    Regards,

    Andrew.

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
Reply
  • Andrew Beckett
    Andrew Beckett over 7 years ago in reply to mschw

    Curtis,

    This is probably a bit of a bigger question than I have time to deal with myself in the next week so I'd suggest you log a case with customer support... (may come back to haunt me internally if you do that though!). Would need me to carefully read the code, do some experiments - and my bandwidth is limited due to some other projects in the next week.

    Regards,

    Andrew.

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
Children
  • Curtisma
    Curtisma over 7 years ago in reply to Andrew Beckett

    Andrew:

    I have submitted a support case, Case #46254017.

    Thanks for letting me know!

    -Curtis

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel

Community Guidelines

The Cadence Design Communities support Cadence users and technologists interacting to exchange ideas, news, technical information, and best practices to solve problems and get the most from Cadence technology. The community is open to everyone, and to provide the most value, we require participants to follow our Community Guidelines that facilitate a quality exchange of ideas and information. By accessing, contributing, using or downloading any materials from the site, you agree to be bound by the full Community Guidelines.

© 2025 Cadence Design Systems, Inc. All Rights Reserved.

  • Terms of Use
  • Privacy
  • Cookie Policy
  • US Trademarks
  • Do Not Sell or Share My Personal Information