Forum
 aguntuk Junior Member Offline Posts: 12 Dresden, Germany Ferroelectric Capacitor model using verilog-a Jan 25th, 2019, 3:36am   Hello,I am trying to develop a behavioral model of a ferroelectric capacitor using verilog-a. The ferroelectric material is HfO2 in between the capacitor plates. I know the polarization hysteresis formula which works for my HfO2 capacitor. So I try to model the polarization hysteresis first whose unit is "uC/cm^2". So to get the charge (Q) I just need to multiply the area of the capacitor. Form charge (Q), I can get the current (I) in the capacitor of my capacitor model. Here is the formula for the polarization:PF(P/E)(V) = PS(P/E) tanh(((V-Vc(P/E))÷2Vc(P/E))*ln((PS+Pr)/(PS-Pr)))For (P/E): P refers to upward hysteresis and E refers to downward hysteresis.My verilog-a code: Code:````include "constants.vams" `include "disciplines.vams" // in: Input terminal // out: Output terminal // th: thickness module Fe_cap_HfO2(in, out); //Nodes inout in, out; electrical in, out, x, y, m; // parameter declaration: name = default value [units] parameter real area = 0.046755; // [cm2] parameter real Pr_p = 11.7325; // [uC/cm2] parameter real Pr_e = -12.0627; // [uC/cm2] parameter real Ps_p = 22.6455; // [uC/cm2] parameter real Ps_e = -22.6455; // [uC/cm2] parameter real Vc_p = 1.22232; // [V] parameter real Vc_e = -1.067; // [V] parameter real th = 1e-8; // [nm] // Variables real Pf; // polarization variable real Vbr_p; // breakdown voltage (positive) real Vbr_e; // breakdown voltage (negative) real Q; // capacitor charge analog begin Vbr_p = 3*Vc_p; Vbr_e = -3*Vc_p; if (V(in) > 0)   begin if (V(in) > Vbr_p)   V(x) <+ Vbr_p; else   V(m) <+ V(in);   end else if (V(in) < 0)   begin    if (V(in) < Vbr_e)   V(y) <+ Vbr_e; else   V(m) <+ V(in);   end @(cross(Vbr_e