I am new to cadence virtuoso/spectre. I want to design an ADC for which I have written some components through verilog A containing their respective noise models implemented through white_noise and flicker_noise functions.
Now how to activate those sources in spectre simulation ? It's only active in small signal analysis as far as I know. However I want noise to be present along with the main signal so that I can measure SNR etc using calculator function.So which type of analysis to use: tran or noise ? and how (few lines of analysis statement will help)
Moreover, from cadence virtuoso manual I found that we can perform small signal analysis during transient analysis, by using below command:
Name tran stop=stop actimes=time acnames=name
However I got a syntax error of "ERROR (SPECTRE-16062): Output of circuit is not specified." on running below code snippet on a simple test circuit :
tran tran stop=4u write="spectre.ic" writefinal="spectre.fc" \
annotate=status maxiters=5 actimes=[2u] acnames=[noise1]
noise1 noise start=2u stop=2.1u
finalTimeOP info what=oppoint where=rawfile
I stuffed another "info what=oppoint" statement between 2nd and 3rd line, still same error. Here my understanding is tran analysis stops at 2u and till 2.1 the simulator will run noise analysis (if wrong please correct me). I am still trying to debug this and it may be a plain syntax error. However can someone please answer above questions and guide me through the right approach.
Thanks a lot!
Use transient analysis. (transient noise)
Use the latest versions of MMSIM. (Note that there were some issues with the psp103 trannoise model which are being fixed in MMSIM11.1 ISR23.)
If you are using IC615…
You may want to check out the Spectrum Assistant Appnote at:
If using IC614, use the spectrumMeas function in ADE-L/XL
You can also look at the OCEAN reference manual (information on spectrum function):
And also the spectrumMeas function, see Appendix D of the ViVA tool user guide:
In addition to Tawna's suggestion, you could perform a small signal noise analysis at different time points. This is not the same as adding noise during the transient, but instead it is like running the small signal noise analysis at different bias points.
You tried doing that, but got the statements wrong. You'd need:
tran tran stop=4u write="spectre.ic" writefinal="spectre.fc" \ annotate=status maxiters=5 actimes=[2u] acnames=[noise1] noise1 (posOutputNode negOutputNode) noise start=startFreq stop=stopFreq ...
The noise analysis needs to know where you're measuring the noise, and the frequency sweep range for the results. It's not the time duration it does it for.
I suspect it's really transient noise you're after - although you should check if you really need to use transient noise. Transient noise is generally the method of last resort - there are often much more efficient ways to get the same result.
Thanks Tawna and Andrew !
At first I ran the transient noise. I saw the noise signature can be modulated changing noise scale factor.However I was not sure if my white_noise/flicker_noise sources in verilog A modules were active in this analysis, because output of a simple voltage divider circuit wasn't not much distorted (even when models of resistor thermal noise are present in verilog model) unless I gave a noise scale factor of ~ 100 say. So I got some more doubts:
Then I used the approach mentioned by Andrew. I deactivated transient noise part and explicitly used noise analysis after tran analysis. In the transient noise analysis I could see the spectral densities of resistor thermal noise sources:
Thanks a lot !!!!
OK, to answer your first question, the answer is that you should not need to set the noise seed or scale factors. The noise seed just alters the initialization of the random number generators, so you will end up with a different sequence of random numbers, but they should have the same distribution. It's actually used if you use the "multiple runs" capability of transient noise to allow you to get a set of results to potentially average over (for example), but other than that I'd leave it alone. The scale factor just artificially increases the noise above what the model says it should be - so it's typically used for "what if" type investigations.
The problem could be that you don't have enough accuracy. Noise contributions are pretty small in general, and so it's quite likely you'll need to use errpreset=conservative at least (possibly setting reltol to 1e-4 as well, which would mean that the effective reltol is 1e-5 because conservative divides it by 10). It's also important to set a suitable value for noisefmax, so that you get noise contributions at high frequency. Note that if you don't set noisefmin, it will take whatever noise values there are at noisefmax, and use those across all frequencies (so effectively the noise will be white). If you set noisefmin, it will be coloured using the power spectral density between noisefmin and noisefmax (this involves a bit more work for the simulator though, clearly). Also of course you need a long enough simulation to effectively see the contributions of low frequency noise.
To answer your subsequent 5 questions:
Thank you Andrew for elaborate replies!
To clarify your query on what I wish to model : is noise contribution from thermal /flicker noise of MOSFETs used in designing the adc circuit.I have created models for them in verilog A, So will u not recommend small signal noise analysis for this kind of problem ?
Apart from these sources and quantization noise and mismatches in design, I think a properly designed ADC will not have any other significant noise source. Am I right in assuming this ?
If I model these sources through transient noise and if I specify both fmin and fmax then I guess contributions from both of thermal and flicker noise fucnctions will be included in the output. Then I can take a DFT of time domain output.Another doubt is: do we use the spectral domain output of small signal noise analysis to calculate any noise figures ? or they are just there for information ?
Thanks a lot again !