The Designer's Guide Community Forum
https://designers-guide.org/forum/YaBB.pl
Simulators >> RF Simulators >> problems with convergence in PSS
https://designers-guide.org/forum/YaBB.pl?num=1126756365

Message started by ethan on Sep 14th, 2005, 10:08am

Title: problems with convergence in PSS
Post by ethan on Sep 14th, 2005, 10:08am

Hello everybody,

Recently, I got problems with convergence in PSS simulation lots of times. Then I read the manual of "Spectre Circuit Simulator Reference" Product Verion 5.0 on June 2003, pp718-731. I feel confused with certain point.

By the way, I am simulating a fold-cascode opamp with SC-CMFB with layout extraction, plus a common biasing circuit with layout extraction.

On this manual page 725 bottom, it says "One can set "steadyratio" to a smaller value to activate a tighter tolerance for the interative linear solver". But when I looked at page 726 bottom, which list the effect of "errpreset" on some parameters for driven circuits (which I posted here):

errpreset      reltol       relref            method      lteratio steadyratio noisefloor
liberal 1e-3 sigglobal traponly 3.5 0.001 -70dB
moderate 1e-3 alllocal gear2only 3.5 0.001 -120dB
conservative 1e-4 alllocal gear2only * 0.01 -200dB

where the "*" explains as  : lteratio=10.0 for conservative errpreset. Only if user specified reltol <= 1e-4 * 10.0/3.5,
it will change to lteratio=3.5.

My questions are:
1. I assume steadyratio=0.001 is a smaller value in errpreset=liberal or moderate than steadyratio=0.01 in conservative. But I thought errpreset= conservative is more tightened option, which is more accurate. It looks there is confliction between "tightening" and "loosening" in "steadyratio". Maybe I am just wrong. Please advise.

So, if I want to loosen "steadyratio", which is one of 6 suggestions in my spectre.out when my PSS simulation was failed with convergence. Which way I should set it if I pick "errpreset=conservative"? to go with 0.001 (or even smaller) or go beyond 0.01 (or even 0.1)?

2. Same point with "lteratio". I notice that "lteratio=10" for "conservative" case, and "lteratio=3.5" for liberal and moderate cases.

So, if I want to "tighten the normal simulation tolerances (maxstep, reltol, lteratio, and errpreset), which way for the value of "lteratio" should I go to resolve my convergence problem?
by the way, I already picked "errpreset=conservative" and it displayed in spectre.out that "lteratio=10", "reltol=100e-06".

3. Does the "finitediff" option give some difference in convergence with its three options (no, yes, refine)?

4. Occasionally, I met a bizarre phenomenon with simulation in certain cases.
Within one identical simulation setup, I got one simulation results which looked okay. then I re-run it (I didn't change anything on testbench and layout), the results just looked weird. If I clicked to run it again, it even displayed that some junction currents of the certain transistors exceeded "imelt" ...

So, what reason could be for this?

Appreciate your help.

ethan

Title: Re: problems with convergence in PSS
Post by Ken Kundert on Sep 14th, 2005, 9:02pm

1. You loosen steadyratio by making it larger. (Actual tolerances used in steady-state calculations derive from the product of reltol and steadyratio, so in going to conservative, you are both tightening reltol and loosening steadyratio by an equal factor, meaning that the actual tolerance does not change)

2. You loosen lteration by making it larger. (Actual tolerances used in local truncation error (LTE) calculations derive from the product of reltol and lteratio, so in going to conservative, you tighten reltol by 10 and loosen lteratio by 3.5, meaning that the actual tolerance tightens by about a factor of 3)

3. I don't know.

4. I don't know.

-Ken

Title: Re: problems with convergence in PSS
Post by byang on Sep 14th, 2005, 9:44pm

3. There is one thing you can try to see if finitediff can help convergence.

You want to set steadyratio to a relative big number. That is loosening like Ken said. Try steadyratio=1. At the same time, you need to set finitediff=yes. Hopefully it converges.

Finite difference is run after shooting-Newton. Steadyratio controls shooting-Newton but not finite difference. By setting steadyratio=1 you give shooting-Newton a better chance to converge. However, the result may be inaccurate. Finite difference will make the result more accurate.

Baolin

Title: Re: problems with convergence in PSS
Post by ethan on Sep 29th, 2005, 8:27pm

Thank you two for your reply.

During the  past two weeks, the most of simulations were converged without manipulating those options.  I just loosened them by selecting SPECTRE default options.

I found that if I manipulated those above options one by one, the convergence was achieved but the simulation result was bizarre (totally none sense).

And also in some cases (without manipulating those options), whenever I got "high-order finite difference  method PSS simulation failed to converge" and then I went to  select "highorder=no", the simulation converged, but the result was also none sense.

Any hint on these?

Title: Re: problems with convergence in PSS
Post by byang on Sep 29th, 2005, 10:05pm

Dear Ethan,

One reason is that when highorder=yes or finitediff=yes, the finite difference method is used which is almost like requiring steadyratio=0 in the shooting-Newton method. SpectreRF had a harder time converging because the convergence requirement became strict.

On the other hand, SpectreRF can converge with loose requirements. However, it seems like the accuracy took a hit.

Right now probably only the SpectreRF R&D can solve this problem.

Baolin


Title: Re: problems with convergence in PSS
Post by Paul Geraedts on Sep 22nd, 2006, 1:16pm

Hi Ethan,

Sorry, but I didn't read your post before. I seem to be a year late, but I'll reply anyway :). Who knows, somebody else is currently having the same problem..

Personally, I have good experience with cascading (two or more) PSS analyses in case of problems with convergence. I demand a higher accuracy of every next PSS analysis. Afterwards, I sometimes even use MIC or FDTD as refinement method (respectively 'highorder' and 'finitediff').

Passing the results from one analysis to the next can easily be done by putting the same filename in 'readic' and 'writefinal' and setting 'skipdc' to yes (in the first analysis of the cascade, you obviously only have to fill in writefinal). About how to set the accuracy of the cascaded analyses properly, I like appendix A of the SpectreRF User Guide (p. 1066 of v5 and p. 1200 of v6, to be precise). Just look at it as a starting point, I'd say.

My method seems similar to the one Baolin advises (I frequently set steadyratio to 1 in the first PSS). I think Baolin's method is more elegant and mine is more brute-force. I like the idea of a method that always works (just put more stages in the cascade (/ take smaller accuracy refinement steps) in case of bigger convergence problems..) A sort of one-stop non-convergence buster ;).

4. The missing answer to your last question could well be found by looking at one of my recent post:
   http://www.designers-guide.org/Forum/YaBB.pl?num=1158926425
   Although, if your simulation results are so sensitive, I wouldn't trust them anyway: I would first tighten the
   accuracy considerably.

Good luck with it,

Paul


The Designer's Guide Community Forum » Powered by YaBB 2.2.2!
YaBB © 2000-2008. All Rights Reserved.