\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}