[eispice] Re: behavior test case problems
- From: Charles Eidsness <charles@xxxxxxxxxxxxxxxxxxxxx>
- To: eispice@xxxxxxxxxxxxx
- 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
- Follow-Ups:
- [eispice] Re: behavior test case problems
- From: Jon Choy
- References:
- [eispice] Re: behavior test case problems
- From: Jon Choy
Other related posts:
- » [eispice] behavior test case problems
- » [eispice] Re: behavior test case problems
- » [eispice] Re: behavior test case problems
- » [eispice] Re: behavior test case problems
- » [eispice] Re: behavior test case problems
- » [eispice] Re: behavior test case problems
- » [eispice] Re: behavior test case problems
- » [eispice] Re: behavior test case problems
- » [eispice] Re: behavior test case problems
- » [eispice] Re: behavior test case problems
- [eispice] Re: behavior test case problems
- From: Jon Choy
- [eispice] Re: behavior test case problems
- From: Jon Choy