• 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 Design
  3. ADE L psf dcOpIno MOS data is scalar but XL psf is wave

Stats

  • Locked Locked
  • Replies 4
  • Subscribers 124
  • Views 1810
  • 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

ADE L psf dcOpIno MOS data is scalar but XL psf is wave

FormerMember
FormerMember over 6 years ago

When using oppoints from ADE L psf the data is scalar but the same as a Test in XL gives data that is wave at design point 0 even if no sweep specified.. You have to use the data at value(0). Also functions like report(?type "bsim4" ?param "vth") wont work on this XL psf. Not tried Explorer yet

IC6.1.7-64b.500.21

  • Cancel
  • Andrew Beckett
    Andrew Beckett over 6 years ago

    How are you opening the data to do further processing on it? What further processing are you doing? If you use the report() function, you could use openResults() on the individual point directory psf results rather than the top level (which is across all the runs, even if only one).

    Andrew.

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • FormerMember
    FormerMember over 6 years ago in reply to Andrew Beckett

    Thanks Andrew, I am opening the results browser from the history tab and passing the psf path as a command line argument to my script where i do an openResults on this top level. Eventually I want to print out a chosen MOS oppoint across all corners/sweeps (without knowing what the corner/sweep names are) and checking if above or below a limit. I am starting with no corners/sweeps thus; 

    foreach(mosDev mosDevs
     mosId=abs(value(pv(mosDev "id") 0  ))  
     if(mosId>1p
      fprintf(fd,"Device:%s,current:%f uA\n" mosDev,mosId/1u)
     )

    I see other people have been asking similar things;

    https://community-prod.cadence.com/cadence_technology_forums/f/custom-ic-design/36760/skill-print-voltage-to-a-text-file-in-ade-xl-over-corners

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • FormerMember
    FormerMember over 6 years ago in reply to FormerMember

    Hi Andrew i have just seen your post on sweepValues() and sweepNames() etc ;

    https://community.cadence.com/cadence_technology_forums/f/custom-ic-design/40716/filtering-data-to-plot-for-nested-sweeps

    so perhaps I have to foreach across all these

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • FormerMember
    FormerMember over 6 years ago in reply to FormerMember

    Hi Andrew or someone, based on the above links i wrote the code to access MOS oppoints at all corners and sweeps;

    selectResults('dcOpInfo)
    ;dataTypes()
    mosDevs=outputs(?type "bsim4")
    sweepNames0=nth(0 sweepNames())
    sweepNames1=nth(1 sweepNames())
    sweepNames2=nth(2 sweepNames())
    sweepNames3=nth(3 sweepNames())
    sweepVarValues0=sweepVarValues(sweepNames0)
    sweepVarValues1=sweepVarValues(sweepNames1)
    sweepVarValues2=sweepVarValues(sweepNames2)
    sweepVarValues3=sweepVarValues(sweepNames3)

    foreach(mosDev mosDevs
     foreach(sweep0 sweepVarValues0
      foreach(sweep1 sweepVarValues1
       foreach(sweep2 sweepVarValues2
        foreach(sweep3 sweepVarValues3 
         mosId=abs(leafValue(pv(mosDev "id") sweepNames0 sweep0 sweepNames1 sweep1 sweepNames2 sweep2 sweepNames3 sweep3 ))
         if(mosId>0.2u
          fprintf(fd,"Device:%s current:%f uA %s %f %f %f\n" mosDev,mosId/1u,sweep0,sweep1,sweep2,sweep3)
         
         )
        )
       )
      )
     
     )
    ) 
    close(fd) 
    This works great as long as there is always 4 sweeps! 2 of them are model and temperature.
    The obvious question is how do you cope with less? I could check whether sweepNames# is nil and set all redundant sweepVarValues# to single element so redundant foreach only have single loop operation but then how will the leafValue() pick out the single oppoint with redundant sweep arguments?
    Its too messy to have an if not nil test for each foreach then a different length leafValue() and printf on each else.

    • 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