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