Hi,

I uses a scripts to analyze phase noise of a VCO at different control voltage. I found some data points are significantly different from ADE produced. Then I saved script in ADE and load the script in ocean. The phase noise calculated with ocean script is -80. But at ADE, it is -100. Anyone can tell me how to solve this problem? Thanks! The save script is attached as below. The frequency calculated are consisten, but phase noise are different from ocean script.

ocnWaveformTool( 'wavescan )

fp=outfile(sprintf(nil "%s/tmp.csv" resultPATH) "a")

fprintf(fp "vc ts cf wc freq amp vcom phasenoise\n")

simulator( 'spectre )

design( "/users/dtgong/simulation/testLCVCO/spectre/schematic/netlist/netlist")

resultsDir( "/users/dtgong/simulation/testLCVCO/spectre/schematic" )

modelFile(

'("/home/dtgong/peregrine/PSC_Release_3.8.1/Rel_3.8.1/gc/models/psa/spectre/modellib.scs" "Nominal")

)

analysis('tran ?stop "200n" ?errpreset "conservative" )

analysis('pnoise ?sweeptype "relative" ?relharmnum "1" ?start "10K"

?stop "100M" ?maxsideband "7" ?p "/vp0" ?n "/vn0"

?oprobe "" ?iprobe "" ?refsideband "" ?ppv "" )

analysis('pss ?fund "5.0G" ?harms "7" ?errpreset "conservative"

?tstab "500n" ?p "/vp0" ?n "/vn0" ?ppv "" )

desVar( "wc" 30u )

desVar( "wb" 10u )

desVar( "cf" 220p )

desVar( "r" 10 )

desVar( "global_use_preLPE" 1 )

desVar( "vc" 1.1 )

desVar( "cl" 60f )

envOption(

'autoDisplay nil

)

save( 'i "/I0/I0/R0/MINUS" "/I0/I0/L0/PLUS" "/I0/I0/L1/PLUS" )

converge( 'ic "/vn0" "0.01" )

temp( 27 )

run()

selectResult( 'tran )

;plot(getData("/vp0") getData("/vn0") getData("/I0/vb") getData("/I0/I0/R0/MINUS") getData("/I0/I0/L0/PLUS") getData("/I0/I0/L1/PLUS") getData("/I0/I0/vtail") )

freq = frequency(clip((VT("/vp0") - VT("/vn0")) 1e-08 4e-08))

;plot( freq ?expr '( "freq" ) )

Phase\ Noise\;\ dBc\/Hz\,\ Relative\ Harmonic\ \=\ 1 = phaseNoise(1 "pss_fd" ?result "pnoise")

;plot( Phase\ Noise\;\ dBc\/Hz\,\ Relative\ Harmonic\ \=\ 1 ?expr '( "Phase Noise; dBc/Hz, Relative Harmonic = 1" ) )

ph_1M = value(phaseNoise(1 "pss_fd" ?result "pnoise") 1000000.0)

;plot( ph_1M ?expr '( "ph_1M" ) )

;freq0 = (freq (VT("/vp0") - VT("/vn0")) "rising" ?xName "time" ?mode "auto" ?threshold 0.0 ?histoDisplay nil ?noOfHistoBins nil)

;plot( freq0 ?expr '( "freq0" ) )

fprintf(fp "%.3fGHz %f\n" freq*1e-9 ph_1M)

close(fp)

Thanks a lot,

Datao