The Designer's Guide Community Forum
https://designers-guide.org/forum/YaBB.pl
Design Languages >> Verilog-AMS >> Variable resistor
https://designers-guide.org/forum/YaBB.pl?num=1233245118

Message started by Seario on Jan 29th, 2009, 8:05am

Title: Variable resistor
Post by Seario on Jan 29th, 2009, 8:05am

Hello again  :)

Now, I have to implement a variable resistor. The equation that I have to use is a polynomial equation such as eq1 = ax^2+bx+c as an I-V curve. Following the diffusion-resistor tutorial V =IR, give us an integral in function of current such as

I(v) = int (dv / eq1)

this because of conservation law.

The question goes in the way that I'm right or I misunderstand everything?

Cheers
Seario

Title: Re: Variable resistor
Post by Geoffrey_Coram on Jan 30th, 2009, 6:51am


Quote:
eq1 = ax^2+bx+c as an I-V curve


Is this an I-V curve, or is it R(V)?  There are several ways to describe a nonlinear resistor, R(V) or G(V) or R(I) or ...

I will say that I don't like polynomials; they're not physical and if you choose your coefficients poorly, you can get negative resistance.

Title: Re: Variable resistor
Post by Seario on Jan 30th, 2009, 9:27am

Hello Geoffrey,

Yes, this is a I-V curve. Polynomial function represents leakage current for small amounts of voltage such as 0.001 to 0.1V. With this function I need to model a resistor or variable resistor. Following the diffusion resistor manual, I did integrate the polynomial as mentioned in the first post, and I used the result to drive the current. But I'm not sure if the things that I did are right.

Which are the other ways that you mentioned to implement the nonlinear resitor?

Cheers
Seario

Title: Re: Variable resistor
Post by Geoffrey_Coram on Jan 30th, 2009, 1:58pm

Isn't eq1 = R(v) = a v^2 + b v + c ?
then i = int(dv/R(v))

If eq1 = G(v), then i = int(G(v) dv)

When you say eq1 is an "I-V curve" then it sounded to me like
I(V) = a V^2 + b V + c
and then you'd differentiate this to get the (small-signal) conductance at a particular bias point.

That's why I was asking exactly what eq1 was representing.

Title: Re: Variable resistor
Post by Andrew Beckett on Feb 3rd, 2009, 9:19pm

I agree entirely with Geoffrey - I see too many cases where resistor models are implemented using polynomial (often quadratic) equations of voltage, and the model writer forgets that there are multiple roots - some of which may be completely meaningless, but that doesn't stop a circuit simulator from being able to converge to them. I've seen examples from a perfectly respectable foundry PDK where negative resistors result, leading to operating points of 25-30 volts (in a 3V process), with lots of breakdown messages ensuing from the transistors as a result! Also, I had a complaint from another saying that spectre was wrong when it found that the voltage at one end of a nonlinear resistor (polynomial model) connected to an ideal current source was -1000V (there was nothing wrong with spectre; the model had two roots).

So be very careful when creating models like this. You can often prevent the problem with some bounds limiting in the code to stop the other roots from occurring, but it's not that straightforward.

Regards,

Andrew.

Title: Re: Variable resistor
Post by jbdavid on Feb 4th, 2009, 6:07pm

I think the Phillips "rdiff" model is the best one to use for diffusion resistors.. but what you are describing is a "non-linear" resistor, not a "variable" resistor.
after all, a Variable resistor will have a control signal, either discrete, or continuous.

V(p,m) <+ I(p,m)*(Rfixed + Rvar*V(cont) + Rpoly*V(cont)*V(cont));
or
V(p,m)<+ I(p,m)*transition(Rstep*Rbits,0,tr,tf);

a diffusion resistor is non-linear, with a variation determined by the substrate or well, voltage, but is not "variable" unless you can vary that particular voltage, with respect to the resistor terminal voltage.

Title: Re: Variable resistor
Post by Seario on Feb 23rd, 2009, 3:01am

Hello again guys...

Reviewing my signal as I mentioned before it is an I-V curve, However I didn't understand at the beginning what it was about, and probably I still without understand properly. Geoffrey you are right my curve is an I(V) curve. Following all your advices I fit the curve for an exponential function instead of polynomial one, I did this because I had several problems as described in here by Andrew.

The equation is

I(V) = 1e-124*exp(15.282*V), for 15.0 - 15.05 V

I(V) = 4e-43*exp(3.1609*V), for 15.51 - 20 V

These equations represent my I(V) curve. So What should I do in order to model this variable resistor?

Cheers
Seario


Title: Re: Variable resistor
Post by Andrew Beckett on Feb 23rd, 2009, 4:46am

Those coefficients look a little crazy! 1e-124 - are you sure? What's the curve going to do outside of the ranges you've listed?

Regards,

Andrew.

Title: Re: Variable resistor
Post by Seario on Feb 23rd, 2009, 5:20am

Hi Andrew,

It is a SiO2 tunnel barrier. Those crazy coefficients are because I need to fit a curve for low voltage 15-15.5 V (which represents electrons leakage) and the other equation is for a normal operation. Beyond those limits, the function is not important for my tunnel barrier.

Cheers
Mario A.

Title: Re: Variable resistor
Post by Geoffrey_Coram on Feb 24th, 2009, 6:06am

Even if you don't care what happens outside those ranges, you have to define the I(V) for the entire range -- because the simulator might try to evaluate well outside those voltages when trying to converge at a timepoint.

Best is if you can construct a function that is continuous and has at least one continuous derivative at the transition points (15.0, 15.05, 15.51, 20).

Title: Re: Variable resistor
Post by Peng_Li on Dec 27th, 2018, 12:16am

Hi,
I encounter a similar problem recently. After some struggle, I finally solved this problem. For your reference, the details are as follows.

I need to model a resistor whose value varies with the voltage on itself. I read this thread and the other one. (http://www.designers-guide.org/Forum/YaBB.pl?num=1216113653/0)

Hinted by Geoffrey and Andrew, I work out the following module.
And, it works.


Code:
module vc_res(p, n);
     inout p, n;
     electrical p, n;
     parameter real abit0=293.15 from (0:inf);  //this parameter is for my work
     real rvary;

     analog begin
           rvary=1133*sin(0.001469*( V(p,n)+ abit0 )+6.241);
           I(p,n) <+ V(p,n)/rvary;
           //V(p,n) <+ I(p,n)*rvary;  //this sentence also works fine
     end
endmodule

The Designer's Guide Community Forum » Powered by YaBB 2.2.2!
YaBB © 2000-2008. All Rights Reserved.