• 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. How to preserve parasitic nodes in extracted spice netlist...

Stats

  • Locked Locked
  • Replies 5
  • Subscribers 125
  • Views 4833
  • 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

How to preserve parasitic nodes in extracted spice netlist with APS++/parasitic reduction

twen
twen over 9 years ago

I am using APS++ and parasitic reduction to speed up the simulation so the simulation can run to completion within hours.  Some cells in the config are bound to the extracted spice netlists. I manually save the node voltages inside the extracted spice netlists which are located on selected points on certain metal layers when I run the simulation by including the save statements. When I enabled the parasitic reduction, most saved nodes are blown away so I can not probe the internal parasitic nodes. There is an "instance preservation" option and I have used it with limited success. I say "limited success" because I have thousands or more nodes to save and I have to go into the netlist and find the instance names corresponding to the node names. This is not practical unless I build my own parser which reads in the saved nodes and outputs the preserved instances. Here is the version information "@(#)$CDS: virtuoso version 6.1.6-64b 12/07/2015 20:18 (sjfbm186) $."

My question now: is there an option or trick to force the parasitic reduction algorithm to mark and preserve the nodes and instances if these nodes or instances are in the save statement or match the save wild card patterns? Unmarked parasitic nodes and instances can still be trimmed to speed up the simulation.

Thank you in advance,

TJ

  • Cancel
  • Andrew Beckett
    Andrew Beckett over 9 years ago

    TJ,

    It's more important to know which spectre version you're using (the IC version is irrelevant in this case). You'll see that at the top of the spectre.out log file.

    From some quick searching, this should work from an MMSIM14.1 ISR (not sure which version), but I see there were some fixes added in MMSIM15.1 (that was actually related to the save statements turning off reduction altogether in some cases which it shouldn't have done). 

    The advice is to ensure that you put sigtype=node on the save statement with the wildcard, but I'd first make sure you're using a recent enough MMSIM version.

    Kind Regards,

    Andrew.

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • twen
    twen over 9 years ago

    Hi, Andrew,

    I put a very tiny donut like metal resistor with an schematic instance name "probe" on a metal line in the layout so the extract will put this parasitic resistor in the extracted netlist with identifiable net and instance names and I can save the probe point by "save *probe* sigtype=node". I used the instance preservation option to preserve this resistor and it is trimmed off. Please see the log and part of the extracted netlist for the detail. One detail is that one terminal of this resistor taps on the metal line that I am interested in and the other terminal is dangling and connected to nowhere.

    This is part of Spectre log:

    Cadence (R) Virtuoso (R) Spectre (R) Circuit Simulator Version 15.1.0.345.isr2 64bit -- 4 Jan 2016

    Command line:
    /opt/beta/tools/artist/MMSIM_15.10.345/tools.lnx86/bin/spectre -64 \
    input.scs +escchars +log ../psf/spectre.out -format psfxl -raw \
    ../psf +aps +parasitics +lqtimeout 900 -maxw 500 -maxn 500 \
    -maxwtl 500 -maxntl 500 +lsuspend +lqt 0 +lqs 30

    Global user options:
    reltol = 0.001
    vabstol = 1e-06
    iabstol = 1e-12
    temp = 27
    tnom = 25
    scalem = 1
    scale = 1
    gmin = 1e-12
    rforce = 1
    maxnotes = 500
    maxwarns = 500
    maxwarnstologfile = 500
    maxnotestologfile = 500
    digits = 5
    cols = 80
    pivrel = 0.001
    sensfile = ../psf/sens.output
    checklimitdest = psf
    preserve_inst = *Rprobe
    save = selected
    subcktprobelvl = 2

    Scoped user options:

    Circuit inventory:
    nodes 1448
    capacitor 4178
    juncap200 2
    resistor 4661
    utsoi2 40
    vsource 3

    Analysis and control statement inventory:
    info 7
    tran 1

    Output statements:
    .probe 0
    .measure 0
    save 2


    Notice from spectre during initial setup.
    APS Enabled.
    Parasitics Reduction Enabled.
    (Resistors reduced by 89.07% Capacitors reduced by 65.48%)

    Wildcard match summary:
    save *probe* nodes: 0
    save *Rprobe nodes: 0

    Output and IC/nodeset summary:
    save 1 (voltage)

    Part of input.scs

    *|NET XI0/XINP_probe/vprobe 2.72049e-16

    **|OP (XI0/XINP_probe/Rprobe:pos XI0/XINP_probe/Rprobe pos B 0 1.88989 2.174)

    C4_1403 XI0/MN9@2:G XI0/XINP_probe/Rprobe:pos 6.99675e-18

    R4_1775 XI0/XINP_probe/Rprobe:neg INP:1 0.292624

    RXI0/XINP_probe/Rprobe XI0/XINP_probe/Rprobe:pos XI0/XINP_probe/Rprobe:neg r=0.001

    simulatorOptions options reltol=1e-3 vabstol=1e-6 iabstol=1e-12 temp=27 \

       tnom=25 scalem=1.0 scale=1.0 gmin=1e-12 rforce=1 maxnotes=500 \

       maxwarns=500 maxwarnstologfile=500 maxnotestologfile=500 digits=5 \

       cols=80 pivrel=1e-3 sensfile="../psf/sens.output" checklimitdest=psf \

       preserve_inst=[*Rprobe]

    tran tran stop=3n write="spectre.ic" writefinal="spectre.fc" \

       annotate=status maxiters=5

    finalTimeOP info what=oppoint where=rawfile

    modelParameter info what=models where=rawfile

    element info what=inst where=rawfile

    outputParameter info what=output where=rawfile

    designParamVals info what=parameters where=rawfile

    primitives info what=primitives where=rawfile

    subckts info what=subckts where=rawfile

    save net1

    saveOptions options save=selected subcktprobelvl=2

    save *probe* sigtype=node

    save  *Rprobe:currents

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

    You might be being stymied by the dangling resistor removal in APS. Not sure. Given that you're using a recent version, I'd suggest contacting customer support so that we can explore this in more detail to find out why it's not working or if there's a workaround (maybe you can share the example that has the problem which would make it quicker to reproduce).

    Thanks,

    Andrew.

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • twen
    twen over 9 years ago
    Case #46012649 has been created. The related Solution ID: 20384016.
    I am pretty sure parasitic reduction also trim off the non-dangling ones.
    Thanks,
    TJ
    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • Andrew Beckett
    Andrew Beckett over 9 years ago

    That article (solution) isn't really relevant to this - but anyway, hopefully you'll get some response via this case soon enough. There's an AE assigned to work on it.

    Regards,

    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