курсачи / Kursovaya_rabota_Tikhonov_P_M
.docxМИНИСТЕРСТВО ОБРАЗОВАНИЯ РОССИИ
Государственное образовательное учреждение
высшего профессионального образования
Санкт-Петербургский государственный электротехнический университет
«ЛЭТИ» им. В.И. Ульянова ( Ленина)
ФАКУЛЬТЕТ ЭЛЕКТРОНИКИ (ФЭЛ)
КАФЕДРА Радиотехнической электроники
КУРСОВАЯ РАБОТА (ПРОЕКТ)
По дисциплине: ПРОГРАММНЫЕ СРЕДСТВА МОДЕЛИРОВАНИЯ ЭЛЕКТРОННОЙ КОМПОНЕНТНОЙ БАЗЫ
На тему: Разработка модуля программы анализа электронного прибора
(указывается обобщенная тема)
Вариант №9
Выполнил |
Тихонов П.М. |
|
Оценка |
|
студент гр. № |
5201 |
|
Проверил |
|
|
|
|
|
(ФИО) |
|
(ФИО) |
|
Дата |
|
САНКТ-ПЕТЕРБУРГ
2019 г
ЗАДАНИЕ на курсовую работу
По дисциплине: ПРОГРАММНЫЕ СРЕДСТВА МОДЕЛИРОВАНИЯ ЭЛЕКТРОННОЙ КОМПОНЕНТНОЙ БАЗЫ
Вариант №9
Название курсовой работы: |
Модуль расчёта профиля легирования на основе диффузионной модели. |
Содержание работы: |
Разработка алгоритма и С++ - программы расчёта профиля легирования на основе диффузионной модели. |
Исходные данные: |
Параметры диффузионной модели. |
Результаты работы: |
1. Программа расчёта профиля легирования на основе диффузионной модели. 2. Методика тестирования и отладки программы. |
Литература: |
1. Internet. 2. Моделирование полупроводниковых приборов и технологических процессов. Последние достижения. Под ред. Д. Миллера, М.: Радио и связь, 1989. |
ВВЕДЕНИЕ
1. Цель и задача выполнения курсового проекта
Цель выполнения курсового проекта: Получение практических навыков программного моделирования электронной компонентной базы.
Задача выполнения курсового проекта: разработка алгоритма и С++ программы расчета технологической операции в соответствии с заданными темой работы и исходными данными.
2. Основные этапы разработки программ
Постановка задачи – является самым первым и наиболее ответственным этапом, поскольку, даже небольшая ошибка здесь может привести к тому, что вся дальнейшая работа окажется ненужной. Именно на этом этапе определяется вид входной информации, подлежащей обработке компьютером и то, что требуется получить после работы программы
Составление алгоритма
Программирование (кодирование) – перевод алгоритмически написанной модели на язык программирования
Отладка – поиск и устранение ошибок.
Тестирование – поиск и устранение несоответствий с начальной постановкой задачи и с алгоритмами, используемыми при решении. В случае необходимости, выбираются другие алгоритмы или вообще переделывается постановочная часть. После внесения всех изменений соответствующие пункты разработки проходятся заново.
Создание документации, помощи.
ПОСТАНОВКА ЗАДАЧИ
Задание:
Модуль расчёта профиля легирования на основе диффузионной модели.
Используемая модель:
Легирование на основе диффузионной модели из источника с ограниченной примеси.
В этом случае сначала в тонкий приповерхностный слой пластины вводят некоторое количество атомов диффузанта, а потом источник диффузанта отключают и атомы примеси перераспределяются по глубине пластины при неизменном их общем количестве. Первую стадию процесса называют «загонкой», вторую – разгонкой примеси.
Q – количество атомов примеси на единицу площади (задается на этапе «загонки»).
(1)
- распределение концентрации при ограниченном источнике,
где erfс (z) – дополнительная функция ошибок, близкая к экспоненциальной функции .
Рис. 1. Распределение примеси при диффузии из неограниченного (а) в ограниченного (б) источников для разных моментов времени
Распределение концентрации при ограниченном источнике (рис. 1, б):
. (2)
В данном случае распределение описывается функцией Гаусса, которая характерна нулевой начальной производной, наличием точки перегиба и почти экспоненциальным «хвостом» после этой точки.
Под глубиной диффузионного слоя (глубиной диффузии) понимают координату х=LN .
СОСТАВЛЕНИЕ АЛГОРИТМА
Исходные данные:
Количество атомов примеси на единицу площади, температура загонки, коэффициент диффузии при бесконечной температуре, энергия активации, время разгонки, число шагов по времени и координате.
Алгоритм:
Программа получает исходные данные
На основе полученных исходных данных программа выполняет расчет концентрации примеси внутри п.п. по методу двухстадийной диффузии.
ПРОГРАММИРОВАНИЕ
Программа была написана на языке программирования высшего уровня C++ в среде разработки Microsoft Visual C++ 2015.
#include <iostream>
#include <fstream>
#include <math.h>
#include <clocale>
#include <windows.h>
using namespace std;
int main()
{
setlocale(LC_CTYPE, "rus");
int n = 10, m = 200; //число строк и столбцов
int i, j;
float N[20][1000];
float D, D0, k = 1.38e-23, T , Q , Ea , t, x, tmax , xmax ;
ofstream fout;
cout << "\tПрограмма по расчету профиля легирования методом диффузии примесей\n";
cout << "\t\t\tПримерные значения для ввода:\n D0 = 1.6e-9, T = 1473, Q = 7e20, Ea = 7.36e-19, tmax = 3600, xmax = 0.001\n\n\n";
cout << "\t\t\tФормат чисел данных +-0.000000000e+-000\n\n\n";
cout << "\t\t\tВведите исходные параметры для расчетов:\n";
cout << "\tКоэффициент диффузии при бесконечной температуре D0 [см^2/с]:\t";
cin >> D0;
cin.ignore();
cout << "\tТемпературу при загонке T [К]:\t";
cin >> T;
cin.ignore();
cout << "\tЭнергию активации [Дж/моль]:\t";
cin >> Ea;
cin.ignore();
cout << "\tВведите поверхностную концетрацию примесей Q [м^-2]:\t";
cin >> Q;
cin.ignore();
cout << "\tВведите время разгонки t [c]:\t";
cin >> tmax;
cin.ignore();
cout << "\tВведите число шагов построения для t [c] (не более 10):\t";
cin >> n;
cin.ignore();
if (n > 10)
{
cout << "\n\n\n\t\tНе верно введеные данные.\n\t\tнажмите любую клавишу для выхода...";
cin.get();
return 0;
}
cout << "\tВведите глубину профиля x [cм] (не более 0.001):\t";
cin >> xmax;
cin.ignore();
cout << "\tВведите число шагов построения для x [c] (не более 100):\t";
cin >> m;
cin.ignore();
if (m > 100)
{
cout << "\n\n\n\t\tНе верно введеные данные.\n\t\tНажмите любую клавишу для выхода...";
cin.get();
return 0;
}
cout << "\n\n\n\t\tНажмите Enter для начала расчета...\n";
cin.get();
D = D0*exp(-Ea / (k*T));
t = tmax / n;
x = xmax / m;
fout.open("output.txt");
for (i = 0; i <= n; i++) //Цикл по сетке времени
{
if (i == 0)
{
fout << "\t";
for (j = 0; j < m; j++)
fout << x*j << "\t";
fout << "\n";
}
else
{
cout << "\tвремя разгонки:\t\t" << t*i << " [сек]\n"
<< "\tкоордината х [м]:\tконцентрация[м^-2]:\n";
fout << t*i << "\t";
for (j = 0; j < m; j++)
{
N[i][j] = Q / sqrt(3.14*D*i*t)*exp((-x*x*j*j) /
(2 * sqrt(D*t*i)));
if ((j*x) == 0)
{
if (N[i][j] >= 1e10)
cout << x*j << "\t\t\t" << N[i][j] << "\n";
fout << N[i][j] << "\t";
}
else
{
if (N[i][j] >= 1e10)
cout << x*j << "\t\t" << N[i][j] << "\n";
fout << N[i][j] << "\t";
}
}
cout << "\n\n";
fout << "\n";
}
}
fout.close();
cout << "*************************************************\nДанные записаны в файл output.txt.\n*************************************************\n\n";
system("pause");
return 0;
}
ОТЛАДКА И ТЕСТИРОВАНИЕ
В ходе отладки не было обнаружено ошибок в программе.
Тестирование программы произведем в программе Excel. Результаты тестирования должны показать, то что с ростом времени разгонки концентрация на поверхности должна уменьшатся, а на глубине наоборот возрастать.
Рис.2. График распределения концентрации по координате x, для разных времен разгонки.
Вывод
Алгоритм на языке С++, описывающий модель диффузионного легирования с поверхностного источника, был написан верно. Об этом можно судить из полученного графика для распределения концентрации по координате x, при разных временах разгонки. Они соответствуют теоретическим зависимостям.