\documentclass[12pt, a4paper] {article}
\usepackage[utf8] {inputenc}
\usepackage[T2A]{fontenc}
\usepackage[english, russian] {babel}
\usepackage[usenames,dvipsnames]{xcolor}
\usepackage{listings,a4wide,longtable,amsmath,amsfonts,graphicx,tikz}
\usepackage{indentfirst,verbatim}

\lstset {
  basicstyle=\ttfamily\scriptsize
}

\begin{document}
\thispagestyle{empty}
\begin{center}
  {\large
    Университет ИТМО \\
    Кафедра Вычислительной техники \\
  }
\end{center}
\vspace{\stretch{2}}
\begin{center}
  Системы ввода/вывода и периферийные устройства\\
  {\large
    Лабораторная работа 1\\
    Разработка контроллера ввода/вывода\\
  }
  {\it Интерфейс SPI}

\end{center}
\vspace{\stretch{6}}
\begin{flushright}
  Работу выполнили студенты группы P3415\\
  {\it Фомин Евгений\\
    Халанский Дмитрий \\
  }
\end{flushright}
\vspace{\stretch{4}}
\begin{center}
  2016 
\end{center}
\newpage

\tableofcontents

\section{Задание}
Для интерфейса SPI разработать модели контроллера ввода-вывода на уровне
регистровых передач с использованием языка Verilog и в виде поведенческой модели
с использование языка SystemC. Для каждой из моделей разработать тестовое
окружение и провести тестирование обеих моделей.
\section{Краткая характеристика интерфейса}
SPI(Serial Peripheral Interface) --- последовательный синхронный стандарт
передачи данных в дуплексном режиме. В SPI используются четыре цифровых сигнала:
\begin{enumerate}
  \item MOSI (Master Out Slave In) --- линия передачи данных от ведущего
    устройства к ведомому
  \item MISO (Master In Slave Out) --- вход ведущего, выход ведомого
  \item SCLK --- тактовый сигнал для ведомых устройств
  \item SS --- выбор ведомого устройства
\end{enumerate}

Передача осуществляется пакетами длиной, как правило, 8 бит. Ведущее устрйоство
инициирует цикл связи установкой низкого уровня на выходе {\tt SS} для выбора
устройства, с которым необходимо установить соединение. При низком уровне
сигнала {\tt SS} ведомое устройство по тактовому сигналу {\tt SCLK} считывает значение на
входе {\tt MOSI}, выставляя значение к отправке на выход {\tt MISO}. Побитовый обмен
происходит с синхросигналом {\tt SCLK}, пока не будет передан последний бит пакета.
Затем на линии {\tt SS} устанавливается высокий уровень.
\section{Разработанный контроллер}
\subsection{Описание функций и особенностей разработанного контроллера}
Разработанный контроллер SPI поддерживает работу только в режиме {\it Master} с
произвольным интерфейсом доступа к процессорному ядру. Контроллер работает в режиме
{\it SPI mode 0}: сигнал синхронизации начинается с низкого уровня и выборка
данных производится по переднему фронту. Частота синхросигнала, по которому
работает контроллер и внешнее устройство, меньше частоты тактового сигнала
процессора в 4 раза.

\subsection{Описание интерфейсов контроллера}
\includegraphics[width=0.5\textwidth]{cunt}\\
На данный момент разработанный контроллер работает в режиме {\it Master} с одним
ведомым устройством, поэтому внешнее устройство взаимодействует с ним по
четырехпроводному интерфейсу с одной линией {\tt SS}. Интерфейс для работы с
процессорным ядром в дальнейшем будет доработан, поскольку его текущее
назначение --- только тестирование и отладка контроллера. Ввиду
максимальных упрощений он предоставляет 2 входа и 1 выход: {\tt data\_in},
{\tt ready\_send} и {\tt data\_out} соответсвенно. Первый из них представляет собой шину, на которую
процессорное ядро выставляет пакет к отправке, второй --- сигнал к началу
обмена. Полученные данные с внешнего устройства будут на выходе {\tt data\_out}.
\section{Тестирование контроллера}
\subsection{Методика}
Так как SPI является стандартом передачи данных в дуплексном режиме, было
необходимо провеить правильность отправки и получения пакета данных в один цикл
обмена. Гипотетическим процессорным ядром был выствлен байт данных и сигнал
готовности к обмену. Эти данные можно обнаружить на временной диаграмме на
выходе {\tt MOSI}. Данные на вход контроллера подавались тестовым окружением при низком
уровне {\tt SS} в соответствии с синхросигналом --- ожидалось их обнаружить в
регистре {\tt data\_out} после окончания цикла обмена.
\subsection{Временные диаграммы}
\includegraphics[width=0.8\textwidth]{diag}\\
\section{Исходные тексты}
\subsection{Verilog}
\subsubsection*{Контроллер}
\lstinputlisting[language=Verilog]{spi.v}
\subsubsection*{Тестовое окружение}
\lstinputlisting[language=Verilog]{test_spi.v}
\subsection{SystemC}
\subsubsection*{Контроллер}
\lstinputlisting[language=C]{spi.h}
\subsubsection*{Тестовое окружение}
\lstinputlisting[language=C]{test_spi.h}

\end{document}