Ricky Chen wrote on Sep 19th, 2013, 7:06am:Dear All,
I need to solve a differntial eqaition in my VerilogA marco-model
The eqaution I want to solve is:-
ddt(V(alpha)) = Vx * V(in)
V(in) is the input signal ( as a function of time 't') to the model.
Vx is read from a "table_model" at (t + V(alpha) i.e ( $(abstime) + V(alpha) )
To solve this I did as below:-
// define branches
branch (alpha) alpha1;
branch (alpha) alpha2;
I(alpha1) <+ -Vx * V(in);
I(alpha2) <+ ddt(V(alpha));
The KCL at alpha forces I(alpha1) + I(alpha2) = 0 and solve the differntial equation.
[Added:] dValpha(t)/dt = f(Valpha(t), t) * Vin(t), right?
Quote:
I went and checked the results.
At $abstime = t1
Vx * V(in)= x1
V(alpha)= y1
At $abstime = t2
Vx * V(in)= x2
V(alpha)= y2
I think y2 should be equal to
y2= [ x2 * (t2 - t1) ] + y1.
I don't think so.
Quote:But SPECTRE is showing something different than "y2" .
Can anybody please tell where I am going wrong ?
Whether my line of thought is correct ?
or it may be some accuracy issue of Spectre lile Reltol, Vabstol,Abstol playing some rule ?
Also I solve the above differntial eqaution using MATLAB ODE45().
It is totally different from the SPECTRE result !
Did you try an "indirect branch assignment statement"?
- B O E