• 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. dcOp sweep

Stats

  • Locked Locked
  • Replies 3
  • Subscribers 125
  • Views 16479
  • 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

dcOp sweep

drdanmc
drdanmc over 8 years ago

I'm interested in being able to *quickly* simulate some device small signal characteristics versus some parameter (design variable, temperature, etc).  A dc sweep with dc operating point enabled in ADE-L (or even just straight up spectre from the command line) only reports dc operating points (like gm, gds, etc) at the start point.  I've enabled saving as much as I can in the Save All area.  A careful inspection of 'spectre -h dc' would seem to imply that indeed you can't save off operating points as part of a dc parameter sweep.

I can do a parametric analysis, but the overhead of spectre starting and loading the netlist each time is pretty awful.

I can use a 'sweep' analysis in spectre and if I'm in ADE-L I can play games with puttting the 'sweep' analysis in a model file that gets included.  But... then when it comes to results, each point shows up as a single analysis and I don't have a clean way to combine them all unless I write some ocean code to dig through each but that seems like a hack.

If I just put together some loops in ocean, it looks like spectre is indeed running in interactive mode (batch would be even slower).   However, I'm seeing something like 2.5 seconds per point with an ocean script which quite frankly stinks for a circuit with 1 transistor.  I should be able to run 1000 points in a few seconds (or less) instead of almost an hour.

It may be that my best choice is a nested set of 'sweep' runs in a command line spectre and then use python to grab out data from the spectre logfile.  Surely there should be a better (faster) way?  Spectre has the underlying horsepower to where this should be a nothing sort of job.  I suppose another alternative is to use python to generate a really big netlist with all of my operating points which may be a few thousand, and just get them all at once in parallel.  

  • Cancel
  • Andrew Beckett
    Andrew Beckett over 8 years ago

    I'm not sure why it should take 2.5s in interactive mode (I would suggest you contact customer support so we can take a look - this seems really excessive). 

    Could you not use the ability in ADE, Outputs->To be saved->Select OP parameters, and then you'll get the gm, gds or whatever you want to save versus your sweep variable in the dc sweep (rather than doing a parametric sweep across a dcOp)?

    Regards,

    Andrew.

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • drdanmc
    drdanmc over 8 years ago

    I totally missed the Select OP parameter in the To be saved section.  I was focussed in the save all parts and also digging in the spectre docs.  For the benefit of anyone else stumbling across this thread, the spectre commands which implement this are:

    // the oppoint=rawfile saves the operating point data to the rawfile.  Note that for<
    // MMSIM 14.1.0.708.isr10, the 'spectre -h dc' says:<
    // 23      oppoint=no        Should operating point information be computed; if yes,
    //  where should it be printed (screen or file). Operating point information
    // is not printed if sweep parameter `param' is set. Possible values are no, screen, logfile, and rawfile.
    // which suggests we can't get operating point versus a sweep parameter, but that
    // is not quite right
    dc dc param=V_VGS start=0 stop=1.5 lin=200 oppoint=rawfile maxiters=150 \
         maxsteps=10000 annotate=status
    // this is the line which saves some of the small signal operating point parameters versus the sweep.
    save MN0:id MN0:vth MN0:gm MN0:gds MN2:id MN2:vth MN2:gm MN2:gds MN3:id \
         MN3:vth MN3:gm MN3:gds
    saveOptions options save=allpub
    

    In Ocean, the corresponding code is:

    analysis('dc ?saveOppoint t  ?param "V_VGS"  ?start "0"
        ?stop "1.5"  ?lin "200"  )
    saveOpPoint( "/MN0" ?operatingPoints "id vth gm gds" )
    saveOpPoint( "/MN2" ?operatingPoints "id vth gm gds" )
    saveOpPoint( "/MN3" ?operatingPoints "id vth gm gds" )
    

    Thanks yet again for your help Andrew.  Regarding the 2.5s in interactive mode, I can send in something although this is a pretty long standing thing for as long as I can remember (back to IC 4.3 or 4.4 days).

    -Dan

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • Andrew Beckett
    Andrew Beckett over 8 years ago

    Unknown said:
    Thanks yet again for your help Andrew.  Regarding the 2.5s in interactive mode, I can send in something although this is a pretty long standing thing for as long as I can remember (back to IC 4.3 or 4.4 days).

    Please do Dan; it really shouldn't be this bad.

    Andrew.

    • 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