Files
algorithm/coursework/report.tex

736 lines
42 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}} 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}
\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 структурной схемы часов, которая представлена на Рис.~?.
\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 на структурной схеме часов, которая представлена на Рис.~?.
\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{Анализ схемотехнической реализации}
Схема часов была реализована в программе 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{Блок памяти}
\subsubsection{Блок F}
\subsubsection{Блок FL}
\subsubsection{i-формирователь}
\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{Рис ?. Структурная схема часов.}};
\end{tikzpicture}
}]{pdf/scheme.pdf}
\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).
\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}