\documentclass[a4paper,fontsize=14bp]{article}

\input{../common-preamble}
\input{../fancy-listings-preamble}
\input{../bmstu-preamble}
\setcounter{secnumdepth}{4}
\numerationTop

\begin{document}
\thispagestyle{empty}
\makeBMSTUHeader

\makeReportTitle{лабораторной}{1}{Моделирование компонент систем на кристалле}{Проектирование цифровых устройств на \\ программируемых логических интегральных схемах (ПЛИС)}{}{С.В. Фёдоров}
\newpage
\thispagestyle{empty}
\tableofcontents
\newpage
\pagestyle{fancy}
\section{Цель}
Изучить методики моделирования компонент систем на кристалле с интерфейсами Avalon-MM. Освоить методику интеграции компонент в системы на кристалле.

\section{Задачи}
Для достижения цели было описано несколько задач, каждая со своей целью.
\begin{enumerate}
\item \textbf{Создание простых тестбенчей.} Цель: получение навыков реализации тестбенчей, эмулирующих транзакции в соответствии со спецификацией Avalon-MM. Моделирование обмена с разрабатываемыми модулями систем на кристалле.
\item \textbf{Создание простой системы на кристалле и интеграция пользовательских модулей.} Цель: получение базовых навыков конфигурации системы на кристалле на основе процессора NiosII в средстве Platform Designer. Подготовка проекта системы на кристалле для использования в следующих лабораторных работах.
\item \textbf{Моделирование систем на кристалле в ModelSim.} Цель: Подготовка созданного проекта к моделированию. Изучение методики моделирования систем на кристалле в пакете ModelSim с процессором, исполняющим программный код из внутренней памяти SRAM.
\item \textbf{Самостоятельная работа.}
\end{enumerate}
\section{Выполнение работы}
По шагам из методического материала был создан проект в САПР Quartus Prime (доступен по \href{https://git.iovchinnikov.ru/ivan-igorevich/fpga-lab-2/commits/branch/simulation}{ссылке}). В начальном проекте «поезд проезжал через семафор» задолго до инициализации (переход сигнала \code{run} в высокий уровень), поэтому цикл прохода поезда в тестбенче всего проекта (\code{niosII_tb.sv}) был изменён и представлен в листинге \hrf{lst:main-train}.

\begin{lstlisting}[language=Verilog,style=VerilogStyle,caption={Изменённый основной цикл тестового стенда},label={lst:main-train}]
initial begin
    train = 0;
    wait (niosii_inst_reset_bfm_reset_reset);
    forever begin
        repeat(22528) @(posedge niosii_inst_clk_bfm_clk_clk);
        train = 1;
        repeat(10) @(posedge niosii_inst_clk_bfm_clk_clk);
        train = 0;
    end
end
\end{lstlisting}

В результате моделирования была получена диаграмма работы (waveform), представленная на рисунке \hrf{pic:modelsim-before}.
\begin{figure}[H]
  \centering
  \includegraphics[width=\textwidth]{03-fpga-lab-02-beforeindividual.png}
  \caption{Диаграмма Modelsim}
  \label{pic:modelsim-before}
\end{figure}

\section{Индивидуальное задание}
В качестве индивидуальных были даны следующие задания:
\begin{enumerate}
\item расширить разрядность памяти хранения до 32 бит и на запись и на чтение, чтобы изменения были видны на светодиодах.
\item добавить регистр (помимо \code{ctl} и \code{divider}). Если там 0, то схема должна работать без изменений, а если 1, должен подключаться режим мигающего жёлтого с длительностью, которая берётся из памяти (параметр зелёного цвета), то есть мигать циклически со следующей периодичностью:
  
  \begin{tikztimingtable}
    length & 5D{green} 5D{green} 5D{green} 5D{green} 5D{green} 5D{green}\\
    yellow & 5L        5H        5L        5H        5L        5H \\
  \end{tikztimingtable}
\end{enumerate}
\section{Выводы}

\newpage
\appendix
\setcounter{secnumdepth}{4}
\section{Приложения}
\renewcommand{\thesubsection}{\Asbuk{subsection}}

\subsection{Исходные коды проекта}
\label{appendix:src}




\end{document}



