Скачиваний:
6
Добавлен:
28.04.2022
Размер:
50.99 Кб
Скачать

МИНИСТЕРСТВО ОБРАЗОВАНИЯ РОССИИ

Государственное образовательное учреждение

высшего профессионального образования

Санкт-Петербургский государственный электротехнический университет

«ЛЭТИ» им. В.И. Ульянова ( Ленина)

ФАКУЛЬТЕТ ЭЛЕКТРОНИКИ (ФЭЛ)

КАФЕДРА Радиотехнической электроники

КУРСОВАЯ РАБОТА (ПРОЕКТ)

По дисциплине: ПРОГРАММНЫЕ СРЕДСТВА МОДЕЛИРОВАНИЯ ЭЛЕКТРОННОЙ КОМПОНЕНТНОЙ БАЗЫ

На тему: Разработка модуля программы анализа электронного прибора

(указывается обобщенная тема)

Вариант №9

Выполнил

Тихонов П.М.

Оценка

студент гр. №

5201

Проверил

(ФИО)

(ФИО)

Дата

САНКТ-ПЕТЕРБУРГ

2019 г

ЗАДАНИЕ на курсовую работу

По дисциплине: ПРОГРАММНЫЕ СРЕДСТВА МОДЕЛИРОВАНИЯ ЭЛЕКТРОННОЙ КОМПОНЕНТНОЙ БАЗЫ

Вариант №9

Название курсовой работы:

Модуль расчёта профиля легирования на основе диффузионной модели.

Содержание работы:

Разработка алгоритма и С++ - программы расчёта профиля легирования на основе диффузионной модели.

Исходные данные:

Параметры диффузионной модели.

Результаты работы:

1. Программа расчёта профиля легирования на основе диффузионной модели. 2. Методика тестирования и отладки программы.

Литература:

1. Internet.

2. Моделирование полупроводниковых приборов и технологических процессов. Последние достижения. Под ред. Д. Миллера, М.: Радио и связь, 1989.

ВВЕДЕНИЕ

1. Цель и задача выполнения курсового проекта

Цель выполнения курсового проекта: Получение практических навыков программного моделирования электронной компонентной базы.

Задача выполнения курсового проекта: разработка алгоритма и С++ программы расчета технологической операции в соответствии с заданными темой работы и исходными данными.

2. Основные этапы разработки программ

  1. Постановка задачи – является самым первым и наиболее ответственным этапом, поскольку, даже небольшая ошибка здесь может привести к тому, что вся дальнейшая работа окажется ненужной. Именно на этом этапе определяется вид входной информации, подлежащей обработке компьютером и то, что требуется получить после работы программы

  2. Составление алгоритма

  3. Программирование (кодирование) – перевод алгоритмически написанной модели на язык программирования

  4. Отладка – поиск и устранение ошибок.

  5. Тестирование – поиск и устранение несоответствий с начальной постановкой задачи и с алгоритмами, используемыми при решении. В случае необходимости, выбираются другие алгоритмы или вообще переделывается постановочная часть. После внесения всех изменений соответствующие пункты разработки проходятся заново.

  6. Создание документации, помощи.

ПОСТАНОВКА ЗАДАЧИ

  1. Задание:

Модуль расчёта профиля легирования на основе диффузионной модели.

  1. Используемая модель:

Легирование на основе диффузионной модели из источника с ограниченной примеси.

В этом случае сначала в тонкий приповерхностный слой пластины вводят некоторое количество атомов диффузанта, а потом источник диффузанта отключают и атомы примеси перераспределяются по глубине пластины при неизменном их общем количестве. Первую стадию процесса называют «загонкой», вторую – разгонкой примеси.

Q – количество атомов примеси на единицу площади (задается на этапе «загонки»).

(1)

- распределение концентрации при ограниченном источнике,

где erfс (z) – дополнительная функция ошибок, близкая к экспоненциальной функции  .

 

Рис. 1. Распределение примеси при диффузии из неограниченного (а) в ограниченного (б) источников для разных моментов времени

Распределение концентрации при ограниченном источнике (рис. 1, б):

. (2)

В данном случае распределение описывается функцией Гаусса, которая характерна нулевой начальной производной, наличием точки перегиба и почти экспоненциальным «хвостом» после этой точки.

Под глубиной диффузионного слоя (глубиной диффузии) понимают координату х=LN .

СОСТАВЛЕНИЕ АЛГОРИТМА

  1. Исходные данные:

Количество атомов примеси на единицу площади, температура загонки, коэффициент диффузии при бесконечной температуре, энергия активации, время разгонки, число шагов по времени и координате.

  1. Алгоритм:

  1. Программа получает исходные данные

  2. На основе полученных исходных данных программа выполняет расчет концентрации примеси внутри п.п. по методу двухстадийной диффузии.

ПРОГРАММИРОВАНИЕ

Программа была написана на языке программирования высшего уровня 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, при разных временах разгонки. Они соответствуют теоретическим зависимостям.

Соседние файлы в папке курсачи