add ac and dc simulation to memristor model

This commit is contained in:
h_vogt 2012-06-09 18:25:51 +02:00
parent f53eb5cf78
commit fde8c46356
2 changed files with 22 additions and 8 deletions

View File

@ -6,8 +6,10 @@ Memristor with threshold as XSPICE code model
* XSPICE code model, parameter selection and plotting by
* Holger Vogt 2012
* ac and op (dc) simulation just use start resistance rinit!
.param stime=10n
.param vmax = 3
.param vmax = 4.5
* send parameters to the .control section
.csparam stime={stime}
@ -16,15 +18,16 @@ Memristor with threshold as XSPICE code model
*Xmem 1 0 memristor
* triangular sweep (you have to adapt the parameters to 'alter' command in the .control section)
*V1 1 0 DC 0 PWL(0 0 '0.25*stime' 'vmax' '0.5*stime' 0 '0.75*stime' '-vmax' 'stime' 0)
* sinusoidal sweep
V1 0 1 DC 0 sin(0 'vmax' '1/stime')
* sinusoidal sweep for transient, dc for op, ac
V1 0 1 DC 0.1 ac 1 sin(0 'vmax' '1/stime')
Rl 1 11 1k
* memristor model with limits and threshold
* "artificial" parameters alpha, beta, and vt. beta and vt adapted to basic programming frequency
* just to obtain nice results!
* You have to care for the physics and set real values!
amen 1 2 memr
amen 11 2 memr
.model memr memristor (rmin=1k rmax=10k rinit=7k alpha=0 beta='20e3/stime' vt=1.6)
vgnd 2 0 dc 0
@ -41,6 +44,10 @@ Rmem plus minus r={V(x)}
* transient simulation same programming voltage but rising frequencies
.control
*** first simulation ***
op
print all
ac lin 101 1 100k
plot v(11)
* approx. 100 simulation points
let deltime = stime/100
tran $&deltime $&stime uic

View File

@ -28,6 +28,8 @@ SUMMARY
** Experimental, still to be tested in circuits !! **
dc and ac simulation just return rinit.
INTERFACES
cm_memristor()
@ -56,7 +58,7 @@ double f1(double y);
void cm_memristor (ARGS)
{
// Complex_t ac_gain;
Complex_t ac_gain;
double partial;
double int_value;
double *rval;
@ -91,14 +93,19 @@ void cm_memristor (ARGS)
cm_analog_integrate(int_value, rval, &partial);
/* output the current */
OUTPUT(memris) = INPUT(memris) / *rval;
/* This does work, but is questionable */
PARTIAL(memris, memris) = partial;
/* This may be a (safe?) replacement, but in fact is not
so good at high voltage (at strong non-linearity)
cm_analog_auto_partial();*/
}
/* no AC and DC modeling so far !
else if(ANALYSIS == AC) {
ac_gain.real = *vc;
ac_gain.real = 1/ *rval;
ac_gain.imag = 0.0;
AC_GAIN(memris, memris) = ac_gain;
} */
}
else
OUTPUT(memris) = INPUT(memris) / *rval;
}
/* the window function */