Files
algorithm/coursework/report.tex
2025-01-03 14:33:57 +03:00

502 lines
23 KiB
TeX
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

\documentclass[a4paper, final]{article}
%\usepackage{literat} % Нормальные шрифты
\usepackage[14pt]{extsizes} % для того чтобы задать нестандартный 14-ый размер шрифта
\usepackage[T2A]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[russian]{babel}
\usepackage{amsmath}
\usepackage[left=25mm, top=20mm, right=20mm, bottom=20mm, footskip=10mm]{geometry}
\usepackage{ragged2e} %для растягивания по ширине
\usepackage{setspace} %для межстрочного интервала
\usepackage{moreverb} %для работы с листингами
\usepackage{indentfirst} % для абзацного отступа
\usepackage{moreverb} %для печати в листинге исходного кода программ
\usepackage{graphicx}
\usepackage{tabularx}
\usepackage{amssymb}
\usepackage{array}
\usepackage{multirow}
\renewcommand\verbatimtabsize{4\relax}
\renewcommand\listingoffset{0.2em} %отступ от номеров строк в листинге
\renewcommand{\arraystretch}{1.4} % изменяю высоту строки в таблице
\usepackage[font=small, singlelinecheck=false, justification=centering, format=plain, labelsep=period]{caption} %для настройки заголовка таблицы
\usepackage{listings} %листинги
\usepackage{xcolor} % цвета
\usepackage{hyperref}% для гиперссылок
\usepackage{enumitem} %для перечислений
\newtheorem{theorem}{Теорема} % Создание нового окружения для теорем
\setlist[enumerate,itemize]{leftmargin=1.2cm} %отступ в перечислениях
\hypersetup{colorlinks,
allcolors=[RGB]{010 090 200}} %красивые гиперссылки (не красные)
% подгружаемые языки — подробнее в документации listings (это всё для листингов)
\lstloadlanguages{ C++}
% включаем кириллицу и добавляем кое−какие опции
\lstset{tabsize=2,
breaklines,
basicstyle=\footnotesize,
columns=fullflexible,
flexiblecolumns,
numbers=left,
numberstyle={\footnotesize},
keywordstyle=\color{blue},
inputencoding=cp1251,
extendedchars=true
}
\lstdefinelanguage{MyC}{
language=C++,
% ndkeywordstyle=\color{darkgray}\bfseries,
% identifierstyle=\color{black},
% morecomment=[n]{/**}{*/},
% commentstyle=\color{blue}\ttfamily,
% stringstyle=\color{red}\ttfamily,
% morestring=[b]",
% showstringspaces=false,
% morecomment=[l][\color{gray}]{//},
keepspaces=true,
escapechar=\%,
texcl=true
}
\textheight=24cm % высота текста
\textwidth=16cm % ширина текста
\oddsidemargin=0pt % отступ от левого края
\topmargin=-1.5cm % отступ от верхнего края
\parindent=24pt % абзацный отступ
\parskip=5pt % интервал между абзацами
\tolerance=2000 % терпимость к "жидким" строкам
\flushbottom % выравнивание высоты страниц
% Настройка листингов
\lstset{
language=C++,
extendedchars=\true,
inputencoding=utf8,
keepspaces=true,
% captionpos=b,
}
\begin{document} % начало документа
% НАЧАЛО ТИТУЛЬНОГО ЛИСТА
\begin{center}
\hfill \break
\hfill \break
\normalsize{МИНИСТЕРСТВО НАУКИ И ВЫСШЕГО ОБРАЗОВАНИЯ РОССИЙСКОЙ ФЕДЕРАЦИИ\\
федеральное государственное автономное образовательное учреждение высшего образования «Санкт-Петербургский политехнический университет Петра Великого»\\[10pt]}
\normalsize{Институт компьютерных наук и кибербезопасности}\\[10pt]
\normalsize{Высшая школа технологий искусственного интеллекта}\\[10pt]
\normalsize{Направление: 02.03.01 <<Математика и компьютерные науки>>}\\
\hfill \break
\hfill \break
\hfill \break
\hfill \break
\large{Отчет по курсовой работе}\\
\large{<<Синтез функциональной схемы простейших часов>>}\\
\large{по дисциплине <<Теория алгоритмов>>}\\
\large{Вариант 25}\\
\hfill \break
\hfill \break
\end{center}
\small{
\begin{tabular}{lrrl}
\!\!\!Студент, & \hspace{2cm} & & \\
\!\!\!группы 5130201/20102 & \hspace{2cm} & \underline{\hspace{3cm}} &Тищенко А. А. \\\\
\!\!\!Преподаватель & \hspace{2cm} & \underline{\hspace{3cm}} & Востров А. В. \\\\
&&\hspace{4cm}
\end{tabular}
\begin{flushright}
<<\underline{\hspace{1cm}}>>\underline{\hspace{2.5cm}} 2024г.
\end{flushright}
}
\hfill \break
% \hfill \break
\begin{center} \small{Санкт-Петербург, 2024} \end{center}
\thispagestyle{empty} % выключаем отображение номера для этой страницы
% КОНЕЦ ТИТУЛЬНОГО ЛИСТА
\newpage
\tableofcontents
\newpage
\section*{Введение}
\addcontentsline{toc}{section}{Введение}
Современные дискретные системы управления представляют собой основу автоматизированных и цифровых технологий, находящих применение во многих сферах жизни: от бытовой электроники до сложных промышленных и научных систем. Важной частью их проектирования является синтез функциональных схем.
В данной курсовой работе, в соответствии с вариантом 25 (2110110), рассматривается проектирование и синтез функциональной схемы электронных часов со следующими функциями:
\begin{itemize}
\item Отображение и корректировка (в дополнение к часам и минутам): дня недели;
\item Режим работы часов: 24-х часовой;
\item Отключение индикаторов с целью экономии электроэнергии;
\item Секундомер: простой (сброс - запуск - останов);
\item Звуковая сигнализация: каждый час в течение четырёх секунд.
\end{itemize}
Задачи курсовой работы включают:
\begin{enumerate}
\item Построить граф управляющего автомата часов и дать пояснения к нему. Пояснения предполагают
описание логического смысла каждого состояния, перечень визуальной информации, выводимой на
индикаторы, а также порядок использования всех тех возможностей часов, которые перечислены в задании.
\item Изобразить общую структурную схему электронных часов с указанием всех необходимых управляющих
микрокоманд (импульсных и потенциальных). Функции каждого блока структурной схемы должны быть
пояснены. Должны быть даны также пояснения функции всех управляющих микрокоманд.
\item Провести кодирование входных и выходных воздействий и состояний автомата.
\item Построить минимизацию функций блоков управления.
\item Построить общую функциональную схему. При этом необходимо четко описать алгоритм работы и уметь
объяснить принцип проектирования всех блоков.
\item Определить (приблизительно) площадь микросхемы, реализующей построенную функциональную схему при современной плотности компоновки транзисторов.
\end{enumerate}
\newpage
\section {Математическое описание}
\subsection{Модель конечного автомата}
Конечный автомат — математическая модель дискретного устройства, которая описывается набором:
\[
A = (S, \Sigma, Y, s_0, \delta, \lambda),
\]
где:
\begin{itemize}
\item \( S \) — конечное множество состояний;
\item \( \Sigma \) — конечное множество входных сигналов;
\item \( Y \) — конечное множество выходных сигналов;
\item \( s_0 \) — начальное состояние \((s_0 \in S)\);
\item \( \delta: S \times \Sigma \to S \) — функция переходов;
\item \( \lambda: S \times \Sigma \to Y \) — функция выходов.
\end{itemize}
Конечный автомат работает в дискретные моменты времени, и в момент \( t = 0 \) автомат всегда находится в состоянии \( s_0 \).
\subsection{Реализация графа управляющего автомата}
\subsubsection{Граф управляющего автомата}
На Рис.~\ref{fig:automat} представлен граф переходов управляющего конечного автомата, который обеспечивает функционал часов, соответствующий варианту курсовой работы. Этому графу переходов соответствует таблица переходов~\ref{tbl:steps}.
\begin{figure}[h!]
\centering
\includegraphics[width=1\linewidth]{img/automat.png}
\caption{Граф переходов управляющего конечного автомата.}
\label{fig:automat}
\end{figure}
\begin{table}[h!]
\centering
\caption{Таблица переходов управляющего автомата.}
\label{tbl:steps}
\footnotesize
\begin{tabular}{|c|c|c|c|}
\hline
\textbf{Вход} & \textbf{Текущее состояние} & \textbf{Следующее состояние} & \textbf{Выход} \\
\hline
a & \textit{$s_0$: time} & \textit{$s_1$: minutes} & $z_0$ \\
\hline
b & \textit{$s_0$: time} & \textit{$s_4$: sec-stop} & $z_0$ \\
\hline
c & \textit{$s_0$: time} & \textit{$s_6$: display-off} & $z_0$ \\
\hline
a & \textit{$s_1$: minutes} & \textit{$s_2$: hours} & $z_0$ \\
\hline
b & \textit{$s_1$: minutes} & \textit{$s_1$: minutes} & $z_1$ \\
\hline
c & \textit{$s_1$: minutes} & \textit{$s_1$: minutes} & $z_0$ \\
\hline
a & \textit{$s_2$: hours} & \textit{$s_3$: weekday} & $z_0$ \\
\hline
b & \textit{$s_2$: hours} & \textit{$s_2$: hours} & $z_2$ \\
\hline
c & \textit{$s_2$: hours} & \textit{$s_2$: hours} & $z_0$ \\
\hline
a & \textit{$s_3$: weekday} & \textit{$s_0$: time} & $z_0$ \\
\hline
b & \textit{$s_3$: weekday} & \textit{$s_3$: weekday} & $z_3$ \\
\hline
c & \textit{$s_3$: weekday} & \textit{$s_3$: weekday} & $z_0$ \\
\hline
a & \textit{$s_4$: sec-stop} & \textit{$s_5$: sec-run} & $z_0$ \\
\hline
b & \textit{$s_4$: sec-stop} & \textit{$s_4$: sec-stop} & $z_4$ \\
\hline
c & \textit{$s_4$: sec-stop} & \textit{$s_4$: sec-stop} & $z_0$ \\
\hline
a & \textit{$s_5$: sec-run} & \textit{$s_4$: sec-stop} & $z_0$ \\
\hline
b & \textit{$s_5$: sec-run} & \textit{$s_0$: time} & $z_4$ \\
\hline
c & \textit{$s_5$: sec-run} & \textit{$s_5$: sec-run} & $z_0$ \\
\hline
a & \textit{$s_6$: display-off} & \textit{$s_6$: display-off} & $z_0$ \\
\hline
b & \textit{$s_6$: display-off} & \textit{$s_6$: display-off} & $z_0$ \\
\hline
c & \textit{$s_6$: display-off} & \textit{$s_0$: time} & $z_0$ \\
\hline
\end{tabular}
\end{table}
\begin{table}[h!]
\centering
\caption{Таблица истинности для F.}
\label{tbl:truth-f}
\footnotesize
\begin{tabularx}{\textwidth}{|X|X|X|X|X|X|X|X|X|X|X|}
\hline
\multicolumn{2}{|c|}{\textbf{Вход}} &
\multicolumn{3}{c|}{\textbf{Текущее состояние}} &
\multicolumn{3}{c|}{\textbf{Следующее состояние}} &
\multicolumn{3}{c|}{\textbf{Выход}} \\
\hline
$x_1$ & $x_2$ & $q_1$ & $q_2$ & $q_3$ & $Q_1$ & $Q_2$ & $Q_3$ & $y_1$ & $y_2$ & $y_3$ \\
\hline
0 & 0 & 0 & 0 & 0 & 0 & 0 & 1 & 0 & 0 & 0 \\
\hline
0 & 1 & 0 & 0 & 0 & 1 & 0 & 0 & 0 & 0 & 0 \\
\hline
1 & 0 & 0 & 0 & 0 & 1 & 1 & 0 & 0 & 0 & 0 \\
\hline
0 & 0 & 0 & 0 & 1 & 0 & 1 & 0 & 0 & 0 & 0 \\
\hline
0 & 1 & 0 & 0 & 1 & 0 & 0 & 1 & 0 & 0 & 1 \\
\hline
1 & 0 & 0 & 0 & 1 & 0 & 0 & 1 & 0 & 0 & 0 \\
\hline
0 & 0 & 0 & 1 & 0 & 0 & 1 & 1 & 0 & 0 & 0 \\
\hline
0 & 1 & 0 & 1 & 0 & 0 & 1 & 0 & 0 & 1 & 0 \\
\hline
1 & 0 & 0 & 1 & 0 & 0 & 1 & 0 & 0 & 0 & 0 \\
\hline
0 & 0 & 0 & 1 & 1 & 0 & 0 & 0 & 0 & 0 & 0 \\
\hline
0 & 1 & 0 & 1 & 1 & 0 & 1 & 1 & 0 & 1 & 1 \\
\hline
1 & 0 & 0 & 1 & 1 & 0 & 1 & 1 & 0 & 0 & 0 \\
\hline
0 & 0 & 1 & 0 & 0 & 1 & 0 & 1 & 0 & 0 & 0 \\
\hline
0 & 1 & 1 & 0 & 0 & 1 & 0 & 0 & 1 & 0 & 0 \\
\hline
1 & 0 & 1 & 0 & 0 & 1 & 0 & 0 & 0 & 0 & 0 \\
\hline
0 & 0 & 1 & 0 & 1 & 1 & 0 & 0 & 0 & 0 & 0 \\
\hline
0 & 1 & 1 & 0 & 1 & 0 & 0 & 0 & 1 & 0 & 0 \\
\hline
1 & 0 & 1 & 0 & 1 & 1 & 0 & 1 & 0 & 0 & 0 \\
\hline
0 & 0 & 1 & 1 & 0 & 1 & 1 & 0 & 0 & 0 & 0 \\
\hline
0 & 1 & 1 & 1 & 0 & 1 & 1 & 0 & 0 & 0 & 0 \\
\hline
1 & 0 & 1 & 1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\
\hline
\end{tabularx}
\end{table}
\subsubsection{Состояния}
Всего было выделено 7 состояний ($S = \{s_0, s_1, s_2, s_3, s_4, s_5, s_6, s_7\}$) со следующими значениями:
\begin{enumerate}
\item \textit{$s_0$: time} -- состояние обычной работы часов, на индикаторах отображаются текущее время (часы и минуты) и день недели;
\item \textit{$s_1$: minutes} -- состояние корректировки минут, отображаются только минуты, остальные индикаторы отключены;
\item \textit{$s_2$: hours} -- состояние корректировки часов, отображаются только часы, остальные индикаторы отключены;
\item \textit{$s_3$: weekday} -- состояние корректировки дня недели, отображается только день недели, все остальные индикаторы отключены;
\item \textit{$s_4$: sec-stop} -- состояние остановленного секундомера, индикатор дня недели отключен, вместо текущего времени выводится последнее время остановки секундомера (вместо часов выводятся минуты, а вместо минут -- секунды);
\item \textit{$s_5$: sec-run} -- состояние запущенного секундомера, индикатор дня недели отключён, вместо текущего времени выводится время работы секундомера (вместо часов выводятся минуты, а вместо минут -- секунды);
\item \textit{$s_6$: display-off} -- состояние, при котором все индикаторы отключены для экономии электроэнергии, но при этому часы продолжают отсчёт времени.
\end{enumerate}
Двоичные коды состояний представлены в таблице~\ref{tbl:states}.
\begin{table}[h!]
\centering
\caption{Коды состояний.}
\label{tbl:states}
\footnotesize
\begin{tabular}{|c|c|}
\hline
\textbf{Состояние} & \textbf{Код} \\
\hline
\textit{$s_0$: time} & 000 \\
\hline
\textit{$s_1$: minutes} & 001 \\
\hline
\textit{$s_2$: hours} & 010 \\
\hline
\textit{$s_3$: weekday} & 011 \\
\hline
\textit{$s_4$: sec-stop} & 100 \\
\hline
\textit{$s_5$: sec-run} & 101 \\
\hline
\textit{$s_6$: display-off} & 110 \\
\hline
\end{tabular}
\end{table}
\subsubsection{Входы}
На часах предполагается наличие трёх кнопок: $a$, $b$ и $c$. Каждой кнопке соответствует отдельный входной сигнал, таким образом $\Sigma = \{a, b, c\}$. Коды входных сигналов представлены в таблице~\ref{tbl:inputs}.
\begin{table}[h!]
\centering
\caption{Коды входных сигналов.}
\label{tbl:inputs}
\footnotesize
\begin{tabular}{|c|c|}
\hline
\textbf{Входной сигнал/кнопка} & \textbf{Код} \\
\hline
$a$ & 00 \\
\hline
$b$ & 01 \\
\hline
$c$ & 10 \\
\hline
\end{tabular}
\end{table}
\subsubsection{Выходы}
Было выделено следующее множество выходных сигналов: $Y = \{z_0, z_1, z_2, z_3, z_4\}$. Их назначения и коды представлены в таблице~\ref{tbl:outputs}.
\begin{table}[h!]
\centering
\caption{Коды импульсных выходных сигналов.}
\label{tbl:outputs}
\footnotesize
\begin{tabular}{|c|c|c|}
\hline
\textbf{Выходной сигнал} & \textbf{Значение} & \textbf{Код} \\
\hline
$z_0$ & Отсутствие реакции & 000 \\
\hline
$z_1$ & Увеличение минут на 1 & 001 \\
\hline
$z_2$ & Увеличение часов на 1 & 010 \\
\hline
$z_3$ & Следующий день недели & 011 \\
\hline
$z_4$ & Сброс секундомера & 100 \\
\hline
\end{tabular}
\end{table}
\subsubsection{Функции переходов и выходов}
\subsubsection{Управляющие воздействия}
\begin{table}[h!]
\centering
\caption{Импульсные микрокоманды.}
\footnotesize
\begin{tabular}{|c|c|c|}
\hline
\textbf{Обозначение} & \textbf{Микрокоманда} & \textbf{Код на выходе автомата} \\
\hline
$i_1$ & Увеличение минут на 1 & 001 \\
\hline
$i_2$ & Увеличение часов на 1 & 010 \\
\hline
$i_3$ & Следующий день недели & 011 \\
\hline
$i_4$ & Сброс секундомера & 100 \\
\hline
\end{tabular}
\end{table}
\begin{table}[h!]
\centering
\caption{Потенциальные микрокоманды.}
\footnotesize
\begin{tabular}{|c|c|c|}
\hline
\textbf{Обозначение} & \textbf{Микрокоманда} \\
\hline
$L_1$ & Отображение минут \\
\hline
$L_2$ & Отображение часов \\
\hline
$L_3$ & Отображение дня недели \\
\hline
$L_4$ & Отображение текущего времени \\
\hline
$L_5$ & Работа тактового генератора секундомера \\
\hline
\end{tabular}
\end{table}
\begin{table}[h!]
\centering
\caption{Потенциальные микрокоманды для каждого состояния.}
\footnotesize
\begin{tabularx}{0.9\textwidth}{|c|X|X|X|X|X|X|X|X|X|}
\hline
\textbf{Состояние} & \multicolumn{3}{|c|}{\textbf{Код состояния}} & \multicolumn{5}{|c|}{\textbf{Потенциальные микрокоманды}} \\
\cline{2-9}
& $Q_1$ & $Q_2$ & $Q_3$ & \textbf{$L_1$} & \textbf{$L_2$} & \textbf{$L_3$} & \textbf{$L_4$} & \textbf{$L_5$}\\
\hline
\textit{$s_0$: time} & 0 & 0 & 0 & 1 & 1 & 1 & 1 & 0 \\
\hline
\textit{$s_1$: minutes} & 0 & 0 & 1 & 1 & 0 & 0 & 1 & 0 \\
\hline
\textit{$s_2$: hours} & 0 & 1 & 0 & 0 & 1 & 0 & 1 & 0 \\
\hline
\textit{$s_3$: weekday} & 0 & 1 & 1 & 0 & 0 & 1 & 1 & 0 \\
\hline
\textit{$s_4$: sec-stop} & 1 & 0 & 0 & X & X & X & 0 & 0 \\
\hline
\textit{$s_5$: sec-run} & 1 & 0 & 1 & X & X & X & 0 & 1 \\
\hline
\textit{$s_6$: display-off} & 1 & 1 & 0 & 0 & 0 & 0 & 1 & 0 \\
\hline
\end{tabularx}
\end{table}
\newpage
\section*{Заключение}
\addcontentsline{toc}{section}{Заключение}
\newpage
\section*{Список литературы}
\addcontentsline{toc}{section}{Список литературы}
\vspace{-1.5cm}
\begin{thebibliography}{0}
\bibitem{vostrov}
Востров А. В, <<Теория алгоритмов>> URL: \url{https://tema.spbstu.ru/algorithm/} (Дата обращения: 01.12.2024).
\end{thebibliography}
\end{document}