Continue to Site

Welcome to EDAboard.com

Welcome to our site! EDAboard.com is an international Electronics Discussion Forum focused on EDA software, circuits, schematics, books, theory, papers, asic, pld, 8051, DSP, Network, RF, Analog Design, PCB, Service Manuals... and a whole lot more! To participate you need to register. Registration is free. Click here to register now.

How to extract gmoverid curves from a PMOS transistor?

Status
Not open for further replies.

FilipeTavora

Newbie
Joined
Apr 10, 2013
Messages
3
Helped
0
Reputation
0
Reaction score
0
Trophy points
1,281
Activity points
1,312
Hello,

It may be just a silly question, but once my initial results are a little bit strange I decided to ask here for help. I am designing a folded cascode opamp using gm/id methodology at a 0.35um process. First of all, I downloaded the spice model bsim3v3 version 3.2.4. level 53 from the foundry website, which is intended for Eldo (Mentor simulator). Since I don't have access to professional tools (Cadence, Mentor, Tanner...) at the moment, I am trying to get by with the old free SPICE software, in my case, NGSPICE.

I wrote a spice script to extract and plot gm/id(W/L) x Id/W/L, Va (Id/gds) x Id/W/L and Av (DC gain) x Id/W/L for nmos transistor, as can be seen on attached files nmva_gmoverid_extraction_code.txt, nmos_gmoverid.png, nmos_va.png and nmos_DC_Gain.png, respectively. The curves seams to be OK for this nmos. So, I tried to do the same thing for the pmos, but the curves seams a little bit odd to me (See attached files with "pmos" prefix). So, my questions are:

1) Is It normal to have gmoverid curves with the kind of shape depicted on pmos_gmoverid_extraction.png (I never saw this shape on literature)?
2) How do we set the testbench to extract PMOS gmoverid curves properly?

Thanks and regards,

Filipe
 

Attachments

  • nmos_DC_Gain.png
    nmos_DC_Gain.png
    67.5 KB · Views: 79
  • nmos_gmoverid.png
    nmos_gmoverid.png
    70.8 KB · Views: 76
  • nmos_va.png
    nmos_va.png
    68.2 KB · Views: 76
  • pmos_DC_Gain.png
    pmos_DC_Gain.png
    65.1 KB · Views: 66
  • pmos_gmoverid.png
    pmos_gmoverid.png
    71.7 KB · Views: 79
  • pmos_va.png
    pmos_va.png
    65.6 KB · Views: 83
  • nmva_gmoverid_extraction_code.txt
    3.9 KB · Views: 107
  • pmva_gmoverid_extraction_code.txt
    3.9 KB · Views: 58

This non-monotonic behaviour could be caused by discontinuity of bsim model between strong, moderate and weak inversion.
 

Hi Dominik,

Thanks for you feedback. So, that kind of behavior can be expected for some bsim models? Also, do you see any problem on the testbench I am using to extract the curves?

Regards,

Filipe
 

Hi Filipe,

Try to download some NGSPICE compatible model (e.g. LTSPICE/HSPICE) from cmosedu.com change the level to check your characterization deck. You can adopt the following HSPICE scripts to fit with NGSPICE also.

*****************************************************************************
.tit1e MOS characterization
.options post brief dccap
.op
.protect
.inc 'cmosedu_models.lib'
.unprotect
.param gs=0.7
.param length=.18um
******source********
vds1 d1 0 dc '1.8/2'
vds2 d2 0 dc '-1.8/2'
vgs1 g1 0 dc 'gs'
vgs2 0 g2 dc 'gs'
********************
mn d1 g1 0 0 nmos L='length' W=5um m=1
mp d2 g2 0 0 pmos L='length' w=5um m=1
.dc gs .2v 1v 1mv length .18um 0.5um 10nm
***NMOS measurement***
.probe ov_n = par('gs-vth(mn)')
.probe vstar_n=par('2*i(mn)/gmo(mn)')
.probe gm_id_n= par('gmo(mn)/i(mn)')
.probe ft_n = par('1/6.28*gmo(mn)/cggbo(mn)')
.probe gm_gds_n = par('gmo(mn)/gdso(mn)')
.probe ftgm_id_n=par('(gmo(mn)*gmo(mn))/(2*3.14*cggbo(mn)*i(mn))')
.probe id_w_n=par('i(mn)/5um')
.probe length_sweep_n=par('gmo(mn)')
.probe cdd_cgg_n=par('cddbo(mn)/cggbo(mn)')
***PMOS measurement***
.probe ov_p = par('gs-vth(mp)')
.probe vstar_p=par('-2*i(mp)/gmo(mp)')
.probe gm_id_p= par('-gmo(mp)/i(mp)')
.probe ft_p = par('1/6.28*gmo(mp)/cggbo(mp)')
.probe gm_gds_p = par('gmo(mp)/gdso(mp)')
.probe ftgm_id_p=par('(gmo(mp)*gmo(mp))/(2*3.14*cggbo(mp)*(-i(mp)))')
.probe id_w_p=par('-i(mp)/5um')
.probe length_sweep_p=par('gmo(mp)')
.probe cdd_cgg_p=par('cddbo(mp)/cggbo(mp)')
.end
***********************************************************************************
I am curious to know the result and will appreciate if you can share the result.

Akbar
 

Status
Not open for further replies.

Part and Inventory Search

Welcome to EDABoard.com

Sponsor

Back
Top