<@U01819B63HP>: I am performing AC analysis on a s...
# xschem
d
@Stefan Schippers: I am performing AC analysis on a single resistor loaded FET (PMOS). As shown in the attached, phase response looks fine but magnitude response is upside down. I havent seen this one before and cant see anything strange in my setup. Attached is my .sch file. Do you see any reason for this? Thanks
s
Can you try to plot in ngspice ?
Can you attach also DUT.sym and pmos_1v8_svt.sch ?
@Diarmuid Collins I don't know if there is a problem in ngspice or in the pfet model. I have done the test with a
pfet_01v8_lvt
device, It's strange, at higher frequencies the voltage gain increases. The below image shows the transient response to a 0.1V sinusoidal gate signal at 7GHz and the output amplitude is higher than at low frequencies. I can't justify this.
It's not a xschem plot issue since ngspice itself shows the same plot:
d
Thanks @Stefan Schippers for confirming you see this strange behavior also on your side. I investigated a bit further. Results are sumarised in the attached which show results are expected for L = 1um but as you increase L they get more and more unexpected (for both NMOS / PMOS). @Tim Edwards: This looks to me like a modelling issue for longer channel devices. What do you think and has this been reported before as I would be surprised if it hasnt been observed in the past. Thanks.
s
@Diarmuid Collins I have run the sims with ngspice-42 and there is no difference at all in the above results. So there are no regressions in current ngspice-44
@Diarmuid Collins I see this behaviour in general with different BSIM mos models. Short channel devices show the expected behavior with gain dropping at high frequencies. Long channel devices have the opposite trend. So there is a funny break even L channel length where the gain is invariant to frequency. LOL. Below image is a simulation of a 65nm PMOS device, showing the small signal AC analysis of the magnitude of the drain voltage with a unit (AC=1) signal on the gate.
d
Thanks @Stefan Schippers. So you see this behaviour with models which are not from SW130? For example with default BSIM models? Attached are the DUTs I used for PMOS / NMOS analysis.
s
@Diarmuid Collins yes I placed a standard
devices/pmos4.sym
set its model name to
cmosp
and attached the following attribute to it:
Copy code
device_model="
* PTM 65nm PMOS
.model  cmosp  pmos  level = 54
+version = 4.0          binunit = 1            paramchk= 1            mobmod  = 0
+capmod  = 2            igcmod  = 1            igbmod  = 1            geomod  = 1
+diomod  = 1            rdsmod  = 0            rbodymod= 1            rgatemod= 1
+permod  = 1            acnqsmod= 0            trnqsmod= 0
+tnom    = 27           toxe    = 1.95e-009    toxp    = 1.2e-009     toxm    = 1.95e-009
+dtox    = 0.75e-9      epsrox  = 3.9          wint    = 5e-009       lint    = 5.25e-009
+ll      = 0            wl      = 0            lln     = 1            wln     = 1
+lw      = 0            ww      = 0            lwn     = 1            wwn     = 1
+lwl     = 0            wwl     = 0            xpart   = 0            toxref  = 1.95e-009
+xl      = -30e-9
+vth0    = -0.365       k1      = 0.4          k2      = -0.01        k3      = 0
+k3b     = 0            w0      = 2.5e-006     dvt0    = 1            dvt1    = 2
+dvt2    = -0.032       dvt0w   = 0            dvt1w   = 0            dvt2w   = 0
+dsub    = 0.1          minv    = 0.05         voffl   = 0            dvtp0   = 1e-009
+dvtp1   = 0.05         lpe0    = 0            lpeb    = 0            xj      = 1.96e-008
+ngate   = 2e+020       ndep    = 1.87e+018    nsd     = 2e+020       phin    = 0
+cdsc    = 0.000        cdscb   = 0            cdscd   = 0            cit     = 0
+voff    = -0.126       nfactor = 1.9          eta0    = 0.0058       etab    = 0
+vfb     = 0.55         u0      = 0.00574      ua      = 2.0e-009     ub      = 0.5e-018
+uc      = 0            vsat    = 70000        a0      = 1.0          ags     = 1e-020
+a1      = 0            a2      = 1            b0      = -1e-020      b1      = 0
+keta    = -0.047       dwg     = 0            dwb     = 0            pclm    = 0.12
+pdiblc1 = 0.001        pdiblc2 = 0.001        pdiblcb = 3.4e-008     drout   = 0.56
+pvag    = 1e-020       delta   = 0.01         pscbe1  = 8.14e+008    pscbe2  = 9.58e-007
+fprout  = 0.2          pdits   = 0.08         pditsd  = 0.23         pditsl  = 2.3e+006
+rsh     = 5            rdsw    = 165          rsw     = 85           rdw     = 85
+rdswmin = 0            rdwmin  = 0            rswmin  = 0            prwg    = 3.22e-008
+prwb    = 6.8e-011     wr      = 1            alpha0  = 0.074        alpha1  = 0.005
+beta0   = 30           agidl   = 0.0002       bgidl   = 2.1e+009     cgidl   = 0.0002
+egidl   = 0.8
+aigbacc = 0.012        bigbacc = 0.0028       cigbacc = 0.002
+nigbacc = 1            aigbinv = 0.014        bigbinv = 0.004        cigbinv = 0.004
+eigbinv = 1.1          nigbinv = 3            aigc    = 0.69         bigc    = 0.0012
+cigc    = 0.0008       aigsd   = 0.0087       bigsd   = 0.0012       cigsd   = 0.0008
+nigc    = 1            poxedge = 1            pigcd   = 1            ntox    = 1
+xrcrg1  = 12           xrcrg2  = 5
+cgso    = 1.5e-010     cgdo    = 1.5e-010     cgbo    = 2.56e-011    cgdl    = 2.653e-10
+cgsl    = 2.653e-10    ckappas = 0.03         ckappad = 0.03         acde    = 1
+moin    = 15           noff    = 0.9          voffcv  = 0.02
+kt1     = -0.11        kt1l    = 0            kt2     = 0.022        ute     = -1.5
+ua1     = 4.31e-009    ub1     = 7.61e-018    uc1     = -5.6e-011    prt     = 0
+at      = 33000
+fnoimod = 1            tnoimod = 0
+jss     = 0.0001       jsws    = 1e-011       jswgs   = 1e-010       njs     = 1
+ijthsfwd= 0.01         ijthsrev= 0.001        bvs     = 10           xjbvs   = 1
+jsd     = 0.0001       jswd    = 1e-011       jswgd   = 1e-010       njd     = 1
+ijthdfwd= 0.01         ijthdrev= 0.001        bvd     = 10           xjbvd   = 1
+pbs     = 1            cjs     = 0.0005       mjs     = 0.5          pbsws   = 1
+cjsws   = 5e-010       mjsws   = 0.33         pbswgs  = 1            cjswgs  = 3e-010
+mjswgs  = 0.33         pbd     = 1            cjd     = 0.0005       mjd     = 0.5
+pbswd   = 1            cjswd   = 5e-010       mjswd   = 0.33         pbswgd  = 1
+cjswgd  = 5e-010       mjswgd  = 0.33         tpb     = 0.005        tcj     = 0.001
+tpbsw   = 0.005        tcjsw   = 0.001        tpbswg  = 0.005        tcjswg  = 0.001
+xtis    = 3            xtid    = 3
+dmcg    = 0e-006       dmci    = 0e-006       dmdg    = 0e-006       dmcgt   = 0e-007
+dwj     = 0.0e-008     xgw     = 0e-007       xgl     = 0e-008
+rshg    = 0.4          gbmin   = 1e-010       rbpb    = 5            rbpd    = 15
+rbps    = 15           rbdb    = 15           rbsb    = 15           ngcon   = 1
"
I think these models come from https://mec.umn.edu/ptm
d
Thanks @Stefan Schippers. Thinking further about this, it actually makes perfect sense. As shown in the attached "badly" drawn circuit, the output is unloaded and so only sees Cbd to vssa (very small). There is a feedforward path through Cgd which creates the zero (wz = gm/Cgd). As L increases, wz moves in. For relatively large L, wz < wp to give the increasing magnitude response as reported and attached. This came as a surprise to me as practically speaking the output is always loaded with some sort of cap which keeps wp < wz. In fact if you re-run the sim with the output loaded with 100fF the increasing magnitude response (zero dominated) becomes decreasing since wp < wz (see attached). I see similiar behaviour in the commercial PDK I am working on at present. @Tim Edwards please ignore my modelling concern, all seems to be in order (im clearly overly paranoid about modelling and tend to suspect it when I see an unexpected result!) In fact, if nothing else, this little exercise was good to give high confidence w.r.t accurate modelling of device parasitics such as Cgd / Cbd.
💪 1