Моделирование сопротивлений диффузионных и ионно-легированных слоев.
Металлургическая граница p-n перехода Xj в Si структуре с диффузионным слоем определяется из уравнения:
Где
Диффузантом в моей задаче был B,
Также дана
Помимо расчета Xj наша модель должна считать также удельное сопротивление ρs;
μ - подвижность основных носителей заряда.
μ(N) рассчитывается по формуле Зильдербергера для T=300K;
Для электронов;
Для
дырок.
Входными переменными являются N0-концентрация, Nb-концентрация в подложке, T-температура, t-время. Выходными переменными являются Xj-глубина, ros – сопротивление.
Глобальные переменные N0_,Nb_,T_,t_ в нашей задаче нужны для того, чтобы значения величин попали в левую часть уравнения.
Ниже представлена наша модель:
#include <iostream.h>
#include <conio.h>
#include "root.h"
#include "integral.h"
double Left(double );
double N0_, Nb_, T_, t_;
double f(double x);
void Model(double N0, double Nb, double T, double t,
double& xj, double& ros)
{
//описание данных
int Nckl,Err;
double epsX, epsF, Fx;
//изменение глобальных переменных
N0_=N0; Nb_=Nb; T_=T; t_=t;
//задание параметров ньютоновских итераций
epsX=1E-10;
epsF=1E+09;
xj=0;
//расчет xj
Err=RootNewton(Left,epsX,epsF,xj,Fx,Nckl);
if(Err!=0) { xj=0; ros=0; };
//расчет pos
ros=1/SdxSimps(f,0,xj,100);
//перевод в микрометры
xj=1E+04*xj;
}
#include <math.h>
double erfc(double);
double Left(double xj)
{
// описание данных
double L,D,D0,dE,TK;
double k=8.61738E-05;
// задание параметров
D0=0.555;
dE=3.42;
// расчет коэффициента диффузии D
TK=T_+273;
D=D0*exp(-dE/(k*TK));
// расчет характеристической длины L
L=2*sqrt(D*60*t_);
// расчет левой части
return N0_*erfc(xj/L)-Nb_;
}
double f(double x)
{
//описание данных
const double q=1.602E-19;
double Nsum, N, mob;
//расчет N(x)
N=Left(x);
//расчет подвижности
Nsum=Left(x)+2*Nb_;
mob=45+415/(1+pow(Nsum/2.23E+17,0.72));
return q*N*mob;
}
управляющая программа:
#include <iostream.h>
#include <conio.h>
void Model(double N0, double Nb, double T, double t,
double& xj, double& ros);
void main()
{
//описание данных
double N0,Nb,T,t,Xj,ros;
//задание параметров
N0=1E+20;
Nb=1E+15;
T=1100;
t=60;
//вызов функции
Model( N0, Nb, T,t,Xj,ros);
//вывод результата
clrscr();
cout<<"Xj = "<<Xj<<" мкм"<<endl;
cout<<"ros = "<<ros<<" ом*кв"<<endl;
getch();
}
рис.1. Зависимость Xj от T.
рис.2. Зависимость ros от T.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.