diff --git a/03-fpga-lab-02-report.tex b/03-fpga-lab-02-report.tex
index 19fe469..457dc21 100644
--- a/03-fpga-lab-02-report.tex
+++ b/03-fpga-lab-02-report.tex
@@ -1,8 +1,8 @@
\documentclass[a4paper,fontsize=14bp]{article}
-\input{../common-preamble}
-\input{../fancy-listings-preamble}
-\input{../bmstu-preamble}
+\input{settings/common-preamble}
+\input{settings/fancy-listings-preamble}
+\input{settings/bmstu-preamble}
\setcounter{secnumdepth}{4}
\numerationTop
@@ -33,10 +33,15 @@ 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;
+ wait ({red,yellow,green}==3'b001);
+ repeat (29000) @(posedge niosii_inst_clk_bfm_clk_clk);
+ repeat(2) begin
+ train = 1;
+ repeat (10) @(posedge niosii_inst_clk_bfm_clk_clk);
+ train = 0;
+ wait ({red,yellow,green}==3'b001);
+ repeat (200) @(posedge niosii_inst_clk_bfm_clk_clk);
+ end
end
end
\end{lstlisting}
@@ -117,15 +122,53 @@ end
\label{pic:timing-sem-after}
\end{figure}
-В компонент семафора была добавлена возможность изменения поведения без перекомпиляции компонента. Поведение с «мигающим жёлтым» активируется нечётным значением задержки из файла \code{sem.c} процессора niosII. Поведение красного жёлтого, и зелёного сигналов в режиме «мигающего жёлтого» представлено на рисунке \hrf{pic:indi-model}.
+В компонент семафора (файл \code{HDL/dec.sv}) была добавлена возможность изменения поведения без перекомпиляции компонента. Поведение с «мигающим жёлтым» активируется нечётным значением задержки из файла \code{sem.c} процессора niosII. Значения задержек семафора заданы достаточно маленькими 32-разрядными числами, чтобы возможно было отследить их в симуляции.
+
+\begin{lstlisting}[language=C,style=CCodeStyle]
+#define TIME_SETS 4
+#define TIME_STATES 4
+const alt_u32 divisors[TIME_SETS][TIME_STATES] = {
+ {0x00000010, 0x00000010, 0x00000005, 0x00000010},
+ {0x00000010, 0x00000020, 0x00000010, 0x00000010},
+ {0x000000f1, 0x000000f1, 0x000000f1, 0x00000011},
+ {0x000000d1, 0x000000f1, 0x000000f1, 0x00000011}
+};
+\end{lstlisting}
+
+
+Поведение красного жёлтого, и зелёного сигналов в режиме «мигающего жёлтого» на третьем наборе задержек, записанном в регистр управления
+
+\begin{lstlisting}[language=C,style=CCodeStyle]
+IOWR_ALTERA_AVALON_SEM_DIVSET(SEM_CTL_SLAVE_BASE,0x02);
+\end{lstlisting}
+
+представлено на рисунке \hrf{pic:indi-model}, первый набор, записанный командой
+
+\begin{lstlisting}[language=C,style=CCodeStyle]
+IOWR_ALTERA_AVALON_SEM_DIVSET(SEM_CTL_SLAVE_BASE,0x00);
+\end{lstlisting}
+
+на рисунке \hrf{pic:indi-model2}.
\begin{figure}[H]
\centering
- \includegraphics[width=12cm]{03-fpga-lab-02-individual.png}
+ \begin{subfigure}[b]{0.98\textwidth}
+ \centering
+ \includegraphics[width=\textwidth]{03-fpga-lab-02-individual.png}
+ \caption{Нечётное значение задержки}
+ \label{pic:indi-model}
+ \end{subfigure}
+
+ \begin{subfigure}[b]{0.98\textwidth}
+ \centering
+ \includegraphics[width=\textwidth]{03-fpga-lab-02-individual2.png}
+ \caption{Чётное значение задержки}
+ \label{pic:indi-model2}
+ \end{subfigure}
\caption{Диаграмма поведения сигналов после выполнения задания}
- \label{pic:indi-model}
\end{figure}
+
В процессе работы были модифицированы исходные коды (листинг \hrf{lst:dec}, в листинге приведена только изменённая часть, логика работы семафора) и коды тестов (листинг \hrf{lst:dec-tb}) для компонента семафора, а также тестовый стенд (листинг \hrf{lst:main-top-tb}) и прошивка процессора (листинг \hrf{lst:sem}) итогового проекта.
\section{Выводы}
diff --git a/03-fpga-lab-04-report.tex b/03-fpga-lab-04-report.tex
new file mode 100644
index 0000000..2c277b6
--- /dev/null
+++ b/03-fpga-lab-04-report.tex
@@ -0,0 +1,69 @@
+\documentclass[a4paper,fontsize=14bp]{article}
+
+\input{settings/common-preamble}
+\input{settings/fancy-listings-preamble}
+\input{settings/bmstu-preamble}
+\setcounter{secnumdepth}{4}
+\numerationTop
+
+\begin{document}
+\thispagestyle{empty}
+\makeBMSTUHeader
+
+\makeReportTitle{лабораторной}{4}{Проектирование цифрового синтезатора}{Проектирование цифровых устройств на \\ программируемых логических интегральных схемах (ПЛИС)}{}{С.В. Фёдоров}
+
+\newpage
+\pagestyle{fancy}
+\section{Цель}
+Осуществить полный цикл проектирования цифрового устройства на ПЛИС на языке SystemVerilog. Реализовать генератор периодических функций на основе метода прямого цифрового синтеза на микросхеме семейства Cyclone IV E.
+
+\section{Задачи}
+Прямой цифровой синтез -- это метод генерации сигнала заданной формы путём вычисления значений сигнала в последовательных дискретных отсчётах времени и преобразовании их в аналоговый сигнал с помощью ЦАП. Структура системы приведена на рис \hrf{pic:synth-scheme}.
+
+\begin{figure}[H]
+ \centering
+ \fontsize{14}{1}\selectfont
+ \includesvg[scale=1.01]{pics/03-fpga-lab-04-01-synth.svg}
+ \caption{Схема цифрового синтезатора}
+ \label{pic:pic:synth-scheme}
+\end{figure}
+
+Инкремент фазы поступает на вход накопителя фазы и определяет скорость изменения фазы формируемого сигнала. Накопитель фазы выдаёт номер текущего отсчёта в периоде на просмотровую таблицу, содержащую образ одного периода синуса. Значение с выхода просмотровой таблицы поступает на дельта-сигма модулятор, который работает как однобитный ЦАП. Модулятор формирует последовательность нулей и единиц на высокой частоте, соответствующую текущему уровню на входе модулятора, после чего двухуровневый выходной сигнал модулятора подается на выход ПЛИС и сглаживается простым RC фильтром НЧ. При изменении приращения фазы изменяется частота формируемого на выходе сигнала.
+
+\section{Выполнение работы}
+\subsection{Разработка модулей}
+\subsubsection{Накопитель фазы}
+\textbf{Интерфейс модуля}
+\begin{frm} \begin{itemize}
+ \item [] \textbf{Входы:}
+ \code{phinc[7:0]} -- величина приращения фазы за один период тактового сигнала;
+ \code{clk} -- тактовый сигнал;
+ \code{clr_n} -- вход асинхронного сброса;
+ \item [] \textbf{Выходы:}
+ \code{phase[7:0]} -- 8 старших значащих битов выхода накопителя;
+ \item [] \textbf{Параметры:}
+ \code{WIDTH} -- разрядность накопителя фазы (значение по умолчанию -- 14).
+ \end{itemize} \end{frm}
+
+\textbf{Принцип действия}
+Накопитель фазы -- это классический аккумулятор, который сохраняет накопленную сумму в регистре и использует её в качестве одного из операндов сумматора на каждом такте. Второй операнд поступает с входа и определяет величину приращения фазы. Разрядность аккумулятора должна быть параметризирована. Входные значения складываются с младшими битами регистра аккумулятора, а на выход поступают старшие 8 разрядов аккумулятора, поэтому при разрядности аккумулятора M и значении N на входе приращения фазы выход фазы будет увеличиваться на единицу один раз в $2^{(M-8)}/N$ тактов.
+
+\section{Индивидуальное задание}
+
+\section{Выводы}
+
+\newpage
+\appendix
+\setcounter{secnumdepth}{4}
+\section{Приложения}
+\subsection{Исходные коды проекта}
+\label{appendix:src}
+
+% \lstinputlisting[language=Verilog,style=VerilogStyle,caption={Семафор},label={lst:dec}]{src/dec.sv}
+
+% \lstinputlisting[language=C,style=CCodeStyle,caption={\code{sem.c}},label={lst:sem}]{src/sem.c}
+
+\end{document}
+
+
+
diff --git a/pics/03-fpga-lab-02-individual.png b/pics/03-fpga-lab-02-individual.png
index 7331520..68a2bdf 100644
Binary files a/pics/03-fpga-lab-02-individual.png and b/pics/03-fpga-lab-02-individual.png differ
diff --git a/pics/03-fpga-lab-02-individual2.png b/pics/03-fpga-lab-02-individual2.png
new file mode 100644
index 0000000..454cb51
Binary files /dev/null and b/pics/03-fpga-lab-02-individual2.png differ
diff --git a/pics/03-fpga-lab-04-01-synth.svg b/pics/03-fpga-lab-04-01-synth.svg
new file mode 100644
index 0000000..99aef8f
--- /dev/null
+++ b/pics/03-fpga-lab-04-01-synth.svg
@@ -0,0 +1,239 @@
+
+
diff --git a/settings/bmstu-preamble.tex b/settings/bmstu-preamble.tex
new file mode 100644
index 0000000..7e6a9a0
--- /dev/null
+++ b/settings/bmstu-preamble.tex
@@ -0,0 +1,187 @@
+\usepackage{pgfplots}
+\usepackage{pgf}
+\usepackage{graphicx}
+\usepackage{wrapfig}
+\usepackage{scrextend}
+\usepackage{enumitem}
+\usepackage{caption}
+\usepackage{subcaption}
+\usepackage{afterpage}
+\usepackage{array}
+\bibliographystyle{gost-numeric.bbx}
+\usepackage[parentracker=true, backend=biber,
+%hyperref=false,
+bibencoding=utf8, style=numeric-comp, language=auto,
+autolang=other, citestyle=gost-numeric,
+defernumbers=true, bibstyle=gost-numeric,
+sorting=ntvy,
+]{biblatex}
+\bibliography{../refs}
+\usepackage{pgf-umlsd}
+\usepackage{pdfpages}
+\usepackage{svg}
+\usepackage[toc,page,header]{appendix}
+\usepackage{tikz-timing}
+\renewcommand\appendixtocname{Приложения}
+\usepackage{icomma}
+
+\makeatletter
+ \providecommand\text\mbox
+ \newenvironment{arithmetic}[1][]{\begin{tabular}[#1]{Al}}{\end{tabular}}
+ \newcolumntype{A}{>{\bgroup\def~{\phantom{0}}$\@testOptor}r<{\@gobble\\$\egroup}}
+ \def\@testOptor\ignorespaces#1#2\\{%
+ \ifx#1\times
+ \@OperatorRow{#1}{#2}\@tempa%
+ \else\ifx#1+
+ \@OperatorRow+{#2}\@tempa%
+ \else\ifx#1\discretionary% detects the soft hyphen, \-
+ \@ShortSubtractRow{#2}\@tempa%
+ \else\ifx#1-
+ \@OperatorRow-{#2}\@tempa%
+ \else
+ \@NormalRow{#1#2}\@tempa%
+ \fi\fi\fi\fi
+ \@tempa}
+ \def\@OperatorRow#1#2#3{%
+ \@IfEndRow#2\@gobble\\{%
+ \def#3{\underline{{}#1 #2}\\}%
+ }{%
+ \def#3{\underline{{}#1 #2{}}}%
+ }}
+
+\def\@NormalRow#1#2{%
+ \@IfEndRow#1\@gobble\\{%
+ \def#2{#1\\}%
+ }{%
+ \def#2{#1{}}%
+ }}
+
+\def\@IfEndRow#1\@gobble#2\\#3#4{%
+ \ifx#2\@gobble
+ #4%
+ \else
+ #3%
+ \fi}
+\makeatother
+
+
+\makeatletter
+\AddEnumerateCounter{\asbuk}{\russian@alph}{щ}
+\makeatother
+
+\geometry{
+ left=22mm,
+ right=15mm,
+ top=20mm,
+ bottom=20mm
+}
+\setlength\parindent{5ex} %GOST-2.105-2019 5.1.4 Абзацы в тексте начинают отступом, равным пяти знакам используемой гарнитуры шрифта (12.5— 17 мм).
+
+\addto\captionsrussian{\renewcommand*{\contentsname}{\hfill Содержание \hfill}}
+\renewcommand{\cfttoctitlefont}{\bfseries\Large}
+\renewcommand{\cftaftertoctitle}{\hfill}
+% приложений, примечаний, таблиц, сносок и примеров — на 1—2 пт меньше.
+\renewcommand{\appendixpagename}{\centering Приложения}
+
+\graphicspath{ {./pics/} }
+
+\pgfplotsset{compat=newest}
+\pgfplotsset{model/.style = {black, samples = 100}}
+\usetikzlibrary{calc,intersections,backgrounds}
+\usetikzlibrary{patterns}
+\usetikzlibrary{decorations.pathreplacing,calligraphy}
+\usetikzlibrary{shapes}
+\usetikzlibrary{arrows,automata}
+\usetikzlibrary{circuits.logic.IEC}
+
+\newcommand{\approval}[2]{
+ \begin{tabular}{c}
+ УТВЕРЖДАЮ \\
+ #1\\
+ \underline{\hspace{2.7cm}}#2\\
+ «\underline{\hspace{0.6cm}}»\underline{\hspace{2.1cm}}2021 г.
+ \end{tabular}
+}
+
+\renewcommand\labelitemi{\textendash}
+\renewcommand\thesubfigure{\asbuk{subfigure}}
+\setlist{nosep}
+\setlist[itemize]{leftmargin=2\parindent}
+\setlist[enumerate]{leftmargin=2\parindent}
+
+\newcommand{\makeBMSTUHeader}{
+ \noindent\begin{minipage}{0.05\textwidth}
+ \includegraphics[scale=0.2]{settings/logo_bmstu.png}
+ \end{minipage}
+ \hfill
+ \begin{minipage}{0.85\textwidth}\raggedleft
+ \begin{center}
+ \fontsize{13pt}{0.3\baselineskip}\selectfont
+ \textbf{Министерство науки и высшего образования
+ Российской Федерации \\
+ Федеральное государственное бюджетное образовательное \\
+ учреждение высшего образования \\
+ «Московский государственный технический университет \\
+ имени Н. Э. Баумана \\
+ (национальный исследовательский университет)» \\
+ (МГТУ им. Н. Э. Баумана)
+ }
+ \end{center}
+ \end{minipage}
+ \begin{center}
+ \fontsize{12pt}{0.1\baselineskip}\selectfont
+ \noindent\makebox[\linewidth]{\rule{\textwidth}{2pt}}
+ \makebox[\linewidth]{\rule{\textwidth}{1pt}}
+ \end{center}
+ \begin{flushleft}
+ \fontsize{12pt}{14pt}\selectfont
+ \textbf{ФАКУЛЬТЕТ \tabto{3cm} «Информатика и системы управления» (ИУ)\\
+ КАФЕДРА \tabto{3cm} «Информационные системы и телекоммуникации» (ИУ3)
+ }
+ \end{flushleft}
+}
+
+\newcommand{\makeReportTitle}[6]{
+\vspace*{3em}
+\thispagestyle{titlepage}
+\begin{center}
+\Large{\textbf{Отчет \\
+ по #1 работе #2\\
+ «#3»\\
+ по курсу\\
+ «#4»
+}}
+\end{center}
+\vspace*{4em}
+\begin{flushright}
+ Выполнили\\
+% cтудент группы ИУ3-11М \\
+% cтудент группы ИУ3-21М \\
+ cтудент группы ИУ3-31М \\
+ Овчинников И.И. \\
+\vspace*{0.5em}
+ Проверил#5\\
+ #6
+\end{flushright}
+}
+\newcommand{\defineHatch}{
+ \makeatletter
+ \pgfdeclarepatternformonly[7pt,0.5pt]{hatch}
+ {\pgfqpoint{0pt}{0pt}}
+ {\pgfqpoint{7pt}{7pt}} {\pgfpoint{6pt}{6pt}}%
+ {
+ \pgfsetcolor{gray} \pgfsetlinewidth{0.5pt}
+ \pgfpathmoveto{\pgfqpoint{0pt}{0pt}} \pgfpathlineto{\pgfqpoint{7pt}{7pt}}
+ \pgfusepath{stroke}
+ }
+ \makeatother
+}
+
+\newcommand{\tkzblk}[3]{ \node [#1] at ($ (#2) $) {#3}; }
+\newcommand{\tkzdarr}[2]{ \draw [->, very thick] ($ (#1) + (0,15) $) -- ($ (#2) - (0,15) $); }
+\newcommand{\tkzuarr}[2]{ \draw [<-, very thick] ($ (#1) + (0,15) $) -- ($ (#2) - (0,15) $); }
+\newcommand{\crd}[2]{\coordinate (#1) at ($ #2 $);}
+\newcommand{\ts}[1]{\textsubscript{#1}}
+\newcolumntype{R}{>{\tiny{}}r}
+\newcolumntype{L}{>{\tiny{}}l}
+\newcolumntype{C}{>{\tiny{}}c}
diff --git a/settings/common-preamble.tex b/settings/common-preamble.tex
new file mode 100644
index 0000000..d1e6047
--- /dev/null
+++ b/settings/common-preamble.tex
@@ -0,0 +1,97 @@
+\usepackage{tikz}
+\usepackage{import}
+\usepackage{xcolor,transparent}
+\usepackage{bookmark}
+\usepackage{multicol,multirow,colortbl}
+\usepackage{longtable}
+\usepackage{setspace}
+\usepackage{titlesec}
+\usepackage{indentfirst}
+\usepackage{amsmath,amsfonts,amssymb,amsthm,mathtools}
+\usepackage{layout,lscape}
+\usepackage{hyperref}
+\usepackage{geometry}
+\usepackage[russian]{babel}
+\usepackage{nomencl}
+\usepackage{imakeidx}
+\usepackage{fancyhdr}
+\usepackage{tabularx,adjustbox}
+\usepackage{float,makecell}
+\usepackage{anyfontsize,tabto}
+\usepackage{tocloft}
+\usepackage{yfonts}
+
+\makeindex
+\makenomenclature
+\babelfont{rm}{PT Astra Serif}
+\babelfont{sf}{PT Astra Serif}
+\babelfont{tt}{PT Mono}
+\onehalfspacing
+
+\hypersetup{
+ colorlinks=false,
+ linktoc=all
+}
+
+\fancypagestyle{plain}{ % для автосгенерированых
+ \fancyhf{}
+ \renewcommand{\headrulewidth}{0pt}
+}
+\fancypagestyle{titlepage}{
+ \fancyhf{}
+% \cfoot{\small{\textbf{Москва, 2021г.}}}
+ \cfoot{\small{\textbf{Москва, \the\year{}г.}}}
+}
+\fancyhf{}
+\renewcommand{\headrulewidth}{0pt}
+
+\newcommand{\numerationTop}{
+\fancyhead[C]{\thepage}
+}
+\newcommand{\numerationBottom}{
+\fancyfoot[C]{\thepage}
+}
+
+\newcommand{\code}[1]{{\texttt{\detokenize{#1}}}}
+\renewcommand{\nomname}{ }
+\newcommand*{\nom}[2]{#1\nomenclature{#1}{#2}}
+\newcolumntype{P}[1]{>{\centering\arraybackslash}p{#1}}
+
+\newcommand\blankpage{%
+ \null
+ \thispagestyle{empty}%
+ \addtocounter{page}{-1}%
+ \newpage
+}
+
+\newenvironment{frm}
+ {\begin{center}
+ \begin{tabular}{|P{0.9\textwidth}|}
+ \hline\\
+ }
+ {
+ \\\\\hline
+ \end{tabular}
+ \end{center}
+ }
+
+\newcommand{\quotebox}[1]{\begin{center}\begin{minipage}{0.9\linewidth}\vspace{10pt}\center\begin{minipage}{0.8\linewidth}{\space\Huge«}{#1}
+\end{minipage}\smallbreak\end{minipage}\end{center}}
+
+\makeatletter
+\newcommand{\setword}[2]{%
+ \phantomsection
+ #1\def\@currentlabel{\unexpanded{#1}}\label{#2}%
+}
+\makeatother
+
+\newcommand\lh[2]{\texttt{\textcolor{#1}{#2}}}
+\newcommand\hrf[1]{\hyperref[#1]{\ref{#1}}}
+\newcommand\hRf[1]{\hyperref[#1]{\nameref{#1}}}
+\newcommand*\circled[1]{\tikz[baseline=(char.base)]{\node[shape=circle,draw,inner sep=2pt] (char) {#1};}}
+
+\renewcommand{\cftsecleader}{\cftdotfill{\cftdotsep}}
+\renewcommand{\cftsubsecnumwidth}{2em}
+\renewcommand{\cftsecnumwidth}{2em}
+
+\titleformat{\paragraph}[runin]{\normalfont\fontsize{14}{18}\bfseries}{\theparagraph}{1em}{}
\ No newline at end of file
diff --git a/settings/fancy-listings-preamble.tex b/settings/fancy-listings-preamble.tex
new file mode 100644
index 0000000..d0999ba
--- /dev/null
+++ b/settings/fancy-listings-preamble.tex
@@ -0,0 +1,135 @@
+\usepackage{listings}
+
+\definecolor{codekeywords}{rgb}{0.1,0.4,0.4}
+\definecolor{codecomments}{rgb}{0,0.6,0}
+\definecolor{codenumbers}{rgb}{0.4,0.4,0.4}
+\definecolor{codestring}{rgb}{0.85,0.2,0.1}
+\definecolor{backcolour}{rgb}{0.95,0.95,0.92}
+\definecolor{codefine}{rgb}{0.7,0.5,0.3}
+\definecolor{dkgreen}{rgb}{0,0.6,0}
+\definecolor{gray}{rgb}{0.5,0.5,0.5}
+\definecolor{mauve}{rgb}{0.58,0,0.82}
+\definecolor{golden}{rgb}{1,0.7,0.0}
+\definecolor{red}{rgb}{0.8,0.0,0.0}
+
+\lstdefinestyle{JCodeStyle}{
+ frame=single,
+ language=Java,
+ aboveskip=3mm,
+ belowskip=3mm,
+ showstringspaces=false,
+ columns=flexible,
+ basicstyle=\scriptsize\ttfamily,
+ numbers=left,
+ numberstyle=\tiny\color{gray},
+ keywordstyle=\color{blue},
+ commentstyle=\color{dkgreen},
+ stringstyle=\color{mauve},
+ breaklines=true,
+ breakatwhitespace=true,
+ tabsize=4,
+ escapeinside={<@}{@>}
+}
+
+\lstdefinestyle{PyCodeStyle}{
+ frame=single,
+ commentstyle=\color{codecomments},
+ numberstyle=\tiny\color{codenumbers},
+ stringstyle=\color{codestring},
+ basicstyle=\ttfamily\footnotesize,
+ keywordstyle=\color{codekeywords},
+ breakatwhitespace=false,
+ breaklines=true,
+ captionpos=b,
+ keepspaces=true,
+ numbers=left,
+ numbersep=5pt,
+ showspaces=false,
+ showstringspaces=false,
+ showtabs=false,
+ tabsize=4,
+ escapeinside={<@}{@>}
+}
+
+% \DeclareCaptionFormat{listing}{
+% \parbox{\textwidth}{\centering#1 - #3}
+% }
+% \captionsetup[lstlisting]{ format=listing, singlelinecheck=false, margin=0pt }
+
+\lstdefinestyle{CCodeStyle}{
+ frame=single,
+ commentstyle=\color{codecomments},
+ morecomment=[l][\color{codefine}]{\#},
+ numberstyle=\tiny\color{codenumbers},
+ stringstyle=\color{codestring},
+ basicstyle=\ttfamily\footnotesize,
+ keywordstyle=\color{codekeywords},
+ emph={int,char,double,float,unsigned,void,bool},
+ emphstyle={\color{blue}},
+ breakatwhitespace=false,
+ breaklines=true,
+ captionpos=t,
+ keepspaces=true,
+ numbers=left,
+ numbersep=5pt,
+ showspaces=false,
+ showstringspaces=false,
+ showtabs=false,
+ tabsize=4,
+ escapeinside={<@}{@>}
+}
+
+\lstdefinestyle{ASMStyle}{
+ frame=single,
+ numberstyle=\tiny\color{codenumbers},
+ commentstyle=\color{codecomments},
+ keywordstyle=\color{codekeywords},
+ morecomment=[l]{;}, % l is for line comment
+ morecomment=[s]{/*}{*/}, % s is for start and end delimiter
+ basicstyle={\ttfamily\footnotesize},
+ morekeywords={
+ bset, macr,
+ add,addi,and,andi,
+ bge,beq,bne,br,
+ cmpeqi,cmpgei,cmplti,cmpnei,
+ ldhu,ldw,ldwio,
+ mov,movi,movhi,muli,
+ nop,nor,
+ ret,
+ slli,srai,srli,stw,stwio},
+ breakatwhitespace=false,
+ breaklines=true,
+ captionpos=t,
+ keepspaces=true,
+ numbers=left,
+ numbersep=5pt,
+ showspaces=false,
+ showtabs=false,
+ tabsize=4,
+ escapeinside={<@}{@>}
+}
+
+\lstdefinestyle{VerilogStyle}{
+ frame=single,
+ numberstyle=\tiny\color{codenumbers},
+ commentstyle=\color{codecomments},
+ keywordstyle=\color{codekeywords},
+ morecomment=[l]{//}, % l is for line comment
+ morecomment=[s]{/*}{*/}, % s is for start and end delimiter
+ basicstyle={\ttfamily\footnotesize},
+ morekeywords={
+ logic, always_ff, always_comb
+ },
+ breakatwhitespace=false,
+ breaklines=true,
+ captionpos=b,
+ keepspaces=true,
+ numbers=left,
+ numbersep=5pt,
+ showspaces=false,
+ showtabs=false,
+ tabsize=2,
+ escapeinside={<@}{@>}
+}
+
+\lstset{escapeinside={<@}{@>}}
diff --git a/settings/logo_bmstu.png b/settings/logo_bmstu.png
new file mode 100644
index 0000000..ed4947d
Binary files /dev/null and b/settings/logo_bmstu.png differ
diff --git a/settings/main-style-preamble.tex b/settings/main-style-preamble.tex
new file mode 100644
index 0000000..9ae0f4b
--- /dev/null
+++ b/settings/main-style-preamble.tex
@@ -0,0 +1,116 @@
+\usepackage{fancyhdr}
+\usepackage{graphicx}
+\usepackage{xcolor,colortbl}% http://ctan.org/pkg/xcolor
+\usepackage{titlesec}
+\usepackage{indentfirst}
+\usepackage{datetime2}
+\usepackage{geometry,lscape}
+\usepackage{enumitem}
+\usepackage{caption,subcaption}
+\usepackage{multicol,multirow}
+\usepackage{float,adjustbox}
+\usepackage{fontawesome}
+\usepackage{longtable}
+\usepackage{tikz}
+\usepackage{hyperref}
+\usepackage{forest}
+\usepackage{nomencl,imakeidx}
+\usetikzlibrary{mindmap,trees}
+\usepackage{booktabs}% http://ctan.org/pkg/booktabs
+\usepackage{setspace,fontspec}
+\usepackage{amsmath}
+\usepackage{spreadtab}
+\usepackage{svg}
+
+\newcommand{\tabitem}{~~\llap{\textbullet}~~}
+
+\spacing{1.15}
+\babelfont{rm}{IBM Plex Sans}
+\babelfont{tt}{PT Mono}
+
+\titlelabel{\thetitle. \quad}
+\setcounter{tocdepth}{2}
+\renewcommand{\nomname}{Термины, определения и сокращения}
+\makeindex
+\makenomenclature
+
+\newcommand\lh[2]{\texttt{\textcolor{#1}{#2}}}
+\newcommand\hrf[1]{\hyperref[#1]{\ref{#1}}}
+\newcommand\hRf[1]{\hyperref[#1]{\nameref{#1}}}
+\newcommand{\wordcount}{\input{/tmp/wordcount.tex}}
+\newcommand{\code}[1]{{\texttt{\detokenize{#1}}}}
+\newcommand*{\nom}[2]{#1\nomenclature{#1}{#2}}
+\renewcommand\labelitemi{\textemdash}
+\newenvironment{frm}
+ { \begin{center} \renewcommand*{\arraystretch}{2} \begin{tabular}{|p{0.9\textwidth}|} \hline }
+ { \\\hline \end{tabular} \end{center} }
+
+\newcommand{\info}{\cellcolor{green!20}{\Huge \faInfoCircle \quad}}
+\newcommand{\excl}{\cellcolor{red!20}{\Huge \faExclamationTriangle \quad}}
+
+\makeatletter
+\newcommand{\setword}[2]{%
+ \phantomsection
+ #1\def\@currentlabel{\unexpanded{#1}}\label{#2}%
+}
+\makeatother
+
+\fancypagestyle{plain}{
+ \setlength{\headheight}{33pt}
+ \fancyhf{}
+ \lhead{\includegraphics[height=5mm]{logo.png}}
+ \rhead{И.И. Овчинников \\ \href{https://t.me/ivanigorevichfeed}{Telegram: ivanigorevichfeed}}
+ \chead{\thepage}
+ \cfoot{\faRocket}
+% \rfoot{Всего слов: \wordcount}
+}
+
+\geometry{
+ left=2cm,
+ right=1cm,
+ top=2cm,
+ bottom=2cm
+}
+
+\setlist{nolistsep}
+\setlist[itemize]{leftmargin=10mm}
+\setlist[enumerate]{leftmargin=10mm}
+
+\makeatletter
+ \providecommand\text\mbox
+ \newenvironment{arithmetic}[1][]{\begin{tabular}[#1]{Al}}{\end{tabular}}
+ \newcolumntype{A}{>{\bgroup\def~{\phantom{0}}$\@testOptor}r<{\@gobble\\$\egroup}}
+ \def\@testOptor\ignorespaces#1#2\\{%
+ \ifx#1\times
+ \@OperatorRow{#1}{#2}\@tempa%
+ \else\ifx#1+
+ \@OperatorRow+{#2}\@tempa%
+ \else\ifx#1\discretionary% detects the soft hyphen, \-
+ \@ShortSubtractRow{#2}\@tempa%
+ \else\ifx#1-
+ \@OperatorRow-{#2}\@tempa%
+ \else
+ \@NormalRow{#1#2}\@tempa%
+ \fi\fi\fi\fi
+ \@tempa}
+ \def\@OperatorRow#1#2#3{%
+ \@IfEndRow#2\@gobble\\{%
+ \def#3{\underline{{}#1 #2}\\}%
+ }{%
+ \def#3{\underline{{}#1 #2{}}}%
+ }}
+
+\def\@NormalRow#1#2{%
+ \@IfEndRow#1\@gobble\\{%
+ \def#2{#1\\}%
+ }{%
+ \def#2{#1{}}%
+ }}
+
+\def\@IfEndRow#1\@gobble#2\\#3#4{%
+ \ifx#2\@gobble
+ #4%
+ \else
+ #3%
+ \fi}
+\makeatother
diff --git a/src/dec.sv b/src/dec.sv
index 91f2073..556ef72 100644
--- a/src/dec.sv
+++ b/src/dec.sv
@@ -2,19 +2,9 @@ module dec
#(m = 32)
(
//clock and reset
- input logic clk, clrn,
//control slave
- input logic ctl_wr, ctl_rd,
- input logic ctl_addr,
- input logic [31:0] ctl_wrdata,
- output logic [31:0] ctl_rddata,
//memory slave
- input logic ram_wr,
- input logic [3:0] ram_addr,
- input logic [31:0] ram_wrdata,
//external ports
- input logic train,
- output logic red, yellow, green
);
typedef enum logic [1:0] {RED, YELLOW, BLINK, GREEN} FSMStates;
@@ -25,29 +15,6 @@ module dec
logic [31:0] greenSaved;
logic [31:0] greenCount;
- logic [m-1:0] divisor;
- logic [1:0] contr;
- logic [2:0] colors;
- logic [m-1:0] cntdiv;
- logic enacnt;
-
- //control slave logic
- // ...
-
- //semaphore logic
- always_ff @ (posedge clk or negedge clrn) begin
- if (!clrn)
- cntdiv <= 0;
- else begin
- if (train | ~run)
- cntdiv<=0;
- else begin
- if (enacnt) cntdiv<=0;
- else cntdiv<=cntdiv+1;
- end
- end
- end
-
// we don't enable counters, if color is green
always_comb begin
enacnt = ((cntdiv == divisor) && !(colors == 3'b001));
@@ -63,6 +30,7 @@ module dec
colors <= 3'b001;
state <= GREEN;
end
+
if (train) begin
colors <= 3'b100;
state <= RED;
@@ -79,12 +47,14 @@ module dec
end
YELLOW: begin
colors <= 3'b010;
- if (enacnt)
+ if (enacnt) begin
state <= state + 1'b1;
+ end
end
BLINK: begin
- if (enacnt)
- state <= state + 1'b1;
+ if (enacnt) begin
+ state <= state + 1'b1;
+ end
if (greenSaved[0] == 0) begin
colors <= 3'b011;
end else begin
@@ -96,8 +66,9 @@ module dec
end
end
GREEN: begin
- if (enacnt)
+ if (enacnt) begin
state <= state + 1'b1;
+ end
colors <= 3'b001;
end
default: colors <= 3'b100;
@@ -106,6 +77,7 @@ module dec
end
end
assign contr = state;
+
assign red = colors[2];
assign yellow = colors[1];
assign green = colors[0];
diff --git a/src/niosII_tb.v b/src/niosII_tb.v
index 8ce3bb0..df606da 100644
--- a/src/niosII_tb.v
+++ b/src/niosII_tb.v
@@ -1,64 +1,55 @@
+// niosII_tb.v
+
+// Generated using ACDS version 18.1 625
+
`timescale 1 ps / 1 ps
module niosII_tb (
- );
+ );
- wire niosii_inst_clk_bfm_clk_clk; // niosII_inst_clk_bfm:clk -> [niosII_inst:clk_clk, niosII_inst_reset_bfm:clk]
- wire niosii_inst_reset_bfm_reset_reset; // niosII_inst_reset_bfm:reset -> niosII_inst:reset_reset_n
+ wire niosii_inst_clk_bfm_clk_clk; // niosII_inst_clk_bfm:clk -> [niosII_inst:clk_clk, niosII_inst_reset_bfm:clk]
+ wire niosii_inst_reset_bfm_reset_reset; // niosII_inst_reset_bfm:reset -> niosII_inst:reset_reset_n
reg train;
wire red, yellow, green;
- niosII niosii_inst
- (
- .clk_clk (niosii_inst_clk_bfm_clk_clk), // clk.clk
- .reset_reset_n (niosii_inst_reset_bfm_reset_reset), // reset.reset_n
- .sem_export_train (train), // sem_export.train
- .sem_export_red (red), // .red
- .sem_export_yellow (yellow), // .yellow
- .sem_export_green (green) // .green
- );
+ niosII niosii_inst (
+ .clk_clk (niosii_inst_clk_bfm_clk_clk), // clk.clk
+ .reset_reset_n (niosii_inst_reset_bfm_reset_reset), // reset.reset_n
+ .sem_export_train (train), // sem_export.train
+ .sem_export_red (red), // .red
+ .sem_export_yellow (yellow), // .yellow
+ .sem_export_green (green) // .green
+ );
- altera_avalon_clock_source
- #(
- .CLOCK_RATE (50000000),
- .CLOCK_UNIT (1)
- )
- niosii_inst_clk_bfm
- (
- .clk (niosii_inst_clk_bfm_clk_clk) // clk.clk
- );
-
- altera_avalon_reset_source
- #(
- .ASSERT_HIGH_RESET (0),
- .INITIAL_RESET_CYCLES (50)
- )
- niosii_inst_reset_bfm
- (
- .reset (niosii_inst_reset_bfm_reset_reset), // reset.reset_n
- .clk (niosii_inst_clk_bfm_clk_clk) // clk.clk
- );
+ altera_avalon_clock_source #(
+ .CLOCK_RATE (50000000),
+ .CLOCK_UNIT (1)
+ ) niosii_inst_clk_bfm (
+ .clk (niosii_inst_clk_bfm_clk_clk) // clk.clk
+ );
+ altera_avalon_reset_source #(
+ .ASSERT_HIGH_RESET (0),
+ .INITIAL_RESET_CYCLES (50)
+ ) niosii_inst_reset_bfm (
+ .reset (niosii_inst_reset_bfm_reset_reset), // reset.reset_n
+ .clk (niosii_inst_clk_bfm_clk_clk) // clk.clk
+ );
initial begin
train = 0;
wait (niosii_inst_reset_bfm_reset_reset);
forever begin
+ wait ({red,yellow,green}==3'b001);
repeat (29000) @(posedge niosii_inst_clk_bfm_clk_clk);
- train = 1;
- repeat (10) @(posedge niosii_inst_clk_bfm_clk_clk);
- train = 0;
- repeat (900) @(posedge niosii_inst_clk_bfm_clk_clk);
- train = 1;
- repeat (10) @(posedge niosii_inst_clk_bfm_clk_clk);
- train = 0;
- repeat (900) @(posedge niosii_inst_clk_bfm_clk_clk);
- train = 1;
- repeat (10) @(posedge niosii_inst_clk_bfm_clk_clk);
- train = 0;
- repeat (900) @(posedge niosii_inst_clk_bfm_clk_clk);
- train = 1;
- repeat (10) @(posedge niosii_inst_clk_bfm_clk_clk);
- train = 0;
+ repeat(8) begin
+ train = 1;
+ repeat (10) @(posedge niosii_inst_clk_bfm_clk_clk);
+ train = 0;
+ wait ({red,yellow,green}==3'b001);
+ repeat (200) @(posedge niosii_inst_clk_bfm_clk_clk);
+ end
end
end
+
+
endmodule
diff --git a/src/sem.c b/src/sem.c
index 45b744b..674f409 100644
--- a/src/sem.c
+++ b/src/sem.c
@@ -1,4 +1,3 @@
-#include
#include "altera_avalon_sem_regs.h"
#include "alt_types.h"
#include "system.h"
@@ -21,19 +20,18 @@ int main()
//program divisors
p = (alt_u32*) SEM_RAM_SLAVE_BASE;
for (i = 0; i < TIME_SETS; i++) {
- tmp = 0;
for (j = TIME_STATES; j > 0; j--) {
- tmp = (tmp << 32) | divisors[i][j - 1];
+ *p = divisors[i][j - 1];
+ alt_dcache_flush();
+ ++p;
}
- *p = tmp;
- p++;
}
//since we use pointers (cached data access) to write divisor RAM,
//and not direct i/o access with IOWR, we need to flush cache
- alt_dcache_flush();
+ // alt_dcache_flush();
//select timeset and run semafor
- IOWR_ALTERA_AVALON_SEM_DIVSET(SEM_CTL_SLAVE_BASE,0x00);
+ IOWR_ALTERA_AVALON_SEM_DIVSET(SEM_CTL_SLAVE_BASE,0x02);
IOWR_ALTERA_AVALON_SEM_CTL(SEM_CTL_SLAVE_BASE,0x01);
printf("Ready\n");