• 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. Spectre X fails to output accurate nutascii formated .raw...

Stats

  • Locked Locked
  • Replies 4
  • Subscribers 125
  • Views 7981
  • 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

Spectre X fails to output accurate nutascii formated .raw output file if +postlpreset is used

Daedalus
Daedalus over 2 years ago

I wasted a bunch of time on this problem and wanted to make a post in case it helps anyone else in the future.  The cause of my problem was that I used the option +postlpreset

Using the netlist and commands below, I simulated a voltage divider and current source in both Spectre and Spectre x.  Spectre produced the expected results in the .raw output file, however, Spectre X had major errors.  My interpretation of the error pattern was that Spectre X failed to parse the results correctly.  No errors or warnings were given.

CLI:

BAD!  spectre -format=nutascii +mt=1 +preset=mx +postlpreset=mx test.cir

GOOD! spectre -format=nutascii +mt=1 +preset=mx test.cir

Netlist:

simulator lang=spectre

Iin (n0_0 0) isource type=pulse dc=0 \
val0=0 val1=-1m width=50n period=200u rise=0.021n\
fall=0.021n td1=0 tau1=0.5n td2=100u tau2=0.1n \
freq=10k ampl=1 delay=200p

R0_0 (n0_0 n0_1) resistor r=1.0k
R0_1 (n0_1 n0_2) resistor r=1.0k
R0_2 (n0_2 n1_0) resistor r=1.0k
R1_0 (n1_0 n1_1) resistor r=1.0k
R1_1 (n1_1 n1_2) resistor r=1.0k
R1_2 (n1_2 n2_0) resistor r=1.0k
R2_0 (n2_0 n2_1) resistor r=1.0k
R2_1 (n2_1 n2_2) resistor r=1.0k
R2_2 (n2_2 0) resistor r=1.0k

wmResp tran stop=2ns strobeperiod=10p
o1 options save=selected savefilter=none
save n*

 

  • Cancel
  • Daedalus
    Daedalus over 2 years ago

    Quick follow-up:   scaling up the design, I noticed Spectre X still had trouble parsing the variables and values correctly in the output .raw file.   I was able to resolve this (i think) by essentially disabling the parasitic optimization using the command line option +postlayout=upa.  This may be a bug, but I guess a nutascii formatted .raw output is barely supported, given the file type is not popular with users.  

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • Andrew Beckett
    Andrew Beckett over 2 years ago in reply to Daedalus

    This is nothing to do with using nutmeg/nutascii format (not sure what you mean by "parsing the variables and value correctly in the output .raw file" - nothing would get parsed from an output file). It is happening regardless of the output format (the same happens with PSF XL for example).

    What seems to be happening is that if you explicitly pick a +postlpreset (which you normally do not need to - Spectre X will apply reduction automatically if it makes sense, at the same level as +preset), it is forcing reduction of the resistors into a single series resistor and causing the output nodes to be incorrect (I would have expected the save statements to have prevented the collapsing of the resistors, but this isn't happening).

    I've filed CCR 2781881 for this, but with this kind of circuit I would not explicitly turn on post-layout reduction (since it doesn't really make sense). You might want to report the issue yourself to customer support so that it can be tracked under your name as a duplicate (the example is a bit artificial, so maybe you have a more realistic example).

    Regards,

    Andrew

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • Daedalus
    Daedalus over 2 years ago in reply to Andrew Beckett

    Interesting.  Thank you for looking into it further.  I hadn't looked at any other output format and assumed it was a nutascii parsing thing based on the output.    In the end, I had to turn off post-processing with  +postlpreset=off.   I can provide a much more complicated, perhaps more realistic, example, but the artificial/simple one posted here makes it easy to understand things are not working right.

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • Andrew Beckett
    Andrew Beckett over 2 years ago in reply to Daedalus

    Some general points here:

    • You do not normally need to pass +postlpreset when using +preset. Our advice is to not do that unless there is a specific reason to alter the global level of post-layout optimisation (for example, you have a low-frequency but high-precision circuit, you may want +preset=cx but can be more aggressive with post-layout optimisation and so may pick +postlpreset=mx or lx).
    • In this case, the default is to not do the post-layout optimisation with this circuit - Spectre X determines that it doesn't need to. By specifying the command-line option, you've forced it to do the optimisation. With a real-life RC post-layout design, it would make more sense.
    • In this case, the problem is caused by you having ideal resistors - in real-life circuits where the resistor ladder is part of the design, the resistors would be unlikely to be pure linear ideal resistors and so would not be subject to reduction.
    • If you have a bigger circuit (with active devices in) and this problem is occurring when just specifying +preset=mx (and not +postlpreset), then you could use the approach described in this blog to ensure that the specific nets are not impacted:
      Spectre Tech Tips: Handling Differential Matching Circuits in Spectre X
      Thiscan be done by adding: postlpreset=off postlnets=[n*] to your options statement as that suppresses the reduction for these nets only.
    • However, I agree that this should behave better. We'll see what R&D say as I think that there's an explicit save that it ought to not reduce the nets.

    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