The Designer's Guide Community Forum
https://designers-guide.org/forum/YaBB.pl
Simulators >> RF Simulators >> bdasim vs spectre
https://designers-guide.org/forum/YaBB.pl?num=1264764783

Message started by Mayank on Jan 29th, 2010, 3:33am

Title: bdasim vs spectre
Post by Mayank on Jan 29th, 2010, 3:33am

Hi,
     I am simulating a PLL for transient noise -- with verilogA model of white noise source & supply inductances.
     To my surprise, For the SAME NETLIST, Spectre is running much faster than BDA AFS.
My Observations --
1.  Spectre is taking time-steps in a few hundreds of femto-seconds, while BDA in a few tens of femto-seconds....[ makes spectre around 10x faster --- yeah, i checked all settings are same -- SAME NETLIST ]
2.  Transient results are matching from both spectre and bda, but bda is lagging behind.

Wasn't BDA AFS supposed to be much faster than Spectre ??
Any Ideas as to why is this happening ?

--
Mayank..

Title: Re: bdasim vs spectre
Post by pancho_hideboo on Jan 29th, 2010, 3:47am

Show me your verilogA model of white noise source.

Generate white noise by combination of "analogLib/res" and "analogLib/vcvs" instead of your custom verilog-A module.

Title: Re: bdasim vs spectre
Post by Mayank on Jan 29th, 2010, 4:22am

Here, the verilogA model goes like this :----


Code:
// VerilogA for PLLCells, white_noise_source, veriloga

`include "constants.vams"
`include "disciplines.vams"

module white_noise_source(p, n);
inout p;
inout n;
electrical p;
electrical n;

parameter real mean = 0;
parameter real std_dev = 1;
parameter real update_freq = 50e9;
integer seed;
integer state;
real update_per,x;
parameter real scale = 10e-3;
 analog begin
       @(initial_step) begin
               seed = 1;
               state = 0;
               update_per = 1/update_freq;
       end

       @(timer(0,update_per)) begin
               x = scale * $rdist_normal(seed,mean,std_dev);
       end
               V(p,n) <+ x;
 end

endmodule


Will this cause it to become slow ??

--
Mayank.

Title: Re: bdasim vs spectre
Post by pancho_hideboo on Feb 1st, 2010, 2:57am


Mayank wrote on Jan 29th, 2010, 4:22am:

Code:
@(timer(0, update_per)) begin
  x = scale * $rdist_normal(seed, mean, std_dev);
end
V(p, n) <+ x;
Will this cause it to become slow ??
I think your implementation could be problematic.

Anyway generate white noise by combination of "analogLib/res" and "analogLib/vcvs" instead of your custom verilog-A module.

Title: Re: bdasim vs spectre
Post by rf-design on Feb 1st, 2010, 6:27pm

A quick guess:

Could be the accuracy setting being different interpreted in both simulators. Spectre have a general accuracy modifier with settings

[conservative,moderate,liberal]

which overwrite analog simulator settings.

Title: Re: bdasim vs spectre
Post by Mayank on Feb 1st, 2010, 9:18pm

Thanx rf-design,
                       
Quote:
Spectre have a general accuracy modifier with settings

[conservative,moderate,liberal]

which overwrite analog simulator settings.
I didnt knew this....i am using conservative in spectre and accuracy settings as default -- reltol---1e-3, vabstol--1e-6, iabstol---1e-12......Would this explain such a behaviour ?

--
mayank.

Title: Re: bdasim vs spectre
Post by Andrew Beckett on Feb 2nd, 2010, 11:16am

With the accuracy settings at default, and just overriding the errpreset to conservative, you are tightening reltol by a factor of 10 (see "spectre -h tran").

It's not guaranteed that AFS will be faster than spectre! It may be that spectre's VerilogA implementation is more robust (it will certainly be more mature) or maybe just more forgiving.

To be fair though, your model is causing the simulator(s) to have to try to place a timestep precisely every 1/update_freq.  You may be better off using bound_step instead as this gives the simulator more freedom - I assume you don't particularly need the updates to be precisely regular?

Regards,

Andrew.

Title: Re: bdasim vs spectre
Post by Mayank on Feb 3rd, 2010, 5:55am

Hi,
  @ Andrew :
Quote:
I assume you don't particularly need the updates to be precisely regular?
No, I do not.  I had a feeling that since i kept noise fmax factor in tran setup upto 50G, i should update this white noise source also at 50G.

Quote:
It may be that spectre's VerilogA implementation is more robust (it will certainly be more mature) or maybe just more forgiving.
Fair enough point.  :)
i will try with bound_step, will have to read more of verilogA though.

  @ Pancho :
Quote:
Generate white noise by combination of "analogLib/res" and "analogLib/vcvs" instead of your custom verilog-A module.
Would try this.

--
thanx,
Mayank.

Title: Re: bdasim vs spectre
Post by pancho_hideboo on Feb 3rd, 2010, 6:06am


Mayank wrote on Feb 3rd, 2010, 5:55am:
@ Andrew :
Quote:
I assume you don't particularly need the updates to be precisely regular?
No, I do not.  
I had a feeling that since i kept noise fmax factor in tran setup upto 50G,
i should update this white noise source also at 50G.
fmax can't be 50GHz by your Verilog-A Module.

With your implementation of noise by Verilog-A, behavior between "update_per" could be different between simulators you use.
Confirm PSD of your Verilog-A Module alone.

Anyway generate white noise by combination of "analogLib/res" and "analogLib/vcvs" instead of your custom verilog-A module.
If you use white noise by combination of "analogLib/res" and "analogLib/vcvs", you can control fmax for noise correctly by transient noise analysis parameter.

Compare time domain waveform and PSD with your Verilog-A Module in normal transient analysis.

Title: Re: bdasim vs spectre
Post by michael chapman on Feb 4th, 2010, 7:04am

Hello Mayank

I am the applications engineering manager for BDA in Europe. Please feel free to contact BDA for support in cases like this. You will find the support numbers for your region on the BDA website under "contact us" at www.berkeley-da.com. If you are based in India, please contact the UK office.

You should consistantly get 5X to 10X faster runtimes with AFS compared to Spectre for circuits > 1000 elements and with a reasonably long runtime. If you are not achieving this, I would be pleased to help out. I suspect, as others have pointed out, that the problem is the  VerilogA code. I suggest using a resistor to generate the white noise instead of the VerilogA module. You will need to turn on transient noise analysis using noisefmax=50G option on the tran analysis line. Failing this, please do as Andrew suggests and use $bound_step to give the time-stepper algorithm more freedom.

in response to user "rf-design"'s comment, setting errpreset=conservative in AFS has essentially the same effect in AFS as it does in Spectre.

Regards

Michael Chapman

Title: Re: bdasim vs spectre
Post by pancho_hideboo on Feb 4th, 2010, 7:19am


michael chapman wrote on Feb 4th, 2010, 7:04am:
Failing this, please do as Andrew suggests and use $bound_step to give the time-stepper algorithm more freedom.
It is wrong.

If we use $bound_step in addition to "@(timer(0, update_per)) begin ~ end",
$bound_step rather limits freedom of simulator regarding the time-stepper algorithm.

http://www.designers-guide.org/Forum/YaBB.pl?num=1260585749

Title: Re: bdasim vs spectre
Post by michael chapman on Feb 4th, 2010, 7:55am

Pancho,
Thank you for the correction.

Michael

Title: Re: bdasim vs spectre
Post by Mayank on Feb 4th, 2010, 9:53pm

Hi all,
         @ Michael :
Quote:
You should consistantly get 5X to 10X faster runtimes with AFS compared to Spectre for circuits > 1000 elements and with a reasonably long runtime.
Without the VerilogA module, AFS indeed runs 10X faster than Spectre(as expected). Btw, i love the way bda converges pss (try converging simultaneously wheile it's running tstab).

2 doubts :---   1> When BDA generates the psf, it generates period jitter, period jitter_flicker, and period jitter_white under the pnoise-SummaryStatistics.Pnoise section.  May i know what formula does bdasim use to compute these values ???
                        2> Do the PPV values under the section pnoise-NoiseSourceIntensityNoiseSensitivityandProduct.pnoise indicate ISFs [ impulse sensitivity functions ] at these nodes ??

regards,
Mayank.

Title: Re: bdasim vs spectre
Post by Andrew Beckett on Feb 5th, 2010, 2:15am

My point about using $bound_step rather than @timer was that bound_step allows the simulator to place a timestep where it wants, provided that it is no further away than a certain amount of time - it limits the maxstep (dynamically) - at least that's what it does in spectre - Pancho Hideboo's reference was to another post which was discussing the behaviour in hspice.

With @timer, the simulator has to solve precisely at the time specified - that can sometimes be more work for the simulator, and can result in more timesteps. (imagine that the simulator needed to take a timestep between two @timer events, for various reasons,  then limiting the bound step would take fewer timesteps than having also to have an event at a regular timestep). Still, this is unlikely to make a massive difference with spectre, but maybe other simulators are more sensitive.

You may also want to try APS. From MMSIM72, you can just use "spectre -aps" to run in APS mode - see http://www.cadence.com/products/cic/accelerated_parallel/pages/default.aspx. MMSIM72 has further performance improvements in APS, so if you're going to take a look, I'd advise using MMSIM72. Also, talk to local support (Cadence has customer support in India, of course).

Regards,

Andrew.

Title: Re: bdasim vs spectre
Post by pancho_hideboo on Feb 5th, 2010, 7:17am


Mayank wrote on Feb 4th, 2010, 9:53pm:
Btw, i love the way bda converges pss (try converging simultaneously wheile it's running tstab).
I can't understand meaning of your sentence.

What feature do you love in BDA's AFS ?


Mayank wrote on Feb 4th, 2010, 9:53pm:
@ Michael :
Quote:
You should consistantly get 5X to 10X faster runtimes with AFS compared to Spectre for circuits > 1000 elements and with a reasonably long runtime.
Without the VerilogA module, AFS indeed runs 10X faster than Spectre(as expected).
Did you use "AFS Multi-Core Capability" ?
http://www.berkeley-da.com/prod/prod01_analog_fs_a.htm

If not so, try to use it. You will get more speed up, although I feel BDA's AFS is very far faster than Cadence Spectre even in single threaded operation.

Currently almost all vendor's simulators which are high price have multi-threaded capability.
Even Agilent ADSsim have Multi-Threaded Harmonic Balance.
http://www.designers-guide.org/Forum/YaBB.pl?num=1184691133

Also see the threads after the following.
http://www.designers-guide.org/Forum/YaBB.pl?num=1183646486/5#5

Title: Re: bdasim vs spectre
Post by pancho_hideboo on Feb 5th, 2010, 8:07am


Andrew Beckett wrote on Feb 5th, 2010, 2:15am:
Pancho Hideboo's reference was to another post which was discussing the behaviour in hspice.
It is wrong. See the left graph plot of the following.
http://www.designers-guide.org/Forum/YaBB.pl?num=1260585749/5#5

Here I compared time step behavior of HSPICE and Cadence Spectre
when "$bound_step" are used in addition to "@(timer)".


Title: Re: bdasim vs spectre
Post by michael chapman on Feb 5th, 2010, 8:47am

Hi Mayank,

You wrote :-


Quote:
author=Mayank_Singh link=1264764783/0#12  try converging simultaneously wheile it's running tstab).


I don't understand this either. PSS does not converge (shooting method) until the tstab initial stabilization transient run is complete.


Quote:
2 doubts :---   1> When BDA generates the psfbin output, it generates period jitter, period jitter_flicker, and period jitter_white under the pnoise-SummaryStatistics.Pnoise section.  May i know what formula does bdasim use to compute these values ???


Please contact me directly and we can discuss.

I suggest that you use nutbin output format when running PSS/PNoise. If you do this then you will get separate plots of phase noise (white) and phase noise (white + flicker). These outputs are not available in psfbin format. Use BDA's Wavecrave waveform tool to view BDA's nutbin format.


Quote:
                        2> Do the PPV values under the section pnoise-NoiseSourceIntensityNoiseSensitivityandProduct.pnoise indicate ISFs [ impulse sensitivity functions ] at these nodes ??


Yes, they do.

Regards
Michael


Title: Re: bdasim vs spectre
Post by Andrew Beckett on Feb 6th, 2010, 6:44am

Pancho Hideboo,

I understand the confusion now. I was talking about using bound_step instead of @timer, whereas you were talking about using it as well as @timer. If using it instead of, the simulator has more freedom.

Regards,

Andrew.

Title: Re: bdasim vs spectre
Post by Andrew Beckett on Feb 6th, 2010, 6:51am


Andrew Beckett wrote on Feb 5th, 2010, 2:15am:
You may also want to try APS. From MMSIM72, you can just use "spectre -aps" to run in APS mode


Had a bit of a brain blip earlier. That should have been spectre +aps not -aps.

Regards,

Andrew.

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