Michele,
So if the two independent axes (VGS and VDS) are "x" and "y", you want a slice which is in the z axis - i.e. the dependent axis - thus giving you a true contour map (at least for a single value).
There's not really an capability to do that - there's the xval function if there's a single crossing, but if there are multiple regions that won't help you.
So right now you're probably best doing this in Matlab, say. You could use the spectre toolbox for Matlab (covered in the MMSIM documentation, and in app notes in the <MMSIMinstDir>/tools/spectre/examples directory hierarchy).
I just used this simple example:
// example of sweeping id curves
model nch mos1 type=n vto=1 kp=16u gamma=1.3 lambda=0.01 \
phi=0.7 pb=0.80 mj=0.5 mjsw=0.3 cgbo=200p cgso=350p cgdo=350p \
cj=300u cjsw=500p ld=0.1u tox=80n \
af=1 kf=3.1e-24
m1 (drain gate 0 0) nch w=20u l=0.8u
vgs (gate 0) vsource dc=2.5
vds (drain 0) vsource dc=1
voff (off 0) vsource dc=20m
vcvs (gate2 off gate 0) vcvs gain=1
rload (gate2 0) resistor r=10k
save m1:ids m1:gm rload:1
sweepvgs sweep dev=vgs param=dc start=0 stop=2 step=20m {
dc dc dev=vds start=0 stop=5 step=20m
}
And ran (from command line) "spectre idcurvesw.scs" which produced idcurvesw.raw (the PSF results).
Then I did this in Matlab:
gm=cds_srr('./idcurvesw.raw','sweepvgs_dc-sweep','m1:gm');
contour(getfield(gm,'vgs:dc'),gm.dc,gm.S);
(could use mesh instead of contour to see a graph). Similarly could look at m1:ids:
id=cds_srr('idcurvesw.raw','sweepvgs_dc-sweep','m1:ids')
mesh(getfield(id,'vgs:dc'),id.dc,id.A)
So this means you then don't have to load it and then export it to CSV to read back into Matlab; it can directly read the PSF results into Matlab.
Regards,
Andrew.