1 /*****************************************************************************/
3 /* 8888888 88888888 88888888 */
6 /* 8 88888888 88888888 */
9 /* 888888 888888888 888888888 */
11 /* A Two-Dimensional General Purpose Semiconductor Simulator. */
13 /* GSS material database Version 0.4 */
14 /* Last update: July 23, 2007 */
18 /* NINT, No.69 P.O.Box, Xi'an City, China */
20 /*****************************************************************************/
22 // Material Type: Si(1-x)Ge(x). (in fact, use parameters for Si instead.)
27 class GSS_Mob_HP
: public PMIS_Mobility
30 // parameters for Analytic mobility
44 // parameters for HP high field modification
59 MUN_MIN
= 5.524000E+01*cm
*cm
/V
/s
;
60 MUN_MAX
= 1.429230E+03*cm
*cm
/V
/s
;
61 NREFN
= 1.072000E+17*pow(cm
,-3);
64 ALPHAN
= 7.300000E-01;
65 MUP_MIN
= 4.970000E+01*cm
*cm
/V
/s
;
66 MUP_MAX
= 4.793700E+02*cm
*cm
/V
/s
;
67 NREFP
= 1.606000E+17*pow(cm
,-3);
70 ALPHAP
= 7.000000E-01;
73 MUN0_HP
= 7.740000E+02*cm
*cm
/V
/s
;
74 ECN_HP
= 5.500000E+05*V
/cm
;
75 VSN_HP
= 1.036000E+07*cm
/s
;
76 VCN_HP
= 4.900000E+06*cm
/s
;
78 MUP0_HP
= 2.500000E+02*cm
*cm
/V
/s
;
79 ECP_HP
= 2.780000E+05*V
/cm
;
80 VSP_HP
= 1.200000E+07*cm
/s
;
81 VCP_HP
= 2.928000E+06*cm
/s
;
83 NREF_HP
= 5.000000E+17*pow(cm
,-3);
87 //---------------------------------------------------------------------------
88 // Electron low field mobility, Analytic model
89 PetscScalar
ElecMobLowField(const PetscScalar
&Tl
) const
91 PetscScalar Na
= ReadDopingNa();
92 PetscScalar Nd
= ReadDopingNd();
93 return MUN_MIN
+(MUN_MAX
*pow(Tl
/T300
,NUN
)-MUN_MIN
)/ \
94 (1+pow(Tl
/T300
,XIN
)*pow((Na
+Nd
)/NREFN
,ALPHAN
));
96 AutoDScalar
ElecMobLowField(const AutoDScalar
&Tl
) const
98 PetscScalar Na
= ReadDopingNa();
99 PetscScalar Nd
= ReadDopingNd();
100 return MUN_MIN
+(MUN_MAX
*pow(Tl
/T300
,NUN
)-MUN_MIN
)/ \
101 (1+pow(Tl
/T300
,XIN
)*pow((Na
+Nd
)/NREFN
,ALPHAN
));
104 //---------------------------------------------------------------------------
105 // Hole low field mobility, Analytic model
106 PetscScalar
HoleMobLowField(const PetscScalar
&Tl
) const
108 PetscScalar Na
= ReadDopingNa();
109 PetscScalar Nd
= ReadDopingNd();
110 return MUP_MIN
+(MUP_MAX
*pow(Tl
/T300
,NUP
)-MUP_MIN
)/ \
111 (1+pow(Tl
/T300
,XIP
)*pow((Na
+Nd
)/NREFP
,ALPHAP
));
113 AutoDScalar
HoleMobLowField(const AutoDScalar
&Tl
) const
115 PetscScalar Na
= ReadDopingNa();
116 PetscScalar Nd
= ReadDopingNd();
117 return MUP_MIN
+(MUP_MAX
*pow(Tl
/T300
,NUP
)-MUP_MIN
)/ \
118 (1+pow(Tl
/T300
,XIP
)*pow((Na
+Nd
)/NREFP
,ALPHAP
));
123 //---------------------------------------------------------------------------
125 PetscScalar
ElecMob(const PetscScalar
&p
, const PetscScalar
&n
, const PetscScalar
&Tl
,
126 const PetscScalar
&Ep
, const PetscScalar
&Et
, const PetscScalar
&Tn
) const
128 PetscScalar Ntotal
= ReadDopingNa()+ReadDopingNd();
130 if(Ntotal
> NREF_HP
) mu0
=ElecMobLowField(Tl
);
131 else mu0
= MUN0_HP
/(1+Et
/ECN_HP
);
132 PetscScalar alpha
= mu0
*Ep
/VCN_HP
;
133 PetscScalar beta
= mu0
*Ep
/VSN_HP
;
134 return mu0
/sqrt(1+alpha
*alpha
/(alpha
+GN_HP
)+beta
*beta
);
136 AutoDScalar
ElecMob(const AutoDScalar
&p
, const AutoDScalar
&n
, const AutoDScalar
&Tl
,
137 const AutoDScalar
&Ep
, const AutoDScalar
&Et
, const AutoDScalar
&Tn
) const
139 PetscScalar Ntotal
= ReadDopingNa()+ReadDopingNd();
141 if(Ntotal
> NREF_HP
) mu0
=ElecMobLowField(Tl
);
142 else mu0
= MUN0_HP
/(1+Et
/ECN_HP
);
143 AutoDScalar alpha
= mu0
*Ep
/VCN_HP
;
144 AutoDScalar beta
= mu0
*Ep
/VSN_HP
;
145 return mu0
/sqrt(1+alpha
*alpha
/(alpha
+GN_HP
)+beta
*beta
);
148 //---------------------------------------------------------------------------
150 PetscScalar
HoleMob (const PetscScalar
&p
, const PetscScalar
&n
, const PetscScalar
&Tl
,
151 const PetscScalar
&Ep
, const PetscScalar
&Et
, const PetscScalar
&Tp
) const
153 PetscScalar Ntotal
= ReadDopingNa()+ReadDopingNd();
155 if(Ntotal
> NREF_HP
) mu0
=HoleMobLowField(Tl
);
156 else mu0
= MUP0_HP
/(1+Et
/ECP_HP
);
157 PetscScalar alpha
= mu0
*Ep
/VCP_HP
;
158 PetscScalar beta
= mu0
*Ep
/VSP_HP
;
159 return mu0
/sqrt(1+alpha
*alpha
/(alpha
+GP_HP
)+beta
*beta
);
161 AutoDScalar
HoleMob(const AutoDScalar
&p
, const AutoDScalar
&n
, const AutoDScalar
&Tl
,
162 const AutoDScalar
&Ep
, const AutoDScalar
&Et
, const AutoDScalar
&Tp
) const
164 PetscScalar Ntotal
= ReadDopingNa()+ReadDopingNd();
166 if(Ntotal
> NREF_HP
) mu0
=HoleMobLowField(Tl
);
167 else mu0
= MUP0_HP
/(1+Et
/ECP_HP
);
168 AutoDScalar alpha
= mu0
*Ep
/VCP_HP
;
169 AutoDScalar beta
= mu0
*Ep
/VSP_HP
;
170 return mu0
/sqrt(1+alpha
*alpha
/(alpha
+GP_HP
)+beta
*beta
);
175 GSS_Mob_HP(const PMIS_Environment
&env
):PMIS_Mobility(env
)
188 /*---------------------------------------------------------------
189 * the interface function called by material databse controller
190 * use Analytic model as default mobility model
195 PMIS_Mobility
* PMIS_SiGe_Mob_HP (const PMIS_Environment
& env
)
197 return new GSS_Mob_HP(env
);