• 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. SKILL function for getting point ID (or netlist directory...

Stats

  • Locked Locked
  • Replies 7
  • Subscribers 144
  • Views 18249
  • 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

SKILL function for getting point ID (or netlist directory) in ADE XL

MinYoon
MinYoon over 7 years ago

I am writing custom SKILL function to process certain file located inside of netlist directory, in IC6.1.7-64b.

This file is generated by an internally developed tool of which source code I don't have access to.

I am calling my custom function in ADE XL output expression. This function needs to read the file, process data, and show result for each simulation point in ADE XL result window.

Let's say variables are defined as following.

ssName=axlGetWindowSession()
sdName=axlGetMainSetupDB(ssName)
hstName=axlGetHistoryName(axlGetCurrentHistory(ssName))
hstEntry=axlGetHistoryEntry(sdName hstName)
pCornerName=axlGetCornerNameForCurrentPointInRun()

When I run axlGetPointNetlistDir(hstEntry "test") when my test name is "test", I will get something like this.

"[some directory hierarchy]/adexl/results/data/Interactive.0/psf/test/netlist"

However I need to know the netlist directory of each point where each file is saved. Desired result looks something like this.

"[some directory hierarchy]/adexl/results/data/Interactive.0/1/test/netlist"

 

If I know point ID and run 

axlGetHistoryEntry(sdName hstName ?cornerName pCornerName ?designPointId [point ID value])

I will be able to get the netlist directory I want.

Does anyone know if there is any function that returns point ID, or returns netlist directory of each simulation point?

Thank you.

  • Cancel
Parents
  • Dimitra Papazoglou
    Dimitra Papazoglou over 7 years ago

    Hi,

     Try this: 

    session=axlGetWindowSession()
    historyName=axlGetHistoryName( axlGetCurrentHistory(session))
    rdb=axlReadHistoryResDB(historyName)
    foreach(test rdb->tests()
      printf("Point %d Corner %L Test %s | The netlist directory is : %s \n" test->pointID test->cornerName test->name strcat( test->resultsDir "/netlist"))
    )

    test->resultsDir returns the results directory of each sim point which is the dir that includes the netlist and psf folders. Using strcat I have added '/netlist'  to point to the netlist directory.

    Regards,

    Dimitra

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • MinYoon
    MinYoon over 7 years ago in reply to Dimitra Papazoglou

    Thank you for your suggestion.

    It looks like your code will return full list of netlist for each design points. However I think I need something slightly different.

    I am making a custom function that will show the result in ADE XL result window.

    For example, I would like to get something like this in ADE XL.

    Point VDD Process corner Power Output duty cycle Netlist Directory Some value from a file in the netlist directory
    1 1.6 SS 2.4 45 [???] [???]
    1 1,6 FF 2.5 55 [???] [???]
    2 1.8 SS 3 47 [???] [???]
    2 1.8 FF 3.1 54 [???] [???]
    3 2 SS 4 49 [???] [???]
    3 2 FF 4.3 51 [???] [???]

    In this example, I am sweeping three different VDD in two different process corners.

    I would like to measure three values in this example.

    I can use pre-defined Waveform Calculator function for simple expressions like "Power" and "Output duty cycle".

    I also would like to have some custom function that will read a certain file in the netlist directory and show certain value from that file in the same ADE XL window.

    Maybe I can use your code to generate separate text file that contains all the result.

    However I would need to open the result file after each simulation run, and I'd like to avoid that.

    Again, thank you very much for your answer.

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • Dimitra Papazoglou
    Dimitra Papazoglou over 7 years ago in reply to MinYoon

    Ok it's clearer now what you are trying to do.

    You can add the following output for each of your tests in Outputs Setup tab in ADE-XL:

    asiGetNetlistDir(asiGetCurrentSession())

    The above returns the netlist directory for each designPointId-Corner for the associated test.

    Also, Instead of calling again asiGetNetlistDir(asiGetCurrentSession()) in your custom function which reads value(s) from a file from netlist directory, you can use calcVal() as input argument in the custom function to propagate the netlist directory.

    e.g

    In Outputs Setup tab:

    netlistDir= asiGetNetlistDir(asiGetCurrentSession())

    MyReadValue=dpReadValueFromFileInNetlistDir(calcVal("netlistDir"))

    In the above example, you might not really need calcVal() - so dpReadValueFromFileInNetlistDir( netlistDir ) would be enough - but some things are not working always without calcVal() so I'll advise you to use it.

    Regards,
    Dimitra

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • MinYoon
    MinYoon over 7 years ago in reply to Dimitra Papazoglou

    I've tried your suggestion with limited success.

    Let's say I am running a test named "test_tran" at "Interactive.0". I will assume that four different corners will be run as a result of this simulation.

    The result directory will look like this.

    • Interactive.0
      • 1
        • test_tran
          • netlist
          • psf
      • 2
        • test_tran
          • netlist
          • psf
      • 3
        • test_tran
          • netlist
          • psf
      • 4
        • test_tran
          • netlist
          • psf
      • psf
        • test_tran
          • netlist
          • psf

    Before running the simulation, I defined a new expression called "netlistDir" as asiGetNetlistDir(asiGetCurrentSession())

    As each simulation ends, "netlistDir" will correctly point to each directory, namely...

    - [some hierarchy]/Interactive.0/1/test_tran/netlist

    - [some hierarchy]/Interactive.0/2/test_tran/netlist

    - [some hierarchy]/Interactive.0/3/test_tran/netlist

    - [some hierarchy]/Interactive.0/4/test_tran/netlist

    However, when I re-evaluate the expression after all the simulations have ended, they will all point to same directory, which is...

    - [some hierarchy]/Interactive.0/psf/test_tran/netlist

    The same expression is giving me different result depending on when it was evaluated. Therefore it can cause unexpected error especially when I want to add a new expression that refers to netlistDir after the simulation is done.

    If it can work correctly all the time, then it will solve all of my problem. I believe we are getting closer to the solution.

    Thank you so much for your expert advice.

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

    That's a good point. Dimitra and I had talked about this, and I'd always used the approach with asiGetCurrentSession(), but overlooked the fact that re-evaluate doesn't work properly because asiGetCurrentSession is pointing at the global point then. For the case I'd been using it previously, which was used with calcVal to pass a spectre nodeset from one simulation toa another, that didn't matter, because it was only used in simulation and re-evaluation didn't matter - but clearly it does in your case.

    Instead, you can use openResults() or sprintf(nil "%s/netlist" openResults()) if you need the netlist dir, or similar for the psf dir. That should work with both the post-simulation and re-evaluation situations, I believe (seems fine from a quick test).

    Regards,

    Andrew.

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

    I've tried openResults() and it works perfectly

    Thank you so much for your help. I've been working on this for weeks, and it will reduce the script length by a lot.

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

    I've tried openResults() and it works perfectly

    Thank you so much for your help. I've been working on this for weeks, and it will reduce the script length by a lot.

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
Children
No Data

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