[eispice] Re: behavior test case problems

  • From: "Jon Choy" <jonchoy@xxxxxxxxxxx>
  • To: eispice@xxxxxxxxxxxxx
  • Date: Sat, 23 Dec 2006 16:25:42 -0600

  Charles,

    You are right about the sign error; but the solution is incorrect. The 
answer is around 1.4V. I ran this circuit with an Excel spreadsheet and 
writing down the equations as well as writing a Python program that 
calculates the DC point using a Newton - Raphson iteration technique it 
get's a similar answer of about 1.43V.

  Jon


>From: Charles Eidsness <charles@xxxxxxxxxxxxxxxxxxxxx>
>Reply-To: eispice@xxxxxxxxxxxxx
>To: eispice@xxxxxxxxxxxxx
>Subject: [eispice] Re: behavior test case problems
>Date: Tue, 19 Dec 2006 15:46:15 -0500
>
>Hi Jon,
>
>I don't have a lot of experience modelling semi-conductor devices in
>this way  so I may be wrong, but shouldn't the current through the PMOS
>device run in the opposite direction w.r.t. the NMOS device? If it's
>turned around, i.e.:
>return -0.5*self.betap*(Vs - Vg - self.vtp)**self.power
>the simulation runs, but gives in an output of 0.7Vs. Which may not be
>what you were expecting?
>
>Cheers!
>Charles
>
>Jon Choy wrote:
> >   Charles,
> >
> >     Thanks for the feedback. I did notice the typos after I sent the 
>case on
> > to you; but they still failed and now I know why.  No problem about 
>working
> > through the bugs. I anticipated this being sort of an alpha user. Work 
>on it
> > when you get a chance, I'm sure you've got your day job as well.
> >
> >   Jon
> >
> >
> >
> >> From: Charles Eidsness <charles@xxxxxxxxxxxxxxxxxxxxx>
> >> Reply-To: eispice@xxxxxxxxxxxxx
> >> To: eispice@xxxxxxxxxxxxx
> >> Subject: [eispice] Re: behavior test case problems
> >> Date: Mon, 18 Dec 2006 18:47:03 -0500
> >>
> >> Hi Jon,
> >>
> >> You're not abusing, you're stretching. :) It was intended to be used in
> >> that way, but you're the first to try it.
> >>
> >> It looks like I have some work to do on error messages. They're way to
> >> cryptic, especially for the new PyB device. I'll see what I can do.
> >>
> >> Your B-Element based model uncovered a bug in the calculon library's
> >> parser. It requires a space between the '-' sign and constants. I've
> >> fixed it in my stream and it will be fixed for the next release but for
> >> now you can just add a space. Also, the B element doesn't recognize the
> >> 'GND' identifier, it only recognizes 0 as a ground indicator. I can add
> >> GND as well but I'm hoping that as soon as we get this PyB element
> >> working the only use for the old B element will be for porting in 
>Spice3
> >> decks which only use 0.
> >>
> >> If you change:
> >> d.pmosx = dev.B('4', GND, 'i',"0.5*2e-6*(v(1,4)-0.7)^2")
> >> to:
> >> d.pmosx = dev.B('4', GND, 'i',"0.5*2e-6*(v(1,4) - 0.7)^2")
> >>
> >> and:
> >> d.nmosx = dev.B(4, GND, 'i',"0.5*5e-6*(v(4,GND)-0.7)^2")
> >> to:
> >> d.nmosx = dev.B(4, GND, 'i',"0.5*5e-6*(v(4,0) - 0.7)^2")
> >>
> >> The simulation runs, until it fails to linearize. I'll have to fiddle
> >> with the simulator to get it working further than that, which will take
> >> a little bit longer. I'll post again once I get it working.
> >>
> >> The two PyB based models had a couple of typos. The lines:
> >> def model(self, Vg, Vs)
> >> should have a 4th argument (because you defined 3 input arguments), you
> >> can change them to something like:
> >> def model(self, Vg, Vs, Vp)
> >> Also, for the second model the if statement references vtp but it 
>should
> >> reference vtn, i.e.:
> >> if ((Vg - Vs)> self.vtp):
> >> should be:
> >> if ((Vg - Vs)> self.vtn):
> >>
> >> Once you make those two changes it should run as far as the 'failed to
> >> linearize' as well.
> >>
> >> I'm sure with some useful messages those two typos would have popped
> >> right out. It's tough to debug when every error message is "TypeError:
> >> bad argument type for built-in operation". I'm guessing it's really
> >> referring to some bug in the way I'm passing error messages between C
> >> and Python, I'll look into it.
> >>
> >> Thanks for having patience as we work through the bugs, and I'll get
> >> back to you on those 'failed to linerise's'
> >>
> >> Cheers,
> >> Charles
> >>
> >>
> >> Jon Choy wrote:
> >>
> >>>   I've tried a couple of behavior cases that don't seem to run. I hope 
>I
> >>> haven't abused the capability. I'm simply seeing if a mos divider
> >>>
> >> circuit
> >>
> >>> will work. I have two devices and behavioral nmos and pmos with the
> >>>
> >> gate,
> >>
> >>> drain of both the pmos and nmos tied together. I have tried three
> >>>
> >> different
> >>
> >>> cases. Let me know what you think.
> >>>
> >>> #!/usr/bin/python
> >>>
> >>> from eispice import *
> >>>
> >>> # -- PyB Defined Model --
> >>> class pmos_sat(dev.PyB):
> >>>
> >>>   def __init__(self, p, n, g,  s, b, kp=2e-6,wp=2,lp=1,power=2.0):
> >>>     dev.PyB.__init__(self, p, n, Current, v(g), v(s), v(b))
> >>>     self.kp = kp
> >>>     self.wp = wp
> >>>     self.lp = lp
> >>>     self.vtp= 0.7
> >>>     self.betap = kp*wp/lp
> >>>     self.power=power
> >>>   def model(self, Vg, Vs):
> >>>     if ((Vs - Vg)> self.vtp):
> >>>       return 0.5*self.betap*(Vs - Vg - self.vtp)**self.power
> >>>     else :
> >>>       return 0
> >>> class nmos_sat(dev.PyB):
> >>>
> >>>   def __init__(self, p, n, g,  s, b, kn=5e-6,wn=2,ln=1,power=2.0):
> >>>     dev.PyB.__init__(self, p, n, Current, v(g), v(s), v(b))
> >>>     self.kn = kn
> >>>     self.wn = wn
> >>>     self.ln = ln
> >>>     self.vtn= 0.7
> >>>     self.betan = kn*wn/ln
> >>>     self.power=power
> >>>   def model(self, Vg, Vs):
> >>>     if ((Vg - Vs)> self.vtp):
> >>>       return 0.5*self.betan*(Vg - Vs - self.vtn)**self.power
> >>>     else :
> >>>       return 0
> >>>
> >>> # Now to use the model
> >>> kp = 2e-6
> >>> wp = 2
> >>> lp = 1
> >>> vtp= 0.7
> >>> betap = kp*wp/lp
> >>> power=2
> >>> kn = 5e-6
> >>> wn = 2
> >>> ln = 1
> >>> vtn= 0.7
> >>> betan = kn*wn/ln
> >>>
> >>> d = Deck('PyB Defined Behavioral MOS divider')
> >>>
> >>> d.V0 = dev.V(1, GND, 3.3)
> >>> #d.pmosx = pmos_sat(4, GND, 4, 1, 1)
> >>> #d.pmosx = dev.B('4', GND, 'i',"0.5*betap*(v(1,4)-vtp)^2")
> >>> d.pmosx = dev.B('4', GND, 'i',"0.5*2e-6*(v(1,4)-0.7)^2")
> >>> #d.nmosx = nmos_sat(4, GND, 4, GND, GND)
> >>> #d.nmosx = dev.B(4, GND, 'i',"0.5*betan*(v(4,GND)-vtn)^2")
> >>> d.nmosx = dev.B(4, GND, 'i',"0.5*5e-6*(v(4,GND)-0.7)^2")
> >>> d.rout = dev.R(4,GND, 100000)
> >>>
> >>> d.op()
> >>>
> >>> d.plot()
> >>>
> >>> _________________________________________________________________
> >>> Get live scores and news about your team: Add the Live.com Football 
>Page
> >>> www.live.com/?addtemplate=football&icid=T001MSN30A0701
> >>>
> >>> ------------------------------------------------------------------
> >>> To unsubscribe from the eispice list send an email to:
> >>> eispice-request@xxxxxxxxxxxxx with 'unsubscribe' in the Subject field
> >>>
> >>>
> >>>
> >>>
> >> ------------------------------------------------------------------
> >> To unsubscribe from the eispice list send an email to:
> >> eispice-request@xxxxxxxxxxxxx with 'unsubscribe' in the Subject field
> >>
> >
> > _________________________________________________________________
> > Experience the magic of the holidays. Talk to Santa on Messenger.
> > 
>http://clk.atdmt.com/MSN/go/msnnkwme0080000001msn/direct/01/?href=http://imagine-windowslive.com/minisites/santabot/default.aspx?locale=en-us
> >
> > ------------------------------------------------------------------
> > To unsubscribe from the eispice list send an email to:
> > eispice-request@xxxxxxxxxxxxx with 'unsubscribe' in the Subject field
> >
> >
> >
>------------------------------------------------------------------
>To unsubscribe from the eispice list send an email to:
>eispice-request@xxxxxxxxxxxxx with 'unsubscribe' in the Subject field

_________________________________________________________________
Your Hotmail address already works to sign into Windows Live Messenger! Get 
it now 
http://clk.atdmt.com/MSN/go/msnnkwme0020000001msn/direct/01/?href=http://get.live.com/messenger/overview

------------------------------------------------------------------
To unsubscribe from the eispice list send an email to:
eispice-request@xxxxxxxxxxxxx with 'unsubscribe' in the Subject field

Other related posts: