This post mainly covers different famous memristor models, window functions along with their SPICE simulations(done on LTSPICE). Window function are used to add non-linearity at the boundaries while Models are used establish a linear/non-linear relationship between the rate of state change and the stimulus (current/voltage).
Content:
- Models
- Linear
- Non-linear
- Threshold
- Macro-model
- Window functions
- Properties of window functions
- Types of window functions:
- Struckov
- Benderli
- Joglekar
- Biolek
- Prodomakis
- Jinxiang
- SPICE simulations
Memristor Models
Linear Ion drift Model (Ideal Model)
In this model, there exists a linear relationship between the state derivative and the stimuli(Voltage/Current). It assumes that vacancies have freedom to move around the entire length of the device. It is not true since vacancies slow down a lot at boundaries. It’s one of the reason along with tunneling effect, why linear model can’t be used at higher voltages.
Further it predicts an inverse relationship between switching time(T_{o}) and applied voltage(V_{o}), stimuli is voltage here. However, actual experiments shows a logarithmic inverse relationship.
More details about linear model can be found here: http://www.iue.tuwien.ac.at/phd/mahmoudi/dissse9.html
Non-Linear Ionic drift model
It is the most accurate model which predicts both static and switching dynamic behavior of a memristor. It proposes a non-linear relationship between stimuli and state derivative with asymmetric switching behavior.f(w) here, is the window function. i(t) is basically made up of two components sinh() part that is due to tunneling effect and exp() part that is due to PN junction behavior.
Fig 1 depicts the I-V relationship for a non-linear memristor model when input is sinusoidal wave and rectangular pulse. This model properly describes the non-linear switching dynamics arising from the ionic motion which modulates the effective width of insulating region as well as the electron tunneling effect through the insulating region which is a function of the width of insulating region and applied voltage.
Figure 2 shows the variation of memristance with the transition in state for linear and non-linear model.
Visit here for detailed information on non-linear memristor model: http://www.iue.tuwien.ac.at/phd/mahmoudi/dissse9.html#x21-240003.3.2
Threshold Adaptive memristor (TEAM) Model
It’s a more simpler and generalized model that approximates non-linear drift model of the memristor to improve computational efficiency. The crux point here is that below a certain threshold the state variable doesn’t change.
Instead of exponential dependency, there is a polynomial dependence involved between the memristor current and the internal state drift derivative.
where k_off > 0 and k_on < 0. alpha_off and alpha_on being constants. i_on and i_off are current thresholds.
TEAM is accurate enough with a mean error of 0.2% and can boost simulation run-time by 47.5%. It also satisfies convergence conditions, computational efficiency and it can fit to any of the existing model like linear ion drift model.
VTEAM is another variation in TEAM model with some changes in threshold and thus a bit change in performance.
MACRO Model
Macro model of memristor, unlike another previous model is made up of a circuit consisting various discrete electrical components that altogether gives characteristics like memristor.
Window functions
It’s used to prevent the state variable from getting out of the bounds [0,D] and also to add more non-linearity near the bounds. The derivative of state variable is multiplied by a window unction in order to force it to reach 0 when the state variable is at the bounds.
Properties of a window functions:
- Boundary conditions – whether the boundary conditions at the top or the bottom electrode of device are taken into considerations or not.
- Boundary lock – whether a window function is able account for boundary lock problem*.
- Linearity of drift – whether the drift at boundaries non-linear or not.
- Linkage between linear and non-linear model – whether at low voltages non-linear model performs same as linear model both with same window functions.
- Scalability – whether it provides full scalability or not
- Flexibility – whether it provides control parameters for fine tuning several properties.
* Boundary lock problem – When a model is dependent only on state function and not on stimuli, usually it’s state can’t be changed from one extreme to another. Blue line in the below images is the memristance value and green line is the input voltage waveform. Note that in case of boundary-lock problem after reaching to one extreme, memristance value doesn’t changes further irrespective of input.
Several window functions(w.f.)
- Strukov’s w.f.
- where w is the state variable, D be the low conductivity portion length. w = W/D
- Benderli’s w.f.
- where w is the state variable,D be the low conductivity portion length. w = W/D, W be the length of high-conductivity portion
- Joglekar w.f.
- where w is the state variable, p is the parameter that controls the amount of non-linearity.
- Fig-4(a) shows Joglekar w.f. characteristics. Here, Boundary conditions are satisfied with maximum value at center with the only problem being boundary lock.
- Biolek w.f.
- where w is the state variable, p is the parameter that controls the amount of non-linearity, i is the current flowing.
- Fig-4(b) shows biolek window function characteristics. Problem with biolek’s w.f. is discontinuity at boundaries and it’s not scalable.
- Prodomakis w.f.
- where w is the state variable, p is the parameter that controls the amount of non-linearity, j is the scalability factor.
- The main issue with prodomakis w.f. is boundary lock problem.
- Jinxiang w.f.
- where w is the state variable, p is the parameter that controls the amount of non-linearity, j is the scalability factor, 0<a<1 a controls the resolution.
- It solves most of the issues, taking into care boundary lock problem. However, it suffers a disadvantage at high voltages.
One of the recent w.f. as mentioned here https://doi.org/10.1016/j.aeue.2018.04.020 is by far( as of Jan 2019) the best.
SPICE SIMULATION CODES
Biolek window function
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
* HP Memristor SPICE Model Using Biolek Window * Connections: * TE: Top electrode * BE: Bottom electrode * XSV: External connection to plot state variable * that is not used otherwise .SUBCKT MEM_BIOLEK TE BE XSV * Ron: Minimum device resistance * Roff: Maximum device resistance * D: Width of the thin film * uv: Dopant mobility * p: Parameter for window function * x0: State varaible initial value .params Ron=100 Roff=16K x0=.076 D=16N uv=40F p=7 * Biolek Window Function .func f(V1,I1)={1-pow((V1-stp(-I1)),(2*p))} * Memristor I-V Relationship .func IVRel(V1,V2) = V1/(Ron*V2 + Roff*(1-V2)) * Circuit to determine state variable Gx 0 XSV value={I(Gmem)*Ron*uv*f(V(XSV,0),I(Gmem))/pow(D,2)} Cx XSV 0 {1} .ic V(XSV) = x0 * Current source representing memristor Gmem TE BE value={IVRel(V(TE,BE),V(XSV,0))} .ENDS MEM_BIOLEK |
Joglekar window function
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
*********************************************** * HP Memristor SPICE Model * For Transient Analysis only * created by Zdenek and Dalibor Biolek *********************************************** * Ron, Roff - Resistance in ON / OFF States * * Rinit - Resistance at T=0 * * D - Width of the thin film * * uv - Migration coefficient * * p - Parameter of the WINDOW-function for * modeling nonlinear boundary conditions * * x - W/D Ratio, W is the actual width * of the doped area (from 0 to D) * *********************************************** .SUBCKT memristor plus minus PARAMS: + Ron=100 Roff=16K Rinit=80K D=10N uv=10F p=1 *********************************************** * DIFFERENTIAL EQUATION MODELING * *********************************************** Gx 0 x value={I(Emem)*uv*Ron/D**2*f(V(x),p)} Cx x 0 1 IC={(Roff-Rinit)/(Roff-Ron)} Raux x 0 1000000 *********************************************** * RESISTIVE PORT OF THE MEMRISTOR * *********************************************** Emem plus aux value={-I(Emem)*V(x)*(Roff-Ron)} Roff aux minus {Roff} *********************************************** * FLUX COMPUTATION * *********************************************** Eflux flux 0 value={SDT(V(plus,minus))} *********************************************** * CHARGE COMPUTATION * *********************************************** Echarge charge 0 value={SDT(I(Emem))} *********************************************** * WINDOW FUNCTIONS * FOR NONLINEAR DRIFT MODELING * *********************************************** * window function, according to Joglekar .func f(x,p)={1-(2*x-1)**(2*p)} .ENDS memristor |
Prodomakis window function
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
* HP Memristor SPICE Model Using Prodomakis Window * Connections: * TE: Top electrode * BE: Bottom electrode * XSV: External connection to plot state variable * that is not used otherwise .SUBCKT MEM_PRODOMAKIS TE BE XSV * Ron: Minimum device resistance * Roff: Maximum device resistance * D: Width of the thin film * uv: Dopant mobility * p: Parameter for window function * x0: State varaible initial value .params Ron=100 Roff=16K x0=.076 D=16N uv=40F p=7 j=1 * prodomakis Window Function .func f(V1)= j*{1-pow((pow((V1 - 0.5),2) + 3/4 ),p)} * Memristor I-V Relationship .func IVRel(V1,V2) = V1/(Ron*V2 + Roff*(1-V2)) * Circuit to determine state variable Gx 0 XSV value={I(Gmem)*Ron*uv*f(V(XSV,0))/pow(D,2)} Cx XSV 0 {1} .ic V(XSV) = x0 * Current source representing memristor Gmem TE BE value={IVRel(V(TE,BE),V(XSV,0))} .ENDS MEM_PRODOMAKIS |
TEAM memristor model
1 2 3 4 5 6 7 8 9 10 |
*threshold model* .subckt MEMTHRESH pl mn PARAMS: Ron=1K Roff=16K Rinit=5K beta=1E13 Vtp=4.6 Vtm=4.6 nu1=0.0001 nu2=0.1 Gx 0 x value={f1(V(pl)-V(mn))*(f2(f1(V(pl)-V(mn)))*f3(Roff-V(x))+f2(-f1(V(pl)-V(mn)))*f3(V(x)-Ron))} Raux x 0 1E12 Cx x 0 1 IC={Rinit} Gpm pl mn value={(V(pl)-V(mn))/V(x)} .func f1(y)={beta*(y-Vtp)/(exp(-(y-Vtp)/nu1)+1)+beta*(y+Vtm)/(exp(-(-y-Vtm)/nu1)+1)} .func f2(y1)={1/(exp(-y1/nu1)+1)} .func f3(y)={1/(exp(-y/nu2)+1)} .ends MEMTHRESH |