[eispice] Re: behavior test case problems

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

Other related posts: