The complete device descriptions including the simulation grid are generated using the device generator Makedevice. A short description of this tool can be found in Appendix B. Further information is given in the MINIMOS-NT documentation [6]. A listing of the Makedevice input deck is given below. Depending on which optimization approach is taken there will be further entries in the Knots (for two-dimensional doping characterization) or Peak section (for Gaussian functions) which are left empty here and will be listed in Chapter 4. Parameters between ``('' and ``)'' are template symbols and will be substituted by the optimization framework as described in Chapter 4. The parameter type, for example, determines whether the device is an NMOS or PMOS transistor. By this method the same input deck can be used for the generation of both device types.
templatePif = "$VPROJECT/mkdev/template.pif"; outputPif = "makedevice.pif"; aux type = "<(type)>"; // "NMOS" or "PMOS" Geometry { gateLength = <(L)> um; // gate length aux L = gateLength; oxideThickness = <(Tox)> nm; // oxide thickness sourceWellLength = 1./3.*L; // length of the Source contact drainWellLength = 1./3.*L; // length of the Drain contact sourceSpacerLength = 1./3.*L; // length of the Source spacer drainSpacerLength = 1./3.*L; // length of the Drain spacer bulkThickness = 10.*L; // bulk thickness contactThickness = 0.2 um; // contact thickness soi = no; gateSemiconductor = no; } Doping { NBulkAcceptor = if (~type == "NMOS", pow10(<(Nsub)>) * 1"cm^-3", 1e12 "cm^-3"); NBulkDonor = if (~type == "PMOS", pow10(<(Nsub)>) * 1"cm^-3", 1e12 "cm^-3"); Knots { . . . } Peak { Peak1 { // source aux L = ~Geometry.gateLength; aux SW = ~Geometry.sourceWellLength; aux SG = ~Geometry.sourceSpacerLength; on = yes; // switch on or off mode = "gauss"; // gauss, cosine, or pearson mode dopType = if (~type == "NMOS", "donor", "acceptor"); // acceptor or donor doping N = 1e20 "cm^-3"; // peak doping value x = 0 um; // x-position of the peak xLength = SW + SG; // x-length of the peak, must be >= 0 y = 0 um; // y-position of the peak yLength = 0 um; // y-length of the peak, must be >= 0 xSigLeft = L/30.; // left x-sigma of the peak xSigRight = xSigLeft; // right x-sigma of the peak ySigUpper = L/15.; // upper y-sigma of the peak ySigLower = ySigUpper; // lower y-sigma of the peak } Peak2 : Peak1 { // drain x = SW + SG + L; // x-position of the peak } . . . } } Grid { Dop { useSimGrid = yes; // whether to use the simulation grid for the doping grid } Sim { aux L = ~Geometry.gateLength; aux SW = ~Geometry.sourceWellLength; aux SG = ~Geometry.sourceSpacerLength; aux BT = ~Geometry.bulkThickness; name = "SimulationGrid"; // simulation grid name vNumberOx = 2; // number of vertical simulation grid lines // in the oxide vIncCont = 1.6; // incremental factor in the contact vDistCh = 0.1 nm; // distance of vertical simulation grid // lines in the channel region vNumberCh = 1; // number of vertical simulation grid lines // in the channel region vInc = 1.3; // vertical incremental factor elsewhere vDistMin = L/100.; lDistMin = L/100.; vDistMax = BT; // maximum distance of vertical simulation // grid lines chBorderLeft = SW+SG+L/11.; // left border of the channel region chBorderRight = SW+SG+L-L/11.; // right border of the channel region lDistChBorder = L/80.; // distance of lateral simulation grid lines // at the left or right channel border lDistChMiddle = L/5.; // distance of lateral simulation grid lines // in the middle of the channel lDistMax = (SW + SG)/5.; // maximum distance of // lateral simulation grid lines lNumberKnots = 48; // minimum number of lateral grid lines // in the knots region vNumberKnots = 15; // minimum number of vertical grid lines // in the knots region } }