Files
algorithm/coursework/report.tex

871 lines
58 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{pdfpages}
\usepackage{tikz}
\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}} 2025г.
\end{flushright}
}
\hfill \break
% \hfill \break
\begin{center} \small{Санкт-Петербург, 2025} \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}
\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}
\newpage
\subsubsection{Функции переходов и выходов}
Функции переходов ($\delta$) и выходов ($\lambda$) задаются таблицей \ref{tbl:steps}. Итоговая таблица истинности с учётом указанных кодов состояний, входов и выходов автомата представлена в таблице \ref{tbl:truth-f}, она соответствует логическому блоку F структурной схемы часов, которая представлена на Рис.~13.
\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}
\newpage
\subsection{Управляющие воздействия}
Управляющий автомат лежит в основе устройства управления часами. Задача устройства управления заключается в преобразовании внешних сигналов a, b и c в соответствующие управляющие воздействия. Элементарные управляющие воздействия называют микрокомандами. Микрокоманды, действующие на схему продолжительное время, называются потенциальными, а микрокоманды с кратковременным воздействием -- импульсными.
Для реализации функциональных возможностей часов в соответствии с заданием курсовой работы было выделено 4 импульсных микрокоманды, они представлены в таблице \ref{tbl:impuls}, и 5 потенциальных микрокоманд, они представлены в таблице \ref{tbl:potential}.
Потенциальные сигналы являются функцией состояния управляющего автомата, в то время как импульсные появляются лишь в момент перехода и соответствуют выходам автомата, поэтому в таблице \ref{tbl:impuls} для каждой микрокоманды также указан код на выходе автомата. Соответствие состояний и потенциальных микрокоманд указано в таблице \ref{tbl:state-to-potential}, она соответствует логической схеме FL на структурной схеме часов, которая представлена на Рис.~13.
\begin{table}[h!]
\centering
\caption{Импульсные микрокоманды.}
\label{tbl:impuls}
\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{Потенциальные микрокоманды.}
\label{tbl:potential}
\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{Потенциальные микрокоманды для каждого состояния.}
\label{tbl:state-to-potential}
\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 & 1 & 1 & 0 & 0 & 0 \\
\hline
\textit{$s_5$: sec-run} & 1 & 0 & 1 & 1 & 1 & 0 & 0 & 1 \\
\hline
\textit{$s_6$: display-off} & 1 & 1 & 0 & 0 & 0 & 0 & 1 & 0 \\
\hline
\end{tabularx}
\end{table}
\subsection{Минимизация функций}
Для автоматической минимизации функций с помощью карт Карно использовался специализированный онлайн сервис~\cite{karno}. Некоторые рассматриваемые функции являются частично-определёнными, что было использовано для их минимизации. В дальнейшем на рисунках с картами Карно неопределённые значения отмечаются символом <<X>>.
\subsubsection{Минимизация функции переходов}
В соответствии с таблицей истинности функции переходов (см. таблицу~\ref{tbl:truth-f}), были составлены карты Карно для каждого кода выходного состояния $Q_1$-$Q_3$. Карты Карно вместе с минимизированными формулами в дизъюнктивной нормальной форме представлены на Рис.~\ref{fig:carno_Q1}-\ref{fig:carno_Q3}.
\begin{figure}[h!]
\centering
\includegraphics[width=0.7\linewidth]{img/carno_Q1.png}
\caption{Минимизация для $Q_1$.}
\label{fig:carno_Q1}
\end{figure}
\begin{figure}[h!]
\centering
\includegraphics[width=0.7\linewidth]{img/carno_Q2.png}
\caption{Минимизация для $Q_2$.}
\label{fig:carno_Q2}
\end{figure}
\newpage
\begin{figure}[h!]
\centering
\includegraphics[width=0.7\linewidth]{img/carno_Q3.png}
\caption{Минимизация для $Q_3$.}
\label{fig:carno_Q3}
\end{figure}
\subsubsection{Минимизация функции выходов}
В соответствии с таблицей истинности функции выходов (см. таблицу~\ref{tbl:truth-f}), были составлены карты Карно для каждого кода выходного сигнала $y_1$-$y_3$. Карты Карно вместе с минимизированными формулами в дизъюнктивной нормальной форме представлены на Рис.~\ref{fig:carno_y1}-\ref{fig:carno_y3}.
\begin{figure}[h!]
\centering
\includegraphics[width=0.7\linewidth]{img/carno_y1.png}
\caption{Минимизация для $y_1$.}
\label{fig:carno_y1}
\end{figure}
\newpage
\begin{figure}[h!]
\centering
\includegraphics[width=0.7\linewidth]{img/carno_y2.png}
\caption{Минимизация для $y_2$.}
\label{fig:carno_y2}
\end{figure}
\begin{figure}[h!]
\centering
\includegraphics[width=0.7\linewidth]{img/carno_y3.png}
\caption{Минимизация для $y_3$.}
\label{fig:carno_y3}
\end{figure}
\subsubsection{Минимизация для схемы FL}
Потенциальные микрокоманды являются функцией состояния автомата. Таблица истинности для такого преобразования уже была представлена ранее (см. таблицу~\ref{tbl:state-to-potential}). Карты Карно и минимизированные формулы в дизъюнктивной нормальной форме для каждой микрокоманды $L_1$-$L_5$ представлены на Рис.~\ref{fig:carno_L1}-\ref{fig:carno_L5}.
\newpage
\begin{figure}[h!]
\centering
\includegraphics[width=0.3\linewidth]{img/carno_L1.png}
\caption{Минимизация для $L_1$.}
\label{fig:carno_L1}
\end{figure}
\begin{figure}[h!]
\centering
\includegraphics[width=0.3\linewidth]{img/carno_L2.png}
\caption{Минимизация для $L_2$.}
\label{fig:carno_L2}
\end{figure}
\begin{figure}[h!]
\centering
\includegraphics[width=0.3\linewidth]{img/carno_L3.png}
\caption{Минимизация для $L_3$.}
\label{fig:carno_L3}
\end{figure}
\newpage
\begin{figure}[h!]
\centering
\includegraphics[width=0.3\linewidth]{img/carno_L4.png}
\caption{Минимизация для $L_4$.}
\label{fig:carno_L4}
\end{figure}
\begin{figure}[h!]
\centering
\includegraphics[width=0.3\linewidth]{img/carno_L5.png}
\caption{Минимизация для $L_5$.}
\label{fig:carno_L5}
\end{figure}
\newpage
\section{Особенности реализации}
\subsection{Структурная схема}
Общая стрктурная схема часов, на основе которой была построена функциональная схема, представлена на Рис.~13.
\addtocounter{figure}{1}
\includepdf[pages={1}, fitpaper, pagecommand={
\thispagestyle{empty}
\begin{tikzpicture}[remember picture, overlay]
\node at (current page.south) [anchor=north, yshift=31pt] {\large{Рис 13. Структурная схема часов.}};
\end{tikzpicture}
}]{pdf/scheme.pdf}
\subsection{Анализ схемотехнической реализации}
Функциональная схема часов была реализована в программе Multisim 14~\cite{multisim}.
\subsubsection{Индикаторный преобразователь}
Индикаторный преобразователь - функциональный преобразователь, который по двоичному коду десятичной цифры вырабатывает сигналы, управляющие индикаторами. Он используется для преобразования двоичных чисел в счётчиках в десятичные цифры на дисплеях часов.
В этой работе использовался готовый индикаторный преобразователь \texttt{74LS47D} в сочетании с дисплеем \texttt{SEVEN\_SEG\_COM\_A\_BLUE}. Схема вывода двоичного числа на дисплей представлена на Рис.~\ref{fig:ip}. На входы A, B, C, D подаётся двоичное число, входы LT, RBI и BI/RBO являются управляющими, в обычном режиме работы преобразователя на них необходимо подавать логическую единицу. Вход преобразуется в сигналы, управляющие сегментами индикатора для отображения соответствующей цифры от 0 до 9.
\begin{figure}[h!]
\centering
\includegraphics[width=0.3\linewidth]{img/ip.png}
\caption{Схема вывода чисел на дисплей.}
\label{fig:ip}
\end{figure}
\subsubsection{Счётчики}
Счетчик - это устройство, которое осуществляет счет и хранение кода числа подсчитанных импульсов. У каждого счетчика есть тактовый вход, на который поступают электрические импульсы, и несколько выходов, с которых можно снимать двоичный код числа, находящийся в счетчике. С каждым новым входным импульсом этот код изменяется: он может увеличиваться на 1 (суммирующий счетчик), уменьшаться на 1 (вычитающий счетчик) или изменяться в соответствии с каким-либо другим правилом.
Важным параметром счетчика является коэффициент пересчета К. К - это максимальное число импульсов, которое может быть подсчитано. Если рассматривать счетчик как конечный автомат, то К - это количество различных состояний счетчика. Счетчик с коэффициентом пересчета К через К переключений возвращается в исходное состояние.
В основе счётчиков, используемых в этой работе лежит готовый счётчик с K=10 --\texttt{74LS90D}. На его основе сделана пользовательская схема \texttt{10-counter}, представленная на Рис.~\ref{fig:10-counter}, с тремя входами: TIK -- основной тактовый вход, +1 -- прибавление единицы, и R -- сброс счётчика, и четырьмя выходами, на них подаётся двоичный код числа, которое хранится в счётчике. На основе схемы \texttt{10-counter} реализованы схемы счётчиков с другими коэффициентами пересчёта -- \texttt{6-counter} (см. Рис.~\ref{fig:6-counter}), \texttt{7-counter} (см. Рис.~\ref{fig:7-counter}), \texttt{24-counter} (см. Рис.~\ref{fig:24-counter}).
Подключение входа логического элемента XOR к земле через резистор выполняет функцию подтяжки к низкому уровню (pull-down resistor). Это гарантирует, что вход будет находиться в логическом состоянии "0" даже в случае, если он не подключен к активному источнику сигнала.
\begin{figure}[h!]
\centering
\includegraphics[width=0.7\linewidth]{img/10-counter.png}
\caption{Схема счётчика с K=10.}
\label{fig:10-counter}
\end{figure}
\begin{figure}[h!]
\centering
\includegraphics[width=0.7\linewidth]{img/6-counter.png}
\caption{Схема счётчика с K=6.}
\label{fig:6-counter}
\end{figure}
\newpage
\begin{figure}[h!]
\centering
\includegraphics[width=0.7\linewidth]{img/7-counter.png}
\caption{Схема счётчика с K=7.}
\label{fig:7-counter}
\end{figure}
\begin{figure}[h!]
\centering
\includegraphics[width=0.7\linewidth]{img/24-counter.png}
\caption{Схема счётчика с K=24.}
\label{fig:24-counter}
\end{figure}
\subsubsection{Тактовый генератор}
Генератор тактовых импульсов (генератор тактовой частоты) предназначен для синхронизации различных процессов в цифровых устройствах — ЭВМ, электронных часах, таймерах и других. Он вырабатывает электрические импульсы (обычно прямоугольной формы) заданной частоты, которая часто используется как эталонная — считая количество импульсов, можно, например, измерять временные интервалы.
Подразумевается, что в рассматриваемой схеме часов будет использоваться генератор с частотой 1 Гц. Однако в непосредственной реализации в Multisim приходится завышать его частоту, так как симуляция даже одной секунды работы схемы часов занимает несколько минут.
\newpage
Тактовый генератор, используемый в данной работе, называется \texttt{DIGITAL\_CLOCK}, он представлен на Рис.~\ref{fig:clock}.
\begin{figure}[h!]
\centering
\includegraphics[width=0.1\linewidth]{img/clock.png}
\caption{Тактовый генератор \texttt{DIGITAL\_CLOCK}.}
\label{fig:clock}
\end{figure}
\subsubsection{Мультиплексор}
Мультиплексор — это цифровое устройство, которое выбирает один из нескольких входных сигналов и передаёт его на выход. Управление выбором входа осуществляется с помощью управляющих сигналов.
В этой работе использовался 4-канальный 2-входовый мультиплексор \texttt{74LS157D} (см. Рис.~\ref{fig:mux}). Схема имеет две группы входов A1-A4 и B1-B4, на выходы Y1-Y4 подаются значения со входов группы A, когда на управляющий вход A/B подаётся логический ноль, иначе на выход идут значения со входов группы B.
\begin{figure}[h!]
\centering
\includegraphics[width=0.3\linewidth]{img/mux.png}
\caption{Мультиплексор \texttt{74LS157D}.}
\label{fig:mux}
\end{figure}
\subsubsection{Преобразователь внешних воздействий}
Преобразователь внешних воздействий отвечает за обработку нажатий на кнопки a, b и c. Он выполняет две задачи, во-первых, переводит сигнал от кнопки в соответствующий код входного воздействия (см. таблицу~\ref{tbl:inputs}), во-вторых, формирует синхроимпульс непосредственно в момент нажатия кнопки. Время, которое человек держит кнопку часов нажатой, не может быть меньше нескольких миллисекунд, а сформированный на основе этого нажатия синхроимпульс должен быть гораздо короче и не зависеть от продолжительности физического нажатия кнопки. Для этого используется формирователь импульсов с укорачивающей RC-цепью. Подбором емкости и сопротивления можно построить схему, которая вырабатывает необходимую продолжительность сигнала.
Для реализации преобразователя внешних воздействий с укорачивающей RC-цепью была создана пользовательская схема \texttt{input-handler}, представленная на Рис.~\ref{fig:input}. В ней использовался конденсатор ёмкостью 1 мкФ и резистор с сопротивлением в 1 кОм.
У схемы \texttt{input-handler} три входа -- сигналы от кнопок a, b и c, и три выхода -- два разряда кода входного сигнала ($x_1$ и $x_2$) и синхроимпульс s.
\begin{figure}[h!]
\centering
\includegraphics[width=0.8\linewidth]{img/input.png}
\caption{Схема преобразователя внешних воздействий.}
\label{fig:input}
\end{figure}
\subsubsection{Блок элементов памяти}
Блок элементов памяти необходим для хранения текущего состояния управляющего автомата. При реализации конечного автомата существует особенность, связанная с переключением состояний: в момент изменения состояния необходимо одновременно передавать на вход схемы преобразования \(F\) код предыдущего состояния и сохранять код нового состояния, формируемого на её выходе. Таким образом, возникает временной промежуток, в течение которого в блоке памяти должны быть доступны как код предыдущего, так и код нового состояния.
Блок элементов памяти реализован в пользовательской схеме \texttt{memory}, представленной на Рис.~\ref{fig:memory}. Для каждого разряда кода состояния применяются два D-триггера~--~\texttt{D\_FF}, соединённые последовательно. Такая конфигурация позволяет сохранить новое состояние на выходе схемы \(F\) в момент одного переключения автомата и использовать его в качестве входных данных для схемы \(F\) при следующем переключении.
У схемы три выхода -- разряды состояний, и четыре входа -- три для разряда состояния и один для синхроимпульса, в момент прихода которого триггеры должны изменять своё состояние.
\newpage
\phantom{text}
\begin{figure}[h!]
\centering
\includegraphics[width=0.9\linewidth]{img/memory.png}
\caption{Схема блока памяти.}
\label{fig:memory}
\end{figure}
\subsubsection{Блок F}
Блок F представляет собой простую логическую схему, реализующую функцию переходов и выходов управляющего автомата. Схема основана на минимизированных формулах для кодов выходов автомата и кодов его следующего состояния.
Блок F реализован в пользовательской схеме \texttt{F}, представленной на Рис.~\ref{fig:F}. У схемы пять входов: x1 и x2 -- разряды кода входного воздействия, p\_q1, p\_q2 и p\_q3 -- разряды кода текущего состояния автомата. Выходов семь: new\_Q1, new\_Q2 и new\_Q3 -- разряды кода нового состояния автомата, y1, y2 и y3 -- разряды кода выхода автомата.
\newpage
\phantom{text}
\begin{figure}[h!]
\centering
\includegraphics[width=0.8\linewidth]{img/F.png}
\caption{Реализация блока F.}
\label{fig:F}
\end{figure}
\subsubsection{Блок FL}
Блок FL, так же как и блок F, представляет собой простую логическую схему. Он отвечает за преобразование текущего состояния автомата в набор потенциальных микрокоманд.
Блок FL реализован в пользовательской схеме \texttt{FL}, представленной на Рис.~\ref{fig:FL}. У схемы три входа -- разряды кода текущего состояния автомата, и пять выходов, каждый из которых соответствует потенциальной микрокоманде.
\begin{figure}[h!]
\centering
\includegraphics[width=0.7\linewidth]{img/FL.png}
\caption{Реализация блока FL.}
\label{fig:FL}
\end{figure}
\subsubsection{i-формирователь}
i-формирователь отвечает за генерацию импульсных микрокоманд на основе синхроимпульса и выходов управляющего автомата в соответствии с таблицей~\ref{tbl:impuls}.
i-формирователь реализован в пользовательской схеме \texttt{i-shaper}, которая представляет собой обёртку над готовым дешифратором \texttt{74LS138D}. У схемы четыре входа: y1, y2 и y3 -- разряды кода выхода автомата, s -- синхроимпульс. Четыре выхода, каждый из которых соответствует импульсной микрокоманде. Схема \texttt{74LS138D} выдаёт сигнал, только когда на вход G1 подаётся логическая единица, к этому входу и подключен синхроимпульс.
\begin{figure}[h!]
\centering
\includegraphics[width=0.7\linewidth]{img/i-shaper.png}
\caption{Схема i-формирователя.}
\label{fig:i-shaper}
\end{figure}
\subsubsection{Звуковая сигнализация}
По заданию курсовой работы, необходимо было реализовать звуковую сигнализацию, которая бы работала каждый час в течение четырёх секунд. Схема управления этой сигнализацией представлена на Рис.~\ref{fig:alarm}. У схемы два входа: su\_2 -- второй разряд единиц секунд текущего времени в двоичном виде, mt\_3 -- третий (старший) разряд десятков минут текущего времени. Выход один -- is\_on -- сигнал контролирующий работу сигнализации. Схема основана на нескольких логических элементах, с помощью которых определяется момент, в который нужно изменить состояние сигнализации, JK триггере, который хранит текущее состояние сигнализации (вкл/выкл), и укорачивающей RC цепи, которая нужна для генерации импульсного сигнала для переключения состояния JK триггера.
\begin{figure}[h!]
\centering
\includegraphics[width=1\linewidth]{img/alarm.png}
\caption{Схема управления звуковой сигнализацией.}
\label{fig:alarm}
\end{figure}
\subsubsection{Общая функциональная схема}
На Рис.~27 представлена общая функциональная схема часов. За счёт использования пользовательских схема, она получилась достаточно понятной и похоже на структурную схему часов.
На функциональной схеме видно, что линии с потенциальными микрокомандами L1-L3 подключены ко входам CA дисплеев \texttt{SEVEN\_SEG\_COM\_A\_BLUE}. Дисплеи работают только когда на этот вход подаётся логическая единица. Линия с потенциальной микрокомандой L4 подаётся на управляющий вход A/B мультиплексоров \texttt{74LS157D}. Линия с потенциальной микрокомандой L5 через логический элемент <<И>> управляет подачей тактового сигнала на счётчики секундомера.
Помимо основных 5 дисплеев (один для вывода номера дня недели, два для вывода часов и два для вывода минут), на схеме присутствуют ещё два <<отладочных>> дисплея для вывода секунд. Также для упрощения отладки и демонстрации работы схемы, был добавлен ещё один переключатель, с помощью которого можно увеличивать десятки минут на единицу.
\addtocounter{figure}{1}
\includepdf[pages={1}, fitpaper, pagecommand={
\thispagestyle{empty}
\begin{tikzpicture}[remember picture, overlay]
\node at (current page.south) [anchor=north, yshift=45pt] {\large{Рис 27. Функциональная схема часов}};
\end{tikzpicture}
}]{pdf/func-scheme.pdf}
\subsection{Расчёт площади схемы}
В таблице~\ref{tbl:count} представлена некоторая статистика по количеству элементов и транзисторов в них в полученной функциональной схеме.
\begin{table}[h!]
\centering
\caption{Количество транзисторов в функциональной схеме часов.}
\label{tbl:count}
\footnotesize
\begin{tabularx}{\textwidth}{|X|X|X|X|}
\hline
\textbf{Элемент} & \textbf{Число транзисторов} & \textbf{Число элементов} & \textbf{Всего транзисторов} \\
\hline
Элемент И & 4 & 54 & 216 \\
\hline
Элемент НЕ & 4 & 17 & 68 \\
\hline
Элемент ИЛИ & 6 & 18 & 108 \\
\hline
Элемент XOR & 10 & 11 & 110 \\
\hline
D-триггер & 20 & 6 & 120 \\
\hline
Счётчик 74LS90D & 120 & 11 & 1320 \\
\hline
Мультиплексор 74LS157D & 50 & 4 & 200 \\
\hline
Преобразователь 74LS47N & 400 & 5 & 2000 \\
\hline
\end{tabularx}
\end{table}
Для реализации всей функциональной схемы потребуется 4142 транзистора. Исходя из расчёта, что на 1 квадратный миллиметр приходится примерно 1000 транзисторов, функциональная схема реализованных часов должна занимать примерно 4.142 ${\text{мм}}^2$.
\newpage
\section*{Заключение}
\addcontentsline{toc}{section}{Заключение}
В ходе выполнения курсовой работы были построены граф управляющего автомата и общая структурная схема часов, проведено кодирование входных и выходных воздействий и состояний автомата, функции блоков управления были минимизированы с помощью карт Карно и сервиса~\cite{karno}, а также разработана их функциональная схема в программе Multisim 14~\cite{multisim}. В соответствии с вариантом курсовой работы, был реализован следующий функционал:
\begin{itemize}
\item Отображение и корректировка (в дополнение к часам и минутам): дня недели;
\item Режим работы часов: 24-х часовой;
\item Отключение индикаторов с целью экономии электроэнергии;
\item Секундомер: простой (сброс - запуск - останов);
\item Звуковая сигнализация: каждый час в течение четырёх секунд.
\end{itemize}
Также была приблизительно определена площадь микросхемы, реализующей построенную функциональную схему при современной плотности компоновки транзисторов. Получилась площадь около 4.142 ${\text{мм}}^2$.
Можно выделить несколько преимуществ созданной функциональной схемы часов. Во-первых, функциональная схема разбита на пользовательские схемы, что сделало её гораздо более структурированной и похожей на общую структурную схему. Во-вторых, при минимизации функций блоков управления использовалась их неопределенность на некоторых наборах переменных, что позволило значительно уменьшить количество логических элементов в итоговой схеме.
Также можно выделить несколько недостатков созданной функциональной схемы часов. Во-первых, для упрощения преобразователя входных воздействий было решено сделать три кнопки на часах, в то время как вместо третьей кнопки можно было использовать комбинацию кнопок. Во-вторых, из режима секундомера можно выйти только когда он запущен, что может вызывать некоторое неудобство в использовании.
Функциональную схему можно достаточно просто масштабировать. Во-первых, можно добавить отображение дня недели с помощью сочетаний букв. Во-вторых, достаточно просто переделать схему так, чтобы была возможность просмотра текущего времени с работающим секундомером. В-третьих, можно использовать схему как основу и добавить функционал будильника. В-четвёртых, при редактировании времени, пользователь может увеличивать часы и минуту только на единицу, что может доставлять дискомфорт, в случае если нужно выставить сильно отличающееся время, также это плохо сказывается на долговечности кнопок. На основе созданной схемы несложно добавить возможность редактирования десятков минут и часов.
\newpage
\section*{Список литературы}
\addcontentsline{toc}{section}{Список литературы}
\vspace{-1.5cm}
\begin{thebibliography}{0}
\bibitem{vostrov}
Востров А. В, <<Теория алгоритмов>> URL: \url{https://tema.spbstu.ru/algorithm/} (Дата обращения: 01.12.2024).
\bibitem{karno}
sublime.tools - <<Решить карту Карно>>, URL: \url{https://sublime.tools/ru/karta-karno} (Дата обращения: 01.12.2024).
\bibitem{multisim}
National Instruments - Multisim, URL: \url{https://www.ni.com/ru-ru/shop/product/multisim.html} (Дата обращения: 01.12.2024).
\end{thebibliography}
\end{document}