Device Parameter Fitting Using Matlab
September 4, 1996
ABSTRACT
The calibration
of device simulators to measured data is of paramount importance to
accurate simulations. Often, this calibration is done "by
hand" through trial-and-error, requiring a lot of time. We
demonstrate a conglomeration of programs that will perform this
calibration systematically to arbitrary precision. It can locally
optimize several variables using the nonlinear simplex method
(Nelder-Mead) implemented by the FMINS function in Matlab.
DISCUSSION
In this example,
an NMOS transistor is biased in a circuit with a drain resistance
(Rd) and a source resistance (Rs). For Rd=1000, Rs=50 and Vgate=3V,
we obtain an Id-Vd curve which we define as the standard.
Now, let us
suppose that we do not know the Rd and Rs used to obtain that
particular Id-Vd curve. We give the calibrator an initial guess
(Rd=3000 and Rs=35 in this example). The results of this are shown below.
In this case,
the fit is very good -- the "standard" Id-Vd curve and the
fitted curve overlap. The following plots show the calibrator
converging on the correct values of Rd and Rs.
RESULTS
- Standard
Id-Vd and Fitted Id-Vd
- Rd and Rs
vs Iterations
- Error vs Iterations
DIAGNOSTICS
Unfortunately,
global optimization is very difficult to achieve. If the initial
guesses are too far away from the actual parameters, the calibrator
will happily find a local minimum. The next set of plots shows the
dependence of the RMS error (deviation from the "standard"
Id-Vd curve) on Rd and Rs. As shown, the RMS error does not depend
strongly on Rs, thus the calibrator is prone to converge on a value
of Rs quite far from 50.
- RMS error
as a function of Rd
- RMS error
as a function of Rs
- Rs and Rs
pairs used in the simplex
- RMS error
as a function of both Rd and Rs
PROGRAM
SETUP/FLOWCHART
The calibrator
uses the FMINS function in Matlab to perform the optimization. The
FMINS function requires only a function evaluation (no gradient
required) and is thus suitable for functions that are very costly to
compute. This function is defined in the file "medici.m"
which runs the Medici device simulator through a Perl script with the
desired values of Rd and Rs.
|